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
План мероприятий
- Persist _pico_replicaset.promotion_vclock (#857 - closed)
- Get rid of state Replicated in favor of replica... (#864 - closed)
-
(#1054) Добавить state Shutdown (graceful) - Избавиться от состояния у репликасета
replicaset.state(не хватает пояснения, для чего это нужно делать) - ???
- Profit
Идеи второго плана
- Новая настройка
_pico_propetrysentinel_enabled - Переименовать state Expelled -> Removed, picodata expel -> picodata remove
- Как реагировать на заведомо деструктивные действия админа, например
UPDATE _pico_instance SET current_state = "Invalid"? В рамках текущего эпика все подобные сценарии можно трактовать какunimplemented!()в Rust.
Edited by Georgy Moshkin