From: Josh Durgin Date: Fri, 17 Jun 2016 00:29:56 +0000 (-0700) Subject: OSDMonitor: add kraken feature bit X-Git-Tag: ses5-milestone5~413^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=112eab06fb2db1e7c25b9859c1c721dbb0ac4636;p=ceph.git OSDMonitor: add kraken feature bit This is needed to turn on persisting write errors, since older OSDs won't be able to handle them. Other features for kraken could potentially use this as well. Signed-off-by: Josh Durgin --- diff --git a/src/include/ceph_features.h b/src/include/ceph_features.h index 9756746425ce..710e9a4704a9 100755 --- a/src/include/ceph_features.h +++ b/src/include/ceph_features.h @@ -24,7 +24,7 @@ #define CEPH_FEATURE_PGPOOL3 (1ULL<<11) #define CEPH_FEATURE_OSDREPLYMUX (1ULL<<12) #define CEPH_FEATURE_OSDENC (1ULL<<13) -// UNUSED: (1ULL<<14) +#define CEPH_FEATURE_SERVER_KRAKEN (1ULL<<14) // REUSED #define CEPH_FEATURE_MONENC (1ULL<<15) #define DEPRECATED_CEPH_FEATURE_QUERY_T (1ULL<<16) // DEPRECATED: JEWEL #define DEPRECATED_CEPH_FEATURE_INDEP_PG_MAP (1ULL<<17) // DEPRECATED: JEWEL @@ -179,6 +179,7 @@ static inline unsigned long long ceph_sanitize_features(unsigned long long f) { CEPH_FEATURE_CRUSH_TUNABLES5 | \ CEPH_FEATURE_SERVER_JEWEL | \ CEPH_FEATURE_FS_FILE_LAYOUT_V2 | \ + CEPH_FEATURE_SERVER_KRAKEN | \ 0ULL) #define CEPH_FEATURES_SUPPORTED_DEFAULT CEPH_FEATURES_ALL diff --git a/src/include/rados.h b/src/include/rados.h index c0559029e056..66520ba5b22f 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -145,6 +145,7 @@ extern const char *ceph_osd_state_name(int s); #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 */ +#define CEPH_OSDMAP_REQUIRE_KRAKEN (1<<17) /* require kraken 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 801ae887f806..da695c0a5380 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -126,8 +126,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 + // new cluster should require jewel and kraken by default newmap.set_flag(CEPH_OSDMAP_REQUIRE_JEWEL); + newmap.set_flag(CEPH_OSDMAP_REQUIRE_KRAKEN); // encode into pending incremental newmap.encode(pending_inc.fullmap, mon->quorum_features | CEPH_FEATURE_RESERVED); @@ -1979,6 +1980,16 @@ bool OSDMonitor::preprocess_boot(MonOpRequestRef op) goto ignore; } + if (osdmap.test_flag(CEPH_OSDMAP_REQUIRE_KRAKEN) && + !(m->osd_features & CEPH_FEATURE_SERVER_KRAKEN)) { + mon->clog->info() << "disallowing boot of OSD " + << m->get_orig_source_inst() + << " because the osdmap requires" + << " CEPH_FEATURE_SERVER_KRAKEN" + << " but the osd lacks CEPH_FEATURE_SERVER_KRAKEN\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 " @@ -6334,6 +6345,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, ss << "not all up OSDs have CEPH_FEATURE_SERVER_JEWEL feature"; err = -EPERM; } + } else if (key == "require_kraken_osds") { + if (osdmap.get_up_osd_features() & CEPH_FEATURE_SERVER_KRAKEN) { + return prepare_set_flag(op, CEPH_OSDMAP_REQUIRE_KRAKEN); + } else { + ss << "not all up OSDs have CEPH_FEATURE_SERVER_KRAKEN feature"; + err = -EPERM; + } } else { ss << "unrecognized flag '" << key << "'"; err = -EINVAL;