]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: fix 'mon metadata' for lone monitors
authorJohn Spray <john.spray@redhat.com>
Thu, 12 May 2016 14:49:23 +0000 (15:49 +0100)
committerLoic Dachary <ldachary@redhat.com>
Wed, 10 Aug 2016 10:28:59 +0000 (12:28 +0200)
Previously, writing to the store was only
triggered when MMonMetadata was received
from peers, so if you had a single mon then
you would always get ENOENT from "mon metadata"

Fixes: http://tracker.ceph.com/issues/15866
Signed-off-by: John Spray <john.spray@redhat.com>
(cherry picked from commit 93ab00c77059e93b52ac4caa703e259944be1d1e)

src/mon/Monitor.cc
src/mon/Monitor.h

index 590b2bcd837327cc28203b0f62e6d757485d96d2..9ba3231088252b9040d7e08cf87d5c6fce4a617d 100644 (file)
@@ -1916,7 +1916,10 @@ void Monitor::win_election(epoch_t epoch, set<int>& active, uint64_t features,
     do_health_to_clog_interval();
     scrub_event_start();
   }
-  collect_sys_info(&metadata[rank], g_ceph_context);
+
+  Metadata my_meta;
+  collect_sys_info(&my_meta, g_ceph_context);
+  update_mon_metadata(rank, my_meta);
 }
 
 void Monitor::lose_election(epoch_t epoch, set<int> &q, int l, uint64_t features) 
@@ -4431,7 +4434,7 @@ void Monitor::handle_mon_metadata(MonOpRequestRef op)
 
 void Monitor::update_mon_metadata(int from, const Metadata& m)
 {
-  metadata[from] = m;
+  pending_metadata[from] = m;
 
   bufferlist bl;
   int err = store->get(MONITOR_STORE_PREFIX, "last_metadata", bl);
@@ -4439,12 +4442,12 @@ void Monitor::update_mon_metadata(int from, const Metadata& m)
   if (!err) {
     bufferlist::iterator iter = bl.begin();
     ::decode(last_metadata, iter);
-    metadata.insert(last_metadata.begin(), last_metadata.end());
+    pending_metadata.insert(last_metadata.begin(), last_metadata.end());
   }
 
   MonitorDBStore::TransactionRef t = paxos->get_pending_transaction();
   bl.clear();
-  ::encode(metadata, bl);
+  ::encode(pending_metadata, bl);
   t->put(MONITOR_STORE_PREFIX, "last_metadata", bl);
   paxos->trigger_propose();
 }
index add1c3ed676096ee52c9c49b0d1c51cb429ef693..fadd316658bb786db575de79ea1b53acc5cd3a44 100644 (file)
@@ -717,7 +717,9 @@ public:
   void handle_mon_metadata(MonOpRequestRef op);
   int get_mon_metadata(int mon, Formatter *f, ostream& err);
   int print_nodes(Formatter *f, ostream& err);
-  map<int, Metadata> metadata;
+
+  // Accumulate metadata across calls to update_mon_metadata
+  map<int, Metadata> pending_metadata;
 
   /**
    *