]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rados: Include epoch in the list-inconsistent-* command output
authorDavid Zafman <dzafman@redhat.com>
Tue, 22 Mar 2016 03:41:03 +0000 (20:41 -0700)
committerDavid Zafman <dzafman@redhat.com>
Tue, 14 Jun 2016 22:55:05 +0000 (15:55 -0700)
Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit df4bc16c4d49489f7398eb1ecc7b9aef93258414)

src/tools/rados/rados.cc

index c4a9c65f3a73dd255887b830c55a94599ac0a42e..428e526cb7abf3d2b3d43b23d349db86cd1d355f 100644 (file)
@@ -1392,9 +1392,9 @@ static int do_get_inconsistent_cmd(const std::vector<const char*> &nargs,
     cerr << "bad pg: " << nargs[1] << std::endl;
     return ret;
   }
-
-  uint32_t interval = 0;
+  uint32_t interval = 0, first_interval = 0;
   const unsigned max_item_num = 32;
+  bool opened = false;
   for (librados::object_id_t start;;) {
     std::vector<T> items;
     auto completion = librados::Rados::aio_create_completion();
@@ -1412,8 +1412,15 @@ static int do_get_inconsistent_cmd(const std::vector<const char*> &nargs,
         cerr << "Unknown error " << cpp_strerror(ret) << std::endl;
       break;
     }
+    // It must be the same interval every time.  EAGAIN would
+    // occur if interval changes.
+    assert(start.name.empty() || first_interval == interval);
     if (start.name.empty()) {
+      first_interval = interval;
+      formatter.open_object_section("info");
+      formatter.dump_int("epoch", interval);
       formatter.open_array_section("inconsistents");
+      opened = true;
     }
     for (auto& inc : items) {
       formatter.open_object_section("inconsistent");
@@ -1428,7 +1435,10 @@ static int do_get_inconsistent_cmd(const std::vector<const char*> &nargs,
     }
     items.clear();
   }
-  formatter.flush(cout);
+  if (opened) {
+    formatter.close_section();
+    formatter.flush(cout);
+  }
   return ret;
 }