]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd rados command: Change "oi" to "info" in scrub handling errors
authorDavid Zafman <dzafman@redhat.com>
Fri, 16 Mar 2018 04:50:30 +0000 (21:50 -0700)
committerDavid Zafman <dzafman@redhat.com>
Tue, 10 Apr 2018 20:26:08 +0000 (13:26 -0700)
data_digest_mismatch_oi -> data_digest_mismatch_info
omap_digest_mismatch_oi -> omap_digest_mismatch_info
size_mismatch_oi -> size_mismatch_info
obj_size_oi_mismatch -> obj_size_info_mismatch

Signed-off-by: David Zafman <dzafman@redhat.com>
doc/rados/command/list-inconsistent-obj.json
doc/rados/troubleshooting/troubleshooting-pg.rst
qa/standalone/scrub/osd-scrub-repair.sh
src/common/scrub_types.h
src/include/rados/rados_types.hpp
src/osd/PGBackend.cc
src/tools/rados/rados.cc

index 6e7fd5f35068cfea7211c76d27955c9d051c6ba4..5de262877f41e73b2a20f20a55d1de28683630f5 100644 (file)
                 "missing",
                 "stat_error",
                 "read_error",
-                "data_digest_mismatch_oi",
-                "omap_digest_mismatch_oi",
-                "size_mismatch_oi",
+                "data_digest_mismatch_info",
+                "omap_digest_mismatch_info",
+                "size_mismatch_info",
                 "ec_hash_error",
                 "ec_size_error",
                 "info_missing",
                 "info_corrupted",
-                "obj_size_oi_mismatch",
+                "obj_size_info_mismatch",
                 "snapset_missing",
                 "snapset_corrupted",
                 "hinfo_missing",
                       "missing",
                       "stat_error",
                       "read_error",
-                      "data_digest_mismatch_oi",
-                      "omap_digest_mismatch_oi",
-                      "size_mismatch_oi",
+                      "data_digest_mismatch_info",
+                      "omap_digest_mismatch_info",
+                      "size_mismatch_info",
                       "ec_hash_error",
                       "ec_size_error",
                       "info_missing",
                       "info_corrupted",
-                      "obj_size_oi_mismatch",
+                      "obj_size_info_mismatch",
                       "snapset_missing",
                       "snapset_corrupted",
                       "hinfo_missing",
index 828ba799ae05f08b81d891daf8fd07d2a8386ba1..e2cf5f019f84b2724207cef0ad74f130c766fb72 100644 (file)
@@ -381,8 +381,8 @@ objects. If an object named ``foo`` in PG ``0.6`` is truncated, we will have::
                     "size_mismatch"
                 ],
                 "union_shard_errors": [
-                    "data_digest_mismatch_oi",
-                    "size_mismatch_oi"
+                    "data_digest_mismatch_info",
+                    "size_mismatch_info"
                 ],
                 "selected_object_info": "0:602f83fe:::foo:head(16'1 client.4110.0:1 dirty|data_digest|omap_digest s 968 uv 1 dd e978e67f od ffffffff alloc_hint [0 0 0])",
                 "shards": [
@@ -403,8 +403,8 @@ objects. If an object named ``foo`` in PG ``0.6`` is truncated, we will have::
                     {
                         "osd": 2,
                         "errors": [
-                            "data_digest_mismatch_oi",
-                            "size_mismatch_oi"
+                            "data_digest_mismatch_info",
+                            "size_mismatch_info"
                         ],
                         "size": 0,
                         "omap_digest": "0xffffffff",
@@ -435,9 +435,9 @@ In this case, we can learn from the output:
     ``oi`` indicate a comparison with ``selected_object_info``. Look at the
     ``shards`` array to determine which shard has which error(s).
 
-    * ``data_digest_mismatch_oi``: the digest stored in the object-info is not
+    * ``data_digest_mismatch_info``: the digest stored in the object-info is not
       ``0xffffffff``, which is calculated from the shard read from OSD.2
-    * ``size_mismatch_oi``: the size stored in the object-info is different
+    * ``size_mismatch_info``: the size stored in the object-info is different
       from the one read from OSD.2. The latter is 0.
 
 You can repair the inconsistent placement group by executing::
index bcfeb3712960eb25be6c96bd4d0dcc8cf1273322..08db12546af73d4bb49a179ab36ea2c946d5203a 100755 (executable)
@@ -642,8 +642,8 @@ function TEST_corrupt_scrub_replicated() {
         {
           "size": 9,
           "errors": [
-            "size_mismatch_oi",
-            "obj_size_oi_mismatch"
+            "size_mismatch_info",
+            "obj_size_info_mismatch"
           ],
           "osd": 1,
           "primary": true
@@ -651,8 +651,8 @@ function TEST_corrupt_scrub_replicated() {
       ],
       "selected_object_info": "3:ce3f1d6a:::ROBJ1:head(47'54 osd.0.0:53 dirty|omap|data_digest s 7 uv 3 dd 2ddbf8f5 alloc_hint [0 0 0])",
       "union_shard_errors": [
-        "size_mismatch_oi",
-        "obj_size_oi_mismatch"
+        "size_mismatch_info",
+        "obj_size_info_mismatch"
       ],
       "errors": [
         "size_mismatch"
@@ -989,7 +989,7 @@ function TEST_corrupt_scrub_replicated() {
           "object_info": "3:ffdb2004:::ROBJ9:head(47'60 osd.0.0:59 dirty|omap|data_digest s 7 uv 27 dd 2ddbf8f5 alloc_hint [0 0 0])",
           "size": 1,
           "errors": [
-            "obj_size_oi_mismatch"
+            "obj_size_info_mismatch"
           ],
           "osd": 1,
           "primary": true
@@ -997,7 +997,7 @@ function TEST_corrupt_scrub_replicated() {
       ],
       "selected_object_info": "3:ffdb2004:::ROBJ9:head(102'63 client.4433.0:1 dirty|omap|data_digest s 1 uv 67 dd 2b63260d alloc_hint [0 0 0])",
       "union_shard_errors": [
-         "obj_size_oi_mismatch"
+         "obj_size_info_mismatch"
       ],
       "errors": [
         "object_info_inconsistency"
@@ -1076,9 +1076,9 @@ EOF
           "omap_digest": "0xf5fba2c6",
           "size": 9,
           "errors": [
-            "data_digest_mismatch_oi",
-            "size_mismatch_oi",
-            "obj_size_oi_mismatch"
+            "data_digest_mismatch_info",
+            "size_mismatch_info",
+            "obj_size_info_mismatch"
           ],
           "osd": 1,
           "primary": true
@@ -1086,9 +1086,9 @@ EOF
       ],
       "selected_object_info": "3:ce3f1d6a:::ROBJ1:head(47'54 osd.0.0:53 dirty|omap|data_digest s 7 uv 3 dd 2ddbf8f5 alloc_hint [0 0 0])",
       "union_shard_errors": [
-        "data_digest_mismatch_oi",
-        "size_mismatch_oi",
-        "obj_size_oi_mismatch"
+        "data_digest_mismatch_info",
+        "size_mismatch_info",
+        "obj_size_info_mismatch"
       ],
       "errors": [
         "data_digest_mismatch",
@@ -1366,7 +1366,7 @@ EOF
           "omap_digest": "0xf8e11918",
           "size": 7,
           "errors": [
-            "data_digest_mismatch_oi"
+            "data_digest_mismatch_info"
           ],
           "osd": 0,
           "primary": false
@@ -1382,7 +1382,7 @@ EOF
       ],
       "selected_object_info": "3:e97ce31e:::ROBJ2:head(47'56 osd.0.0:55 dirty|omap|data_digest s 7 uv 6 dd 2ddbf8f5 alloc_hint [0 0 0])",
       "union_shard_errors": [
-        "data_digest_mismatch_oi"
+        "data_digest_mismatch_info"
       ],
       "errors": [
         "data_digest_mismatch"
@@ -1639,7 +1639,7 @@ EOF
           "omap_digest": "0x2eecc539",
           "size": 3,
           "errors": [
-            "obj_size_oi_mismatch"
+            "obj_size_info_mismatch"
           ],
           "osd": 0,
           "primary": false
@@ -1656,7 +1656,7 @@ EOF
       ],
       "selected_object_info": "3:ffdb2004:::ROBJ9:head(122'64 client.4532.0:1 dirty|omap|data_digest s 3 uv 68 dd 1f26fb26 alloc_hint [0 0 0])",
       "union_shard_errors": [
-        "obj_size_oi_mismatch"
+        "obj_size_info_mismatch"
       ],
       "errors": [
         "object_info_inconsistency"
@@ -1810,8 +1810,8 @@ function corrupt_scrub_erasure() {
           "size": 9,
           "shard": 0,
           "errors": [
-            "size_mismatch_oi",
-            "obj_size_oi_mismatch"
+            "size_mismatch_info",
+            "obj_size_info_mismatch"
           ],
           "osd": 1,
           "primary": true
@@ -1826,8 +1826,8 @@ function corrupt_scrub_erasure() {
       ],
       "selected_object_info": "3:9175b684:::EOBJ1:head(21'1 client.4179.0:1 dirty|data_digest s 7 uv 1 dd 2ddbf8f5 alloc_hint [0 0 0])",
       "union_shard_errors": [
-        "size_mismatch_oi",
-        "obj_size_oi_mismatch"
+        "size_mismatch_info",
+        "obj_size_info_mismatch"
       ],
       "errors": [
         "size_mismatch"
@@ -2010,8 +2010,8 @@ function corrupt_scrub_erasure() {
           "size": 4096,
           "shard": 0,
           "errors": [
-            "size_mismatch_oi",
-            "obj_size_oi_mismatch"
+            "size_mismatch_info",
+            "obj_size_info_mismatch"
           ],
           "osd": 1,
           "primary": true
@@ -2026,8 +2026,8 @@ function corrupt_scrub_erasure() {
       ],
       "selected_object_info": "3:8549dfb5:::EOBJ5:head(65'7 client.4441.0:1 dirty|data_digest s 7 uv 7 dd 2ddbf8f5 alloc_hint [0 0 0])",
       "union_shard_errors": [
-        "size_mismatch_oi",
-        "obj_size_oi_mismatch"
+        "size_mismatch_info",
+        "obj_size_info_mismatch"
       ],
       "errors": [
         "size_mismatch"
@@ -2218,8 +2218,8 @@ EOF
           "shard": 0,
           "errors": [
             "read_error",
-            "size_mismatch_oi",
-            "obj_size_oi_mismatch"
+            "size_mismatch_info",
+            "obj_size_info_mismatch"
           ],
           "osd": 1,
           "primary": true
@@ -2237,8 +2237,8 @@ EOF
       "selected_object_info": "3:9175b684:::EOBJ1:head(27'1 client.4155.0:1 dirty|data_digest s 7 uv 1 dd 2ddbf8f5 alloc_hint [0 0 0])",
       "union_shard_errors": [
         "read_error",
-        "size_mismatch_oi",
-        "obj_size_oi_mismatch"
+        "size_mismatch_info",
+        "obj_size_info_mismatch"
       ],
       "errors": [
         "size_mismatch"
@@ -2434,8 +2434,8 @@ EOF
           "omap_digest": "0xffffffff",
           "size": 4096,
           "errors": [
-            "size_mismatch_oi",
-            "obj_size_oi_mismatch"
+            "size_mismatch_info",
+            "obj_size_info_mismatch"
           ],
           "shard": 0,
           "osd": 1,
@@ -2453,8 +2453,8 @@ EOF
       ],
       "selected_object_info": "3:8549dfb5:::EOBJ5:head(65'7 client.4288.0:1 dirty|data_digest s 7 uv 7 dd 2ddbf8f5 alloc_hint [0 0 0])",
       "union_shard_errors": [
-        "size_mismatch_oi",
-        "obj_size_oi_mismatch"
+        "size_mismatch_info",
+        "obj_size_info_mismatch"
       ],
       "errors": [
         "size_mismatch"
@@ -2632,8 +2632,8 @@ EOF
           "shard": 0,
           "errors": [
             "read_error",
-            "size_mismatch_oi",
-            "obj_size_oi_mismatch"
+            "size_mismatch_info",
+            "obj_size_info_mismatch"
           ],
           "osd": 1,
           "primary": true
@@ -2651,8 +2651,8 @@ EOF
       "selected_object_info": "3:9175b684:::EOBJ1:head(21'1 client.4179.0:1 dirty|data_digest s 7 uv 1 dd 2ddbf8f5 alloc_hint [0 0 0])",
       "union_shard_errors": [
         "read_error",
-        "size_mismatch_oi",
-        "obj_size_oi_mismatch"
+        "size_mismatch_info",
+        "obj_size_info_mismatch"
       ],
       "errors": [
         "size_mismatch"
@@ -2890,9 +2890,9 @@ EOF
           "size": 4096,
           "shard": 0,
           "errors": [
-            "size_mismatch_oi",
+            "size_mismatch_info",
             "ec_size_error",
-            "obj_size_oi_mismatch"
+            "obj_size_info_mismatch"
           ],
           "osd": 1,
           "primary": true
@@ -2909,9 +2909,9 @@ EOF
       ],
       "selected_object_info": "3:8549dfb5:::EOBJ5:head(65'7 client.4441.0:1 dirty|data_digest s 7 uv 7 dd 2ddbf8f5 alloc_hint [0 0 0])",
       "union_shard_errors": [
-        "size_mismatch_oi",
+        "size_mismatch_info",
         "ec_size_error",
-        "obj_size_oi_mismatch"
+        "obj_size_info_mismatch"
       ],
       "errors": [
         "size_mismatch"
index 2f79fac3e3fc39ec58670fceb5df8d3eef23806b..347f9fb6bcace19d3b378f2ddb75c7c6d9e986e9 100644 (file)
@@ -47,14 +47,14 @@ public:
   void set_missing() {
     errors |= err_t::SHARD_MISSING;
   }
-  void set_omap_digest_mismatch_oi() {
-    errors |= err_t::OMAP_DIGEST_MISMATCH_OI;
+  void set_omap_digest_mismatch_info() {
+    errors |= err_t::OMAP_DIGEST_MISMATCH_INFO;
   }
-  void set_size_mismatch_oi() {
-    errors |= err_t::SIZE_MISMATCH_OI;
+  void set_size_mismatch_info() {
+    errors |= err_t::SIZE_MISMATCH_INFO;
   }
-  void set_data_digest_mismatch_oi() {
-    errors |= err_t::DATA_DIGEST_MISMATCH_OI;
+  void set_data_digest_mismatch_info() {
+    errors |= err_t::DATA_DIGEST_MISMATCH_INFO;
   }
   void set_read_error() {
     errors |= err_t::SHARD_READ_ERR;
@@ -80,8 +80,8 @@ public:
   void set_snapset_corrupted() {
     errors |= err_t::SNAPSET_CORRUPTED;
   }
-  void set_obj_size_oi_mismatch() {
-    errors |= err_t::OBJ_SIZE_OI_MISMATCH;
+  void set_obj_size_info_mismatch() {
+    errors |= err_t::OBJ_SIZE_INFO_MISMATCH;
   }
   void set_hinfo_missing() {
     errors |= err_t::HINFO_MISSING;
index 0f06e8157e0e0008f99c76fb0aa5e48d81e2dba9..652fbe1b18687cd4ae8799d922c414f6c9ea0cfc 100644 (file)
@@ -55,9 +55,12 @@ struct err_t {
     SHARD_MISSING        = 1 << 1,
     SHARD_STAT_ERR       = 1 << 2,
     SHARD_READ_ERR       = 1 << 3,
-    DATA_DIGEST_MISMATCH_OI = 1 << 9,
-    OMAP_DIGEST_MISMATCH_OI = 1 << 10,
-    SIZE_MISMATCH_OI        = 1 << 11,
+    DATA_DIGEST_MISMATCH_OI = 1 << 9,   // Old
+    DATA_DIGEST_MISMATCH_INFO = 1 << 9,
+    OMAP_DIGEST_MISMATCH_OI = 1 << 10,  // Old
+    OMAP_DIGEST_MISMATCH_INFO = 1 << 10,
+    SIZE_MISMATCH_OI        = 1 << 11,  // Old
+    SIZE_MISMATCH_INFO        = 1 << 11,
     SHARD_EC_HASH_MISMATCH  = 1 << 12,
     SHARD_EC_SIZE_MISMATCH  = 1 << 13,
     OI_ATTR_MISSING         = 1 << 14, // Old
@@ -68,14 +71,15 @@ struct err_t {
     SNAPSET_MISSING         = 1 << 16,
     SS_ATTR_CORRUPTED       = 1 << 17, // Old
     SNAPSET_CORRUPTED       = 1 << 17,
-    OBJ_SIZE_OI_MISMATCH      = 1 << 18,
+    OBJ_SIZE_OI_MISMATCH      = 1 << 18, // Old
+    OBJ_SIZE_INFO_MISMATCH      = 1 << 18,
     HINFO_MISSING         = 1 << 19,
     HINFO_CORRUPTED       = 1 << 20
     // When adding more here add to either SHALLOW_ERRORS or DEEP_ERRORS
   };
   uint64_t errors = 0;
-  static constexpr uint64_t SHALLOW_ERRORS = SHARD_MISSING|SHARD_STAT_ERR|SIZE_MISMATCH_OI|INFO_MISSING|INFO_CORRUPTED|SNAPSET_MISSING|SNAPSET_CORRUPTED|OBJ_SIZE_OI_MISMATCH|HINFO_MISSING|HINFO_CORRUPTED;
-  static constexpr uint64_t DEEP_ERRORS = SHARD_READ_ERR|DATA_DIGEST_MISMATCH_OI|OMAP_DIGEST_MISMATCH_OI|SHARD_EC_HASH_MISMATCH|SHARD_EC_SIZE_MISMATCH;
+  static constexpr uint64_t SHALLOW_ERRORS = SHARD_MISSING|SHARD_STAT_ERR|SIZE_MISMATCH_INFO|INFO_MISSING|INFO_CORRUPTED|SNAPSET_MISSING|SNAPSET_CORRUPTED|OBJ_SIZE_INFO_MISMATCH|HINFO_MISSING|HINFO_CORRUPTED;
+  static constexpr uint64_t DEEP_ERRORS = SHARD_READ_ERR|DATA_DIGEST_MISMATCH_INFO|OMAP_DIGEST_MISMATCH_INFO|SHARD_EC_HASH_MISMATCH|SHARD_EC_SIZE_MISMATCH;
   bool has_shard_missing() const {
     return errors & SHARD_MISSING;
   }
@@ -85,15 +89,24 @@ struct err_t {
   bool has_read_error() const {
     return errors & SHARD_READ_ERR;
   }
-  bool has_data_digest_mismatch_oi() const {
+  bool has_data_digest_mismatch_oi() const {   // Compatibility
     return errors & DATA_DIGEST_MISMATCH_OI;
   }
-  bool has_omap_digest_mismatch_oi() const {
+  bool has_data_digest_mismatch_info() const {
+    return errors & DATA_DIGEST_MISMATCH_INFO;
+  }
+  bool has_omap_digest_mismatch_oi() const {   // Compatibility
     return errors & OMAP_DIGEST_MISMATCH_OI;
   }
-  bool has_size_mismatch_oi() const {
+  bool has_omap_digest_mismatch_info() const {
+    return errors & OMAP_DIGEST_MISMATCH_INFO;
+  }
+  bool has_size_mismatch_oi() const {   // Compatibility
     return errors & SIZE_MISMATCH_OI;
   }
+  bool has_size_mismatch_info() const {
+    return errors & SIZE_MISMATCH_INFO;
+  }
   bool has_ec_hash_error() const {
     return errors & SHARD_EC_HASH_MISMATCH;
   }
@@ -130,8 +143,11 @@ struct err_t {
   bool has_deep_errors() const {
     return errors & DEEP_ERRORS;
   }
-  bool has_obj_size_oi_mismatch() const {
+  bool has_obj_size_oi_mismatch() const {   // Compatibility
     return errors & OBJ_SIZE_OI_MISMATCH;
+   }
+  bool has_obj_size_info_mismatch() const {
+    return errors & OBJ_SIZE_INFO_MISMATCH;
   }
   bool has_hinfo_missing() const {
     return errors & HINFO_MISSING;
index 8e5da9178d71cc429609ec62e758d483016d3230..0823ac0528cc45445ee7ded34a9d10e27048979c 100644 (file)
@@ -667,7 +667,7 @@ bool PGBackend::be_compare_scrub_objects(
         errorstream << "data_digest 0x" << std::hex << candidate.digest
                    << " != data_digest 0x" << auth_oi.data_digest << std::dec
                    << " from auth oi " << auth_oi;
-        shard_result.set_data_digest_mismatch_oi();
+        shard_result.set_data_digest_mismatch_info();
       }
     }
     if (auth_oi.is_omap_digest() && candidate.omap_digest_present) {
@@ -678,7 +678,7 @@ bool PGBackend::be_compare_scrub_objects(
         errorstream << "omap_digest 0x" << std::hex << candidate.omap_digest
                    << " != omap_digest 0x" << auth_oi.omap_digest << std::dec
                    << " from auth oi " << auth_oi;
-        shard_result.set_omap_digest_mismatch_oi();
+        shard_result.set_omap_digest_mismatch_info();
       }
     }
   }
@@ -692,7 +692,7 @@ bool PGBackend::be_compare_scrub_objects(
     errorstream << "size " << candidate.size
                << " != size " << oi_size
                << " from auth oi " << auth_oi;
-    shard_result.set_size_mismatch_oi();
+    shard_result.set_size_mismatch_info();
   }
   if (auth.size != candidate.size) {
     if (error != CLEAN)
@@ -893,8 +893,8 @@ map<pg_shard_t, ScrubMap *>::const_iterator
 
     if (i->second.size != be_get_ondisk_size(oi.size)) {
       dout(5) << __func__ << " size " << i->second.size << " oi size " << oi.size << dendl;
-      shard_info.set_obj_size_oi_mismatch();
-      error_string += " obj_size_oi_mismatch";
+      shard_info.set_obj_size_info_mismatch();
+      error_string += " obj_size_info_mismatch";
     }
 
     // Don't use this particular shard due to previous errors
@@ -1074,7 +1074,7 @@ void PGBackend::be_compare_scrubmaps(
       // recorded digest != actual digest?
       if (auth_oi.is_data_digest() && auth_object.digest_present &&
          auth_oi.data_digest != auth_object.digest) {
-        assert(shard_map[auth->first].has_data_digest_mismatch_oi());
+        assert(shard_map[auth->first].has_data_digest_mismatch_info());
        errorstream << pgid << " recorded data digest 0x"
                    << std::hex << auth_oi.data_digest << " != on disk 0x"
                    << auth_object.digest << std::dec << " on " << auth_oi.soid
@@ -1084,7 +1084,7 @@ void PGBackend::be_compare_scrubmaps(
       }
       if (auth_oi.is_omap_digest() && auth_object.omap_digest_present &&
          auth_oi.omap_digest != auth_object.omap_digest) {
-        assert(shard_map[auth->first].has_omap_digest_mismatch_oi());
+        assert(shard_map[auth->first].has_omap_digest_mismatch_info());
        errorstream << pgid << " recorded omap digest 0x"
                    << std::hex << auth_oi.omap_digest << " != on disk 0x"
                    << auth_object.omap_digest << std::dec
index 37ef97f0cc738ae94cfd077ffdfd8fca55dedca8..b923527505b4eed87041f3c994ec87320ee0a20e 100644 (file)
@@ -1330,12 +1330,12 @@ static void dump_errors(const err_t &err, Formatter &f, const char *name)
     f.dump_string("error", "stat_error");
   if (err.has_read_error())
     f.dump_string("error", "read_error");
-  if (err.has_data_digest_mismatch_oi())
-    f.dump_string("error", "data_digest_mismatch_oi");
-  if (err.has_omap_digest_mismatch_oi())
-    f.dump_string("error", "omap_digest_mismatch_oi");
-  if (err.has_size_mismatch_oi())
-    f.dump_string("error", "size_mismatch_oi");
+  if (err.has_data_digest_mismatch_info())
+    f.dump_string("error", "data_digest_mismatch_info");
+  if (err.has_omap_digest_mismatch_info())
+    f.dump_string("error", "omap_digest_mismatch_info");
+  if (err.has_size_mismatch_info())
+    f.dump_string("error", "size_mismatch_info");
   if (err.has_ec_hash_error())
     f.dump_string("error", "ec_hash_error");
   if (err.has_ec_size_error())
@@ -1344,8 +1344,8 @@ static void dump_errors(const err_t &err, Formatter &f, const char *name)
     f.dump_string("error", "info_missing");
   if (err.has_info_corrupted())
     f.dump_string("error", "info_corrupted");
-  if (err.has_obj_size_oi_mismatch())
-    f.dump_string("error", "obj_size_oi_mismatch");
+  if (err.has_obj_size_info_mismatch())
+    f.dump_string("error", "obj_size_info_mismatch");
   if (err.has_snapset_missing())
     f.dump_string("error", "snapset_missing");
   if (err.has_snapset_corrupted())