Commit cd6a5b87 authored by unknown's avatar unknown

Merge neptunus.(none):/home/msvensson/mysql/bug22379_runtime/my50-bug22379_runtime

into  neptunus.(none):/home/msvensson/mysql/bug22379_runtime/my51-bug22379_runtime


server-tools/instance-manager/guardian.cc:
  Auto merged
server-tools/instance-manager/instance.cc:
  Auto merged
server-tools/instance-manager/instance_options.cc:
  Auto merged
parents 372d1c8c f91b91cf
......@@ -146,20 +146,35 @@ void Guardian_thread::process_instance(Instance *instance,
if (instance->is_running())
{
/* clear status fields */
current_node->restart_counter= 0;
current_node->crash_moment= 0;
current_node->state= STARTED;
/* The instance can be contacted on it's port */
/* If STARTING also check that pidfile has been created */
if (current_node->state == STARTING &&
current_node->instance->options.get_pid() == 0)
{
/* Pid file not created yet, don't go to STARTED state yet */
}
else
{
/* clear status fields */
log_info("guardian: instance %s is running, set state to STARTED",
instance->options.instance_name);
current_node->restart_counter= 0;
current_node->crash_moment= 0;
current_node->state= STARTED;
}
}
else
{
switch (current_node->state) {
case NOT_STARTED:
instance->start();
current_node->last_checked= current_time;
log_info("guardian: starting instance %s",
instance->options.instance_name);
/* NOTE, set state to STARTING _before_ start() is called */
current_node->state= STARTING;
instance->start();
current_node->last_checked= current_time;
break;
case STARTED: /* fallthrough */
case STARTING: /* let the instance start or crash */
......
......@@ -611,18 +611,19 @@ void Instance::kill_instance(int signum)
/* if there are no pid, everything seems to be fine */
if ((pid= options.get_pid()) != 0) /* get pid from pidfile */
{
/*
If we cannot kill mysqld, then it has propably crashed.
Let us try to remove staled pidfile and return successfully
as mysqld is probably stopped.
*/
if (!kill(pid, signum))
options.unlink_pidfile();
else if (signum == SIGKILL) /* really killed instance with SIGKILL */
log_error("The instance %s is being stopped forsibly. Normally \
it should not happed. Probably the instance has been \
hanging. You should also check your IM setup",
options.instance_name);
if (kill(pid, signum) == 0)
{
/* Kill suceeded */
if (signum == SIGKILL) /* really killed instance with SIGKILL */
{
log_error("The instance %s is being stopped forcibly. Normally" \
"it should not happen. Probably the instance has been" \
"hanging. You should also check your IM setup",
options.instance_name);
/* After sucessful hard kill the pidfile need to be removed */
options.unlink_pidfile();
}
}
}
return;
}
......
......@@ -406,7 +406,8 @@ pid_t Instance_options::get_pid()
{
pid_t pid;
fscanf(pid_file_stream, "%i", &pid);
if (fscanf(pid_file_stream, "%i", &pid) != 1)
pid= -1;
my_fclose(pid_file_stream, MYF(0));
return pid;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment