• unknown's avatar
    Fix for the following bugs: · 23776f53
    unknown authored
      - 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.
    23776f53
instance_map.h 2.39 KB