Skip to content

Governor refactoring

Данный тикет призван объединить все грядущие изменения в говерноре и в модели состояний. Глобальная цель итих изменений - получить новую версию кластер менеджера, в котором проработаны следующие пользовательские сценарии:

  • Бережное выключение инстансов (graceful shutdown)
  • Бережное переключение мастера репликасета
  • Аварийное переключение мастера репликасета
  • Возвращение старого узла после аварийного выключения. Причем заранее неизвестно, удастся ли его вернуть. Если нет то он подлежит автоматическому удалению
  • Контролируемое управление потерей данных: удалить инстанс после конфликта репликации, пересоздать бакеты после удаления репликасета целиком
  • Удаление инстанса из репликасета
  • Удаление репликасета целиком

В скоуп данного эпика НЕ входит:

  • Имплементация пересоздания бакетов взамен удаленного репликасета выносится в фоллоуап. В скоупе данного тикета только дизайн
  • Проработка дизайна CLI picodata shutdown / remove_instance / remove_replicaset. Скоуп по дизайну ограничен схемой системных таблиц и моделью состояний инстансов

В рамках данного эпика в качестве основного интерфейса рассматривается SQL запросы от Администратора СУБД (admin):

  • UPDATE _pico_instance SET target_state = 'Shutdown'
  • UPDATE _pico_replicaset SET target_master_id = 'i2'
  • И другие

Все пользовательские сценарии должны быть подробно растолкованы в руководстве пользователя, в т.ч. все SQL запросы должны работать по принципу ctrl+c, ctrl+v

План мероприятий

  1. Persist _pico_replicaset.promotion_vclock (#857 - closed)
  2. Get rid of state Replicated in favor of replica... (#864 - closed)
  3. (#1054) Добавить state Shutdown (graceful)
  4. Избавиться от состояния у репликасета replicaset.state (не хватает пояснения, для чего это нужно делать)
  5. ???
  6. Profit

Идеи второго плана

  • Новая настройка _pico_propetry sentinel_enabled
  • Переименовать state Expelled -> Removed, picodata expel -> picodata remove
  • Как реагировать на заведомо деструктивные действия админа, например UPDATE _pico_instance SET current_state = "Invalid"? В рамках текущего эпика все подобные сценарии можно трактовать как unimplemented!() в Rust.
Edited by Georgy Moshkin
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information