]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSDMap, OSDMonitor: automatically set recovery deletes for luminous
authorJosh Durgin <jdurgin@redhat.com>
Thu, 6 Jul 2017 00:15:24 +0000 (20:15 -0400)
committerJosh Durgin <jdurgin@redhat.com>
Wed, 19 Jul 2017 06:47:45 +0000 (02:47 -0400)
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 <jdurgin@redhat.com>
src/mon/OSDMonitor.cc
src/osd/OSDMap.cc

index d7aab1e71f86a8a3674cca4de774fb9a7fefd6d4..7791d0b09555b72c0f9aba19145e81d57cef5838 100644 (file)
@@ -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 **
index d4422af7acddc883c9e5785f6519316f01c400b2..dc4f2a837d6aa6ca24861e533bae9ca5cf63b7c3 100644 (file)
@@ -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) {