]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: do not skip_data_digests during scrub
authorSage Weil <sage@redhat.com>
Sat, 14 Jul 2018 16:45:12 +0000 (11:45 -0500)
committerSage Weil <sage@redhat.com>
Sat, 14 Jul 2018 17:41:46 +0000 (12:41 -0500)
The goal was to skip storing per-object digests.  Scrub still needs to
calculate these digests in order to do a deep scrub, however!

This is not a cherry-pick of master because the code has changed a bit
and because the master fix is not merged yet.

Fixes: http://tracker.ceph.com/issues/24922
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/ECBackend.cc
src/osd/ReplicatedBackend.cc

index 41355031436c8873455d000f7f30744dd85e85bc..23e5a50f0166ceb891f11e602ea81503f0412307 100644 (file)
@@ -2426,8 +2426,6 @@ int ECBackend::be_deep_scrub(
 {
   dout(10) << __func__ << " " << poid << " pos " << pos << dendl;
   int r;
-  bool skip_data_digest = store->has_builtin_csum() &&
-    g_conf->osd_skip_data_digest;
 
   uint32_t fadvise_flags = CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL |
                            CEPH_OSD_OP_FLAG_FADVISE_DONTNEED;
@@ -2468,7 +2466,7 @@ int ECBackend::be_deep_scrub(
     o.read_error = true;
     return 0;
   }
-  if (r > 0 && !skip_data_digest) {
+  if (r > 0) {
     pos.data_hash << bl;
   }
   pos.data_pos += r;
@@ -2494,8 +2492,7 @@ int ECBackend::be_deep_scrub(
        return 0;
       }
 
-      if (!skip_data_digest &&
-          hinfo->get_chunk_hash(get_parent()->whoami_shard().shard) !=
+      if (hinfo->get_chunk_hash(get_parent()->whoami_shard().shard) !=
          pos.data_hash.digest()) {
        dout(0) << "_scan_list  " << poid << " got incorrect hash on read 0x"
                << std::hex << pos.data_hash.digest() << " !=  expected 0x"
index acfb2a63d56d30a764d9ecfe8c0a985a2654886a..602a0f08f76b1338de66995acd2ce87a971612f0 100644 (file)
@@ -714,9 +714,6 @@ int ReplicatedBackend::be_deep_scrub(
   uint32_t fadvise_flags = CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL |
                            CEPH_OSD_OP_FLAG_FADVISE_DONTNEED;
 
-  bool skip_data_digest = store->has_builtin_csum() &&
-    g_conf->osd_skip_data_digest;
-
   utime_t sleeptime;
   sleeptime.set_from_double(cct->_conf->osd_debug_deep_scrub_sleep);
   if (sleeptime != utime_t()) {
@@ -744,7 +741,7 @@ int ReplicatedBackend::be_deep_scrub(
       o.read_error = true;
       return 0;
     }
-    if (r > 0 && !skip_data_digest) {
+    if (r > 0) {
       pos.data_hash << bl;
     }
     pos.data_pos += r;
@@ -755,10 +752,8 @@ int ReplicatedBackend::be_deep_scrub(
     }
     // done with bytes
     pos.data_pos = -1;
-    if (!skip_data_digest) {
-      o.digest = pos.data_hash.digest();
-      o.digest_present = true;
-    }
+    o.digest = pos.data_hash.digest();
+    o.digest_present = true;
     dout(20) << __func__ << "  " << poid << " done with data, digest 0x"
             << std::hex << o.digest << std::dec << dendl;
   }