]> 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)
committerDavid Zafman <dzafman@redhat.com>
Wed, 13 Sep 2017 21:06:25 +0000 (14:06 -0700)
Signed-off-by: David Zafman <dzafman@redhat.com>
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 13e443664b8934576d8184f46353c8504cf03956..1f78cb901c5446cae8bb7d3312379d697ddfd355 100644 (file)
@@ -123,6 +123,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()) {