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);
{
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());
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);
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();
}
// 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);
paxos->restart();
- for (vector<PaxosService*>::iterator p = paxos_service.begin(); p != paxos_service.end(); ++p)
- (*p)->restart();
+ for (auto& svc : paxos_service) {
+ svc->restart();
+ }
}
{
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);
{
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();
}
}
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);
}
- 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
/**
* 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;