// pointers into our mgr_module_options (which we just rebuilt).
mon->configmon()->load_config();
- // feed our pet MgrClient
+ if (!mon->is_init()) {
+ // feed our pet MgrClient, unless we are in Monitor::[pre]init()
+ prime_mgr_client();
+ }
+}
+
+void MgrMonitor::prime_mgr_client()
+{
+ dout(10) << __func__ << dendl;
mon->mgr_client.ms_dispatch(new MMgrMap(map));
}
version_t get_trim_to() const override;
+ void prime_mgr_client();
+
void create_initial() override;
void get_store_prefixes(std::set<string>& s) const override;
void update_from_paxos(bool *need_bootstrap) override;
gss_ktfile_client(cct->_conf.get_val<std::string>("gss_ktab_client_file")),
store(s),
- state(STATE_PROBING),
-
elector(this),
required_features(0),
leader(0),
// i'm ready!
messenger->add_dispatcher_tail(this);
+ // kickstart pet mgrclient
mgr_client.init();
mgr_messenger->add_dispatcher_tail(&mgr_client);
mgr_messenger->add_dispatcher_tail(this); // for auth ms_* calls
+ mgrmon()->prime_mgr_client();
+ state = STATE_PROBING;
bootstrap();
// add features of myself into feature_map
session_map.feature_map.add_mon(con_self->get_features());
// -- monitor state --
private:
enum {
- STATE_PROBING = 1,
+ STATE_INIT = 1,
+ STATE_PROBING,
STATE_SYNCHRONIZING,
STATE_ELECTING,
STATE_LEADER,
STATE_PEON,
STATE_SHUTDOWN
};
- int state;
+ int state = STATE_INIT;
public:
static const char *get_state_name(int s) {
return get_state_name(state);
}
+ bool is_init() const { return state == STATE_INIT; }
bool is_shutdown() const { return state == STATE_SHUTDOWN; }
bool is_probing() const { return state == STATE_PROBING; }
bool is_synchronizing() const { return state == STATE_SYNCHRONIZING; }