]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: manage paxos_services alloc with unique_ptr 23041/head
authorPatrick Donnelly <pdonnell@redhat.com>
Sat, 14 Jul 2018 01:12:07 +0000 (18:12 -0700)
committerPatrick Donnelly <pdonnell@redhat.com>
Sat, 14 Jul 2018 17:14:38 +0000 (10:14 -0700)
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/mon/Monitor.cc
src/mon/Monitor.h

index c43d5faa644dbc2eaa53c6cae773a88617619a18..00060a12591fc9a9be1008f593f81b9e96d4f49c 100644 (file)
@@ -192,15 +192,15 @@ Monitor::Monitor(CephContext* cct_, string nm, MonitorDBStore *s,
 
   paxos = new Paxos(this, "paxos");
 
-  paxos_service[PAXOS_MDSMAP] = new MDSMonitor(this, paxos, "mdsmap");
-  paxos_service[PAXOS_MONMAP] = new MonmapMonitor(this, paxos, "monmap");
-  paxos_service[PAXOS_OSDMAP] = new OSDMonitor(cct, this, paxos, "osdmap");
-  paxos_service[PAXOS_LOG] = new LogMonitor(this, paxos, "logm");
-  paxos_service[PAXOS_AUTH] = new AuthMonitor(this, paxos, "auth");
-  paxos_service[PAXOS_MGR] = new MgrMonitor(this, paxos, "mgr");
-  paxos_service[PAXOS_MGRSTAT] = new MgrStatMonitor(this, paxos, "mgrstat");
-  paxos_service[PAXOS_HEALTH] = new HealthMonitor(this, paxos, "health");
-  paxos_service[PAXOS_CONFIG] = new ConfigMonitor(this, paxos, "config");
+  paxos_service[PAXOS_MDSMAP].reset(new MDSMonitor(this, paxos, "mdsmap"));
+  paxos_service[PAXOS_MONMAP].reset(new MonmapMonitor(this, paxos, "monmap"));
+  paxos_service[PAXOS_OSDMAP].reset(new OSDMonitor(cct, this, paxos, "osdmap"));
+  paxos_service[PAXOS_LOG].reset(new LogMonitor(this, paxos, "logm"));
+  paxos_service[PAXOS_AUTH].reset(new AuthMonitor(this, paxos, "auth"));
+  paxos_service[PAXOS_MGR].reset(new MgrMonitor(this, paxos, "mgr"));
+  paxos_service[PAXOS_MGRSTAT].reset(new MgrStatMonitor(this, paxos, "mgrstat"));
+  paxos_service[PAXOS_HEALTH].reset(new HealthMonitor(this, paxos, "health"));
+  paxos_service[PAXOS_CONFIG].reset(new ConfigMonitor(this, paxos, "config"));
 
   config_key_service = new ConfigKeyService(this, paxos);
 
@@ -228,8 +228,7 @@ Monitor::~Monitor()
 {
   op_tracker.on_shutdown();
 
-  for (vector<PaxosService*>::iterator p = paxos_service.begin(); p != paxos_service.end(); ++p)
-    delete *p;
+  paxos_service.clear();
   delete config_key_service;
   delete paxos;
   assert(session_map.sessions.empty());
@@ -850,8 +849,8 @@ void Monitor::init_paxos()
   paxos->init();
 
   // init services
-  for (int i = 0; i < PAXOS_NUM; ++i) {
-    paxos_service[i]->init();
+  for (auto& svc : paxos_service) {
+    svc->init();
   }
 
   refresh_from_paxos(NULL);
@@ -875,11 +874,11 @@ void Monitor::refresh_from_paxos(bool *need_bootstrap)
     dout(10) << __func__ << " no cluster_fingerprint" << dendl;
   }
 
-  for (int i = 0; i < PAXOS_NUM; ++i) {
-    paxos_service[i]->refresh(need_bootstrap);
+  for (auto& svc : paxos_service) {
+    svc->refresh(need_bootstrap);
   }
-  for (int i = 0; i < PAXOS_NUM; ++i) {
-    paxos_service[i]->post_refresh();
+  for (auto& svc : paxos_service) {
+    svc->post_refresh();
   }
   load_metadata();
 }
@@ -941,8 +940,9 @@ void Monitor::shutdown()
 
   // clean up
   paxos->shutdown();
-  for (vector<PaxosService*>::iterator p = paxos_service.begin(); p != paxos_service.end(); ++p)
-    (*p)->shutdown();
+  for (auto& svc : paxos_service) {
+    svc->shutdown();
+  }
 
   finish_contexts(g_ceph_context, waitfor_quorum, -ECANCELED);
   finish_contexts(g_ceph_context, maybe_wait_for_quorum, -ECANCELED);
@@ -1120,8 +1120,9 @@ void Monitor::_reset()
 
   paxos->restart();
 
-  for (vector<PaxosService*>::iterator p = paxos_service.begin(); p != paxos_service.end(); ++p)
-    (*p)->restart();
+  for (auto& svc : paxos_service) {
+    svc->restart();
+  }
 }
 
 
@@ -1132,8 +1133,9 @@ set<string> Monitor::get_sync_targets_names()
 {
   set<string> targets;
   targets.insert(paxos->get_name());
-  for (int i = 0; i < PAXOS_NUM; ++i)
-    paxos_service[i]->get_store_prefixes(targets);
+  for (auto& svc : paxos_service) {
+    svc->get_store_prefixes(targets);
+  }
   ConfigKeyService *config_key_service_ptr = dynamic_cast<ConfigKeyService*>(config_key_service);
   assert(config_key_service_ptr);
   config_key_service_ptr->get_store_prefixes(targets);
@@ -1953,11 +1955,11 @@ void Monitor::_finish_svc_election()
 {
   assert(state == STATE_LEADER || state == STATE_PEON);
 
-  for (auto p : paxos_service) {
+  for (auto& svc : paxos_service) {
     // we already called election_finished() on monmon(); avoid callig twice
-    if (state == STATE_LEADER && p == monmon())
+    if (state == STATE_LEADER && svc.get() == monmon())
       continue;
-    p->election_finished();
+    svc->election_finished();
   }
 }
 
@@ -2974,7 +2976,7 @@ void Monitor::handle_command(MonOpRequestRef op)
     Formatter *f = Formatter::create("json");
 
     std::vector<MonCommand> commands = static_cast<MgrMonitor*>(
-        paxos_service[PAXOS_MGR])->get_command_descs();
+        paxos_service[PAXOS_MGR].get())->get_command_descs();
 
     for (auto& c : leader_mon_commands) {
       commands.push_back(c);
@@ -5399,9 +5401,9 @@ void Monitor::tick()
   }
 
 
-  for (vector<PaxosService*>::iterator p = paxos_service.begin(); p != paxos_service.end(); ++p) {
-    (*p)->tick();
-    (*p)->maybe_trim();
+  for (auto& svc : paxos_service) {
+    svc->tick();
+    svc->maybe_trim();
   }
   
   // trim sessions
index a7e200815fd27c169e19c8c58619fd253d8e0af4..1e6faa0a20a68ceab20245094c5a59ae84bd1a5f 100644 (file)
@@ -608,42 +608,42 @@ public:
   /**
    * Vector holding the Services serviced by this Monitor.
    */
-  vector<PaxosService*> paxos_service;
+  vector<std::unique_ptr<PaxosService>> paxos_service;
 
   class MDSMonitor *mdsmon() {
-    return (class MDSMonitor *)paxos_service[PAXOS_MDSMAP];
+    return (class MDSMonitor *)paxos_service[PAXOS_MDSMAP].get();
   }
 
   class MonmapMonitor *monmon() {
-    return (class MonmapMonitor *)paxos_service[PAXOS_MONMAP];
+    return (class MonmapMonitor *)paxos_service[PAXOS_MONMAP].get();
   }
 
   class OSDMonitor *osdmon() {
-    return (class OSDMonitor *)paxos_service[PAXOS_OSDMAP];
+    return (class OSDMonitor *)paxos_service[PAXOS_OSDMAP].get();
   }
 
   class AuthMonitor *authmon() {
-    return (class AuthMonitor *)paxos_service[PAXOS_AUTH];
+    return (class AuthMonitor *)paxos_service[PAXOS_AUTH].get();
   }
 
   class LogMonitor *logmon() {
-    return (class LogMonitor*) paxos_service[PAXOS_LOG];
+    return (class LogMonitor*) paxos_service[PAXOS_LOG].get();
   }
 
   class MgrMonitor *mgrmon() {
-    return (class MgrMonitor*) paxos_service[PAXOS_MGR];
+    return (class MgrMonitor*) paxos_service[PAXOS_MGR].get();
   }
 
   class MgrStatMonitor *mgrstatmon() {
-    return (class MgrStatMonitor*) paxos_service[PAXOS_MGRSTAT];
+    return (class MgrStatMonitor*) paxos_service[PAXOS_MGRSTAT].get();
   }
 
   class HealthMonitor *healthmon() {
-    return (class HealthMonitor*) paxos_service[PAXOS_HEALTH];
+    return (class HealthMonitor*) paxos_service[PAXOS_HEALTH].get();
   }
 
   class ConfigMonitor *configmon() {
-    return (class ConfigMonitor*) paxos_service[PAXOS_CONFIG];
+    return (class ConfigMonitor*) paxos_service[PAXOS_CONFIG].get();
   }
 
   friend class Paxos;