From: Samuel Just Date: Wed, 20 Jan 2016 18:16:21 +0000 (-0800) Subject: introduce CEPH_FEATURE_SERVER_JEWEL feature bit X-Git-Tag: v10.1.0~277^2~22 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6db7fe7de32689c8185ceb1f350ebe94841f0781;p=ceph.git introduce CEPH_FEATURE_SERVER_JEWEL feature bit Signed-off-by: Samuel Just --- diff --git a/src/include/ceph_features.h b/src/include/ceph_features.h index c15d2af5c392..2b22378c2c6f 100755 --- a/src/include/ceph_features.h +++ b/src/include/ceph_features.h @@ -73,6 +73,7 @@ #define CEPH_FEATURE_MON_STATEFUL_SUB (1ULL<<57) /* stateful mon subscription */ #define CEPH_FEATURE_MON_ROUTE_OSDMAP (1ULL<<57) /* peon sends osdmaps */ #define CEPH_FEATURE_OSDSUBOP_NO_SNAPCONTEXT (1ULL<<57) /* overlap, drop unused SnapContext in v12 */ +#define CEPH_FEATURE_SERVER_JEWEL (1ULL<<57) /* overlap, features introduced in jewel */ #define CEPH_FEATURE_CRUSH_TUNABLES5 (1ULL<<58) /* chooseleaf stable mode */ // duplicated since it was introduced at the same time as CEPH_FEATURE_CRUSH_TUNABLES5 #define CEPH_FEATURE_NEW_OSDOPREPLY_ENCODING (1ULL<<58) /* New, v7 encoding */ @@ -172,6 +173,7 @@ static inline unsigned long long ceph_sanitize_features(unsigned long long f) { CEPH_FEATURE_MON_STATEFUL_SUB | \ CEPH_FEATURE_MON_ROUTE_OSDMAP | \ CEPH_FEATURE_CRUSH_TUNABLES5 | \ + CEPH_FEATURE_SERVER_JEWEL | \ 0ULL) #define CEPH_FEATURES_SUPPORTED_DEFAULT CEPH_FEATURES_ALL diff --git a/src/include/rados.h b/src/include/rados.h index ef068d6518b6..f14d6777cf5b 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -144,6 +144,7 @@ extern const char *ceph_osd_state_name(int s); #define CEPH_OSDMAP_NOTIERAGENT (1<<13) /* disable tiering agent */ #define CEPH_OSDMAP_NOREBALANCE (1<<14) /* block osd backfill unless pg is degraded */ #define CEPH_OSDMAP_SORTBITWISE (1<<15) /* use bitwise hobject_t sort */ +#define CEPH_OSDMAP_REQUIRE_JEWEL (1<<16) /* require jewel for booting osds */ /* * The error code to return when an OSD can't handle a write diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index d4e8ca4addb1..5908ca4c6a83 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -125,6 +125,9 @@ void OSDMonitor::create_initial() // new clusters should sort bitwise by default. newmap.set_flag(CEPH_OSDMAP_SORTBITWISE); + // new cluster should require jewel by default + newmap.set_flag(CEPH_OSDMAP_REQUIRE_JEWEL); + // encode into pending incremental newmap.encode(pending_inc.fullmap, mon->quorum_features | CEPH_FEATURE_RESERVED); pending_inc.full_crc = newmap.get_crc(); @@ -1871,6 +1874,16 @@ bool OSDMonitor::preprocess_boot(MonOpRequestRef op) goto ignore; } + if (osdmap.test_flag(CEPH_OSDMAP_REQUIRE_JEWEL) && + !(m->get_connection()->get_features() & CEPH_FEATURE_SERVER_JEWEL)) { + mon->clog->info() << "disallowing boot of OSD " + << m->get_orig_source_inst() + << " because the osdmap requires" + << " CEPH_FEATURE_SERVER_JEWEL" + << " but the osd lacks CEPH_FEATURE_SERVER_JEWEL\n"; + goto ignore; + } + if (osdmap.test_flag(CEPH_OSDMAP_SORTBITWISE) && !(m->osd_features & CEPH_FEATURE_OSD_BITWISE_HOBJ_SORT)) { mon->clog->info() << "disallowing boot of OSD " @@ -6152,6 +6165,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, ss << "not all up OSDs have OSD_BITWISE_HOBJ_SORT feature"; err = -EPERM; } + } else if (key == "require_jewel_osds") { + if (osdmap.get_up_osd_features() & CEPH_FEATURE_SERVER_JEWEL) { + return prepare_set_flag(op, CEPH_OSDMAP_REQUIRE_JEWEL); + } else { + ss << "not all up OSDs have CEPH_FEATURE_SERVER_JEWEL feature"; + err = -EPERM; + } } else { ss << "unrecognized flag '" << key << "'"; err = -EINVAL;