messenger(m),
lock("Monitor::lock"),
timer(cct_, lock),
+ has_ever_joined(false),
logger(NULL), cluster_logger(NULL), cluster_logger_registered(false),
monmap(map),
clog(cct_, messenger, monmap, NULL, LogClient::FLAG_MON),
dout(10) << "features " << features << dendl;
}
+ // have we ever joined a quorum?
+ has_ever_joined = store->exists_bl_ss("joined");
+
// init paxos
for (int i = 0; i < PAXOS_NUM; ++i) {
paxos[i]->init();
int newrank = monmap->get_rank(messenger->get_myaddr());
if (newrank < 0 && rank >= 0) {
// was i ever part of the quorum?
- if (store->exists_bl_ss("joined")) {
+ if (has_ever_joined) {
dout(0) << " removed from monmap, suicide." << dendl;
exit(0);
}
resend_routed_requests();
update_logger();
register_cluster_logger();
-
- // make note of the fact that i was, once, part of the quorum.
- store->put_int(1, "joined");
}
Mutex lock;
SafeTimer timer;
+ /// true if we have ever joined a quorum. if false, we are either a
+ /// new cluster, a newly joining monitor, or a just-upgraded
+ /// monitor.
+ bool has_ever_joined;
+
PerfCounters *logger, *cluster_logger;
bool cluster_logger_registered;
pending_map.encode(bl, CEPH_FEATURES_ALL);
}
+void MonmapMonitor::on_active()
+{
+ if (paxos->get_version() >= 1 && !mon->has_ever_joined) {
+ // make note of the fact that i was, once, part of the quorum.
+ dout(10) << "noting that i was, once, part of an active quorum." << dendl;
+ mon->store->put_int(1, "joined");
+ mon->has_ever_joined = true;
+ }
+
+ if (mon->is_leader())
+ mon->clog.info() << "monmap " << *mon->monmap << "\n";
+}
+
bool MonmapMonitor::preprocess_query(PaxosServiceMessage *m)
{
switch (m->get_type()) {
return false;
}
-void MonmapMonitor::on_active()
-{
- if (mon->is_leader())
- mon->clog.info() << "monmap " << *mon->monmap << "\n";
-}
-
bool MonmapMonitor::prepare_command(MMonCommand *m)
{
stringstream ss;