mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix for the following bugs:
- BUG#22306: STOP INSTANCE can not be applied for instances in Crashed, Failed and Abandoned; - BUG#23476: DROP INSTANCE does not work - BUG#23215: STOP INSTANCE takes too much time BUG#22306: The problem was that STOP INSTANCE checked that mysqld is up and running. If it was not so, STOP INSTANCE reported an error. Now, STOP INSTANCE reports an error if the instance has been started (mysqld can be down). BUG#23476: The problem was that DROP INSTANCE tried to stop inactive instance. The fix is trivial. BUG#23215: The problem was that locks were not acquired properly, so the instance-monitoring thread could not acquire the mutex, holded by the query-processing thread. The fix is to simplify locking scheme by moving instance-related information to Instance-class out of Guardian-class. This allows to get rid of storing a separate list of Instance-information in Guardian and keeping it synchronized with the original list in Instance_map. server-tools/instance-manager/commands.cc: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Ensure, that Instance Map and Instance are locked in the proper order; 4. Polishing. server-tools/instance-manager/commands.h: 1. Introduce Instance_cmd class -- base class for the commands that deal with the one instance; 2. Remove Instance_map argument from command constructors; 3. Polishing. server-tools/instance-manager/guardian.cc: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/guardian.h: 1. Move "extended" instance information to the Instance-class. That allows to get rid of storing instance-related container and data in Guardian class, that significantly simplifies locking schema. 2. Polishing. server-tools/instance-manager/instance.cc: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance.h: 1. Move "extended" instance information to the Instance-class. 2. Introduce new state STOPPED to mark that guarded instance is stopped and should not be restarted by Guardian. 3. Polishing. server-tools/instance-manager/instance_map.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_map.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/instance_options.h: Polishing. server-tools/instance-manager/manager.cc: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/manager.h: 1. Move flush_instances() from Instance_map to Manager. 2. Polishing. server-tools/instance-manager/user_map.cc: Polishing.
This commit is contained in:
@ -19,6 +19,7 @@
|
||||
#if defined(__GNUC__) && defined(USE_PRAGMA_INTERFACE)
|
||||
#pragma interface
|
||||
#endif
|
||||
|
||||
#include <my_global.h>
|
||||
|
||||
class Guardian;
|
||||
@ -30,8 +31,12 @@ class Manager
|
||||
{
|
||||
public:
|
||||
static int main();
|
||||
|
||||
static bool flush_instances();
|
||||
|
||||
public:
|
||||
/**
|
||||
These methods return a non-zero value only for the duration
|
||||
These methods return a non-NULL value only for the duration
|
||||
of main().
|
||||
*/
|
||||
static Instance_map *get_instance_map() { return p_instance_map; }
|
||||
@ -39,6 +44,7 @@ public:
|
||||
static Thread_registry *get_thread_registry() { return p_thread_registry; }
|
||||
static User_map *get_user_map() { return p_user_map; }
|
||||
|
||||
public:
|
||||
#ifndef __WIN__
|
||||
static bool is_linux_threads() { return linux_threads; }
|
||||
#endif // __WIN__
|
||||
|
Reference in New Issue
Block a user