summaryrefslogtreecommitdiff
path: root/server-tools/instance-manager/instance.h
diff options
context:
space:
mode:
Diffstat (limited to 'server-tools/instance-manager/instance.h')
-rw-r--r--server-tools/instance-manager/instance.h171
1 files changed, 134 insertions, 37 deletions
diff --git a/server-tools/instance-manager/instance.h b/server-tools/instance-manager/instance.h
index 412d01acc46..5bdd8d61d2f 100644
--- a/server-tools/instance-manager/instance.h
+++ b/server-tools/instance-manager/instance.h
@@ -30,7 +30,7 @@ class Instance_map;
class Thread_registry;
-/*
+/**
Instance_name -- the class represents instance name -- a string of length
less than MAX_INSTANCE_NAME_SIZE.
@@ -68,72 +68,127 @@ private:
class Instance
{
public:
- /*
- The following two constants defines name of the default mysqld-instance
- ("mysqld").
+ /* States of an instance. */
+ enum enum_instance_state
+ {
+ STOPPED,
+ NOT_STARTED,
+ STARTING,
+ STARTED,
+ JUST_CRASHED,
+ CRASHED,
+ CRASHED_AND_ABANDONED,
+ STOPPING
+ };
+
+public:
+ /**
+ The constant defines name of the default mysqld-instance ("mysqld").
*/
static const LEX_STRING DFLT_INSTANCE_NAME;
public:
- /*
- The operation is intended to check whether string is a well-formed
- instance name or not.
- */
static bool is_name_valid(const LEX_STRING *name);
-
- /*
- The operation is intended to check if the given instance name is
- mysqld-compatible or not.
- */
static bool is_mysqld_compatible_name(const LEX_STRING *name);
public:
Instance();
-
~Instance();
+
bool init(const LEX_STRING *name_arg);
bool complete_initialization();
+public:
+ bool is_active();
+
bool is_mysqld_running();
- int start();
- int stop();
- /* send a signal to the instance */
+
+ bool start_mysqld();
+ bool stop_mysqld();
void kill_mysqld(int signo);
- bool is_crashed();
- void set_crash_flag_n_wake_all();
- /*
+ void lock();
+ void unlock();
+
+ const char *get_state_name();
+
+ void reset_stat();
+
+public:
+ /**
The operation is intended to check if the instance is mysqld-compatible
or not.
*/
inline bool is_mysqld_compatible() const;
- /*
+ /**
The operation is intended to check if the instance is configured properly
or not. Misconfigured instances are not managed.
*/
inline bool is_configured() const;
+ /**
+ The operation returns TRUE if the instance is guarded and FALSE otherwise.
+ */
+ inline bool is_guarded() const;
+
+ /**
+ The operation returns name of the instance.
+ */
inline const LEX_STRING *get_name() const;
+ /**
+ The operation returns the current state of the instance.
+
+ NOTE: At the moment should be used only for guarded instances.
+ */
+ inline enum_instance_state get_state() const;
+
+ /**
+ The operation changes the state of the instance.
+
+ NOTE: At the moment should be used only for guarded instances.
+ TODO: Make private.
+ */
+ inline void set_state(enum_instance_state new_state);
+
+ /**
+ The operation returns crashed flag.
+ */
+ inline bool is_crashed();
+
public:
- enum { DEFAULT_SHUTDOWN_DELAY= 35 };
+ /**
+ This attributes contains instance options.
+
+ TODO: Make private.
+ */
Instance_options options;
private:
- /* This attributes is a flag, specifies if the instance has been crashed. */
+ /**
+ monitoring_thread_active is TRUE if there is a thread that monitors the
+ corresponding mysqld-process.
+ */
+ bool monitoring_thread_active;
+
+ /**
+ crashed is TRUE when corresponding mysqld-process has been died after
+ start.
+ */
bool crashed;
- /*
- This attribute specifies if the instance is configured properly or not.
+ /**
+ configured is TRUE when the instance is configured and FALSE otherwise.
Misconfigured instances are not managed.
*/
bool configured;
/*
- This attribute specifies whether the instance is mysqld-compatible or not.
- Mysqld-compatible instances can contain only mysqld-specific options.
- At the moment an instance is mysqld-compatible if its name is "mysqld".
+ mysqld_compatible specifies whether the instance is mysqld-compatible
+ or not. Mysqld-compatible instances can contain only mysqld-specific
+ options. At the moment an instance is mysqld-compatible if its name is
+ "mysqld".
The idea is that [mysqld] section should contain only mysqld-specific
options (no Instance Manager-specific options) to be readable by mysqld
@@ -142,18 +197,36 @@ private:
bool mysqld_compatible;
/*
- Mutex protecting the instance. Currently we use it to avoid the
- double start of the instance. This happens when the instance is starting
- and we issue the start command once more.
+ Mutex protecting the instance.
*/
pthread_mutex_t LOCK_instance;
- /*
- This condition variable is used to wake threads waiting for instance to
- stop in Instance::stop()
- */
- pthread_cond_t COND_instance_stopped;
- void remove_pid();
+private:
+ /* Guarded-instance attributes. */
+
+ /* state of an instance (i.e. STARTED, CRASHED, etc.) */
+ enum_instance_state state;
+
+public:
+ /* the amount of attemts to restart instance (cleaned up at success) */
+ int restart_counter;
+
+ /* triggered at a crash */
+ time_t crash_moment;
+
+ /* General time field. Used to provide timeouts (at shutdown and restart) */
+ time_t last_checked;
+
+private:
+ static const char *get_instance_state_name(enum_instance_state state);
+
+private:
+ void remove_pid();
+
+ bool wait_for_stop();
+
+private:
+ friend class Instance_monitor;
};
@@ -169,9 +242,33 @@ inline bool Instance::is_configured() const
}
+inline bool Instance::is_guarded() const
+{
+ return !options.nonguarded;
+}
+
+
inline const LEX_STRING *Instance::get_name() const
{
return &options.instance_name;
}
+
+inline Instance::enum_instance_state Instance::get_state() const
+{
+ return state;
+}
+
+
+inline void Instance::set_state(enum_instance_state new_state)
+{
+ state= new_state;
+}
+
+
+inline bool Instance::is_crashed()
+{
+ return crashed;
+}
+
#endif /* INCLUDES_MYSQL_INSTANCE_MANAGER_INSTANCE_H */