Loading server-tools/instance-manager/guardian.cc +29 −43 Original line number Diff line number Diff line Loading @@ -66,11 +66,11 @@ Guardian_thread::~Guardian_thread() } void Guardian_thread::request_shutdown(bool stop_instances_arg) void Guardian_thread::request_shutdown() { pthread_mutex_lock(&LOCK_guardian); /* stop instances or just clean up Guardian repository */ stop_instances(stop_instances_arg); stop_instances(); shutdown_requested= TRUE; pthread_mutex_unlock(&LOCK_guardian); } Loading Loading @@ -118,11 +118,11 @@ void Guardian_thread::process_instance(Instance *instance, { /* Pid file not created yet, don't go to STARTED state yet */ } else else if (current_node->state != STARTED) { /* clear status fields */ log_info("guardian: instance %s is running, set state to STARTED", instance->options.instance_name); log_info("guardian: instance '%s' is running, set state to STARTED.", (const char *) instance->options.instance_name); current_node->restart_counter= 0; current_node->crash_moment= 0; current_node->state= STARTED; Loading @@ -132,8 +132,8 @@ void Guardian_thread::process_instance(Instance *instance, { switch (current_node->state) { case NOT_STARTED: log_info("guardian: starting instance %s", instance->options.instance_name); log_info("guardian: starting instance '%s'...", (const char *) instance->options.instance_name); /* NOTE, set state to STARTING _before_ start() is called */ current_node->state= STARTING; Loading @@ -157,8 +157,8 @@ void Guardian_thread::process_instance(Instance *instance, if (instance->is_crashed()) { instance->start(); log_info("guardian: starting instance %s", instance->options.instance_name); log_info("guardian: starting instance '%s'...", (const char *) instance->options.instance_name); } } else Loading @@ -175,8 +175,8 @@ void Guardian_thread::process_instance(Instance *instance, instance->start(); current_node->last_checked= current_time; current_node->restart_counter++; log_info("guardian: restarting instance %s", instance->options.instance_name); log_info("guardian: restarting instance '%s'...", (const char *) instance->options.instance_name); } } else Loading Loading @@ -382,12 +382,11 @@ int Guardian_thread::stop_guard(Instance *instance) SYNOPSYS stop_instances() stop_instances_arg whether we should stop instances at shutdown DESCRIPTION Loops through the guarded_instances list and prepares them for shutdown. If stop_instances was requested, we need to issue a stop command and change the state accordingly. Otherwise we simply delete an entry. For each instance we issue a stop command and change the state accordingly. NOTE Guardian object should be locked by the calling function. Loading @@ -397,23 +396,11 @@ int Guardian_thread::stop_guard(Instance *instance) 1 - error occured */ int Guardian_thread::stop_instances(bool stop_instances_arg) int Guardian_thread::stop_instances() { LIST *node; node= guarded_instances; while (node != NULL) { if (!stop_instances_arg) { /* just forget about an instance */ guarded_instances= list_delete(guarded_instances, node); /* This should still work fine, as we have only removed the node from the list. The pointer to the next one is still valid */ node= node->next; } else { GUARD_NODE *current_node= (GUARD_NODE *) node->data; /* Loading @@ -433,7 +420,6 @@ int Guardian_thread::stop_instances(bool stop_instances_arg) current_node->instance->kill_instance(SIGTERM); node= node->next; } } return 0; } Loading server-tools/instance-manager/guardian.h +2 −2 Original line number Diff line number Diff line Loading @@ -89,7 +89,7 @@ class Guardian_thread: public Guardian_thread_args /* Initialize or refresh the list of guarded instances */ int init(); /* Request guardian shutdown. Stop instances if needed */ void request_shutdown(bool stop_instances); void request_shutdown(); /* Start instance protection */ int guard(Instance *instance, bool nolock= FALSE); /* Stop instance protection */ Loading @@ -104,7 +104,7 @@ class Guardian_thread: public Guardian_thread_args private: /* Prepares Guardian shutdown. Stops instances is needed */ int stop_instances(bool stop_instances_arg); int stop_instances(); /* check instance state and act accordingly */ void process_instance(Instance *instance, GUARD_NODE *current_node, LIST **guarded_instances, LIST *elem); Loading server-tools/instance-manager/instance.cc +12 −11 Original line number Diff line number Diff line Loading @@ -156,8 +156,8 @@ static int start_process(Instance_options *instance_options, /* exec never returns */ exit(1); case -1: log_info("cannot create a new process to start instance %s", instance_options->instance_name); log_info("cannot create a new process to start instance '%s'.", (const char *) instance_options->instance_name); return 1; } return 0; Loading Loading @@ -252,7 +252,8 @@ static void start_and_monitor_instance(Instance_options *old_instance_options, MAX_INSTANCE_NAME_LEN - 1); instance_name_len= old_instance_options->instance_name_len; log_info("starting instance %s", instance_name_buff); log_info("starting instance '%s'...", (const char *) instance_name_buff); if (start_process(old_instance_options, &process_info)) { Loading Loading @@ -286,9 +287,9 @@ void Instance::remove_pid() int pid; if ((pid= options.get_pid()) != 0) /* check the pidfile */ if (options.unlink_pidfile()) /* remove stalled pidfile */ log_error("cannot remove pidfile for instance %i, this might be \ log_error("cannot remove pidfile for instance '%s', this might be \ since IM lacks permmissions or hasn't found the pidifle", options.instance_name); (const char *) options.instance_name); } Loading Loading @@ -435,9 +436,9 @@ bool Instance::is_running() We have successfully connected to the server using fake username/password. Write a warning to the logfile. */ log_info("The Instance Manager was able to log into you server \ with faked compiled-in password while checking server status. \ Looks like something is wrong."); log_info("The Instance Manager was able to log into you server " "with faked compiled-in password while checking server status. " "Looks like something is wrong."); pthread_mutex_unlock(&LOCK_instance); return_val= TRUE; /* server is alive */ } Loading Loading @@ -577,10 +578,10 @@ void Instance::kill_instance(int signum) /* 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" \ 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); (const char *) options.instance_name); /* After sucessful hard kill the pidfile need to be removed */ options.unlink_pidfile(); } Loading server-tools/instance-manager/listener.cc +2 −2 Original line number Diff line number Diff line Loading @@ -280,7 +280,7 @@ int Listener_thread::create_tcp_socket() FD_SET(ip_socket, &read_fds); sockets[num_sockets++]= ip_socket; log_info("accepting connections on ip socket"); log_info("accepting connections on ip socket (port: %d)", (int) im_port); return 0; } Loading Loading @@ -334,7 +334,7 @@ create_unix_socket(struct sockaddr_un &unix_socket_address) /* make sure that instances won't be listening our sockets */ set_no_inherit(unix_socket); log_info("accepting connections on unix socket %s", log_info("accepting connections on unix socket '%s'", unix_socket_address.sun_path); sockets[num_sockets++]= unix_socket; FD_SET(unix_socket, &read_fds); Loading server-tools/instance-manager/manager.cc +2 −3 Original line number Diff line number Diff line Loading @@ -110,7 +110,7 @@ void stop_all(Guardian_thread *guardian, Thread_registry *registry) Let guardian thread know that it should break it's processing cycle, once it wakes up. */ guardian->request_shutdown(true); guardian->request_shutdown(); /* wake guardian */ pthread_cond_signal(&guardian->COND_guardian); /* stop all threads */ Loading Loading @@ -282,8 +282,7 @@ void manager(const Options &options) { if (!guardian_thread.is_stopped()) { bool stop_instances= true; guardian_thread.request_shutdown(stop_instances); guardian_thread.request_shutdown(); pthread_cond_signal(&guardian_thread.COND_guardian); } else Loading Loading
server-tools/instance-manager/guardian.cc +29 −43 Original line number Diff line number Diff line Loading @@ -66,11 +66,11 @@ Guardian_thread::~Guardian_thread() } void Guardian_thread::request_shutdown(bool stop_instances_arg) void Guardian_thread::request_shutdown() { pthread_mutex_lock(&LOCK_guardian); /* stop instances or just clean up Guardian repository */ stop_instances(stop_instances_arg); stop_instances(); shutdown_requested= TRUE; pthread_mutex_unlock(&LOCK_guardian); } Loading Loading @@ -118,11 +118,11 @@ void Guardian_thread::process_instance(Instance *instance, { /* Pid file not created yet, don't go to STARTED state yet */ } else else if (current_node->state != STARTED) { /* clear status fields */ log_info("guardian: instance %s is running, set state to STARTED", instance->options.instance_name); log_info("guardian: instance '%s' is running, set state to STARTED.", (const char *) instance->options.instance_name); current_node->restart_counter= 0; current_node->crash_moment= 0; current_node->state= STARTED; Loading @@ -132,8 +132,8 @@ void Guardian_thread::process_instance(Instance *instance, { switch (current_node->state) { case NOT_STARTED: log_info("guardian: starting instance %s", instance->options.instance_name); log_info("guardian: starting instance '%s'...", (const char *) instance->options.instance_name); /* NOTE, set state to STARTING _before_ start() is called */ current_node->state= STARTING; Loading @@ -157,8 +157,8 @@ void Guardian_thread::process_instance(Instance *instance, if (instance->is_crashed()) { instance->start(); log_info("guardian: starting instance %s", instance->options.instance_name); log_info("guardian: starting instance '%s'...", (const char *) instance->options.instance_name); } } else Loading @@ -175,8 +175,8 @@ void Guardian_thread::process_instance(Instance *instance, instance->start(); current_node->last_checked= current_time; current_node->restart_counter++; log_info("guardian: restarting instance %s", instance->options.instance_name); log_info("guardian: restarting instance '%s'...", (const char *) instance->options.instance_name); } } else Loading Loading @@ -382,12 +382,11 @@ int Guardian_thread::stop_guard(Instance *instance) SYNOPSYS stop_instances() stop_instances_arg whether we should stop instances at shutdown DESCRIPTION Loops through the guarded_instances list and prepares them for shutdown. If stop_instances was requested, we need to issue a stop command and change the state accordingly. Otherwise we simply delete an entry. For each instance we issue a stop command and change the state accordingly. NOTE Guardian object should be locked by the calling function. Loading @@ -397,23 +396,11 @@ int Guardian_thread::stop_guard(Instance *instance) 1 - error occured */ int Guardian_thread::stop_instances(bool stop_instances_arg) int Guardian_thread::stop_instances() { LIST *node; node= guarded_instances; while (node != NULL) { if (!stop_instances_arg) { /* just forget about an instance */ guarded_instances= list_delete(guarded_instances, node); /* This should still work fine, as we have only removed the node from the list. The pointer to the next one is still valid */ node= node->next; } else { GUARD_NODE *current_node= (GUARD_NODE *) node->data; /* Loading @@ -433,7 +420,6 @@ int Guardian_thread::stop_instances(bool stop_instances_arg) current_node->instance->kill_instance(SIGTERM); node= node->next; } } return 0; } Loading
server-tools/instance-manager/guardian.h +2 −2 Original line number Diff line number Diff line Loading @@ -89,7 +89,7 @@ class Guardian_thread: public Guardian_thread_args /* Initialize or refresh the list of guarded instances */ int init(); /* Request guardian shutdown. Stop instances if needed */ void request_shutdown(bool stop_instances); void request_shutdown(); /* Start instance protection */ int guard(Instance *instance, bool nolock= FALSE); /* Stop instance protection */ Loading @@ -104,7 +104,7 @@ class Guardian_thread: public Guardian_thread_args private: /* Prepares Guardian shutdown. Stops instances is needed */ int stop_instances(bool stop_instances_arg); int stop_instances(); /* check instance state and act accordingly */ void process_instance(Instance *instance, GUARD_NODE *current_node, LIST **guarded_instances, LIST *elem); Loading
server-tools/instance-manager/instance.cc +12 −11 Original line number Diff line number Diff line Loading @@ -156,8 +156,8 @@ static int start_process(Instance_options *instance_options, /* exec never returns */ exit(1); case -1: log_info("cannot create a new process to start instance %s", instance_options->instance_name); log_info("cannot create a new process to start instance '%s'.", (const char *) instance_options->instance_name); return 1; } return 0; Loading Loading @@ -252,7 +252,8 @@ static void start_and_monitor_instance(Instance_options *old_instance_options, MAX_INSTANCE_NAME_LEN - 1); instance_name_len= old_instance_options->instance_name_len; log_info("starting instance %s", instance_name_buff); log_info("starting instance '%s'...", (const char *) instance_name_buff); if (start_process(old_instance_options, &process_info)) { Loading Loading @@ -286,9 +287,9 @@ void Instance::remove_pid() int pid; if ((pid= options.get_pid()) != 0) /* check the pidfile */ if (options.unlink_pidfile()) /* remove stalled pidfile */ log_error("cannot remove pidfile for instance %i, this might be \ log_error("cannot remove pidfile for instance '%s', this might be \ since IM lacks permmissions or hasn't found the pidifle", options.instance_name); (const char *) options.instance_name); } Loading Loading @@ -435,9 +436,9 @@ bool Instance::is_running() We have successfully connected to the server using fake username/password. Write a warning to the logfile. */ log_info("The Instance Manager was able to log into you server \ with faked compiled-in password while checking server status. \ Looks like something is wrong."); log_info("The Instance Manager was able to log into you server " "with faked compiled-in password while checking server status. " "Looks like something is wrong."); pthread_mutex_unlock(&LOCK_instance); return_val= TRUE; /* server is alive */ } Loading Loading @@ -577,10 +578,10 @@ void Instance::kill_instance(int signum) /* 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" \ 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); (const char *) options.instance_name); /* After sucessful hard kill the pidfile need to be removed */ options.unlink_pidfile(); } Loading
server-tools/instance-manager/listener.cc +2 −2 Original line number Diff line number Diff line Loading @@ -280,7 +280,7 @@ int Listener_thread::create_tcp_socket() FD_SET(ip_socket, &read_fds); sockets[num_sockets++]= ip_socket; log_info("accepting connections on ip socket"); log_info("accepting connections on ip socket (port: %d)", (int) im_port); return 0; } Loading Loading @@ -334,7 +334,7 @@ create_unix_socket(struct sockaddr_un &unix_socket_address) /* make sure that instances won't be listening our sockets */ set_no_inherit(unix_socket); log_info("accepting connections on unix socket %s", log_info("accepting connections on unix socket '%s'", unix_socket_address.sun_path); sockets[num_sockets++]= unix_socket; FD_SET(unix_socket, &read_fds); Loading
server-tools/instance-manager/manager.cc +2 −3 Original line number Diff line number Diff line Loading @@ -110,7 +110,7 @@ void stop_all(Guardian_thread *guardian, Thread_registry *registry) Let guardian thread know that it should break it's processing cycle, once it wakes up. */ guardian->request_shutdown(true); guardian->request_shutdown(); /* wake guardian */ pthread_cond_signal(&guardian->COND_guardian); /* stop all threads */ Loading Loading @@ -282,8 +282,7 @@ void manager(const Options &options) { if (!guardian_thread.is_stopped()) { bool stop_instances= true; guardian_thread.request_shutdown(stop_instances); guardian_thread.request_shutdown(); pthread_cond_signal(&guardian_thread.COND_guardian); } else Loading