Below is the list of changes that have just been committed into a local
5.1 repository of alik. When alik does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2006-09-28 15:10:18+04:00, anozdrin@alik. +12 -0
Merge alik.:/mnt/raid/alik/MySQL/devel/5.0-rt
into alik.:/mnt/raid/alik/MySQL/devel/5.1-rt-merged
MERGE: 1.1810.1697.142
BitKeeper/etc/collapsed@stripped, 2006-09-28 13:20:52+04:00, anozdrin@alik. +1 -1
auto-union
MERGE: 1.4.1.1
mysql-test/lib/mtr_process.pl@stripped, 2006-09-28 15:10:16+04:00, anozdrin@alik. +32 -7
Manually merged.
MERGE: 1.25.2.10
mysql-test/mysql-test-run.pl@stripped, 2006-09-28 15:10:16+04:00, anozdrin@alik. +12 -16
Manually merged.
MERGE: 1.30.1.84
mysql-test/r/im_daemon_life_cycle.result@stripped, 2006-09-28 13:21:01+04:00, anozdrin@alik. +0 -0
Auto merged
MERGE: 1.2.1.4
mysql-test/r/sp.result@stripped, 2006-09-28 13:21:01+04:00, anozdrin@alik. +0 -0
Auto merged
MERGE: 1.170.24.1
mysql-test/t/im_daemon_life_cycle.imtest@stripped, 2006-09-28 13:21:01+04:00, anozdrin@alik. +0 -0
Auto merged
MERGE: 1.1.1.4
mysql-test/t/sp.test@stripped, 2006-09-28 13:21:01+04:00, anozdrin@alik. +0 -0
Auto merged
MERGE: 1.174.19.1
server-tools/instance-manager/instance.cc@stripped, 2006-09-28 13:21:02+04:00, anozdrin@alik. +0 -0
Auto merged
MERGE: 1.32.1.2
server-tools/instance-manager/listener.cc@stripped, 2006-09-28 13:21:02+04:00, anozdrin@alik. +0 -0
Auto merged
MERGE: 1.24.1.2
sql/mysql_priv.h@stripped, 2006-09-28 13:21:02+04:00, anozdrin@alik. +0 -0
Auto merged
MERGE: 1.290.62.1
sql/sp.cc@stripped, 2006-09-28 13:21:02+04:00, anozdrin@alik. +0 -0
Auto merged
MERGE: 1.82.1.36
sql/sql_acl.cc@stripped, 2006-09-28 13:21:02+04:00, anozdrin@alik. +0 -0
Auto merged
MERGE: 1.128.1.81
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: anozdrin
# Host: alik.
# Root: /mnt/raid/alik/MySQL/devel/5.1-rt-merged/RESYNC
--- 1.6/mysql-test/r/im_daemon_life_cycle.result 2006-09-28 15:10:23 +04:00
+++ 1.7/mysql-test/r/im_daemon_life_cycle.result 2006-09-28 15:10:23 +04:00
@@ -8,3 +8,17 @@ mysqld2 offline
Killing the process...
Sleeping...
Success: the process was restarted.
+
+--------------------------------------------------------------------
+-- Test for BUG#12751
+--------------------------------------------------------------------
+START INSTANCE mysqld2;
+Success: the process has been started.
+Killing the process...
+Sleeping...
+Success: the process was restarted.
+SHOW INSTANCE STATUS mysqld1;
+instance_name status version
+mysqld1 online VERSION
+STOP INSTANCE mysqld2;
+Success: the process has been stopped.
--- 1.5/mysql-test/t/im_daemon_life_cycle.imtest 2006-09-28 15:10:23 +04:00
+++ 1.6/mysql-test/t/im_daemon_life_cycle.imtest 2006-09-28 15:10:23 +04:00
@@ -14,3 +14,47 @@
# process.
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30
+
+###########################################################################
+
+#
+# BUG#12751: Instance Manager: client hangs
+#
+
+--echo
+--echo --------------------------------------------------------------------
+--echo -- Test for BUG#12751
+--echo --------------------------------------------------------------------
+
+# Give some time to begin accepting connections after restart.
+# FIXME: race condition here.
+
+--sleep 3
+
+# 1. Start mysqld;
+
+START INSTANCE mysqld2;
+# FIXME: START INSTANCE should be synchronous.
+--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started
+
+# 2. Restart IM-main: kill it and IM-angel will restart it.
+
+--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30
+
+# 3. Issue some statement -- connection should be re-established.
+
+# Give some time to begin accepting connections after restart.
+# FIXME: race condition here.
+
+--sleep 3
+
+--replace_column 3 VERSION
+SHOW INSTANCE STATUS mysqld1;
+
+# 4. Stop mysqld2, because it will not be stopped by IM, as it is nonguarded.
+# So, if it we do not stop it, it will be stopped by mysql-test-run.pl with
+# warning.
+
+STOP INSTANCE mysqld2;
+# FIXME: STOP INSTANCE should be synchronous.
+--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped
--- 1.5/BitKeeper/etc/collapsed 2006-09-28 15:10:23 +04:00
+++ 1.6/BitKeeper/etc/collapsed 2006-09-28 15:10:23 +04:00
@@ -4,3 +4,4 @@
44f33f3aj5KW5qweQeekY1LU0E9ZCg
45001f7c3b2hhCXDKfUvzkX9TNe6VA
45002051rHJfMEXAIMiAZV0clxvKSA
+4513d8e4Af4dQWuk13sArwofRgFDQw
--- 1.50/mysql-test/lib/mtr_process.pl 2006-09-28 15:10:23 +04:00
+++ 1.51/mysql-test/lib/mtr_process.pl 2006-09-28 15:10:23 +04:00
@@ -358,9 +358,16 @@ sub mtr_process_exit_status {
# kill IM manager first, else it will restart the servers
sub mtr_kill_leftovers () {
+ mtr_report("Killing Possible Leftover Processes");
mtr_debug("mtr_kill_leftovers(): started.");
- mtr_im_stop($::instance_manager, 'mtr_kill_leftovers');
+ mkpath("$::opt_vardir/log"); # Needed for mysqladmin log
+
+ # Stop or kill Instance Manager and all its children. If we failed to do
+ # that, we can only abort -- there is nothing left to do.
+
+ mtr_error("Failed to stop Instance Manager.")
+ unless mtr_im_stop($::instance_manager);
# Start shutdown of masters and slaves. Don't touch IM-managed mysqld
# instances -- they should be stopped by mtr_im_stop().
@@ -1136,679 +1143,6 @@ sub mtr_exit ($) {
kill('HUP', -$$) if !$::glob_win32_perl and $$ == getpgrp();
exit($code);
-}
-
-##############################################################################
-#
-# Instance Manager management routines.
-#
-##############################################################################
-
-sub mtr_im_kill_process ($$$) {
- my $pid_lst= shift;
- my $signal= shift;
- my $timeout= shift;
- my $total_attempts= $timeout * 10;
-
- my %pids;
-
- foreach my $pid (@{$pid_lst})
- {
- $pids{$pid}= 1;
- }
-
- for (my $cur_attempt= 1; $cur_attempt <= $total_attempts; ++$cur_attempt)
- {
- foreach my $pid (keys %pids)
- {
- mtr_debug("Sending $signal to $pid...");
-
- kill($signal, $pid);
-
- unless (kill (0, $pid))
- {
- mtr_debug("Process $pid died.");
- delete $pids{$pid};
- }
- }
-
- return if scalar keys %pids == 0;
-
- mtr_debug("Sleeping 100ms waiting for processes to die...");
-
- select(undef, undef, undef, 0.1);
- }
-
- mtr_debug("Process(es) " .
- join(' ', keys %pids) .
- " is still alive after $total_attempts " .
- "of sending signal $signal.");
-}
-
-###########################################################################
-
-sub mtr_im_load_pids($) {
- my $instance_manager= shift;
-
- mtr_debug("Loading PID files...");
-
- # Obtain mysqld-process pids.
-
- my $instances = $instance_manager->{'instances'};
-
- for (my $idx= 0; $idx < 2; ++$idx)
- {
- mtr_debug("IM-guarded mysqld[$idx] PID file: '" .
- $instances->[$idx]->{'path_pid'} . "'.");
-
- my $mysqld_pid;
-
- if (-r $instances->[$idx]->{'path_pid'})
- {
- $mysqld_pid= mtr_get_pid_from_file($instances->[$idx]->{'path_pid'});
- mtr_debug("IM-guarded mysqld[$idx] PID: $mysqld_pid.");
- }
- else
- {
- $mysqld_pid= undef;
- mtr_debug("IM-guarded mysqld[$idx]: no PID file.");
- }
-
- $instances->[$idx]->{'pid'}= $mysqld_pid;
- }
-
- # Re-read Instance Manager PIDs from the file, since during tests Instance
- # Manager could have been restarted, so its PIDs could have been changed.
-
- # - IM-main
-
- mtr_debug("IM-main PID file: '$instance_manager->{path_pid}'.");
-
- if (-f $instance_manager->{'path_pid'})
- {
- $instance_manager->{'pid'} =
- mtr_get_pid_from_file($instance_manager->{'path_pid'});
-
- mtr_debug("IM-main PID: $instance_manager->{pid}.");
- }
- else
- {
- mtr_debug("IM-main: no PID file.");
- $instance_manager->{'pid'}= undef;
- }
-
- # - IM-angel
-
- mtr_debug("IM-angel PID file: '$instance_manager->{path_angel_pid}'.");
-
- if (-f $instance_manager->{'path_angel_pid'})
- {
- $instance_manager->{'angel_pid'} =
- mtr_get_pid_from_file($instance_manager->{'path_angel_pid'});
-
- mtr_debug("IM-angel PID: $instance_manager->{'angel_pid'}.");
- }
- else
- {
- mtr_debug("IM-angel: no PID file.");
- $instance_manager->{'angel_pid'} = undef;
- }
-}
-
-###########################################################################
-
-sub mtr_im_terminate($) {
- my $instance_manager= shift;
-
- # Load pids from pid-files. We should do it first of all, because IM deletes
- # them on shutdown.
-
- mtr_im_load_pids($instance_manager);
-
- mtr_debug("Shutting Instance Manager down...");
-
- # Ignoring SIGCHLD so that all children could rest in peace.
-
- start_reap_all();
-
- # Send SIGTERM to IM-main.
-
- if (defined $instance_manager->{'pid'})
- {
- mtr_debug("IM-main pid: $instance_manager->{pid}.");
- mtr_debug("Stopping IM-main...");
-
- mtr_im_kill_process([ $instance_manager->{'pid'} ], 'TERM', 10);
- }
- else
- {
- mtr_debug("IM-main pid: n/a.");
- }
-
- # If IM-angel was alive, wait for it to die.
-
- if (defined $instance_manager->{'angel_pid'})
- {
- mtr_debug("IM-angel pid: $instance_manager->{'angel_pid'}.");
- mtr_debug("Waiting for IM-angel to die...");
-
- my $total_attempts= 10;
-
- for (my $cur_attempt=1; $cur_attempt <= $total_attempts; ++$cur_attempt)
- {
- unless (kill (0, $instance_manager->{'angel_pid'}))
- {
- mtr_debug("IM-angel died.");
- last;
- }
-
- sleep(1);
- }
- }
- else
- {
- mtr_debug("IM-angel pid: n/a.");
- }
-
- stop_reap_all();
-
- # Re-load PIDs.
-
- mtr_im_load_pids($instance_manager);
-}
-
-###########################################################################
-
-sub mtr_im_check_alive($) {
- my $instance_manager= shift;
-
- mtr_debug("Checking whether IM-components are alive...");
-
- return 1 if mtr_im_check_main_alive($instance_manager);
-
- return 1 if mtr_im_check_angel_alive($instance_manager);
-
- return 1 if mtr_im_check_mysqlds_alive($instance_manager);
-
- return 0;
-}
-
-###########################################################################
-
-sub mtr_im_check_main_alive($) {
- my $instance_manager= shift;
-
- # Check that the process, that we know to be IM's, is dead.
-
- if (defined $instance_manager->{'pid'})
- {
- if (kill (0, $instance_manager->{'pid'}))
- {
- mtr_debug("IM-main (PID: $instance_manager->{pid}) is alive.");
- return 1;
- }
- else
- {
- mtr_debug("IM-main (PID: $instance_manager->{pid}) is dead.");
- }
- }
- else
- {
- mtr_debug("No PID file for IM-main.");
- }
-
- # Check that IM does not accept client connections.
-
- if (mtr_ping_port($instance_manager->{'port'}))
- {
- mtr_debug("IM-main (port: $instance_manager->{port}) " .
- "is accepting connections.");
-
- mtr_im_errlog("IM-main is accepting connections on port " .
- "$instance_manager->{port}, but there is no " .
- "process information.");
- return 1;
- }
- else
- {
- mtr_debug("IM-main (port: $instance_manager->{port}) " .
- "does not accept connections.");
- return 0;
- }
-}
-
-###########################################################################
-
-sub mtr_im_check_angel_alive($) {
- my $instance_manager= shift;
-
- # Check that the process, that we know to be the Angel, is dead.
-
- if (defined $instance_manager->{'angel_pid'})
- {
- if (kill (0, $instance_manager->{'angel_pid'}))
- {
- mtr_debug("IM-angel (PID: $instance_manager->{angel_pid}) is alive.");
- return 1;
- }
- else
- {
- mtr_debug("IM-angel (PID: $instance_manager->{angel_pid}) is dead.");
- return 0;
- }
- }
- else
- {
- mtr_debug("No PID file for IM-angel.");
- return 0;
- }
-}
-
-###########################################################################
-
-sub mtr_im_check_mysqlds_alive($) {
- my $instance_manager= shift;
-
- mtr_debug("Checking for IM-guarded mysqld instances...");
-
- my $instances = $instance_manager->{'instances'};
-
- for (my $idx= 0; $idx < 2; ++$idx)
- {
- mtr_debug("Checking mysqld[$idx]...");
-
- return 1
- if mtr_im_check_mysqld_alive($instance_manager, $instances->[$idx]);
- }
-}
-
-###########################################################################
-
-sub mtr_im_check_mysqld_alive($$) {
- my $instance_manager= shift;
- my $mysqld_instance= shift;
-
- # Check that the process is dead.
-
- if (defined $instance_manager->{'pid'})
- {
- if (kill (0, $instance_manager->{'pid'}))
- {
- mtr_debug("Mysqld instance (PID: $mysqld_instance->{pid}) is alive.");
- return 1;
- }
- else
- {
- mtr_debug("Mysqld instance (PID: $mysqld_instance->{pid}) is dead.");
- }
- }
- else
- {
- mtr_debug("No PID file for mysqld instance.");
- }
-
- # Check that mysqld does not accept client connections.
-
- if (mtr_ping_port($mysqld_instance->{'port'}))
- {
- mtr_debug("Mysqld instance (port: $mysqld_instance->{port}) " .
- "is accepting connections.");
-
- mtr_im_errlog("Mysqld is accepting connections on port " .
- "$mysqld_instance->{port}, but there is no " .
- "process information.");
- return 1;
- }
- else
- {
- mtr_debug("Mysqld instance (port: $mysqld_instance->{port}) " .
- "does not accept connections.");
- return 0;
- }
-}
-
-###########################################################################
-
-sub mtr_im_cleanup($) {
- my $instance_manager= shift;
-
- mtr_im_rm_file($instance_manager->{'path_pid'});
- mtr_im_rm_file($instance_manager->{'path_sock'});
-
- mtr_im_rm_file($instance_manager->{'path_angel_pid'});
-
- for (my $idx= 0; $idx < 2; ++$idx)
- {
- mtr_im_rm_file($instance_manager->{'instances'}->[$idx]->{'path_pid'});
- mtr_im_rm_file($instance_manager->{'instances'}->[$idx]->{'path_sock'});
- }
-}
-
-###########################################################################
-
-sub mtr_im_rm_file($)
-{
- my $file_path= shift;
-
- if (-f $file_path)
- {
- mtr_debug("Removing '$file_path'...");
-
- mtr_warning("Can not remove '$file_path'.")
- unless unlink($file_path);
- }
- else
- {
- mtr_debug("File '$file_path' does not exist already.");
- }
-}
-
-###########################################################################
-
-sub mtr_im_errlog($) {
- my $msg= shift;
-
- # Complain in error log so that a warning will be shown.
- #
- # TODO: unless BUG#20761 is fixed, we will print the warning to stdout, so
- # that it can be seen on console and does not produce pushbuild error.
-
- # my $errlog= "$opt_vardir/log/mysql-test-run.pl.err";
- #
- # open (ERRLOG, ">>$errlog") ||
- # mtr_error("Can not open error log ($errlog)");
- #
- # my $ts= localtime();
- # print ERRLOG
- # "Warning: [$ts] $msg\n";
- #
- # close ERRLOG;
-
- my $ts= localtime();
- print "Warning: [$ts] $msg\n";
-}
-
-###########################################################################
-
-sub mtr_im_kill($) {
- my $instance_manager= shift;
-
- # Re-load PIDs. That can be useful because some processes could have been
- # restarted.
-
- mtr_im_load_pids($instance_manager);
-
- # Ignoring SIGCHLD so that all children could rest in peace.
-
- start_reap_all();
-
- # Kill IM-angel first of all.
-
- if (defined $instance_manager->{'angel_pid'})
- {
- mtr_debug("Killing IM-angel (PID: $instance_manager->{angel_pid})...");
- mtr_im_kill_process([ $instance_manager->{'angel_pid'} ], 'KILL', 10);
- }
- else
- {
- mtr_debug("IM-angel is dead.");
- }
-
- # Re-load PIDs again.
-
- mtr_im_load_pids($instance_manager);
-
- # Kill IM-main.
-
- if (defined $instance_manager->{'pid'})
- {
- mtr_debug("Killing IM-main (PID: $instance_manager->pid})...");
- mtr_im_kill_process([ $instance_manager->{'pid'} ], 'KILL', 10);
- }
- else
- {
- mtr_debug("IM-main is dead.");
- }
-
- # Re-load PIDs again.
-
- mtr_im_load_pids($instance_manager);
-
- # Kill guarded mysqld instances.
-
- my @mysqld_pids;
-
- mtr_debug("Collecting PIDs of mysqld instances to kill...");
-
- for (my $idx= 0; $idx < 2; ++$idx)
- {
- my $pid= $instance_manager->{'instances'}->[$idx]->{'pid'};
-
- next unless defined $pid;
-
- mtr_debug(" - IM-guarded mysqld[$idx] PID: $pid.");
-
- push (@mysqld_pids, $pid);
- }
-
- if (scalar @mysqld_pids > 0)
- {
- mtr_debug("Killing IM-guarded mysqld instances...");
- mtr_im_kill_process(\@mysqld_pids, 'KILL', 10);
- }
-
- # That's all.
-
- stop_reap_all();
-}
-
-##############################################################################
-
-sub mtr_im_wait_for_connection($$$) {
- my $instance_manager= shift;
- my $total_attempts= shift;
- my $connect_timeout= shift;
-
- mtr_debug("Waiting for IM on port $instance_manager->{port} " .
- "to start accepting connections...");
-
- for (my $cur_attempt= 1; $cur_attempt <= $total_attempts; ++$cur_attempt)
- {
- mtr_debug("Trying to connect to IM ($cur_attempt of $total_attempts)...");
-
- if (mtr_ping_port($instance_manager->{'port'}))
- {
- mtr_debug("IM is accepting connections " .
- "on port $instance_manager->{port}.");
- return 1;
- }
-
- mtr_debug("Sleeping $connect_timeout...");
- sleep($connect_timeout);
- }
-
- mtr_debug("IM does not accept connections " .
- "on port $instance_manager->{port} after " .
- ($total_attempts * $connect_timeout) . " seconds.");
-
- return 0;
-}
-
-##############################################################################
-
-sub mtr_im_wait_for_mysqld($$$) {
- my $mysqld= shift;
- my $total_attempts= shift;
- my $connect_timeout= shift;
-
- mtr_debug("Waiting for IM-guarded mysqld on port $mysqld->{port} " .
- "to start accepting connections...");
-
- for (my $cur_attempt= 1; $cur_attempt <= $total_attempts; ++$cur_attempt)
- {
- mtr_debug("Trying to connect to mysqld " .
- "($cur_attempt of $total_attempts)...");
-
- if (mtr_ping_port($mysqld->{'port'}))
- {
- mtr_debug("Mysqld is accepting connections " .
- "on port $mysqld->{port}.");
- return 1;
- }
-
- mtr_debug("Sleeping $connect_timeout...");
- sleep($connect_timeout);
- }
-
- mtr_debug("Mysqld does not accept connections " .
- "on port $mysqld->{port} after " .
- ($total_attempts * $connect_timeout) . " seconds.");
-
- return 0;
-}
-
-##############################################################################
-
-sub mtr_im_start($$) {
- my $instance_manager = shift;
- my $opts = shift;
-
- mtr_debug("Starting Instance Manager...");
-
- my $args;
- mtr_init_args(\$args);
- mtr_add_arg($args, "--defaults-file=%s",
- $instance_manager->{'defaults_file'});
-
- foreach my $opt (@{$opts})
- {
- mtr_add_arg($args, $opt);
- }
-
- $instance_manager->{'pid'} =
- mtr_spawn(
- $::exe_im, # path to the executable
- $args, # cmd-line args
- '', # stdin
- $instance_manager->{'path_log'}, # stdout
- $instance_manager->{'path_err'}, # stderr
- '', # pid file path (not used)
- { append_log_file => 1 } # append log files
- );
-
- if ( ! $instance_manager->{'pid'} )
- {
- mtr_report('Could not start Instance Manager');
- return;
- }
-
- # Instance Manager can be run in daemon mode. In this case, it creates
- # several processes and the parent process, created by mtr_spawn(), exits just
- # after start. So, we have to obtain Instance Manager PID from the PID file.
-
- if ( ! sleep_until_file_created(
- $instance_manager->{'path_pid'},
- $instance_manager->{'start_timeout'},
- -1)) # real PID is still unknown
- {
- mtr_report("Instance Manager PID file is missing");
- return;
- }
-
- $instance_manager->{'pid'} =
- mtr_get_pid_from_file($instance_manager->{'path_pid'});
-
- mtr_debug("Instance Manager started. PID: $instance_manager->{pid}.");
-
- # Wait until we can connect to IM.
-
- my $IM_CONNECT_TIMEOUT= 30;
-
- unless (mtr_im_wait_for_connection($instance_manager,
- $IM_CONNECT_TIMEOUT, 1))
- {
- mtr_debug("Can not connect to Instance Manager " .
- "in $IM_CONNECT_TIMEOUT seconds after start.");
- mtr_debug("Aborting test suite...");
-
- mtr_kill_leftovers();
-
- mtr_error("Can not connect to Instance Manager " .
- "in $IM_CONNECT_TIMEOUT seconds after start.");
- }
-
- # Wait until we can connect to guarded mysqld-instances
- # (in other words -- wait for IM to start guarded instances).
-
- for (my $idx= 0; $idx < 2; ++$idx)
- {
- my $mysqld= $instance_manager->{'instances'}->[$idx];
-
- next if exists $mysqld->{'nonguarded'};
-
- mtr_debug("Waiting for mysqld[$idx] to start...");
-
- unless (mtr_im_wait_for_mysqld($mysqld, 30, 1))
- {
- mtr_debug("Can not connect to mysqld[$idx] " .
- "in $IM_CONNECT_TIMEOUT seconds after start.");
- mtr_debug("Aborting test suite...");
-
- mtr_kill_leftovers();
-
- mtr_error("Can not connect to mysqld[$idx] " .
- "in $IM_CONNECT_TIMEOUT seconds after start.");
- }
-
- mtr_debug("mysqld[$idx] started.");
- }
-
- mtr_debug("Instance Manager started.");
-
- mtr_im_load_pids($instance_manager);
-}
-
-##############################################################################
-
-sub mtr_im_stop($$) {
- my $instance_manager= shift;
- my $where= shift;
-
- mtr_debug("Stopping Instance Manager...");
-
- # Try graceful shutdown.
-
- mtr_im_terminate($instance_manager);
-
- # Check that all processes died.
-
- unless (mtr_im_check_alive($instance_manager))
- {
- mtr_debug("Instance Manager has been stopped successfully.");
- mtr_im_cleanup($instance_manager);
- return 1;
- }
-
- # Instance Manager don't want to die. We should kill it.
-
- mtr_im_errlog("[$where] Instance Manager did not shutdown gracefully.");
-
- mtr_im_kill($instance_manager);
-
- # Check again that all IM-related processes have been killed.
-
- my $im_is_alive= mtr_im_check_alive($instance_manager);
-
- mtr_im_cleanup($instance_manager);
-
- if ($im_is_alive)
- {
- mtr_error("Can not kill Instance Manager or its children.");
- return 0;
- }
-
- mtr_debug("Instance Manager has been killed successfully.");
- return 1;
}
###########################################################################
--- 1.172/mysql-test/mysql-test-run.pl 2006-09-28 15:10:23 +04:00
+++ 1.173/mysql-test/mysql-test-run.pl 2006-09-28 15:10:23 +04:00
@@ -88,6 +88,7 @@ use strict;
#use diagnostics;
require "lib/mtr_cases.pl";
+require "lib/mtr_im.pl";
require "lib/mtr_process.pl";
require "lib/mtr_timer.pl";
require "lib/mtr_io.pl";
@@ -1040,6 +1041,7 @@ sub command_line_setup () {
path_datadir => "$opt_vardir/im_mysqld_1.data",
path_sock => "$sockdir/mysqld_1.sock",
path_pid => "$opt_vardir/run/mysqld_1.pid",
+ start_timeout => 400, # enough time create innodb tables
old_log_format => 1
};
@@ -1051,6 +1053,7 @@ sub command_line_setup () {
path_sock => "$sockdir/mysqld_2.sock",
path_pid => "$opt_vardir/run/mysqld_2.pid",
nonguarded => 1,
+ start_timeout => 400, # enough time create innodb tables
old_log_format => 1
};
@@ -1665,11 +1668,7 @@ sub kill_running_server () {
# started from ths run of the script, this is terminating
# leftovers from previous runs.
- mtr_report("Killing Possible Leftover Processes");
- mkpath("$opt_vardir/log"); # Needed for mysqladmin log
-
mtr_kill_leftovers();
-
}
}
@@ -2657,7 +2656,10 @@ sub run_testcase ($) {
if ( ! $glob_use_running_server and $tinfo->{'component_id'} eq 'im' )
{
- mtr_im_stop($instance_manager, $tinfo->{'name'});
+ unless ( mtr_im_stop($instance_manager, $tinfo->{'name'}) )
+ {
+ mtr_error("Failed to stop Instance Manager.")
+ }
}
}
@@ -3195,7 +3197,10 @@ sub stop_all_servers () {
print "Stopping All Servers\n";
print "Shutting-down Instance Manager\n";
- mtr_im_stop($instance_manager, "stop_all_servers");
+ unless (mtr_im_stop($instance_manager, "stop_all_servers"))
+ {
+ mtr_error("Failed to stop Instance Manager.")
+ }
my %admin_pids; # hash of admin processes that requests shutdown
my @kill_pids; # list of processes to shutdown/kill
@@ -3601,7 +3606,13 @@ sub run_testcase_start_servers($) {
im_create_defaults_file($instance_manager);
- mtr_im_start($instance_manager, $tinfo->{im_opts});
+ unless ( mtr_im_start($instance_manager, $tinfo->{im_opts}) )
+ {
+ report_failure_and_restart($tinfo);
+ mtr_report("Failed to start Instance Manager. " .
+ "The test '$tname' is marked as failed.");
+ return;
+ }
}
# ----------------------------------------------------------------------
--- 1.28/server-tools/instance-manager/listener.cc 2006-09-28 15:10:23 +04:00
+++ 1.29/server-tools/instance-manager/listener.cc 2006-09-28 15:10:23 +04:00
@@ -38,6 +38,27 @@
#include "thread_registry.h"
+static void set_non_blocking(int socket)
+{
+#ifndef __WIN__
+ int flags= fcntl(socket, F_GETFL, 0);
+ fcntl(socket, F_SETFL, flags | O_NONBLOCK);
+#else
+ u_long arg= 1;
+ ioctlsocket(socket, FIONBIO, &arg);
+#endif
+}
+
+
+static void set_no_inherit(int socket)
+{
+#ifndef __WIN__
+ int flags= fcntl(socket, F_GETFD, 0);
+ fcntl(socket, F_SETFD, flags | FD_CLOEXEC);
+#endif
+}
+
+
/*
Listener_thread - incapsulates listening functionality
*/
@@ -158,6 +179,8 @@ void Listener_thread::run()
/* accept may return -1 (failure or spurious wakeup) */
if (client_fd >= 0) // connection established
{
+ set_no_inherit(client_fd);
+
Vio *vio= vio_new(client_fd, socket_index == 0 ?
VIO_TYPE_SOCKET : VIO_TYPE_TCPIP,
socket_index == 0 ? 1 : 0);
@@ -197,25 +220,6 @@ err:
thread_registry.request_shutdown();
my_thread_end();
return;
-}
-
-void set_non_blocking(int socket)
-{
-#ifndef __WIN__
- int flags= fcntl(socket, F_GETFL, 0);
- fcntl(socket, F_SETFL, flags | O_NONBLOCK);
-#else
- u_long arg= 1;
- ioctlsocket(socket, FIONBIO, &arg);
-#endif
-}
-
-void set_no_inherit(int socket)
-{
-#ifndef __WIN__
- int flags= fcntl(socket, F_GETFD, 0);
- fcntl(socket, F_SETFD, flags | FD_CLOEXEC);
-#endif
}
int Listener_thread::create_tcp_socket()
| Thread |
|---|
| • bk commit into 5.1 tree (anozdrin:1.2329) | Alexander Nozdrin | 28 Sep |