Subject: Re: [MTT users] MTT server side problem
From: Pavel Shamis (Pasha) (pasha_at_[hidden])
Date: 2008-05-07 11:56:43


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