summaryrefslogtreecommitdiff
path: root/server-tools
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2006-09-26 15:44:52 +0200
committerunknown <msvensson@neptunus.(none)>2006-09-26 15:44:52 +0200
commitbde596273895f1fbc3b880f9b63205151f314a46 (patch)
tree4873375551473eb0229f96d345e78cc623a9c714 /server-tools
parentc490d7ab02f1c9829846724258750ca46db8e704 (diff)
parentf91b91cf659118eaf74b077f900a4bfd3405ed7d (diff)
downloadmariadb-git-bde596273895f1fbc3b880f9b63205151f314a46.tar.gz
Merge neptunus.(none):/home/msvensson/mysql/bug22379_runtime/my50-bug22379_runtime
into neptunus.(none):/home/msvensson/mysql/mysql-5.0-runtime server-tools/instance-manager/instance.cc: Auto merged
Diffstat (limited to 'server-tools')
-rw-r--r--server-tools/instance-manager/guardian.cc27
-rw-r--r--server-tools/instance-manager/instance.cc25
-rw-r--r--server-tools/instance-manager/instance_options.cc3
3 files changed, 36 insertions, 19 deletions
diff --git a/server-tools/instance-manager/guardian.cc b/server-tools/instance-manager/guardian.cc
index 24844e05776..e2142c97f33 100644
--- a/server-tools/instance-manager/guardian.cc
+++ b/server-tools/instance-manager/guardian.cc
@@ -110,20 +110,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 */
diff --git a/server-tools/instance-manager/instance.cc b/server-tools/instance-manager/instance.cc
index 2ed369ba245..b792d132da0 100644
--- a/server-tools/instance-manager/instance.cc
+++ b/server-tools/instance-manager/instance.cc
@@ -572,18 +572,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;
}
diff --git a/server-tools/instance-manager/instance_options.cc b/server-tools/instance-manager/instance_options.cc
index 72621ed1662..f86f359959b 100644
--- a/server-tools/instance-manager/instance_options.cc
+++ b/server-tools/instance-manager/instance_options.cc
@@ -377,7 +377,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;
}