From 01687b052fdeec6dd2a4798b1e637fc8d15702c7 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Thu, 15 Mar 2018 21:50:30 -0700 Subject: [PATCH] osd rados command: Change "oi" to "info" in scrub handling errors 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 --- doc/rados/command/list-inconsistent-obj.json | 16 ++-- .../troubleshooting/troubleshooting-pg.rst | 12 +-- qa/standalone/scrub/osd-scrub-repair.sh | 80 +++++++++---------- src/common/scrub_types.h | 16 ++-- src/include/rados/rados_types.hpp | 36 ++++++--- src/osd/PGBackend.cc | 14 ++-- src/tools/rados/rados.cc | 16 ++-- 7 files changed, 103 insertions(+), 87 deletions(-) diff --git a/doc/rados/command/list-inconsistent-obj.json b/doc/rados/command/list-inconsistent-obj.json index 6e7fd5f35068c..5de262877f41e 100644 --- a/doc/rados/command/list-inconsistent-obj.json +++ b/doc/rados/command/list-inconsistent-obj.json @@ -60,14 +60,14 @@ "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", @@ -133,14 +133,14 @@ "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", diff --git a/doc/rados/troubleshooting/troubleshooting-pg.rst b/doc/rados/troubleshooting/troubleshooting-pg.rst index 828ba799ae05f..e2cf5f019f84b 100644 --- a/doc/rados/troubleshooting/troubleshooting-pg.rst +++ b/doc/rados/troubleshooting/troubleshooting-pg.rst @@ -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:: diff --git a/qa/standalone/scrub/osd-scrub-repair.sh b/qa/standalone/scrub/osd-scrub-repair.sh index bcfeb3712960e..08db12546af73 100755 --- a/qa/standalone/scrub/osd-scrub-repair.sh +++ b/qa/standalone/scrub/osd-scrub-repair.sh @@ -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" diff --git a/src/common/scrub_types.h b/src/common/scrub_types.h index 2f79fac3e3fc3..347f9fb6bcace 100644 --- a/src/common/scrub_types.h +++ b/src/common/scrub_types.h @@ -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; diff --git a/src/include/rados/rados_types.hpp b/src/include/rados/rados_types.hpp index 0f06e8157e0e0..652fbe1b18687 100644 --- a/src/include/rados/rados_types.hpp +++ b/src/include/rados/rados_types.hpp @@ -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; diff --git a/src/osd/PGBackend.cc b/src/osd/PGBackend.cc index 8e5da9178d71c..0823ac0528cc4 100644 --- a/src/osd/PGBackend.cc +++ b/src/osd/PGBackend.cc @@ -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::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 diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc index 37ef97f0cc738..b923527505b4e 100644 --- a/src/tools/rados/rados.cc +++ b/src/tools/rados/rados.cc @@ -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()) -- 2.39.5