Commit 812c9cc8 authored by unknown's avatar unknown
Browse files

Bug #12673: Instance Manager: allows to stop the instance many times

  The instance manager was not actually checking whether an instance
  was actually running before trying to stop it. Now it checks first.


mysql-test/r/im_life_cycle.result:
  Add new results
mysql-test/t/im_life_cycle.imtest:
  Add new regression test
server-tools/instance-manager/instance.cc:
  Fix Instance::stop() to report ER_INSTANCE_IS_NOT_STARTED when that is
  the case. Also removed unnecessary goto.
server-tools/instance-manager/messages.cc:
  Fix messages with missing spaces
parent 67d53e36
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -74,3 +74,6 @@ START INSTANCE mysqld1,mysqld2,mysqld3;
ERROR 42000: You have an error in your command syntax. Check the manual that corresponds to your MySQL Instance Manager version for the right syntax to use
STOP INSTANCE mysqld1,mysqld2,mysqld3;
ERROR 42000: You have an error in your command syntax. Check the manual that corresponds to your MySQL Instance Manager version for the right syntax to use
STOP INSTANCE mysqld2;
ERROR HY000: Cannot stop instance. Perhaps the instance is not started, or was started manually, so IM cannot find the pidfile.
End of 5.0 tests
+8 −0
Original line number Diff line number Diff line
@@ -218,3 +218,11 @@ START INSTANCE mysqld1,mysqld2,mysqld3;

--error ER_SYNTAX_ERROR
STOP INSTANCE mysqld1,mysqld2,mysqld3;

#
# Bug #12673: Instance Manager: allows to stop the instance many times
#
--error 3001
STOP INSTANCE mysqld2;

--echo End of 5.0 tests
+23 −22
Original line number Diff line number Diff line
@@ -469,6 +469,8 @@ int Instance::stop()
  struct timespec timeout;
  uint waitchild= (uint)  DEFAULT_SHUTDOWN_DELAY;

  if (is_running())
  {
    if (options.shutdown_delay_val)
      waitchild= options.shutdown_delay_val;

@@ -478,7 +480,7 @@ int Instance::stop()
    timeout.tv_sec= time(NULL) + waitchild;
    timeout.tv_nsec= 0;
    if (pthread_mutex_lock(&LOCK_instance))
    goto err;
      return ER_STOP_INSTANCE;

    while (options.get_pid() != 0)              /* while server isn't stopped */
    {
@@ -496,10 +498,9 @@ int Instance::stop()
    kill_instance(SIGKILL);

    return 0;
  }

  return ER_INSTANCE_IS_NOT_STARTED;
err:
  return ER_STOP_INSTANCE;
}

#ifdef __WIN__
+3 −3
Original line number Diff line number Diff line
@@ -48,8 +48,8 @@ static const char *mysqld_error_message(unsigned sql_errno)
  case ER_BAD_INSTANCE_NAME:
    return "Bad instance name. Check that the instance with such a name exists";
  case ER_INSTANCE_IS_NOT_STARTED:
    return "Cannot stop instance. Perhaps the instance is not started, or was started"
            "manually, so IM cannot find the pidfile.";
    return "Cannot stop instance. Perhaps the instance is not started, or was"
           " started manually, so IM cannot find the pidfile.";
  case ER_INSTANCE_ALREADY_STARTED:
    return "The instance is already started";
  case ER_CANNOT_START_INSTANCE: