]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG: fix size checking for ECBackend pools
authorSamuel Just <sam.just@inktank.com>
Sun, 16 Feb 2014 03:08:13 +0000 (19:08 -0800)
committerSamuel Just <sam.just@inktank.com>
Tue, 18 Feb 2014 04:12:15 +0000 (20:12 -0800)
Allow the backend to adjust the logical object size before
checking against the ondisk size.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/ReplicatedPG.cc

index 10382df50f5d7f7a5261fa22bd7002ad868d48d8..2ee37a3fb0c21ddef51e11a54285d68d6047f002 100644 (file)
@@ -10880,16 +10880,19 @@ void ReplicatedPG::_scrub(ScrubMap& scrubmap)
     bv.push_back(p->second.attrs[OI_ATTR]);
     object_info_t oi(bv);
 
-    if (oi.size != p->second.size) {
+    if (pgbackend->be_get_ondisk_size(oi.size) != p->second.size) {
       osd->clog.error() << mode << " " << info.pgid << " " << soid
                        << " on disk size (" << p->second.size
-                       << ") does not match object info size (" << oi.size << ")";
+                       << ") does not match object info size ("
+                       << oi.size << ") ajusted for ondisk to ("
+                       << pgbackend->be_get_ondisk_size(oi.size)
+                       << ")";
       ++scrubber.shallow_errors;
     }
 
     dout(20) << mode << "  " << soid << " " << oi << dendl;
 
-    stat.num_bytes += p->second.size;
+    stat.num_bytes += oi.size;
 
     if (oi.is_dirty())
       ++stat.num_objects_dirty;
@@ -10926,7 +10929,7 @@ void ReplicatedPG::_scrub(ScrubMap& scrubmap)
        assert(soid.snap == *curclone);
       }
 
-      assert(p->second.size == snapset.clone_size[*curclone]);
+      assert(oi.size == snapset.clone_size[*curclone]);
 
       // verify overlap?
       // ...