WL#6446: Test of mysqld_safe missing in main test suite.
Status: Complete
The server test suite does not include any test to verify that mysqld_safe is working properly. For this reason, when an error occurs, it is not detected, unless someone does a manual test. This WL has been created due to bug#11759353. User Documentation ================== None required.
Test of mysqld_safe (shell script) The test should at least do the following: 1) Check if mysqld_safe is existing. 2) Set the variables to be used in mysqld_safe. 3) Shutdown mysqld started automaticly by mtr. 4) Run the mysqld_safe script with exec. 5) Reconnect to mysqld again. 6) Execute some SQL. 7) Kill mysqld, which must be restarted now automaticly by mysqld_safe. 8) Execute some SQL. 9) Shutdown mysqld with mysqladmin regularly (no Restart by mysqld_safe). 10) Restart mysqld of mtr (only if necessary to finish the test correctly).
Test of mysqld_safe (shell script) Intended were the following steps executed by an mtr test: 1) Check if mysqld_safe is existing. 2) Set the variables to be used in mysqld_safe. 3) Shutdown mysqld started automaticly by mtr. 4) Run the mysqld_safe script with exec. 5) Reconnect to mysqld again. 6) Execute some SQL. 7) Kill mysqld, which must be restarted now automaticly by mysqld_safe. 8) Execute some SQL. 9) Shutdown mysqld with mysqladmin regularly (no Restart by mysqld_safe). 10) Restart mysqld of mtr (only if necessary to finish the test correctly). There exist a mtr test called "mysqld_test.test" executing the steps 2 to 4. Then the test is hanging with having mysqld_safe started which started a mysqld. This can be seen by doing a "ps -ef|grep mysql" on another terminal. If mysqld will be shutdown by mysqladmin with the right parameters then the test is finishing. The execution of mysqld_safe with exec is failing, means do not behave as expected and start mysqld_safe and mysqld. Do that all manually on commandline let mysqld_safe run in batch with the expected behaviour. It must be clarified why it is not possible to do the same with exec in a mtr test. All experiments have been done in mysql-trunk. Tried exec variants: Not as batch with the result thatr the test hangs until mysqld will stopped in another terminal: exec $MYSQLD_SAFE --defaults-file=$MYSQLTEST_VARDIR/my.cnf --log-error=$MYSQLTEST_VARDIR/log/err.log --basedir=$MYSQL_BASEDIR --ledir=$MYSQL_BASEDIR/sql --datadir=$MYSQLD_DATADIR --socket=$MYSQL_SOCKET --pid-file=$MYSQL_PIDFILE --port=$MYSQL_PORT --timezone=$MYSQL_TIMEZONE --log-output=file --loose-debug-sync-timeout=600 --default-storage-engine=MyISAM --default-tmp-storage-engine=MyISAM --loose-skip-log-bin --core-file --lc-messages-dir=$MYSQL_MESSAGESDIR ; Is starting mysqld_safe and mysqld, the test is hanging. After having killed mysqld_safe the test finished: exec $MYSQLD_SAFE --defaults-file=$MYSQLTEST_VARDIR/my.cnf --log-error=$MYSQLTEST_VARDIR/log/err.log --basedir=$MYSQL_BASEDIR --ledir=$MYSQL_BASEDIR/sql --datadir=$MYSQLD_DATADIR --socket=$MYSQL_SOCKET --pid-file=$MYSQL_PIDFILE --port=$MYSQL_PORT --timezone=$MYSQL_TIMEZONE --log-output=file --loose-debug-sync-timeout=600 --default-storage-engine=MyISAM --default-tmp-storage-engine=MyISAM --loose-skip-log-bin --core-file --lc-messages-dir=$MYSQL_MESSAGESDIR & ; Command as string is failing: exec "$MYSQLD_SAFE --defaults-file=$MYSQLTEST_VARDIR/my.cnf --log-error=$MYSQLTEST_VARDIR/log/err.log --basedir=$MYSQL_BASEDIR --ledir=$MYSQL_BASEDIR/sql --datadir=$MYSQLD_DATADIR --socket=$MYSQL_SOCKET --pid-file=$MYSQL_PIDFILE --port=$MYSQL_PORT --timezone=$MYSQL_TIMEZONE --log-output=file --loose-debug-sync-timeout=600 --default-storage-engine=MyISAM --default-tmp-storage-engine=MyISAM --loose-skip-log-bin --core-file --lc-messages-dir=$MYSQL_MESSAGESDIR &"; This command run or not without return code, but mysqld_safe has not been started. Test come to end: exec "$MYSQLD_SAFE --defaults-file=$MYSQLTEST_VARDIR/my.cnf --log-error=$MYSQLTEST_VARDIR/log/err.log --basedir=$MYSQL_BASEDIR --ledir=$MYSQL_BASEDIR/sql --datadir=$MYSQLD_DATADIR --socket=$MYSQL_SOCKET --pid-file=$MYSQL_PIDFILE --port=$MYSQL_PORT --timezone=$MYSQL_TIMEZONE --log-output=file --loose-debug-sync-timeout=600 --default-storage-engine=MyISAM --default-tmp-storage-engine=MyISAM --loose-skip-log-bin --core-file --lc-messages-dir=$MYSQL_MESSAGESDIR" &; Test ended, but mysqld_safe had not effect: --exec "$MYSQLD_SAFE --defaults-file=$MYSQLTEST_VARDIR/my.cnf --log-error=$MYSQLTEST_VARDIR/log/err.log --basedir=$MYSQL_BASEDIR --ledir=$MYSQL_BASEDIR/sql --datadir=$MYSQLD_DATADIR --socket=$MYSQL_SOCKET --pid-file=$MYSQL_PIDFILE --port=$MYSQL_PORT --timezone=$MYSQL_TIMEZONE --log-output=file --loose-debug-sync-timeout=600 --default-storage-engine=MyISAM --default-tmp-storage-engine=MyISAM --loose-skip-log-bin --core-file --lc-messages-dir=$MYSQL_MESSAGESDIR" & Failed: --exec "$MYSQLD_SAFE --defaults-file=$MYSQLTEST_VARDIR/my.cnf --log-error=$MYSQLTEST_VARDIR/log/err.log --basedir=$MYSQL_BASEDIR --ledir=$MYSQL_BASEDIR/sql --datadir=$MYSQLD_DATADIR --socket=$MYSQL_SOCKET --pid-file=$MYSQL_PIDFILE --port=$MYSQL_PORT --timezone=$MYSQL_TIMEZONE --log-output=file --loose-debug-sync-timeout=600 --default-storage-engine=MyISAM --default-tmp-storage-engine=MyISAM --loose-skip-log-bin --core-file --lc-messages-dir=$MYSQL_MESSAGESDIR &" Is starting mysqld_safe and mysqld, the test is hanging: --exec $MYSQLD_SAFE --defaults-file=$MYSQLTEST_VARDIR/my.cnf --log-error=$MYSQLTEST_VARDIR/log/err.log --basedir=$MYSQL_BASEDIR --ledir=$MYSQL_BASEDIR/sql --datadir=$MYSQLD_DATADIR --socket=$MYSQL_SOCKET --pid-file=$MYSQL_PIDFILE --port=$MYSQL_PORT --timezone=$MYSQL_TIMEZONE --log-output=file --loose-debug-sync-timeout=600 --default-storage-engine=MyISAM --default-tmp-storage-engine=MyISAM --loose-skip-log-bin --core-file --lc-messages-dir=$MYSQL_MESSAGESDIR & Looks like the "exec" statement of mysqltest has a problem with batch jobs.
Copyright (c) 2000, 2024, Oracle Corporation and/or its affiliates. All rights reserved.