From: Joao Eduardo Luis Date: Wed, 19 Jun 2013 01:50:45 +0000 (+0100) Subject: mon: Monitor: make sure we backup a monmap during sync start X-Git-Tag: v0.65~33 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5e6dc4ea21b452e34599678792cd36ce1ba3edb3;p=ceph.git mon: Monitor: make sure we backup a monmap during sync start 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 Reviewed-by: Sage Weil --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 9e910f52e7a..3465b3ae1ba 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -1462,15 +1462,17 @@ void Monitor::sync_start(entity_inst_t &other) 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 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;