Persist _pico_replicaset.promotion_vclock
Данный тикет является частью #856 (closed) "Governor refactoring" (epic).
В репликасет необходимо добавить новое поле promotion_vclock — это vclock с которого current_master переходит в read_only=false. Новое поле используется для бережного переключения мастера в репликасете, а также для удаления реплики после неудачного аварийного переключения.
Поле должно изменяться атомарно вместе с current_master_id.
Концепт алгоритма:
Консистентное переключение (governor step ReplicasetMasterConsistentSwitchover)
-
pool.call
current_master_id
box.cfg.read_only(true); return vclock1
UPDATE _pico_replicaset SET current_master_id = ..., promotion_vclock = vclock1
-
pool.call
target_master_id
proc_wait_vclock(vclock1); box.cfg.read_only(false)
Аварийное переключение (governor step ReplicasetMasterReplaceFailed)
UPDATE _pico_replicaset SET target_master_id = ... // choose a new one
-
pool.call
target_master_id
return vclock
UPDATE _pico_replicaset SET current_master_id = ..., promotion_vclock = ... // data loss
-
pool.call
target_master_id
box.cfg.read_only(false)