]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rados: Improve list-inconsistent json format 9565/head
authorDavid Zafman <dzafman@redhat.com>
Fri, 6 May 2016 06:20:58 +0000 (23:20 -0700)
committerDavid Zafman <dzafman@redhat.com>
Tue, 14 Jun 2016 22:55:06 +0000 (15:55 -0700)
Use array "errors" of strings for the error bits
Change snapshot number to integer instead of hex

Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit 07dc844d6804db93055573ec83e6753773a4c049)

src/test/osd/osd-scrub-snaps.sh
src/tools/rados/rados.cc

index 833685940b2c3ce29c0e2b65c9faca090f4c481d..14d27d1c3c44307d6c3d4920d2a227413f3d905d 100755 (executable)
@@ -166,31 +166,31 @@ function TEST_scrub_snaps() {
     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
index ca5f6d29a6cd8b1ad440725ad4eacf6e5183a6a0..09f95dd2b3779ec061dd29fdf8ca37ad92ab6de9 100644 (file)
@@ -1246,33 +1246,45 @@ static void dump_shard(const shard_info_t& shard,
                       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) {
@@ -1286,10 +1298,6 @@ static void dump_shard(const shard_info_t& shard,
     }
     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,
@@ -1306,7 +1314,7 @@ 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;
   }
 }
@@ -1317,20 +1325,26 @@ static void dump_inconsistent(const inconsistent_obj_t& inc,
   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");
@@ -1345,25 +1359,31 @@ static void dump_inconsistent(const inconsistent_snapset_t& inc,
                              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);
@@ -1372,7 +1392,6 @@ static void dump_inconsistent(const inconsistent_snapset_t& inc,
   }
 
   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);