From 1deb144a2e7a91527084362b75607c39e6e4fa7c Mon Sep 17 00:00:00 2001 From: David Zafman Date: Tue, 12 Sep 2017 22:12:52 -0700 Subject: [PATCH] tools: Show DB state information Signed-off-by: David Zafman (cherry picked from commit 3214882a95f9f70d9f6d28f4e403ee16324530f9) --- src/os/filestore/DBObjectMap.cc | 44 +++++++++++++++++++-------------- src/os/filestore/DBObjectMap.h | 2 ++ src/tools/ceph_osdomap_tool.cc | 4 +++ 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/os/filestore/DBObjectMap.cc b/src/os/filestore/DBObjectMap.cc index 44d48cc436fdb..2ec7deb614732 100644 --- a/src/os/filestore/DBObjectMap.cc +++ b/src/os/filestore/DBObjectMap.cc @@ -1027,7 +1027,7 @@ int DBObjectMap::upgrade_to_v2() return 0; } -int DBObjectMap::init(bool do_upgrade) +int DBObjectMap::get_state() { map result; set to_get; @@ -1038,29 +1038,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) { diff --git a/src/os/filestore/DBObjectMap.h b/src/os/filestore/DBObjectMap.h index d9a5a2998ceb0..1e9dc3ebc0354 100644 --- a/src/os/filestore/DBObjectMap.h +++ b/src/os/filestore/DBObjectMap.h @@ -218,6 +218,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 diff --git a/src/tools/ceph_osdomap_tool.cc b/src/tools/ceph_osdomap_tool.cc index 6e27c2cae9ce7..08ac96d47d08c 100644 --- a/src/tools/ceph_osdomap_tool.cc +++ b/src/tools/ceph_osdomap_tool.cc @@ -125,6 +125,10 @@ int main(int argc, char **argv) { r = 0; + 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()) { -- 2.39.5