From 68c437bad6b6a47ee534aac0411fae83947fbfbf Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 27 Dec 2022 00:02:01 +0300 Subject: [PATCH] MDEV-25004 restart_bindir option to restart server from different location Adds new parameter $restart_bindir for restart_mysqld.inc. Example: let $restart_bindir= /home/midenok/src/mariadb/10.3b/build; --source include/restart_mysqld.inc It is good to return back original server before check_mysqld will be run at the test end: let $restart_bindir=; --source include/restart_mysqld.inc --- mysql-test/include/start_mysqld.inc | 36 ++++++++++++++++++++++++++--- mysql-test/mysql-test-run.pl | 13 ++++++++--- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/mysql-test/include/start_mysqld.inc b/mysql-test/include/start_mysqld.inc index e31f26aad8c..14a0b088fc0 100644 --- a/mysql-test/include/start_mysqld.inc +++ b/mysql-test/include/start_mysqld.inc @@ -1,13 +1,44 @@ # Include this script only after using shutdown_mysqld.inc # where $_expect_file_name was initialized. # Write file to make mysql-test-run.pl start up the server again + +# restart_noprint defines how much is printed to the .result file +# if 0 (default) then '# result' and restart_parameters are printed +# if 1 then print #result but not the content of restart_parameters +# if 2 then nothing is printed + +if (!$restart_noprint) +{ + --let $restart_noprint= 2 +} + +--let $restart_cmd= restart + +if ($restart_bindir) +{ + --let $restart_cmd= restart_bindir $restart_bindir +} + if ($restart_parameters) { - --exec echo "restart: $restart_parameters" > $_expect_file_name + --exec echo "$restart_cmd: $restart_parameters" > $_expect_file_name + if (!$restart_noprint) + { + --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR $MYSQLTEST_VARDIR MYSQLTEST_VARDIR + --exec echo "# $restart_cmd: $restart_parameters" + } + if ($restart_noprint == 1) + { + --exec echo "# $restart_cmd: with restart_parameters" + } } if (!$restart_parameters) { - --exec echo "restart" > $_expect_file_name + --exec echo "$restart_cmd" > $_expect_file_name + if ($restart_noprint < 2) + { + --exec echo "# $restart_cmd" + } } # Turn on reconnect @@ -18,4 +49,3 @@ if (!$restart_parameters) # Turn off reconnect again --disable_reconnect - diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 12afab4d28c..af2e71ea17d 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1963,7 +1963,7 @@ sub collect_mysqld_features_from_running_server () sub find_mysqld { - my ($mysqld_basedir)= $ENV{MTR_BINDIR}|| @_; + my ($mysqld_basedir)= $ENV{MTR_BINDIR_FORCED} || $ENV{MTR_BINDIR} || @_; my @mysqld_names= ("mysqld", "mysqld-max-nt", "mysqld-max", "mysqld-nt"); @@ -1974,7 +1974,7 @@ sub find_mysqld { unshift(@mysqld_names, "mysqld-debug"); } - return my_find_bin($bindir, + return my_find_bin($mysqld_basedir, ["sql", "libexec", "sbin", "bin"], [@mysqld_names]); } @@ -4789,6 +4789,7 @@ sub check_expected_crash_and_restart { mtr_verbose("Test says wait before restart") if $waits == 0; next; } + delete $ENV{MTR_BINDIR_FORCED}; # Ignore any partial or unknown command next unless $last_line =~ /^restart/; @@ -4796,7 +4797,13 @@ sub check_expected_crash_and_restart { # extra command line options to add to the restarted mysqld. # Anything other than 'wait' or 'restart:' (with a colon) will # result in a restart with original mysqld options. - if ($last_line =~ /restart:(.+)/) { + if ($last_line =~ /restart_bindir\s+(\S+)(:.+)?/) { + $ENV{MTR_BINDIR_FORCED}= $1; + if ($2) { + my @rest_opt= split(' ', $2); + $mysqld->{'restart_opts'}= \@rest_opt; + } + } elsif ($last_line =~ /restart:(.+)/) { my @rest_opt= split(' ', $1); $mysqld->{'restart_opts'}= \@rest_opt; } else {