From: Patrick Donnelly Date: Sat, 14 Jul 2018 01:12:07 +0000 (-0700) Subject: mon: manage paxos_services alloc with unique_ptr X-Git-Tag: v14.0.1~823^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=428ca291b05685458cb9bd510484715e4ce2f638;p=ceph.git mon: manage paxos_services alloc with unique_ptr Signed-off-by: Patrick Donnelly --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index c43d5faa644d..00060a12591f 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -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::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::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::iterator p = paxos_service.begin(); p != paxos_service.end(); ++p) - (*p)->restart(); + for (auto& svc : paxos_service) { + svc->restart(); + } } @@ -1132,8 +1133,9 @@ set Monitor::get_sync_targets_names() { set 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(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 commands = static_cast( - 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::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 diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index a7e200815fd2..1e6faa0a20a6 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -608,42 +608,42 @@ public: /** * Vector holding the Services serviced by this Monitor. */ - vector paxos_service; + vector> 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;