]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Monitor: make sure we backup a monmap during sync start
authorJoao Eduardo Luis <joao.luis@inktank.com>
Wed, 19 Jun 2013 01:50:45 +0000 (02:50 +0100)
committerSage Weil <sage@inktank.com>
Wed, 19 Jun 2013 05:01:03 +0000 (22:01 -0700)
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>
(cherry picked from commit 5e6dc4ea21b452e34599678792cd36ce1ba3edb3)

src/mon/Monitor.cc

index 9543885deaa46e706891c41b02c26022ce6c3eff..5b6f8786642cd2b66dca4e5f8019cfec33e59b81 100644 (file)
@@ -1453,15 +1453,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<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;