Subject: Re: [MTT users] MTT server side problem
From: Josh Hursey (jjhursey_at_[hidden])
Date: 2008-05-20 10:00:00


I just got back from travel this morning. I reviewed the patch and it
looks good to me.

I updated the ticket:
   https://svn.open-mpi.org/trac/mtt/ticket/357

Do you need me to commit it?

Cheers,
Josh

On May 19, 2008, at 7:32 AM, Pavel Shamis (Pasha) wrote:

> Hello,
> Did you have chance to review this patch ?
>
> Regards,
> Pasha
>
> Josh Hursey wrote:
>> Sorry for the delay on this. I probably will not have a chance to
>> look at it until later this week or early next. Thank you for the
>> work on the patch.
>>
>> Cheers,
>> Josh
>>
>> On May 12, 2008, at 8:08 AM, Pavel Shamis (Pasha) wrote:
>>
>>> Hi Josh,
>>> I ported the error handling mechanism from submit/index.php to to
>>> the database.inc. Please review.
>>>
>>> Thanks,
>>> Pasha
>>>
>>> Josh Hursey wrote:
>>>> Pasha,
>>>>
>>>> I'm looking at the patch a bit closer and even though at a high
>>>> level the do_pg_connect, do_pg_query, simple_select, and select
>>>> functions do the same thing the versions in submit/index.php have
>>>> some additional error handling mechanisms that the ones in
>>>> database.inc do not have. Specifically they send email when the
>>>> functions fail with messages indicating what failed so
>>>> corrections can be made.
>>>>
>>>> So though I agree that we should unify the functionality I cannot
>>>> recommend this patch since it will result in losing useful error
>>>> handling functionality. Maybe there is another way to clean this
>>>> up to preserve the error reporting.
>>>>
>>>> -- Josh
>>>>
>>>> On May 7, 2008, at 11:56 AM, Pavel Shamis (Pasha) wrote:
>>>>
>>>>> Hi Josh,
>>>>> I had the original problem with some old revision from trunk.
>>>>> Today I updated the server to latest revision from trunk + the
>>>>> patch and everything looks good.
>>>>>
>>>>> Can I commit the patch ?
>>>>>
>>>>> Pasha
>>>>>
>>>>>
>>>>> Ethan Mallove wrote:
>>>>>> On Wed, May/07/2008 06:04:07PM, Pavel Shamis (Pasha) wrote:
>>>>>>
>>>>>>> Hi Josh.
>>>>>>>
>>>>>>>> Looking at the patch I'm a little bit conserned. The
>>>>>>>> "get_table_fields()" is, as you mentioned, no longer used so
>>>>>>>> should be removed. However the other functions are critical
>>>>>>>> to the submission script particularly 'do_pg_connect' which
>>>>>>>> opens the connection to the backend database.
>>>>>>>>
>>>>>>> All the functions are implemented in $topdir/database.inc
>>>>>>> file. And the "database.inc" implementation is better because
>>>>>>> it use password and username from config.ini. The original
>>>>>>> implementation from submit/index use
>>>>>>> hardcoded values defined in the file.
>>>>>>>
>>>>>>>> Are you using the current development trunk (mtt/trunk) or
>>>>>>>> the stable release branch (mtt/branches/ompi-core-testers)?
>>>>>>>>
>>>>>>> trunk
>>>>>>>
>>>>>>>> Can you send us the error messages that you were receiving?
>>>>>>>>
>>>>>>> 1. On client side I see ""*** WARNING: MTTDatabase client did
>>>>>>> not get a serial"
>>>>>>> As result of the error some of MTT results is not visible via
>>>>>>> the web reporter
>>>>>>> 2. On server side I found follow error message:
>>>>>>> [client 10.4.3.214] PHP Fatal error: Allowed memory size of
>>>>>>> 33554432 bytes exhausted (tried to allocate 23592960
>>>>>>> bytes) in /.autodirect/swgwork/MTT/mtt/submit/index.php(79) :
>>>>>>> eval()'d code on line 77515
>>>>>>> [Mon May 05 19:26:05 2008] [notice] caught SIGTERM, shutting
>>>>>>> down
>>>>>>> [Mon May 05 19:30:54 2008] [notice] suEXEC mechanism enabled
>>>>>>> (wrapper: /usr/sbin/suexec)
>>>>>>> [Mon May 05 19:30:54 2008] [notice] Digest: generating secret
>>>>>>> for digest authentication ...
>>>>>>> [Mon May 05 19:30:54 2008] [notice] Digest: done
>>>>>>> [Mon May 05 19:30:54 2008] [notice] LDAP: Built with OpenLDAP
>>>>>>> LDAP SDK
>>>>>>> [Mon May 05 19:30:54 2008] [notice] LDAP: SSL support
>>>>>>> unavailable
>>>>>>> My memory limit in php.ini file was set on 256MB !
>>>>>>>
>>>>>>
>>>>>>
>>>>>> Looks like PHP is actually using a 32MB limit ("Allowed
>>>>>> memory size of 33554432 ..."). Does a (Apache?) daemon need
>>>>>> to be restarted for the php.ini file to take effect? To
>>>>>> check your settings, this little PHP script will print an
>>>>>> HTML page of all the active system settings (search on
>>>>>> "memory_limit").
>>>>>> <?php
>>>>>> phpinfo();
>>>>>> ?>
>>>>>>
>>>>>> -Ethan
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Regards,
>>>>>>> Pasha
>>>>>>>
>>>>>>>
>>>>>>>> Cheers,
>>>>>>>> Josh
>>>>>>>>
>>>>>>>> On May 7, 2008, at 4:49 AM, Pavel Shamis (Pasha) wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>> I upgraded the server side (the mtt is still running , so
>>>>>>>>> don't know if the problem was resolved)
>>>>>>>>> During upgrade I had some problem with the submit/index.php
>>>>>>>>> script, it had some duplicated functions and some of them
>>>>>>>>> were broken.
>>>>>>>>> Please review the attached patch.
>>>>>>>>>
>>>>>>>>> Pasha
>>>>>>>>>
>>>>>>>>> Ethan Mallove wrote:
>>>>>>>>>
>>>>>>>>>> On Tue, May/06/2008 06:29:33PM, Pavel Shamis (Pasha) wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>> I'm not sure which cron jobs you're referring to. Do you
>>>>>>>>>>>> mean these?
>>>>>>>>>>>>
>>>>>>>>>>>> https://svn.open-mpi.org/trac/mtt/browser/trunk/server/php/cron
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>> I talked about this one: https://svn.open-mpi.org/trac/mtt/wiki/ServerMaintenance
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> I'm guessing you would only be concerned with the below
>>>>>>>>>> periodic-maintenance.pl script, which just runs
>>>>>>>>>> ANALYZE/VACUUM queries. I think you can start that up
>>>>>>>>>> whenever you want (and it should optimize the Reporter).
>>>>>>>>>>
>>>>>>>>>> https://svn.open-mpi.org/trac/mtt/browser/trunk/server/sql/cron/periodic-maintenance.pl
>>>>>>>>>>
>>>>>>>>>> -Ethan
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>> The only thing there are the regular
>>>>>>>>>>>> mtt-results_at_[hidden] email alerts and some out-of-date
>>>>>>>>>>>> DB monitoring junk. You can ignore that stuff.
>>>>>>>>>>>>
>>>>>>>>>>>> Josh, are there some nightly (DB
>>>>>>>>>>>> pruning/cleaning/vacuuming?) cron jobs that Pasha should be
>>>>>>>>>>>> running?
>>>>>>>>>>>>
>>>>>>>>>>>> -Ethan
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Ethan Mallove wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi Pasha,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I thought this issue was solved in r1119 (see below).
>>>>>>>>>>>>>> Do you
>>>>>>>>>>>>>> have the latest mtt/server scripts?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> https://svn.open-mpi.org/trac/mtt/changeset/1119/trunk/server/php/submit
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -Ethan
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Tue, May/06/2008 03:26:43PM, Pavel Shamis (Pasha)
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> About the issue:
>>>>>>>>>>>>>>> 1. On client side I see ""*** WARNING: MTTDatabase
>>>>>>>>>>>>>>> client did not get a serial"
>>>>>>>>>>>>>>> As result of the error some of MTT results is not
>>>>>>>>>>>>>>> visible via the web reporter
>>>>>>>>>>>>>>> 2. On server side I found follow error message:
>>>>>>>>>>>>>>> [client 10.4.3.214] PHP Fatal error: Allowed memory
>>>>>>>>>>>>>>> size of 33554432 bytes exhausted (tried to allocate
>>>>>>>>>>>>>>> 23592960
>>>>>>>>>>>>>>> bytes) in /.autodirect/swgwork/MTT/mtt/submit/
>>>>>>>>>>>>>>> index.php(79) : eval()'d code on line 77515
>>>>>>>>>>>>>>> [Mon May 05 19:26:05 2008] [notice] caught SIGTERM,
>>>>>>>>>>>>>>> shutting down
>>>>>>>>>>>>>>> [Mon May 05 19:30:54 2008] [notice] suEXEC mechanism
>>>>>>>>>>>>>>> enabled (wrapper: /usr/sbin/suexec)
>>>>>>>>>>>>>>> [Mon May 05 19:30:54 2008] [notice] Digest: generating
>>>>>>>>>>>>>>> secret for digest authentication ...
>>>>>>>>>>>>>>> [Mon May 05 19:30:54 2008] [notice] Digest: done
>>>>>>>>>>>>>>> [Mon May 05 19:30:54 2008] [notice] LDAP: Built with
>>>>>>>>>>>>>>> OpenLDAP LDAP SDK
>>>>>>>>>>>>>>> [Mon May 05 19:30:54 2008] [notice] LDAP: SSL support
>>>>>>>>>>>>>>> unavailable
>>>>>>>>>>>>>>> My memory limit in php.ini file was set on 256MB !
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Any ideas ?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> Pavel Shamis (Pasha)
>>>>>>>>>>>>>>> Mellanox Technologies
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>> mtt-users mailing list
>>>>>>>>>>>>>>> mtt-users_at_[hidden]
>>>>>>>>>>>>>>> http://www.open-mpi.org/mailman/listinfo.cgi/mtt-users
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Pavel Shamis (Pasha)
>>>>>>>>>>>>> Mellanox Technologies
>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> mtt-users mailing list
>>>>>>>>>>>>> mtt-users_at_[hidden]
>>>>>>>>>>>>> http://www.open-mpi.org/mailman/listinfo.cgi/mtt-users
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Pavel Shamis (Pasha)
>>>>>>>>>>> Mellanox Technologies
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> mtt-users mailing list
>>>>>>>>>>> mtt-users_at_[hidden]
>>>>>>>>>>> http://www.open-mpi.org/mailman/listinfo.cgi/mtt-users
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Pavel Shamis (Pasha)
>>>>>>>>> Mellanox Technologies
>>>>>>>>>
>>>>>>>>> Index: submit/index.php
>>>>>>>>> =
>>>>>>>>> =
>>>>>>>>> =
>>>>>>>>> =
>>>>>>>>> =
>>>>>>>>> ==============================================================
>>>>>>>>> --- submit/index.php (revision 1200)
>>>>>>>>> +++ submit/index.php (working copy)
>>>>>>>>> @@ -1,6 +1,7 @@
>>>>>>>>> <?php
>>>>>>>>> # Copyright (c) 2006 Cisco Systems, Inc. All rights
>>>>>>>>> reserved.
>>>>>>>>> # Copyright (c) 2006-2007 Sun Microsystems, Inc. All rights
>>>>>>>>> reserved.
>>>>>>>>> +# Copyright (c) 2008 Mellanox Technologies. All
>>>>>>>>> rights reserved.
>>>>>>>>>
>>>>>>>>> #
>>>>>>>>> #
>>>>>>>>> @@ -24,8 +25,7 @@ if (file_exists("$topdir/config.inc")) {
>>>>>>>>> ini_set("memory_limit", "32M");
>>>>>>>>>
>>>>>>>>> $topdir = '..';
>>>>>>>>> -$ompi_home = '/l/osl/www/doc/www.open-mpi.org';
>>>>>>>>> -include_once("$ompi_home/dbpassword.inc");
>>>>>>>>> +include_once("$topdir/database.inc");
>>>>>>>>> include_once("$topdir/reporter.inc");
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> @@ -1465,60 +1465,6 @@ function get_table_indexes($table_name,
>>>>>>>>> return simple_select($sql_cmd);
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> -# Function used to determine which _POST fields
>>>>>>>>> -# to INSERT. Prevent non-existent fields from being
>>>>>>>>> -# INSERTed
>>>>>>>>> -function get_table_fields($table_name) {
>>>>>>>>> -
>>>>>>>>> - global $dbname;
>>>>>>>>> - global $id;
>>>>>>>>> -
>>>>>>>>> - # These indexes are special in that they link phases
>>>>>>>>> - # together and hence, can and do show up in _POST
>>>>>>>>> - if ($table_name == "test_build")
>>>>>>>>> - $special_indexes = array("mpi_install$id");
>>>>>>>>> - elseif ($table_name == "test_run")
>>>>>>>>> - $special_indexes = array("test_build$id");
>>>>>>>>> -
>>>>>>>>> - # Crude way to tell whether a field is an index
>>>>>>>>> - $is_not_index_clause =
>>>>>>>>> - "\n\t (table_name = '$table_name' AND NOT " .
>>>>>>>>> - "\n\t (data_type = 'integer' AND " .
>>>>>>>>> - "\n\t column_name ~ '_id$' AND " .
>>>>>>>>> - "\n\t table_catalog = '$dbname'))";
>>>>>>>>> -
>>>>>>>>> - $is_special_index_clause =
>>>>>>>>> - "\n\t (table_name = '$table_name' AND " .
>>>>>>>>> - "\n\t (column_name = '$special_indexes[0]'))";
>>>>>>>>> -
>>>>>>>>> - $is_index_columns = array(
>>>>>>>>> - "column_name",
>>>>>>>>> - "data_type",
>>>>>>>>> - "column_default");
>>>>>>>>> -
>>>>>>>>> - $sql_cmd = "\n SELECT " . join(",",$is_index_columns) .
>>>>>>>>> - "\n\t FROM information_schema.columns WHERE
>>>>>>>>> " .
>>>>>>>>> - "\n\t " .
>>>>>>>>> - $is_not_index_clause . " OR " .
>>>>>>>>> - $is_special_index_clause . ';';
>>>>>>>>> -
>>>>>>>>> - do_pg_connect();
>>>>>>>>> -
>>>>>>>>> - # This table will be easier to manage if it's
>>>>>>>>> - # keyed by column, instead of index
>>>>>>>>> - $tmp = array();
>>>>>>>>> - $arr = array();
>>>>>>>>> - $arr = select($sql_cmd);
>>>>>>>>> -
>>>>>>>>> - foreach ($is_index_columns as $col) {
>>>>>>>>> - $tmp[$col] = array();
>>>>>>>>> - for ($i = 0; $i < sizeof($arr); $i++) {
>>>>>>>>> - $tmp[$col][] = $arr[$i][$col];
>>>>>>>>> - }
>>>>>>>>> - }
>>>>>>>>> - return $tmp;
>>>>>>>>> -}
>>>>>>>>> -
>>>>>>>>> #
>>>>>>>>> # Useful display of all the parameters posted.
>>>>>>>>> # Warning: this function could explode the memory footprint
>>>>>>>>> causing the
>>>>>>>>> @@ -1622,90 +1568,6 @@ function is_null_($var) {
>>>>>>>>>
>>>>>>>>> ######################################################################
>>>>>>>>>
>>>>>>>>> -function do_pg_connect() {
>>>>>>>>> -
>>>>>>>>> - global $dbname;
>>>>>>>>> - global $user;
>>>>>>>>> - global $pass;
>>>>>>>>> - global $pgsql_conn;
>>>>>>>>> - static $connected = false;
>>>>>>>>> -
>>>>>>>>> - if (!$connected) {
>>>>>>>>> - $pgsql_conn =
>>>>>>>>> - pg_connect("host=localhost port=5432 dbname=
>>>>>>>>> $dbname user=$user password=$pass");
>>>>>>>>> -
>>>>>>>>> - # Exit if we cannot connect
>>>>>>>>> - if (!$pgsql_conn) {
>>>>>>>>> - mtt_abort("\nCould not connect to the $dbname
>>>>>>>>> database; " .
>>>>>>>>> - "submit this run later.");
>>>>>>>>> - }
>>>>>>>>> - else {
>>>>>>>>> - $connected = true;
>>>>>>>>> -
>>>>>>>>> - # Serialize all transactions by default - Safer
>>>>>>>>> that way.
>>>>>>>>> - do_pg_query("SET SESSION CHARACTERISTICS AS
>>>>>>>>> TRANSACTION ISOLATION LEVEL SERIALIZABLE", false);
>>>>>>>>> - }
>>>>>>>>> -
>>>>>>>>> - # pg_set_error_verbosity($pgsql_conn,
>>>>>>>>> PGSQL_ERRORS_VERBOSE); # PHP 5 needed
>>>>>>>>> - # pg_trace($_ENV['HOME'] . "/pgsql.trace", 'w',
>>>>>>>>> $pgsql_conn);
>>>>>>>>> - # debug("\npg_options: " .
>>>>>>>>> var_export(pg_options($pgsql_conn)));
>>>>>>>>> - }
>>>>>>>>> -}
>>>>>>>>> -
>>>>>>>>> -function do_pg_query($cmd, $silent) {
>>>>>>>>> - $db_res = null;
>>>>>>>>> -
>>>>>>>>> - do_pg_connect();
>>>>>>>>> -
>>>>>>>>> - debug("\nSQL: $cmd\n");
>>>>>>>>> - if (! ($db_res = pg_query($cmd))) {
>>>>>>>>> - $out = "\nSQL QUERY: " . $cmd .
>>>>>>>>> - "\nSQL ERROR: " . pg_last_error() .
>>>>>>>>> - "\nSQL ERROR: " . pg_result_error();
>>>>>>>>> -
>>>>>>>>> - # Some errors are unsurprising, allow for silence in
>>>>>>>>> - # such cases
>>>>>>>>> - if (! $silent) {
>>>>>>>>> - mtt_error($out);
>>>>>>>>> - mtt_send_mail($out);
>>>>>>>>> - }
>>>>>>>>> - }
>>>>>>>>> - debug("\nDatabase rows affected: " .
>>>>>>>>> pg_affected_rows($db_res) . "\n");
>>>>>>>>> -
>>>>>>>>> - return $db_res;
>>>>>>>>> -}
>>>>>>>>> -
>>>>>>>>> -# Fetch scalar value
>>>>>>>>> -function select_scalar($cmd) {
>>>>>>>>> -
>>>>>>>>> - $set = array();
>>>>>>>>> - $set = simple_select($cmd);
>>>>>>>>> - return array_shift($set);
>>>>>>>>> -}
>>>>>>>>> -
>>>>>>>>> -# Fetch 1D array
>>>>>>>>> -function simple_select($cmd) {
>>>>>>>>> -
>>>>>>>>> - do_pg_connect();
>>>>>>>>> -
>>>>>>>>> - $rows = null;
>>>>>>>>> -
>>>>>>>>> - debug("\nSQL: $cmd\n");
>>>>>>>>> - if (! ($result = pg_query($cmd))) {
>>>>>>>>> - $out = "\nSQL QUERY: " . $cmd .
>>>>>>>>> - "\nSQL ERROR: " . pg_last_error() .
>>>>>>>>> - "\nSQL ERROR: " . pg_result_error();
>>>>>>>>> - mtt_error($out);
>>>>>>>>> - mtt_send_mail($out);
>>>>>>>>> - }
>>>>>>>>> - $max = pg_num_rows($result);
>>>>>>>>> - for ($i = 0; $i < $max; ++$i) {
>>>>>>>>> - $row = pg_fetch_array($result, $i, PGSQL_NUM);
>>>>>>>>> - $rows[] = $row[0];
>>>>>>>>> - }
>>>>>>>>> - return $rows;
>>>>>>>>> -}
>>>>>>>>> -
>>>>>>>>> # Fetch an associative hash (column name => value)
>>>>>>>>> function associative_select($cmd) {
>>>>>>>>>
>>>>>>>>> @@ -1722,21 +1584,6 @@ function associative_select($cmd) {
>>>>>>>>> return pg_fetch_array($result);
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> -# Fetch 2D array
>>>>>>>>> -function select($cmd) {
>>>>>>>>> - do_pg_connect();
>>>>>>>>> -
>>>>>>>>> - debug("\nSQL: $cmd\n");
>>>>>>>>> - if (! ($result = pg_query($cmd))) {
>>>>>>>>> - $out = "\nSQL QUERY: " . $cmd .
>>>>>>>>> - "\nSQL ERROR: " . pg_last_error() .
>>>>>>>>> - "\nSQL ERROR: " . pg_result_error();
>>>>>>>>> - mtt_error($out);
>>>>>>>>> - mtt_send_mail($out);
>>>>>>>>> - }
>>>>>>>>> - return pg_fetch_all($result);
>>>>>>>>> -}
>>>>>>>>> -
>>>>>>>>> ######################################################################
>>>>>>>>>
>>>>>>>>> # Function for reporting errors back to the client
>>>>>>>>>
>>>>>>>>
>>>>>>> --
>>>>>>> Pavel Shamis (Pasha)
>>>>>>> Mellanox Technologies
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> mtt-users mailing list
>>>>>>> mtt-users_at_[hidden]
>>>>>>> http://www.open-mpi.org/mailman/listinfo.cgi/mtt-users
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Pavel Shamis (Pasha)
>>>>> Mellanox Technologies
>>>>
>>>>
>>>
>>>
>>> --
>>> Pavel Shamis (Pasha)
>>> Mellanox Technologies
>>>
>>> Index: database.inc
>>> ===================================================================
>>> --- database.inc (revision 1200)
>>> +++ database.inc (working copy)
>>> @@ -3,6 +3,7 @@
>>> #
>>> # Copyright (c) 2006 Sun Microsystems, Inc.
>>> # All rights reserved.
>>> +# Copyright (c) 2008 Mellanox Technologies. All rights
>>> reserved.
>>> # $COPYRIGHT$
>>> #
>>> # Additional copyrights may follow
>>> @@ -100,10 +101,13 @@ function do_pg_connect() {
>>> $pgsql_conn =
>>> pg_connect("host=localhost port=5432 dbname=
>>> $mtt_database_name user=$mtt_database_username password=
>>> $mtt_database_password");
>>> if (!$pgsql_conn) {
>>> - print("\nCould not connect to '$dbname' database.");
>>> - exit;
>>> + mtt_abort("\nCould not connect to the $dbname
>>> database; " .
>>> + "submit this run later.");
>>> + } else {
>>> + $connected = true;
>>> +# Serialize all transactions by default - Safer that way.
>>> + do_pg_query("SET SESSION CHARACTERISTICS AS
>>> TRANSACTION ISOLATION LEVEL SERIALIZABLE", false);
>>> }
>>> - $connected = true;
>>> }
>>> }
>>>
>>> @@ -113,12 +117,17 @@ function do_pg_query($cmd, $silent) {
>>>
>>> $start = time();
>>>
>>> - debug_sql($cmd, 2);
>>> + debug("\nSQL: $cmd\n");
>>> if (! ($db_res = pg_query($cmd))) {
>>> + $out = "\nSQL QUERY: " . $cmd .
>>> + "\nSQL ERROR: " . pg_last_error() .
>>> + "\nSQL ERROR: " . pg_result_error();
>>> +
>>> +# Some errors are unsurprising, allow for silence in
>>> +# such cases
>>> if (! $silent) {
>>> - print("\npostgres: " .
>>> - pg_last_error() . "\n" .
>>> - pg_result_error());
>>> + mtt_error($out);
>>> + mtt_send_mail($out);
>>> }
>>> }
>>>
>>> @@ -137,21 +146,9 @@ function do_pg_query($cmd, $silent) {
>>>
>>> # Fetch scalar value
>>> function select_scalar($cmd) {
>>> - do_pg_connect();
>>> -
>>> - $rows = null;
>>> -
>>> - debug_sql($cmd, 2);
>>> - if (! ($result = pg_query($cmd))) {
>>> - print("\npostgres: " . pg_last_error() . "\n" .
>>> - pg_result_error());
>>> - }
>>> - $max = pg_num_rows($result);
>>> - for ($i = 0; $i < $max; ++$i) {
>>> - $row = pg_fetch_array($result, $i, PGSQL_NUM);
>>> - $rows[] = $row[0];
>>> - }
>>> - return array_shift($rows);
>>> + $set = array();
>>> + $set = simple_select($cmd);
>>> + return array_shift($set);
>>> }
>>>
>>> # Fetch 1D array
>>> @@ -160,10 +157,13 @@ function simple_select($cmd) {
>>>
>>> $rows = null;
>>>
>>> - debug_sql($cmd, 2);
>>> + debug("\nSQL: $cmd\n");
>>> if (! ($result = pg_query($cmd))) {
>>> - print("\npostgres: " . pg_last_error() . "\n" .
>>> - pg_result_error());
>>> + $out = "\nSQL QUERY: " . $cmd .
>>> + "\nSQL ERROR: " . pg_last_error() .
>>> + "\nSQL ERROR: " . pg_result_error();
>>> + mtt_error($out);
>>> + mtt_send_mail($out);
>>> }
>>> $max = pg_num_rows($result);
>>> for ($i = 0; $i < $max; ++$i) {
>>> @@ -177,10 +177,13 @@ function simple_select($cmd) {
>>> function select($cmd) {
>>> do_pg_connect();
>>>
>>> - debug_sql($cmd, 2);
>>> + debug("\nSQL: $cmd\n");
>>> if (! ($result = pg_query($cmd))) {
>>> - print("\npostgres: " . pg_last_error() . "\n" .
>>> - pg_result_error());
>>> + $out = "\nSQL QUERY: " . $cmd .
>>> + "\nSQL ERROR: " . pg_last_error() .
>>> + "\nSQL ERROR: " . pg_result_error();
>>> + mtt_error($out);
>>> + mtt_send_mail($out);
>>> }
>>> return pg_fetch_all($result);
>>> }
>>> Index: submit/index.php
>>> ===================================================================
>>> --- submit/index.php (revision 1200)
>>> +++ submit/index.php (working copy)
>>> @@ -1,6 +1,7 @@
>>> <?php
>>> # Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
>>> # Copyright (c) 2006-2007 Sun Microsystems, Inc. All rights
>>> reserved.
>>> +# Copyright (c) 2008 Mellanox Technologies. All rights
>>> reserved.
>>>
>>> #
>>> #
>>> @@ -24,8 +25,7 @@ if (file_exists("$topdir/config.inc")) {
>>> ini_set("memory_limit", "32M");
>>>
>>> $topdir = '..';
>>> -$ompi_home = '/l/osl/www/doc/www.open-mpi.org';
>>> -include_once("$ompi_home/dbpassword.inc");
>>> +include_once("$topdir/database.inc");
>>> include_once("$topdir/reporter.inc");
>>>
>>>
>>> @@ -1465,60 +1465,6 @@ function get_table_indexes($table_name,
>>> return simple_select($sql_cmd);
>>> }
>>>
>>> -# Function used to determine which _POST fields
>>> -# to INSERT. Prevent non-existent fields from being
>>> -# INSERTed
>>> -function get_table_fields($table_name) {
>>> -
>>> - global $dbname;
>>> - global $id;
>>> -
>>> - # These indexes are special in that they link phases
>>> - # together and hence, can and do show up in _POST
>>> - if ($table_name == "test_build")
>>> - $special_indexes = array("mpi_install$id");
>>> - elseif ($table_name == "test_run")
>>> - $special_indexes = array("test_build$id");
>>> -
>>> - # Crude way to tell whether a field is an index
>>> - $is_not_index_clause =
>>> - "\n\t (table_name = '$table_name' AND NOT " .
>>> - "\n\t (data_type = 'integer' AND " .
>>> - "\n\t column_name ~ '_id$' AND " .
>>> - "\n\t table_catalog = '$dbname'))";
>>> -
>>> - $is_special_index_clause =
>>> - "\n\t (table_name = '$table_name' AND " .
>>> - "\n\t (column_name = '$special_indexes[0]'))";
>>> -
>>> - $is_index_columns = array(
>>> - "column_name",
>>> - "data_type",
>>> - "column_default");
>>> -
>>> - $sql_cmd = "\n SELECT " . join(",",$is_index_columns) .
>>> - "\n\t FROM information_schema.columns WHERE " .
>>> - "\n\t " .
>>> - $is_not_index_clause . " OR " .
>>> - $is_special_index_clause . ';';
>>> -
>>> - do_pg_connect();
>>> -
>>> - # This table will be easier to manage if it's
>>> - # keyed by column, instead of index
>>> - $tmp = array();
>>> - $arr = array();
>>> - $arr = select($sql_cmd);
>>> -
>>> - foreach ($is_index_columns as $col) {
>>> - $tmp[$col] = array();
>>> - for ($i = 0; $i < sizeof($arr); $i++) {
>>> - $tmp[$col][] = $arr[$i][$col];
>>> - }
>>> - }
>>> - return $tmp;
>>> -}
>>> -
>>> #
>>> # Useful display of all the parameters posted.
>>> # Warning: this function could explode the memory footprint
>>> causing the
>>> @@ -1622,90 +1568,6 @@ function is_null_($var) {
>>>
>>> ######################################################################
>>>
>>> -function do_pg_connect() {
>>> -
>>> - global $dbname;
>>> - global $user;
>>> - global $pass;
>>> - global $pgsql_conn;
>>> - static $connected = false;
>>> -
>>> - if (!$connected) {
>>> - $pgsql_conn =
>>> - pg_connect("host=localhost port=5432 dbname=$dbname
>>> user=$user password=$pass");
>>> -
>>> - # Exit if we cannot connect
>>> - if (!$pgsql_conn) {
>>> - mtt_abort("\nCould not connect to the $dbname
>>> database; " .
>>> - "submit this run later.");
>>> - }
>>> - else {
>>> - $connected = true;
>>> -
>>> - # Serialize all transactions by default - Safer that
>>> way.
>>> - do_pg_query("SET SESSION CHARACTERISTICS AS
>>> TRANSACTION ISOLATION LEVEL SERIALIZABLE", false);
>>> - }
>>> -
>>> - # pg_set_error_verbosity($pgsql_conn,
>>> PGSQL_ERRORS_VERBOSE); # PHP 5 needed
>>> - # pg_trace($_ENV['HOME'] . "/pgsql.trace", 'w',
>>> $pgsql_conn);
>>> - # debug("\npg_options: " .
>>> var_export(pg_options($pgsql_conn)));
>>> - }
>>> -}
>>> -
>>> -function do_pg_query($cmd, $silent) {
>>> - $db_res = null;
>>> -
>>> - do_pg_connect();
>>> -
>>> - debug("\nSQL: $cmd\n");
>>> - if (! ($db_res = pg_query($cmd))) {
>>> - $out = "\nSQL QUERY: " . $cmd .
>>> - "\nSQL ERROR: " . pg_last_error() .
>>> - "\nSQL ERROR: " . pg_result_error();
>>> -
>>> - # Some errors are unsurprising, allow for silence in
>>> - # such cases
>>> - if (! $silent) {
>>> - mtt_error($out);
>>> - mtt_send_mail($out);
>>> - }
>>> - }
>>> - debug("\nDatabase rows affected: " .
>>> pg_affected_rows($db_res) . "\n");
>>> -
>>> - return $db_res;
>>> -}
>>> -
>>> -# Fetch scalar value
>>> -function select_scalar($cmd) {
>>> -
>>> - $set = array();
>>> - $set = simple_select($cmd);
>>> - return array_shift($set);
>>> -}
>>> -
>>> -# Fetch 1D array
>>> -function simple_select($cmd) {
>>> -
>>> - do_pg_connect();
>>> -
>>> - $rows = null;
>>> -
>>> - debug("\nSQL: $cmd\n");
>>> - if (! ($result = pg_query($cmd))) {
>>> - $out = "\nSQL QUERY: " . $cmd .
>>> - "\nSQL ERROR: " . pg_last_error() .
>>> - "\nSQL ERROR: " . pg_result_error();
>>> - mtt_error($out);
>>> - mtt_send_mail($out);
>>> - }
>>> - $max = pg_num_rows($result);
>>> - for ($i = 0; $i < $max; ++$i) {
>>> - $row = pg_fetch_array($result, $i, PGSQL_NUM);
>>> - $rows[] = $row[0];
>>> - }
>>> - return $rows;
>>> -}
>>> -
>>> # Fetch an associative hash (column name => value)
>>> function associative_select($cmd) {
>>>
>>> @@ -1722,21 +1584,6 @@ function associative_select($cmd) {
>>> return pg_fetch_array($result);
>>> }
>>>
>>> -# Fetch 2D array
>>> -function select($cmd) {
>>> - do_pg_connect();
>>> -
>>> - debug("\nSQL: $cmd\n");
>>> - if (! ($result = pg_query($cmd))) {
>>> - $out = "\nSQL QUERY: " . $cmd .
>>> - "\nSQL ERROR: " . pg_last_error() .
>>> - "\nSQL ERROR: " . pg_result_error();
>>> - mtt_error($out);
>>> - mtt_send_mail($out);
>>> - }
>>> - return pg_fetch_all($result);
>>> -}
>>> -
>>> ######################################################################
>>>
>>> # Function for reporting errors back to the client
>>
>>