if (!features.incompat.contains(CEPH_MON_FEATURE_INCOMPAT_GV) &&
(quorum_features & CEPH_FEATURE_MON_GV)) {
require_gv_ondisk();
+ require_gv_onwire();
}
for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++)
if (!features.incompat.contains(CEPH_MON_FEATURE_INCOMPAT_GV) &&
(quorum_features & CEPH_FEATURE_MON_GV)) {
require_gv_ondisk();
+ require_gv_onwire();
}
-
}
}
write_features();
}
+void Monitor::require_gv_onwire()
+{
+ dout(10) << "require_gv_onwire" << dendl;
+ // require protocol feature bit of my peers
+ Messenger::Policy p = messenger->get_policy(entity_name_t::TYPE_MON);
+ p.features_required |= CEPH_FEATURE_MON_GV;
+ messenger->set_policy(entity_name_t::TYPE_MON, p);
+}
+
version_t Monitor::get_global_paxos_version()
{
// this should only be called when paxos becomes writeable, which is
bufferlist::iterator p = bl.begin();
::decode(features, p);
dout(10) << "features " << features << dendl;
+
+ if (features.incompat.contains(CEPH_MON_FEATURE_INCOMPAT_GV))
+ require_gv_onwire();
}
void Monitor::write_features()
version_t global_version;
void require_gv_ondisk();
+ void require_gv_onwire();
public:
void recovered_leader(int id);