From a67f3a8883df0a4518a5bfb47c2dbb260588b062 Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Wed, 5 Jul 2017 20:15:24 -0400 Subject: [PATCH] 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 --- src/mon/OSDMonitor.cc | 5 +++++ src/osd/OSDMap.cc | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index d7aab1e71f86a..7791d0b09555b 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 d4422af7acddc..dc4f2a837d6aa 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) { -- 2.39.5