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


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