test $(jq '.inconsistents | length' $dir/json) = "20" || return 1
jq -c '.inconsistents | sort' > $dir/checkcsjson << EOF
-{"inconsistents":[{"name":"obj5","nspace":"","locator":"","snap":"head",
-"extra_clones":true,"extra clones":[7],"clone_missing":true,"missing":[2,1]},
-{"name":"obj4","nspace":"","locator":"","snap":"snapdir","clone_missing":true,
-"missing":[7]},{"name":"obj7","nspace":"","locator":"","snap":"head",
-"head_mismatch":true,"extra_clones":true,"extra clones":[1]},{"name":"obj11",
-"nspace":"","locator":"","snap":"head","extra_clones":true,"extra clones":[1]},
-{"name":"obj6","nspace":"","locator":"","snap":"head","extra_clones":true,
-"extra clones":[1]},{"name":"obj2","nspace":"","locator":"","snap":"snapdir",
-"ss_attr_missing":true,"extra_clones":true,"extra clones":[7,4]},
-{"name":"obj12","nspace":"","locator":"","snap":"head","head_mismatch":true},
-{"name":"obj5","nspace":"","locator":"","snap":"0x00000007",
-"oi_attr_missing":true,"headless":true},{"name":"obj1","nspace":"","locator":"",
-"snap":"0x00000001","headless":true},{"name":"obj11","nspace":"","locator":"",
-"snap":"0x00000001","headless":true},{"name":"obj2","nspace":"","locator":"",
-"snap":"0x00000004","headless":true},{"name":"obj2","nspace":"","locator":"",
-"snap":"0x00000007","headless":true},{"name":"obj6","nspace":"","locator":"",
-"snap":"0x00000001","headless":true},{"name":"obj7","nspace":"","locator":"",
-"snap":"0x00000001","headless":true},{"name":"obj10","nspace":"","locator":"",
-"snap":"0x00000001","size_mismatch":true},{"name":"obj14","nspace":"",
-"locator":"","snap":"0x00000001","size_mismatch":true},{"name":"obj3",
-"nspace":"","locator":"","snap":"head","size_mismatch":true},{"name":"obj5",
-"nspace":"","locator":"","snap":"0x00000004","size_mismatch":true},
-{"name":"obj9","nspace":"","locator":"","snap":"0x00000001",
-"size_mismatch":true},{"name":"obj8","nspace":"","locator":"","snap":"head",
-"snapset_mismatch":true}],"epoch":18}
+{"epoch":18,"inconsistents":[{"name":"obj1","nspace":"","locator":"","snap":1,
+"errors":["headless"]},{"name":"obj10","nspace":"","locator":"","snap":1,
+"errors":["size_mismatch"]},{"name":"obj11","nspace":"","locator":"","snap":1,
+"errors":["headless"]},{"name":"obj14","nspace":"","locator":"","snap":1,
+"errors":["size_mismatch"]},{"name":"obj6","nspace":"","locator":"","snap":1,
+"errors":["headless"]},{"name":"obj7","nspace":"","locator":"","snap":1,
+"errors":["headless"]},{"name":"obj9","nspace":"","locator":"","snap":1,
+"errors":["size_mismatch"]},{"name":"obj2","nspace":"","locator":"","snap":4,
+"errors":["headless"]},{"name":"obj5","nspace":"","locator":"","snap":4,
+"errors":["size_mismatch"]},{"name":"obj2","nspace":"","locator":"","snap":7,
+"errors":["headless"]},{"name":"obj5","nspace":"","locator":"","snap":7,
+"errors":["oi_attr_missing","headless"]},{"name":"obj11","nspace":"",
+"locator":"","snap":"head","errors":["extra_clones"],"extra clones":[1]},
+{"name":"obj12","nspace":"","locator":"","snap":"head",
+"errors":["head_mismatch"]},{"name":"obj3","nspace":"","locator":"",
+"snap":"head","errors":["size_mismatch"]},{"name":"obj5","nspace":"",
+"locator":"","snap":"head","errors":["extra_clones","clone_missing"],
+"extra clones":[7],"missing":[2,1]},{"name":"obj6","nspace":"","locator":"",
+"snap":"head","errors":["extra_clones"],"extra clones":[1]},{"name":"obj7",
+"nspace":"","locator":"","snap":"head","errors":["head_mismatch",
+"extra_clones"],"extra clones":[1]},{"name":"obj8","nspace":"","locator":"",
+"snap":"head","errors":["snapset_mismatch"]},{"name":"obj2","nspace":"",
+"locator":"","snap":"snapdir","errors":["ss_attr_missing","extra_clones"],
+"extra clones":[7,4]},{"name":"obj4","nspace":"","locator":"","snap":"snapdir",
+"errors":["clone_missing"],"missing":[7]}]}
EOF
jq -c '.inconsistents | sort' $dir/json > $dir/csjson
const inconsistent_obj_t& inc,
Formatter &f)
{
+ // A missing shard just has that error and nothing else
if (shard.has_shard_missing()) {
- f.dump_bool("missing", shard.has_shard_missing());
+ f.open_array_section("errors");
+ f.dump_string("error", "missing");
+ f.close_section();
return;
}
+
+ f.dump_unsigned("size", shard.size);
+ if (shard.omap_digest_present) {
+ f.dump_format("omap_digest", "0x%08x", shard.omap_digest);
+ }
+ if (shard.data_digest_present) {
+ f.dump_format("data_digest", "0x%08x", shard.data_digest);
+ }
+
+ f.open_array_section("errors");
if (shard.has_read_error())
- f.dump_bool("read_error", shard.has_read_error());
+ f.dump_string("error", "read_error");
if (shard.has_data_digest_mismatch())
- f.dump_bool("data_digest_mismatch", shard.has_data_digest_mismatch());
+ f.dump_string("error", "data_digest_mismatch");
if (shard.has_omap_digest_mismatch())
- f.dump_bool("omap_digest_mismatch", shard.has_omap_digest_mismatch());
+ f.dump_string("error", "omap_digest_mismatch");
if (shard.has_size_mismatch())
- f.dump_bool("size_mismatch", shard.has_size_mismatch());
+ f.dump_string("error", "size_mismatch");
if (!shard.has_read_error()) {
if (shard.has_data_digest_mismatch_oi())
- f.dump_bool("data_digest_mismatch_oi", shard.has_data_digest_mismatch_oi());
+ f.dump_string("error", "data_digest_mismatch_oi");
if (shard.has_omap_digest_mismatch_oi())
- f.dump_bool("omap_digest_mismatch_oi", shard.has_omap_digest_mismatch_oi());
+ f.dump_string("error", "omap_digest_mismatch_oi");
if (shard.has_size_mismatch_oi())
- f.dump_bool("size_mismatch_oi", shard.has_size_mismatch_oi());
- }
- f.dump_unsigned("size", shard.size);
- if (shard.omap_digest_present) {
- f.dump_format("omap_digest", "0x%08x", shard.omap_digest);
- }
- if (shard.data_digest_present) {
- f.dump_format("data_digest", "0x%08x", shard.data_digest);
+ f.dump_string("error", "size_mismatch_oi");
}
+ if (shard.has_attr_missing())
+ f.dump_string("error", "attr_missing");
+ if (shard.has_attr_unexpected())
+ f.dump_string("error", "attr_unexpected");
+ f.close_section();
+
if (inc.has_attr_mismatch()) {
f.open_object_section("attrs");
for (auto kv : shard.attrs) {
}
f.close_section();
}
- if (shard.has_attr_missing())
- f.dump_bool("attr_missing", shard.has_attr_missing());
- if (shard.has_attr_unexpected())
- f.dump_bool("attr_unexpected", shard.has_attr_unexpected());
}
static void dump_object_id(const object_id_t& object,
f.dump_string("snap", "snapdir");
break;
default:
- f.dump_format("snap", "0x%08x", object.snap);
+ f.dump_unsigned("snap", object.snap);
break;
}
}
f.open_object_section("object");
dump_object_id(inc.object, f);
f.close_section();
+
+ f.open_array_section("errors");
+ if (inc.has_attr_unexpected())
+ f.dump_string("error", "attr_unexpected");
if (inc.has_shard_missing())
- f.dump_bool("missing", inc.has_shard_missing());
+ f.dump_string("error", "missing");
if (inc.has_stat_error())
- f.dump_bool("stat_err", inc.has_stat_error());
+ f.dump_string("error", "stat_error");
if (inc.has_read_error())
- f.dump_bool("read_err", inc.has_read_error());
+ f.dump_string("error", "read_error");
if (inc.has_data_digest_mismatch())
- f.dump_bool("data_digest_mismatch", inc.has_data_digest_mismatch());
+ f.dump_string("error", "data_digest_mismatch");
if (inc.has_omap_digest_mismatch())
- f.dump_bool("omap_digest_mismatch", inc.has_omap_digest_mismatch());
+ f.dump_string("error", "omap_digest_mismatch");
if (inc.has_size_mismatch())
- f.dump_bool("size_mismatch", inc.has_size_mismatch());
+ f.dump_string("error", "size_mismatch");
if (inc.has_attr_mismatch())
- f.dump_bool("attr_mismatch", inc.has_attr_mismatch());
+ f.dump_string("error", "attr_mismatch");
+ f.close_section();
+
f.open_array_section("shards");
for (auto osd_shard : inc.shards) {
f.open_object_section("shard");
Formatter &f)
{
dump_object_id(inc.object, f);
+
+ f.open_array_section("errors");
if (inc.ss_attr_missing())
- f.dump_bool("ss_attr_missing", inc.ss_attr_missing());
+ f.dump_string("error", "ss_attr_missing");
if (inc.ss_attr_corrupted())
- f.dump_bool("ss_attr_corrupted", inc.ss_attr_corrupted());
+ f.dump_string("error", "ss_attr_corrupted");
if (inc.oi_attr_missing())
- f.dump_bool("oi_attr_missing", inc.oi_attr_missing());
+ f.dump_string("error", "oi_attr_missing");
if (inc.oi_attr_corrupted())
- f.dump_bool("oi_attr_corrupted", inc.oi_attr_corrupted());
+ f.dump_string("error", "oi_attr_corrupted");
if (inc.snapset_mismatch())
- f.dump_bool("snapset_mismatch", inc.snapset_mismatch());
+ f.dump_string("error", "snapset_mismatch");
if (inc.head_mismatch())
- f.dump_bool("head_mismatch", inc.head_mismatch());
+ f.dump_string("error", "head_mismatch");
if (inc.headless())
- f.dump_bool("headless", inc.headless());
+ f.dump_string("error", "headless");
if (inc.size_mismatch())
- f.dump_bool("size_mismatch", inc.size_mismatch());
+ f.dump_string("error", "size_mismatch");
+ if (inc.extra_clones())
+ f.dump_string("error", "extra_clones");
+ if (inc.clone_missing())
+ f.dump_string("error", "clone_missing");
+ f.close_section();
if (inc.extra_clones()) {
- f.dump_bool("extra_clones", inc.extra_clones());
f.open_array_section("extra clones");
for (auto snap : inc.clones) {
f.dump_unsigned("snap", snap);
}
if (inc.clone_missing()) {
- f.dump_bool("clone_missing", inc.clone_missing());
f.open_array_section("missing");
for (auto snap : inc.missing) {
f.dump_unsigned("snap", snap);