From 2f46e8cda7f23892fa3ff9fbca31d851a4aae8da Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 2 Nov 2011 09:07:10 -0700 Subject: [PATCH] mon: revamp monitor states starting -> probing, electing some cleanup Signed-off-by: Sage Weil --- src/mon/AuthMonitor.cc | 4 ++-- src/mon/Elector.cc | 4 ++-- src/mon/LogMonitor.cc | 4 ++-- src/mon/MDSMonitor.cc | 4 ++-- src/mon/Monitor.cc | 24 ++++++++---------------- src/mon/Monitor.h | 27 +++++++++++++++++++++------ src/mon/MonmapMonitor.cc | 4 ++-- src/mon/OSDMonitor.cc | 4 ++-- src/mon/PGMonitor.cc | 4 ++-- src/mon/Paxos.cc | 9 ++------- src/mon/PaxosService.cc | 4 ++-- 11 files changed, 47 insertions(+), 45 deletions(-) diff --git a/src/mon/AuthMonitor.cc b/src/mon/AuthMonitor.cc index 6b5bd8ae00f6f..ff9db8d4b26e9 100644 --- a/src/mon/AuthMonitor.cc +++ b/src/mon/AuthMonitor.cc @@ -39,8 +39,8 @@ #define dout_prefix _prefix(_dout, mon, paxos->get_version()) static ostream& _prefix(std::ostream *_dout, Monitor *mon, version_t v) { return *_dout << "mon." << mon->name << "@" << mon->rank - << (mon->is_starting() ? (const char*)"(starting)":(mon->is_leader() ? (const char*)"(leader)":(mon->is_peon() ? (const char*)"(peon)":(const char*)"(?\?)"))) - << ".auth v" << v << " "; + << "(" << mon->get_state_name() + << ").auth v" << v << " "; } ostream& operator<<(ostream& out, AuthMonitor& pm) diff --git a/src/mon/Elector.cc b/src/mon/Elector.cc index 2fe9016a49fb5..95c50112e2985 100644 --- a/src/mon/Elector.cc +++ b/src/mon/Elector.cc @@ -27,8 +27,8 @@ #define dout_prefix _prefix(_dout, mon, epoch) static ostream& _prefix(std::ostream *_dout, Monitor *mon, epoch_t epoch) { return *_dout << "mon." << mon->name << "@" << mon->rank - << (mon->is_starting() ? (const char*)"(starting)":(mon->is_leader() ? (const char*)"(leader)":(mon->is_peon() ? (const char*)"(peon)":(const char*)"(?\?)"))) - << ".elector(" << epoch << ") "; + << "(" << mon->get_state_name() + << ").elector(" << epoch << ") "; } diff --git a/src/mon/LogMonitor.cc b/src/mon/LogMonitor.cc index 2c8db1fa882f6..1794b582e2f7e 100644 --- a/src/mon/LogMonitor.cc +++ b/src/mon/LogMonitor.cc @@ -34,8 +34,8 @@ #define dout_prefix _prefix(_dout, mon, paxos->get_version()) static ostream& _prefix(std::ostream *_dout, Monitor *mon, version_t v) { return *_dout << "mon." << mon->name << "@" << mon->rank - << (mon->is_starting() ? (const char*)"(starting)":(mon->is_leader() ? (const char*)"(leader)":(mon->is_peon() ? (const char*)"(peon)":(const char*)"(?\?)"))) - << ".log v" << v << " "; + << "(" << mon->get_state_name() + << ").log v" << v << " "; } ostream& operator<<(ostream& out, LogMonitor& pm) diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 6b9fe470dc0d0..d4c4c145b106f 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -40,8 +40,8 @@ #define dout_prefix _prefix(_dout, mon, mdsmap) static ostream& _prefix(std::ostream *_dout, Monitor *mon, MDSMap& mdsmap) { return *_dout << "mon." << mon->name << "@" << mon->rank - << (mon->is_starting() ? (const char*)"(starting)":(mon->is_leader() ? (const char*)"(leader)":(mon->is_peon() ? (const char*)"(peon)":(const char*)"(?\?)"))) - << ".mds e" << mdsmap.get_epoch() << " "; + << "(" << mon->get_state_name() + << ").mds e" << mdsmap.get_epoch() << " "; } diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 7b0775edd9b85..94e0247b0902b 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -71,15 +71,7 @@ #define dout_prefix _prefix(_dout, this) static ostream& _prefix(std::ostream *_dout, Monitor *mon) { return *_dout << "mon." << mon->name << "@" << mon->rank - << (mon->is_starting() ? - (const char*)"(starting)" : - (mon->is_leader() ? - (const char*)"(leader)" : - (mon->is_peon() ? - (const char*)"(peon)" : - (const char*)"(?\?)"))) - << " e" << mon->monmap->get_epoch() - << " "; + << "(" << mon->get_state_name() << ") e" << mon->monmap->get_epoch() << " "; } CompatSet get_ceph_mon_feature_compat_set() @@ -112,7 +104,7 @@ Monitor::Monitor(CephContext* cct_, string nm, MonitorStore *s, Messenger *m, Mo auth_supported(cct), store(s), - state(STATE_STARTING), stopping(false), + state(STATE_PROBING), elector(this), leader(0), @@ -215,8 +207,11 @@ void Monitor::bootstrap() { dout(10) << "bootstrap" << dendl; + // note my rank + rank = monmap->get_rank(name); + // reset - state = STATE_STARTING; + state = STATE_PROBING; leader_since = utime_t(); for (vector::iterator p = paxos.begin(); p != paxos.end(); p++) @@ -230,11 +225,9 @@ void Monitor::bootstrap() return; } - rank = monmap->get_rank(name); - - clog.info() << "mon." << name << " calling new monitor election\n"; - // call a new election + state = STATE_ELECTING; + clog.info() << "mon." << name << " calling new monitor election\n"; elector.call_election(); } @@ -688,7 +681,6 @@ void Monitor::send_command(const entity_inst_t& inst, void Monitor::stop_cluster() { dout(0) << "stop_cluster -- initiating shutdown" << dendl; - stopping = true; mdsmon()->do_stop(); } diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index 4285285cdef25..b4f56be338264 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -85,17 +85,32 @@ public: // -- monitor state -- private: - const static int STATE_STARTING = 0; // electing - const static int STATE_LEADER = 1; - const static int STATE_PEON = 2; + enum { + STATE_PROBING = 1, + STATE_ELECTING, + STATE_LEADER, + STATE_PEON + }; int state; - bool stopping; public: - bool is_starting() const { return state == STATE_STARTING; } + static const char *get_state_name(int s) { + switch (s) { + case STATE_PROBING: return "probing"; + case STATE_ELECTING: return "electing"; + case STATE_LEADER: return "leader"; + case STATE_PEON: return "peon"; + default: return "???"; + } + } + const char *get_state_name() { + return get_state_name(state); + } + + bool is_probing() const { return state == STATE_PROBING; } + bool is_electing() const { return state == STATE_ELECTING; } bool is_leader() const { return state == STATE_LEADER; } bool is_peon() const { return state == STATE_PEON; } - bool is_stopping() const { return stopping; } const utime_t &get_leader_since() const; diff --git a/src/mon/MonmapMonitor.cc b/src/mon/MonmapMonitor.cc index ed933466c3cec..4dd730a93f232 100644 --- a/src/mon/MonmapMonitor.cc +++ b/src/mon/MonmapMonitor.cc @@ -31,8 +31,8 @@ #define dout_prefix _prefix(_dout, mon) static ostream& _prefix(std::ostream *_dout, Monitor *mon) { return *_dout << "mon." << mon->name << "@" << mon->rank - << (mon->is_starting() ? (const char*)"(starting)":(mon->is_leader() ? (const char*)"(leader)":(mon->is_peon() ? (const char*)"(peon)":(const char*)"(?\?)"))) - << ".monmap v" << mon->monmap->epoch << " "; + << "(" << mon->get_state_name() + << ").monmap v" << mon->monmap->epoch << " "; } void MonmapMonitor::create_initial(bufferlist& bl) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 6154987252b16..5c8d81de240fa 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -48,8 +48,8 @@ #define dout_prefix _prefix(_dout, mon, osdmap) static ostream& _prefix(std::ostream *_dout, Monitor *mon, OSDMap& osdmap) { return *_dout << "mon." << mon->name << "@" << mon->rank - << (mon->is_starting() ? (const char*)"(starting)":(mon->is_leader() ? (const char*)"(leader)":(mon->is_peon() ? (const char*)"(peon)":(const char*)"(?\?)"))) - << ".osd e" << osdmap.get_epoch() << " "; + << "(" << mon->get_state_name() + << ").osd e" << osdmap.get_epoch() << " "; } diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index 56df2c3a4bc3c..ec6ce398bef01 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -45,8 +45,8 @@ #define dout_prefix _prefix(_dout, mon, pg_map) static ostream& _prefix(std::ostream *_dout, Monitor *mon, PGMap& pg_map) { return *_dout << "mon." << mon->name << "@" << mon->rank - << (mon->is_starting() ? (const char*)"(starting)":(mon->is_leader() ? (const char*)"(leader)":(mon->is_peon() ? (const char*)"(peon)":(const char*)"(?\?)"))) - << ".pg v" << pg_map.version << " "; + << "(" << mon->get_state_name() + << ").pg v" << pg_map.version << " "; } class RatioMonitor : public md_config_obs_t { diff --git a/src/mon/Paxos.cc b/src/mon/Paxos.cc index bc1467d6030e7..885325b7990e1 100644 --- a/src/mon/Paxos.cc +++ b/src/mon/Paxos.cc @@ -28,12 +28,7 @@ static ostream& _prefix(std::ostream *_dout, Monitor *mon, const string& name, i const char *machine_name, int state, version_t first_committed, version_t last_committed) { return *_dout << "mon." << name << "@" << rank - << (mon->is_starting() ? - (const char*)"(starting)" : - (mon->is_leader() ? - (const char*)"(leader)" : - (mon->is_peon() ? - (const char*)"(peon)" : (const char*)"(?\?)"))) + << "(" << mon->get_state_name() << ")" << ".paxos(" << machine_name << " " << Paxos::get_statename(state) << " c " << first_committed << ".." << last_committed << ") "; @@ -825,7 +820,7 @@ void Paxos::restart() void Paxos::dispatch(PaxosServiceMessage *m) { // election in progress? - if (mon->is_starting()) { + if (!mon->is_leader() && !mon->is_peon()) { dout(5) << "election in progress, dropping " << *m << dendl; m->put(); return; diff --git a/src/mon/PaxosService.cc b/src/mon/PaxosService.cc index 545542b3a1ace..4525ae4c5c225 100644 --- a/src/mon/PaxosService.cc +++ b/src/mon/PaxosService.cc @@ -25,8 +25,8 @@ #define dout_prefix _prefix(_dout, mon, paxos, paxos->machine_id) static ostream& _prefix(std::ostream *_dout, Monitor *mon, Paxos *paxos, int machine_id) { return *_dout << "mon." << mon->name << "@" << mon->rank - << (mon->is_starting() ? (const char*)"(starting)":(mon->is_leader() ? (const char*)"(leader)":(mon->is_peon() ? (const char*)"(peon)":(const char*)"(?\?)"))) - << ".paxosservice(" << get_paxos_name(machine_id) << ") "; + << "(" << mon->get_state_name() + << ").paxosservice(" << get_paxos_name(machine_id) << ") "; } const char *PaxosService::get_machine_name() -- 2.39.5