]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
tools: Show DB state information
authorDavid Zafman <dzafman@redhat.com>
Wed, 13 Sep 2017 05:12:52 +0000 (22:12 -0700)
committerNathan Cutler <ncutler@suse.com>
Thu, 5 Oct 2017 14:44:37 +0000 (16:44 +0200)
Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit 3214882a95f9f70d9f6d28f4e403ee16324530f9)

src/os/filestore/DBObjectMap.cc
src/os/filestore/DBObjectMap.h
src/tools/ceph_osdomap_tool.cc

index b0430c499e5857c381b95aab3c52579cdccb7c85..12c334ade13d249d0af6eb66dcd19fae64c23269 100644 (file)
@@ -1029,7 +1029,7 @@ int DBObjectMap::upgrade_to_v2()
   return 0;
 }
 
-int DBObjectMap::init(bool do_upgrade)
+int DBObjectMap::get_state()
 {
   map<string, bufferlist> result;
   set<string> to_get;
@@ -1040,29 +1040,37 @@ int DBObjectMap::init(bool do_upgrade)
   if (!result.empty()) {
     bufferlist::iterator bliter = result.begin()->second.begin();
     state.decode(bliter);
-    if (state.v < 1) {
-      dout(1) << "DBObjectMap is *very* old; upgrade to an older version first"
-             << dendl;
-      return -ENOTSUP;
-    }
-    if (state.v < 2) { // Needs upgrade
-      if (!do_upgrade) {
-       dout(1) << "DOBjbectMap requires an upgrade,"
-               << " set filestore_update_to"
-               << dendl;
-       return -ENOTSUP;
-      } else {
-       r = upgrade_to_v2();
-       if (r < 0)
-         return r;
-      }
-    }
   } else {
     // New store
     // Version 3 means that complete regions never used
     state.v = 3;
     state.seq = 1;
   }
+  return 0;
+}
+
+int DBObjectMap::init(bool do_upgrade)
+{
+  int ret = get_state();
+  if (ret < 0)
+    return ret;
+  if (state.v < 1) {
+    dout(1) << "DBObjectMap is *very* old; upgrade to an older version first"
+           << dendl;
+    return -ENOTSUP;
+  }
+  if (state.v < 2) { // Needs upgrade
+    if (!do_upgrade) {
+      dout(1) << "DOBjbectMap requires an upgrade,"
+             << " set filestore_update_to"
+             << dendl;
+      return -ENOTSUP;
+    } else {
+      int r = upgrade_to_v2();
+      if (r < 0)
+       return r;
+    }
+  }
   ostringstream ss;
   int errors = check(ss, true);
   if (errors) {
index 3f6798d2ee28f46de92bb3203df581ae0267e120..8c465ac12837be426da250c6f274186491065efa 100644 (file)
@@ -219,6 +219,8 @@ public:
     );
 
   /// Read initial state from backing store
+  int get_state();
+  /// Read initial state and upgrade or initialize state
   int init(bool upgrade = false);
 
   /// Upgrade store to current version
index 21cf60c5aedd7b3a521cc9ca9b2bd8826a9433ec..944192eaec83b72fc6c66847029e7a228d02e3b8 100644 (file)
@@ -113,6 +113,10 @@ int main(int argc, char **argv) {
   // the DBObjectMap which we might want to examine for diagnostic
   // reasons.  Instead use --command repair.
 
+  omap.get_state();
+  std::cout << "Version: " << (int)omap.state.v << std::endl;
+  std::cout << "Seq: " << omap.state.seq << std::endl;
+
   if (cmd == "dump-raw-keys") {
     KeyValueDB::WholeSpaceIterator i = store->get_iterator();
     for (i->seek_to_first(); i->valid(); i->next()) {