diff options
author | unknown <petr@mysql.com> | 2005-02-11 14:21:59 +0300 |
---|---|---|
committer | unknown <petr@mysql.com> | 2005-02-11 14:21:59 +0300 |
commit | dce2554f9130920ab18e4e31432df7d6ca165ee0 (patch) | |
tree | 5a46c104b5146373b9e754ea5691cfa5ef3d2fcf /server-tools/instance-manager/guardian.h | |
parent | 79ba407d64ad4387b7b279f80a7bf95e68414df5 (diff) | |
download | mariadb-git-dce2554f9130920ab18e4e31432df7d6ca165ee0.tar.gz |
Post-review fixes + some bugs fixed + several minor features
BitKeeper/deleted/.del-client_func.c~3476a8a85cbd3c29:
Delete: server-tools/instance-manager/client_func.c
server-tools/instance-manager/Makefile.am:
clien_func removed
server-tools/instance-manager/buffer.cc:
several methods added
server-tools/instance-manager/buffer.h:
Some error-handling fixes.
server-tools/instance-manager/commands.cc:
check for Buffer errors
server-tools/instance-manager/guardian.cc:
Guardian rewiriten. Not it works in a finite state machine-way.
server-tools/instance-manager/guardian.h:
Appropriate (to .cc) changes in the header + some comment added
server-tools/instance-manager/instance.cc:
added proxy thread to monitor instance. Two kinds of stop() now -- stop() and kill_instance which
only sends a signal
server-tools/instance-manager/instance.h:
appropriate changes
server-tools/instance-manager/instance_map.cc:
cleanup
server-tools/instance-manager/instance_map.h:
cleanup
server-tools/instance-manager/instance_options.cc:
Caching of the pid-file-name is added. some comments added
server-tools/instance-manager/instance_options.h:
cleanup
server-tools/instance-manager/listener.cc:
listener my_thread_init added (though it doesn't use any mysys functions). Just in case
server-tools/instance-manager/manager.cc:
SIGCHLD handler removed. now instance monitoring is implemented through proxy threads. This is to work nicely
with LinuxThreads
server-tools/instance-manager/options.cc:
added option to create a password file entry (this was implemented by Sergei Vojtovich)
server-tools/instance-manager/parse.cc:
inline function get_word moved to the header
server-tools/instance-manager/parse.h:
get_word moved here to use form parse_output
server-tools/instance-manager/parse_output.cc:
get_word() clone removed. now looking through the output linewise
server-tools/instance-manager/protocol.cc:
Buffer error chech added
server-tools/instance-manager/user_map.cc:
typo fixed
Diffstat (limited to 'server-tools/instance-manager/guardian.h')
-rw-r--r-- | server-tools/instance-manager/guardian.h | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/server-tools/instance-manager/guardian.h b/server-tools/instance-manager/guardian.h index bf96436a636..0aec00099de 100644 --- a/server-tools/instance-manager/guardian.h +++ b/server-tools/instance-manager/guardian.h @@ -19,6 +19,7 @@ #include <my_global.h> #include <my_sys.h> #include <my_list.h> +#include "thread_registry.h" #ifdef __GNUC__ #pragma interface @@ -26,9 +27,8 @@ class Instance; class Instance_map; - -#include "thread_registry.h" -#include "instance.h" +class Thread_registry; +struct GUARD_NODE; C_MODE_START @@ -36,19 +36,11 @@ pthread_handler_decl(guardian, arg); C_MODE_END -typedef struct st_guard_node -{ - Instance *instance; - uint restart_counter; - time_t crash_moment; -} GUARD_NODE; - - struct Guardian_thread_args { Thread_registry &thread_registry; Instance_map *instance_map; - uint monitoring_interval; + int monitoring_interval; Guardian_thread_args(Thread_registry &thread_registry_arg, Instance_map *instance_map_arg, @@ -72,36 +64,41 @@ public: Instance_map *instance_map_arg, uint monitoring_interval_arg); ~Guardian_thread(); + /* Main funtion of the thread */ void run(); - int start(); - void shutdown(); - void request_stop_instances(); + /* Initialize list of guarded instances */ + int init(); + /* Request guardian shutdown. Stop instances if needed */ + void request_shutdown(bool stop_instances); + /* Start instance protection */ int guard(Instance *instance); + /* Stop instance protection */ int stop_guard(Instance *instance); - bool is_stopped; + /* Returns true if guardian thread is stopped */ + int is_stopped(); public: pthread_cond_t COND_guardian; private: - int stop_instances(); - int add_instance_to_list(Instance *instance, LIST **list); - void move_to_list(LIST **from, LIST **to); + /* Prepares Guardian shutdown. Stops instances is needed */ + int stop_instances(bool stop_instances_arg); + /* check instance state and act accordingly */ + void process_instance(Instance *instance, GUARD_NODE *current_node, + LIST **guarded_instances, LIST *elem); + int stopped; private: + /* states of an instance */ + enum { NOT_STARTED= 1, STARTING, STARTED, JUST_CRASHED, CRASHED, + CRASHED_AND_ABANDONED, STOPPING }; pthread_mutex_t LOCK_guardian; Thread_info thread_info; LIST *guarded_instances; - LIST *starting_instances; MEM_ROOT alloc; enum { MEM_ROOT_BLOCK_SIZE= 512 }; /* this variable is set to TRUE when we want to stop Guardian thread */ - bool shutdown_guardian; - /* - This var is usually set together with shutdown_guardian. this way we - request guardian to shut down all instances before termination - */ - bool request_stop; + bool shutdown_requested; }; #endif /* INCLUDES_MYSQL_INSTANCE_MANAGER_GUARDIAN_H */ |