goto ignore;
}
+ if (any_of(osdmap.get_pools().begin(),
+ osdmap.get_pools().end(),
+ [](const std::pair<int64_t,pg_pool_t>& pool)
+ { return pool.second.use_gmt_hitset; })) {
+ assert(osdmap.get_num_up_osds() == 0 ||
+ osdmap.get_up_osd_features() & CEPH_FEATURE_OSD_HITSET_GMT);
+ if (!(m->osd_features & CEPH_FEATURE_OSD_HITSET_GMT)) {
+ dout(0) << __func__ << " one or more pools uses GMT hitsets but osd at "
+ << m->get_orig_source_inst()
+ << " doesn't announce support -- ignore" << dendl;
+ goto ignore;
+ }
+ }
+
+ // make sure upgrades stop at hammer
+ // * OSD_PROXY_FEATURES is the last pre-hammer feature
+ // * MON_METADATA is the first post-hammer feature
+ if (osdmap.get_num_up_osds() > 0) {
+ if ((m->osd_features & CEPH_FEATURE_MON_METADATA) &&
+ !(osdmap.get_up_osd_features() & CEPH_FEATURE_OSD_PROXY_FEATURES)) {
+ mon->clog->info() << "disallowing boot of post-hammer OSD "
+ << m->get_orig_source_inst()
+ << " because one or more up OSDs is pre-hammer\n";
+ goto ignore;
+ }
+ if (!(m->osd_features & CEPH_FEATURE_OSD_PROXY_FEATURES) &&
+ (osdmap.get_up_osd_features() & CEPH_FEATURE_MON_METADATA)) {
+ mon->clog->info() << "disallowing boot of pre-hammer OSD "
+ << m->get_orig_source_inst()
+ << " because all up OSDs are post-hammer\n";
+ goto ignore;
+ }
+ }
+
// already booted?
if (osdmap.is_up(from) &&
osdmap.get_inst(from) == m->get_orig_source_inst()) {
t->clone(c, o1, o3);
t->clone_range(c, o1, o2, 1, 12, 99);
- t->create_collection(c);
+ t->create_collection(c, 12);
t->collection_move_rename(c, o2, c2, o3);
t->remove_collection(c);
- t->collection_setattr(c, string("this"), bl);
- t->collection_rmattr(c, string("foo"));
- t->collection_setattrs(c, m);
o.push_back(t);
}