diff --git a/doc/dev/osd_internals/osdmap_versions.txt b/doc/dev/osd_internals/osdmap_versions.txt new file mode 100644 index 00000000000..12fab5ae342 --- /dev/null +++ b/doc/dev/osd_internals/osdmap_versions.txt @@ -0,0 +1,259 @@ +releases: + + <0.48 pre-argonaut, dev + 0.48 argonaut + 0.56 bobtail + 0.61 cuttlefish + 0.67 dumpling + 0.72 emperor + 0.80 firefly + 0.87 giant + 0.94 hammer + 9.1.0 infernalis rc + 9.2.0 infernalis + 10.2.0 jewel + 11.2.0 kraken + 12.2.0 luminous + 13.2.0 mimic + 14.2.0 nautilus (to-be) + +osdmap: + +type / v / cv / ev / commit / version / date + +map / 1 / - / - / 017788a6ecb570038632de31904dd2e1314dc7b7 / 0.11 / 2009 +inc / 1 / - / - / + * initial +map / 2 / - / - / 020350e19a5dc03cd6cedd7494e434295580615f / 0.13 / 2009 +inc / 2 / - / - / + * pg_temp +map / 3 / - / - / 1ebcebf6fff056a0c0bdf82dde69356e271be27e / 0.19 / 2009 +inc / 3 / - / - / + * heartbeat_addr +map / 4 / - / - / 3ced5e7de243edeccfd20a90ec2034206c920795 / 0.19 / 2010 +inc / 4 / - / - / + * pools removed from map +map / 5 / - / 5 / c4892bed6f49df396df3cbf9ed561c7315bd2442 / 0.20 / 2010 +inc / 5 / - / 5 / + * pool names moved to first part of encoding + * adds CEPH_OSDMAP_INC_VERSION_EXT (for extended part of map) + * adds CEPH_OSDMAP_VERSION_EXT (for extended part of map) + * adds 'ev' (extended version) during encode() and decode +map / 5 / - / 5 / bc9cb9311f1b946898b5256eab500856fccf5c83 / 0.22 / 2010 +inc / 5 / - / 6 / + * separate up client/osd + * increments CEPH_OSDMAP_INC_VERSION_EXT to 6 + * CEPH_OSDMAP_INC_VERSION stays at 5 +map / 5 / - / 6 / 7f70112052c7fc3ba46f9e475fa575d85e8b16b2 / 0.22 / 2010 +inc / 5 / - / 6 / + * add osd_cluster_addr to full map + * increments CEPH_OSDMAP_VERSION_EXT to 6 + * CEPH_OSDMAP_VERSION stays at 5 +map / 5 / - / 7 / 2ced4e24aef64f2bc7d55b73abb888c124512eac / 0.28 / 2011 +inc / 5 / - / 7 / + * add cluster_snapshot field + * increments CEPH_OSDMAP_VERSION_EXT to 7 + * increments CEPH_OSDMAP_INC_VERSION_EXT to 7 + * CEPH_OSDMAP_INC_VERSION stays at 5 + * CEPH_OSDMAP_VERSION stays at 5 +map / 6 / - / 7 / d1ce410842ca51fad3aa100a52815a39e5fe6af6 / 0.35 / 2011 +inc / 6 / - / 7 / + * encode/decode old + new versions + * adds encode_client_old() (basically transitioning from uint32 to + uint64) + * bumps osdmap version to 6, old clients stay at 5 + * starts using in-function versions (i.e., _u16 v = 6) +map / 6 / - / 7 / b297d1edecaf31a48cff6c37df2ee266e51cdec1 / 0.38 / 2011 +inc / 6 / - / 7 / + * make encoding conditional based on features + * essentially checks whether features & CEPH_FEATURE_PGID64 and opts + to either use encode_client_old() or encode() +map / 6 / - / 7 / 0f0c59478894c9ca7fa04fc32e854648192a9fae / 0.38 / 2011 +inc / 6 / - / 7 / + * move stuff from osdmap.h to osdmap.cc +map / 6 / 8 / ca4311e5e39cec8fad85fad3e67eea968707e9eb / 0.47 / 2012 +inc / 6 / 8 / + * store uuid per osd + * bumps osdmap::incremental extended version to 8; in function + * bumps osdmap's extended version to 8; in function +map / 6 / - / 8 / 5125daa6d78e173a8dbc75723a8fdcd279a44bcd / 0.47 / 2012 +inc / 6 / - / 8 / + * drop defines + * drops defines for CEPH_OSDMAP_*_VERSION from rados.h +map / 6 / 9 / e9f051ef3c49a080b24d7811a16aefb64beacbbd / 0.53 / 2012 +inc / 6 / 9 / + * add osd_xinfo_t + * osdmap::incremental ext version bumped to 9 + * osdmap's ext version bumped to 9 + * because we're adding osd_xinfo_t to the map +map / 6 / - / 10 / 1fee4ccd5277b52292e255daf458330eef5f0255 / 0.64 / 2013 +inc / 6 / - / 10 / + * encode front hb addr + * osdmap::incremental ext version bumped to 10 + * osdmap's ext versiont bumped to 10 + * because we're adding osd_addrs->hb_front_addr to map + +// below we have the change to ENCODE_START() for osdmap and others +// this means client-usable data and extended osd data get to have their +// own ENCODE_START()'s, hence their versions start at 1 again. + +map / 7 / 1 / 1 / 3d7c69fb0986337dc72e466dc39d93e5ab406062 / 0.77 / 2014 +inc / 7 / 1 / 1 / b55c45e85dbd5d2513a4c56b3b74dcafd03f20b1 / 0.77 / 2014 + * introduces ENCODE_START() approach to osdmap, and the 'features' + argument we currently see in ::encode() functions + * same, but for osdmap::incremental +map / 7 / 1 / 1 / b9208b47745fdd53d36b682bebfc01e913347092 / 0.77 / 2014 +inc / 7 / 1 / 2 / + * include features argument in incremental. +map / 7 / 2 / 1 / cee914290c5540eb1fb9d70faac70a581381c29b / 0.78 / 2014 +inc / 7 / 2 / 2 / + * add osd_primary_affinity +map / 7 / 3 / 1 / c4f8f265955d54f33c79cde02c1ab2fe69ab1ab0 / 0.78 / 2014 +inc / 7 / 3 / 2 / + * add new/old erasure code profiles +map / 8 / 3 / 1 / 3dcf5b9636bb9e0cd6484d18f151b457e1a0c328 / 0.91 / 2014 +inc / 8 / 3 / 2 / + * encode crc +map / 8 / 3 / 1 / 04679c5451e353c966f6ed00b33fa97be8072a79 / 9.1.0 / 2015 +inc / 8 / 3 / 2 / + * simply ensures encode_features are filled to CEPH_FEATURE_PGID64 when + decoding an incremental if struct_v >= 6; else keeps it at zero. + * otherwise, if we get an incremental from hammer (which has + struct_v = 6) we would be decoding it as if it were a map from before + CEPH_FEATURES_PGID64 (which was introduced in 0.35, pre-argonaut) +map / 8 / 3 / 2 / 5c6b9d9dcd0a225e3a2b154c20a623868c269346 / 12.0.1 / 2017 +inc / 8 / 3 / 3 / + * add (near)full_ratio + * used to live in pgmap, moving to osdmap for luminous + * conditional on SERVER_LUMINOUS feature being present + * osdmap::incremental::encode(): conditional on ev >= 3 + * osdmap::incremental::decode(): conditional on ev >= 3, else -1 + * osdmap::encode(): conditional on ev >= 2 + * osdmap::decode(): conditional on ev >= 0, else 0 +map / 8 / 4 / 2 / 27d6f4373bafa24450f6dbb4e4252c2d9c2c1448 / 12.0.2 / 2017 +inc / 8 / 4 / 3 / + * add pg_remap and pg_remap_items + * first forces a pg to map to a particular value; second replaces + specific osds with specific other osds in crush mapping. + * inc conditional on SERVER_LUMINOUS feature being present + * osdmap::incremental::encode(): conditional on cv >= 4 + * osdmap::incremental::decode(): conditional on cv >= 4 + * map conditional on OSDMAP_REMAP feature being present + * osdmap::encode(): if not feature, cv = 3; encode on cv >= 4 + * osdmap::decode(): conditional on cv >= 4 +map / 8 / 4 / 3 / 27d6f4373bafa24450f6dbb4e4252c2d9c2c1448 / 12.0.2 / 2017 +inc / 8 / 4 / 4 / + * handle backfillfull_ratio like nearfull and full + * inc: + * osdmap::incremental::encode(): conditional on ev >= 3 + * osdmap::incremental::decode(): conditional on ev >= 4, else -1 + * map: + * osdmap::encode(): conditional on ev >= 2 + * osdmap::decode(): conditional on ev >= 3, else 0 +map / 8 / 4 / 3 / a1c66468232002c9f36033226f5db0a5751e8d18 / 12.0.3 / 2017 +inc / 8 / 4 / 4 / + * add require_min_compat_client field + * inc: + * osdmap::incremental::encode() conditional on ev >= 4 + * osdmap::incremental::decode() conditional on ev >= 4 + map: + * osdmap::encode() conditional on ev >= 3 + * osdmap::decode() conditional on ev >= 3 +map / 8 / 4 / 4 / 4a09e9431de3084b1ca98af11b28f822fde4ffbe / 12.0.3 / 2017 +inc / 8 / 4 / 5 / + * bumps encoding version for require_min_compat_client + * otherwise osdmap::decode() would throw exception when decoding + old maps + * inc: + * osdmap::incremental::encode() no conditional on ev >= 3 + * osdmap::incremental::decode() conditional on ev >= 5 + * map: + * osdmap::encode() conditional on ev >= 2 + * osdmap::decode() conditional on ev >= 4 +map / 8 / 4 / 5 / 3d4c4d9d9da07e1456331c43acc998d2008ca8ea / 12.1.0 / 2017 +inc / 8 / 4 / 6 / + * add require_osd_release numeric field + * new_require_min_compat_client: + * osdmap::incremental::encode() conditional on ev >= 5 + * osdmap::encode() conditional on ev >= 4 + * require_osd_release: + * osdmap::incremental::encode() conditional on ev >= 6 + * osdmap::incremental::decode() conditional on ev >= 6 (else, -1) + * osdmap::encode() conditional on ev >= 5 + * osdmap::decode() conditional on ev >= 5 (else, -1) +map / 8 / 4 / 5 / f22997e24bda4e6476e15d5d4ad9737861f9741f / 12.1.0 / 2017 +inc / 8 / 4 / 6 / + * switch (require_)min_compat_client to integers instead of strings + * osdmap::incremental::encode() conditional on ev >= 6 + * osdmap::incremental::decode(): + * if ev == 5, decode string and translate to release number + * if ev >= 6, decode integer + * osdmap::encode() conditional on ev >= 4 + * osdmap::decode(): + * if ev == 4, decode string and translate to release number + * if ev >= 5, decode integer +map / 8 / 4 / 6 / a8fb39b57884d96201fa502b17bc9395ec38c1b3 / 12.1.0 / 2017 +inc / 8 / 5 / 6 / + * make incremental's `new_state` 32 bits instead of 8 bits + * implies forcing 8 bits on + * osdmap::incremental::encode_client_old() + * osdmap::incremental::encode_classic() + * osdmap::incremental::decode_classic() + * osdmap::incremental::encode() conditional on cv >= 5, else force 8b. + * osdmap::incremental::decode() conditional on cv >= 5, else force 8b. +map / 8 / 5 / 6 / 3c1e58215bbb98f71aae30904f9010a57a58da81 / 12.1.0 / 2017 +inc / 8 / 5 / 6 / + * same as above +map / 8 / 6 / 6 / 48158ec579b708772fae82daaa6cb5dcaf5ac5dd / 12.1.0 / 2017 +inc / 8 / 5 / 6 / + * add crush_version + * osdmap::encode() conditional on cv >= 6 + * osdmap::decode() conditional on cv >= 6 +map / 8 / 7 / 6 / 553048fbf97af999783deb7e992c8ecfa5e55500 / 13.0.2 / 2017 +inc / 8 / 6 / 6 / + * track newly removed and purged snaps in each epoch + * new_removed_snaps + * new_purged_snaps + * osdmap::encode() conditional on cv >= 7 + * if SERVER_MIMIC not in features, cv = 6 + * osdmap::decode() conditional cv >= 7 +map / 8 / 8 / 6 / f99c2a9fec65ad3ce275ef24bd167ee03275d3d7 / 14.0.1 / 2018 +inc / 8 / 7 / 6 / + * fix pre-addrvec compat + * osdmap::encode() conditional on cv >= 8, else encode client addrs + one by one in a loop. + * osdmap::decode() just bumps version (?) +map / 8 / 8 / 7 / 9fb1e521c7c75c124b0dbf193e8b65ff1b5f461e / 14.0.1 / 2018 +inc / 8 / 7 / 7 / + * make cluster addrs into addrvecs too + * this will allow single-step upgrade from msgr1 to msgr2 +map / 8 / 9 / 7 / d414f0b43a69f3c2db8e454d795be881496237c6 / 14.0.1 / 2018 +inc / 8 / 8 / 7 / + * store last_up_change and last_in_change + * osdmap::encode() conditional on cv >= 9 + * osdmap::decode() conditional on cv >= 9 + + + +osd_info_t: +v / commit / version / date / reason + +1 / e574c84a6a0c5a5070dc72d5f5d3d17914ef824a / 0.19 / 2010 / add struct_v + +osd_xinfo_t: +v / commit / version / date + +1 / e9f051ef3c49a080b24d7811a16aefb64beacbbd / 0.53 / 2012 + * add osd_xinfo_t +2 / 31743d50a109a463d664ec9cf764d5405db507bd / 0.75 / 2013 + * add features bit mask to osd_xinfo_t +3 / 87722a42c286d4d12190b86b6d06d388e2953ba0 / 0.82 / 2014 + * remember osd weight when auto-marking osds out + +rados.h: +v / commit / version / date / reason + +- / 147c6f51e34a875ab65624df04baa8ef89296ddd / 0.19 / 2010 / move versions + 3 / CEPH_OSDMAP_INC_VERSION + 3 / CEPH_OSDMAP_VERSION + 2 / CEPH_PG_POOL_VERSION diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index e20d61d34e9..467407009ab 100755 --- a/qa/workunits/cephtool/test.sh +++ b/qa/workunits/cephtool/test.sh @@ -1452,21 +1452,24 @@ function test_mon_osd() ceph osd pool cancel-force-backfill $pool_name done - for f in noup nodown noin noout noscrub nodeep-scrub nobackfill norebalance norecover notieragent full + for f in noup nodown noin noout noscrub nodeep-scrub nobackfill \ + norebalance norecover notieragent full do ceph osd set $f ceph osd unset $f done - expect_false ceph osd unset sortbitwise # cannot be unset expect_false ceph osd set bogus expect_false ceph osd unset bogus + for f in sortbitwise recover_deletes require_jewel_osds \ + require_kraken_osds + do + expect_false ceph osd set $f + expect_false ceph osd unset $f + done ceph osd require-osd-release nautilus # can't lower (or use new command for anything but jewel) expect_false ceph osd require-osd-release jewel # these are no-ops but should succeed. - ceph osd set require_jewel_osds - ceph osd set require_kraken_osds - expect_false ceph osd unset require_jewel_osds ceph osd set noup ceph osd down 0 diff --git a/src/include/ceph_features.h b/src/include/ceph_features.h index ae52850a523..5925b897d65 100644 --- a/src/include/ceph_features.h +++ b/src/include/ceph_features.h @@ -129,7 +129,7 @@ DEFINE_CEPH_FEATURE_RETIRED(28, 1, OSD_HBMSGS, HAMMER, JEWEL) DEFINE_CEPH_FEATURE(28, 2, SERVER_MIMIC) DEFINE_CEPH_FEATURE(29, 1, MDSENC) // 4.7 DEFINE_CEPH_FEATURE(30, 1, OSDHASHPSPOOL) // 3.9 -DEFINE_CEPH_FEATURE(31, 1, MON_SINGLE_PAXOS) // deprecate me +DEFINE_CEPH_FEATURE_DEPRECATED(31, 1, MON_SINGLE_PAXOS, NAUTILUS) DEFINE_CEPH_FEATURE_RETIRED(32, 1, OSD_SNAPMAPPER, JEWEL, LUMINOUS) DEFINE_CEPH_FEATURE_RETIRED(33, 1, MON_SCRUB, JEWEL, LUMINOUS) @@ -209,7 +209,7 @@ DEFINE_CEPH_FEATURE_DEPRECATED(63, 1, RESERVED_BROKEN, LUMINOUS) // client-facin CEPH_FEATURE_OSDHASHPSPOOL | \ CEPH_FEATURE_NEW_OSDOP_ENCODING | \ CEPH_FEATURE_NEW_OSDOPREPLY_ENCODING | \ - CEPH_FEATURE_MON_SINGLE_PAXOS | \ + DEPRECATED_CEPH_FEATURE_MON_SINGLE_PAXOS | \ CEPH_FEATURE_OSD_CACHEPOOL | \ CEPH_FEATURE_CRUSH_V2 | \ CEPH_FEATURE_EXPORT_PEER | \ diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index 9fe22de7394..ffbb2232d1d 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -768,11 +768,15 @@ COMMAND("osd erasure-code-profile ls", \ "list all erasure code profiles", \ "osd", "r") COMMAND("osd set " \ - "name=key,type=CephChoices,strings=full|pause|noup|nodown|noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|notieragent|nosnaptrim|sortbitwise|recovery_deletes|require_jewel_osds|require_kraken_osds|pglog_hardlimit " \ + "name=key,type=CephChoices,strings=full|pause|noup|nodown|" \ + "noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|" \ + "notieragent|nosnaptrim|pglog_hardlimit " \ "name=yes_i_really_mean_it,type=CephBool,req=false", \ "set ", "osd", "rw") COMMAND("osd unset " \ - "name=key,type=CephChoices,strings=full|pause|noup|nodown|noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|notieragent|nosnaptrim", \ + "name=key,type=CephChoices,strings=full|pause|noup|nodown|"\ + "noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|" \ + "notieragent|nosnaptrim", \ "unset ", "osd", "rw") COMMAND("osd require-osd-release "\ "name=release,type=CephChoices,strings=luminous|mimic|nautilus " \ diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 00d32272026..344450e6702 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -2792,43 +2793,33 @@ bool OSDMonitor::preprocess_boot(MonOpRequestRef op) ceph_assert(m->get_orig_source_inst().name.is_osd()); - // check if osd has required features to boot - if (osdmap.require_osd_release >= CEPH_RELEASE_LUMINOUS && - !HAVE_FEATURE(m->osd_features, SERVER_LUMINOUS)) { - mon->clog->info() << "disallowing boot of OSD " - << m->get_orig_source_inst() - << " because the osdmap requires" - << " CEPH_FEATURE_SERVER_LUMINOUS" - << " but the osd lacks CEPH_FEATURE_SERVER_LUMINOUS"; - goto ignore; - } + // force all osds to have gone through luminous prior to upgrade to nautilus + { + vector missing; + if (!HAVE_FEATURE(m->osd_features, SERVER_LUMINOUS)) { + missing.push_back("CEPH_FEATURE_SERVER_LUMINOUS"); + } + if (!HAVE_FEATURE(m->osd_features, SERVER_JEWEL)) { + missing.push_back("CEPH_FEATURE_SERVER_JEWEL"); + } + if (!HAVE_FEATURE(m->osd_features, SERVER_KRAKEN)) { + missing.push_back("CEPH_FEATURE_SERVER_KRAKEN"); + } + if (!HAVE_FEATURE(m->osd_features, OSD_RECOVERY_DELETES)) { + missing.push_back("CEPH_FEATURE_OSD_RECOVERY_DELETES"); + } - if (osdmap.require_osd_release >= CEPH_RELEASE_JEWEL && - !(m->osd_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"; - goto ignore; - } + if (!missing.empty()) { + using std::experimental::make_ostream_joiner; - if (osdmap.require_osd_release >= CEPH_RELEASE_KRAKEN && - !HAVE_FEATURE(m->osd_features, 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"; - goto ignore; - } + stringstream ss; + copy(begin(missing), end(missing), make_ostream_joiner(ss, ";")); - if (osdmap.test_flag(CEPH_OSDMAP_RECOVERY_DELETES) && - !(m->osd_features & CEPH_FEATURE_OSD_RECOVERY_DELETES)) { - mon->clog->info() << "disallowing boot of OSD " - << m->get_orig_source_inst() - << " because 'recovery_deletes' osdmap flag is set and OSD lacks the OSD_RECOVERY_DELETES feature"; - goto ignore; + mon->clog->info() << "disallowing boot of OSD " + << m->get_orig_source_inst() + << " because the osd lacks " << ss.str(); + goto ignore; + } } // make sure upgrades stop at nautilus @@ -10184,24 +10175,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, return prepare_set_flag(op, CEPH_OSDMAP_NOTIERAGENT); else if (key == "nosnaptrim") return prepare_set_flag(op, CEPH_OSDMAP_NOSNAPTRIM); - else if (key == "sortbitwise") { - return prepare_set_flag(op, CEPH_OSDMAP_SORTBITWISE); - } else if (key == "recovery_deletes") { - if (!osdmap.get_num_up_osds() && !sure) { - ss << "Not advisable to continue since no OSDs are up. Pass " - << "--yes-i-really-mean-it if you really wish to continue."; - err = -EPERM; - goto reply; - } - if (HAVE_FEATURE(osdmap.get_up_osd_features(), OSD_RECOVERY_DELETES) - || sure) { - return prepare_set_flag(op, CEPH_OSDMAP_RECOVERY_DELETES); - } else { - ss << "not all up OSDs have OSD_RECOVERY_DELETES feature"; - err = -EPERM; - goto reply; - } - } else if (key == "pglog_hardlimit") { + else if (key == "pglog_hardlimit") { if (!osdmap.get_num_up_osds() && !sure) { ss << "Not advisable to continue since no OSDs are up. Pass " << "--yes-i-really-mean-it if you really wish to continue."; @@ -10219,53 +10193,6 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, err = -EPERM; goto reply; } - } else if (key == "require_jewel_osds") { - if (!osdmap.get_num_up_osds() && !sure) { - ss << "Not advisable to continue since no OSDs are up. Pass " - << "--yes-i-really-mean-it if you really wish to continue."; - err = -EPERM; - goto reply; - } - if (!osdmap.test_flag(CEPH_OSDMAP_SORTBITWISE)) { - ss << "the sortbitwise flag must be set before require_jewel_osds"; - err = -EPERM; - goto reply; - } else if (osdmap.require_osd_release >= CEPH_RELEASE_JEWEL) { - ss << "require_osd_release is already >= jewel"; - err = 0; - goto reply; - } else if (HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_JEWEL) - || sure) { - return prepare_set_flag(op, CEPH_OSDMAP_REQUIRE_JEWEL); - } else { - ss << "not all up OSDs have CEPH_FEATURE_SERVER_JEWEL feature"; - err = -EPERM; - } - } else if (key == "require_kraken_osds") { - if (!osdmap.get_num_up_osds() && !sure) { - ss << "Not advisable to continue since no OSDs are up. Pass " - << "--yes-i-really-mean-it if you really wish to continue."; - err = -EPERM; - goto reply; - } - if (!osdmap.test_flag(CEPH_OSDMAP_SORTBITWISE)) { - ss << "the sortbitwise flag must be set before require_kraken_osds"; - err = -EPERM; - goto reply; - } else if (osdmap.require_osd_release >= CEPH_RELEASE_KRAKEN) { - ss << "require_osd_release is already >= kraken"; - err = 0; - goto reply; - } else if (HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_KRAKEN) - || sure) { - bool r = prepare_set_flag(op, CEPH_OSDMAP_REQUIRE_KRAKEN); - // ensure JEWEL is also set - pending_inc.new_flags |= CEPH_OSDMAP_REQUIRE_JEWEL; - return r; - } else { - ss << "not all up OSDs have CEPH_FEATURE_SERVER_KRAKEN feature"; - err = -EPERM; - } } else { ss << "unrecognized flag '" << key << "'"; err = -EINVAL; @@ -10310,22 +10237,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, cmd_getval(cct, cmdmap, "release", release); bool sure = false; cmd_getval(cct, cmdmap, "yes_i_really_mean_it", sure); - if (!osdmap.test_flag(CEPH_OSDMAP_SORTBITWISE)) { - ss << "the sortbitwise flag must be set first"; - err = -EPERM; - goto reply; - } int rel = ceph_release_from_name(release.c_str()); if (rel <= 0) { ss << "unrecognized release " << release; err = -EINVAL; goto reply; } - if (rel < CEPH_RELEASE_LUMINOUS) { - ss << "use this command only for luminous and later"; - err = -EINVAL; - goto reply; - } if (rel == osdmap.require_osd_release) { // idempotent err = 0; diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index 1a148b47a77..267f65d1f9d 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -493,6 +493,10 @@ static void encode_addrvec_pvec_as_addr(const T& m, bufferlist& bl, uint64_t f) } } +/* for a description of osdmap incremental versions, and when they were + * introduced, please refer to + * doc/dev/osd_internals/osdmap_versions.txt + */ void OSDMap::Incremental::encode(bufferlist& bl, uint64_t features) const { using ceph::encode; @@ -742,6 +746,10 @@ void OSDMap::Incremental::decode_classic(bufferlist::const_iterator &p) decode(new_hb_front_up, p); } +/* for a description of osdmap incremental versions, and when they were + * introduced, please refer to + * doc/dev/osd_internals/osdmap_versions.txt + */ void OSDMap::Incremental::decode(bufferlist::const_iterator& bl) { using ceph::decode; @@ -2659,6 +2667,10 @@ void OSDMap::encode_classic(bufferlist& bl, uint64_t features) const encode(osd_addrs->hb_front_addrs, bl, features); } +/* for a description of osdmap versions, and when they were introduced, please + * refer to + * doc/dev/osd_internals/osdmap_versions.txt + */ void OSDMap::encode(bufferlist& bl, uint64_t features) const { using ceph::encode; @@ -2847,6 +2859,10 @@ void OSDMap::encode(bufferlist& bl, uint64_t features) const crc_defined = true; } +/* for a description of osdmap versions, and when they were introduced, please + * refer to + * doc/dev/osd_internals/osdmap_versions.txt + */ void OSDMap::decode(bufferlist& bl) { auto p = bl.cbegin(); @@ -3027,6 +3043,8 @@ void OSDMap::decode(bufferlist::const_iterator& bl) decode(*pg_temp, bl); decode(*primary_temp, bl); + // dates back to firefly. version increased from 2 to 3 still in firefly. + // do we really still need to keep this around? even for old clients? if (struct_v >= 2) { osd_primary_affinity.reset(new mempool::osdmap::vector<__u32>); decode(*osd_primary_affinity, bl); @@ -3041,11 +3059,16 @@ void OSDMap::decode(bufferlist::const_iterator& bl) decode(cbl, bl); auto cblp = cbl.cbegin(); crush->decode(cblp); + // added in firefly; version increased in luminous, so it affects + // giant, hammer, infernallis, jewel, and kraken. probably should be left + // alone until we require clients to be all luminous? if (struct_v >= 3) { decode(erasure_code_profiles, bl); } else { erasure_code_profiles.clear(); } + // version increased from 3 to 4 still in luminous, so same as above + // applies. if (struct_v >= 4) { decode(pg_upmap, bl); decode(pg_upmap_items, bl); @@ -3053,13 +3076,17 @@ void OSDMap::decode(bufferlist::const_iterator& bl) pg_upmap.clear(); pg_upmap_items.clear(); } + // again, version increased from 5 to 6 still in luminous, so above + // applies. if (struct_v >= 6) { decode(crush_version, bl); } + // version increase from 6 to 7 in mimic if (struct_v >= 7) { decode(new_removed_snaps, bl); decode(new_purged_snaps, bl); } + // version increase from 7 to 8, 8 to 9, in nautilus. if (struct_v >= 9) { decode(last_up_change, bl); decode(last_in_change, bl); @@ -3078,6 +3105,7 @@ void OSDMap::decode(bufferlist::const_iterator& bl) decode(*osd_uuid, bl); decode(osd_xinfo, bl); decode(osd_addrs->hb_front_addrs, bl); + // if (struct_v >= 2) { decode(nearfull_ratio, bl); decode(full_ratio, bl);