Commit 799c5935 authored by unknown's avatar unknown
Browse files

Small fix for test suite:

  - fix for IM stopping routine;
  - polishing.


mysql-test/lib/mtr_process.pl:
  Polishing: make mtr_kill_process() more verbose in debug mode.
mysql-test/mysql-test-run.pl:
  1. Fix stopping of IM running as a daemon -- after death of the main IM
  process, we should wait for the IM angel to die.
  2. Polishing -- be more verbose in debug mode.
parent 0ff8d486
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -890,19 +890,28 @@ sub mtr_kill_processes ($) {
sub mtr_kill_process ($$$$) {
  my $pid= shift;
  my $signal= shift;
  my $retries= shift;
  my $total_retries= shift;
  my $timeout= shift;

  while (1)
  for (my $cur_attempt= 1; $cur_attempt <= $total_retries; ++$cur_attempt)
  {
    mtr_debug("Sending $signal to $pid...");

    kill($signal, $pid);

    last unless kill (0, $pid) and $retries--;
    unless (kill (0, $pid))
    {
      mtr_debug("Process $pid died.");
      return;
    }

    mtr_debug("Sleep $timeout second waiting for processes to die");
    mtr_debug("Sleeping $timeout second(s) waiting for processes to die...");

    sleep($timeout);
  }

  mtr_debug("Process $pid is still alive after $total_retries " .
            "of sending signal $signal.");
}

##############################################################################
+48 −6
Original line number Diff line number Diff line
@@ -2843,22 +2843,58 @@ sub im_stop($) {

  # Try graceful shutdown.

  mtr_debug("IM-main pid: $instance_manager->{'pid'}");
  mtr_debug("Stopping IM-main...");

  mtr_kill_process($instance_manager->{'pid'}, 'TERM', 10, 1);

  # If necessary, wait for angel process 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);
    }
  }

  # Check that all processes died.

  my $clean_shutdown= 0;

  while (1)
  {
    last if kill (0, $instance_manager->{'pid'});
    if (kill (0, $instance_manager->{'pid'}))
    {
      mtr_debug("IM-main is still alive.");
      last;
    }

    last if (defined $instance_manager->{'angel_pid'}) &&
            kill (0, $instance_manager->{'angel_pid'});
    if (defined $instance_manager->{'angel_pid'} &&
        kill (0, $instance_manager->{'angel_pid'}))
    {
      mtr_debug("IM-angel is still alive.");
      last;
    }

    foreach my $pid (@mysqld_pids)
    {
      last if kill (0, $pid);
      if (kill (0, $pid))
      {
        mtr_debug("Guarded mysqld ($pid) is still alive.");
        last;
      }
    }

    $clean_shutdown= 1;
@@ -2869,15 +2905,21 @@ sub im_stop($) {

  unless ($clean_shutdown)
  {

    if (defined $instance_manager->{'angel_pid'})
    {
      mtr_debug("Killing IM-angel...");
      mtr_kill_process($instance_manager->{'angel_pid'}, 'KILL', 10, 1)
      if defined $instance_manager->{'angel_pid'};
    }
    
    mtr_debug("Killing IM-main...");
    mtr_kill_process($instance_manager->{'pid'}, 'KILL', 10, 1);

    # Shutdown managed mysqld-processes. Some of them may be nonguarded, so IM
    # will not stop them on shutdown. So, we should firstly try to end them
    # legally.

    mtr_debug("Killing guarded mysqld(s)...");
    mtr_kill_processes(\@mysqld_pids);

    # Complain in error log so that a warning will be shown.