void OSDMonitor::update_msgr_features()
{
+ uint64_t mask;
+ uint64_t features = osdmap.get_features(&mask);
+
set<int> types;
types.insert((int)entity_name_t::TYPE_OSD);
types.insert((int)entity_name_t::TYPE_CLIENT);
types.insert((int)entity_name_t::TYPE_MDS);
types.insert((int)entity_name_t::TYPE_MON);
-
- uint64_t mask = CEPH_FEATURES_CRUSH;
- uint64_t features = 0;
- if (osdmap.crush->has_nondefault_tunables())
- features |= CEPH_FEATURE_CRUSH_TUNABLES;
- if (osdmap.crush->has_nondefault_tunables2())
- features |= CEPH_FEATURE_CRUSH_TUNABLES2;
-
for (set<int>::iterator q = types.begin(); q != types.end(); ++q) {
if ((mon->messenger->get_policy(*q).features_required & mask) != features) {
dout(0) << "crush map has features " << features << ", adjusting msgr requires" << dendl;
// current memory location, and setting or clearing bits in integer
// fields, and we are the only writer, this is not a problem.
- uint64_t mask = CEPH_FEATURES_CRUSH;
- uint64_t features = 0;
- if (osdmap->crush->has_nondefault_tunables())
- features |= CEPH_FEATURE_CRUSH_TUNABLES;
- if (osdmap->crush->has_nondefault_tunables2())
- features |= CEPH_FEATURE_CRUSH_TUNABLES2;
+ uint64_t mask;
+ uint64_t features = osdmap->get_features(&mask);
{
Messenger::Policy p = client_messenger->get_default_policy();
return -1;
}
+
+uint64_t OSDMap::get_features(uint64_t *pmask) const
+{
+ uint64_t features = 0;
+ uint64_t mask = 0;
+
+ if (crush->has_nondefault_tunables())
+ features |= CEPH_FEATURE_CRUSH_TUNABLES;
+ if (crush->has_nondefault_tunables2())
+ features |= CEPH_FEATURE_CRUSH_TUNABLES2;
+ mask |= CEPH_FEATURES_CRUSH;
+
+ if (pmask)
+ *pmask = mask;
+ return features;
+}
+
void OSDMap::dedup(const OSDMap *o, OSDMap *n)
{
if (o->epoch == n->epoch)
return -1;
}
+ /**
+ * get feature bits required by the current structure
+ *
+ * @param mask [out] set of all possible map-related features we could set
+ * @return feature bits used by this map
+ */
+ uint64_t get_features(uint64_t *mask) const;
+
int apply_incremental(const Incremental &inc);
/// try to re-use/reference addrs in oldmap from newmap