From: Josh Durgin Date: Thu, 6 Jul 2017 00:15:24 +0000 (-0400) Subject: OSDMap, OSDMonitor: automatically set recovery deletes for luminous X-Git-Tag: v12.1.2~220^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a67f3a8883df0a4518a5bfb47c2dbb260588b062;p=ceph.git OSDMap, OSDMonitor: automatically set recovery deletes for luminous Once the required osd release is luminous, all osds must support recovery deletes, so set the flag then. This avoids an extra manual step in luminous upgrades. Signed-off-by: Josh Durgin --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index d7aab1e71f86..7791d0b09555 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -230,6 +230,7 @@ void OSDMonitor::create_initial() derr << __func__ << " mon_debug_no_require_luminous=true" << dendl; } else { newmap.require_osd_release = CEPH_RELEASE_LUMINOUS; + newmap.flags |= CEPH_OSDMAP_RECOVERY_DELETES; newmap.full_ratio = g_conf->mon_osd_full_ratio; if (newmap.full_ratio > 1.0) newmap.full_ratio /= 100; newmap.backfillfull_ratio = g_conf->mon_osd_backfillfull_ratio; @@ -8397,6 +8398,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, goto reply; } pending_inc.new_require_osd_release = rel; + if (rel >= CEPH_RELEASE_LUMINOUS && + !osdmap.test_flag(CEPH_OSDMAP_RECOVERY_DELETES)) { + return prepare_set_flag(op, CEPH_OSDMAP_RECOVERY_DELETES); + } goto update; } else if (prefix == "osd cluster_snap") { // ** DISABLE THIS FOR NOW ** diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index d4422af7acdd..dc4f2a837d6a 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -1795,6 +1795,7 @@ int OSDMap::apply_incremental(const Incremental &inc) require_osd_release = inc.new_require_osd_release; if (require_osd_release >= CEPH_RELEASE_LUMINOUS) { flags &= ~(CEPH_OSDMAP_LEGACY_REQUIRE_FLAGS); + flags |= CEPH_OSDMAP_RECOVERY_DELETES; } } @@ -2347,7 +2348,7 @@ void OSDMap::encode(bufferlist& bl, uint64_t features) const if (v < 4) { decltype(flags) f = flags; if (require_osd_release >= CEPH_RELEASE_LUMINOUS) - f |= CEPH_OSDMAP_REQUIRE_LUMINOUS; + f |= CEPH_OSDMAP_REQUIRE_LUMINOUS | CEPH_OSDMAP_RECOVERY_DELETES; else if (require_osd_release == CEPH_RELEASE_KRAKEN) f |= CEPH_OSDMAP_REQUIRE_KRAKEN; else if (require_osd_release == CEPH_RELEASE_JEWEL) @@ -2700,12 +2701,14 @@ void OSDMap::decode(bufferlist::iterator& bl) ::decode(require_osd_release, bl); if (require_osd_release >= CEPH_RELEASE_LUMINOUS) { flags &= ~(CEPH_OSDMAP_LEGACY_REQUIRE_FLAGS); + flags |= CEPH_OSDMAP_RECOVERY_DELETES; } } else { if (flags & CEPH_OSDMAP_REQUIRE_LUMINOUS) { // only for compat with post-kraken pre-luminous test clusters require_osd_release = CEPH_RELEASE_LUMINOUS; flags &= ~(CEPH_OSDMAP_LEGACY_REQUIRE_FLAGS); + flags |= CEPH_OSDMAP_RECOVERY_DELETES; } else if (flags & CEPH_OSDMAP_REQUIRE_KRAKEN) { require_osd_release = CEPH_RELEASE_KRAKEN; } else if (flags & CEPH_OSDMAP_REQUIRE_JEWEL) {