First of all, we must find a monmap to backup. The newest version.
Secondly, we must make sure we back it up before clearing the store.
Finally, we must make sure that we don't remove said backup while
clearing the store; otherwise, we would be out of a backup monmap if the
sync happened to fail (and if the monitor happened to be killed before a
new sync had finished).
This patch makes sure these conditions are met.
Fixes: #5256 (partially)
Backport: cuttlefish
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
sync_role = SYNC_ROLE_REQUESTER;
sync_state = SYNC_STATE_START;
+ // First init the store (grab the monmap and all that) and only then
+ // clear the store (except for the mon_sync prefix). This avoids that
+ // we end up losing the monmaps from the store.
+ sync_store_init();
+
// clear the underlying store, since we are starting a whole
// sync process from the bare beginning.
set<string> targets = get_sync_targets_names();
- targets.insert("mon_sync");
store->clear(targets);
- sync_store_init();
-
// assume 'other' as the leader. We will update the leader once we receive
// a reply to the sync start.
entity_inst_t leader = other;