diff options
author | Joao Eduardo Luis <joao.luis@inktank.com> | 2013-10-13 13:44:29 +0100 |
---|---|---|
committer | Joao Eduardo Luis <joao.luis@inktank.com> | 2013-10-13 13:44:29 +0100 |
commit | cf1c32c6cde229ed393fd618383e763066bdd79e (patch) | |
tree | e45578e8446dd568634e1947990540171ca4ddb7 | |
parent | 351d5daecd09133557df71a88c941bf4abe84db3 (diff) | |
download | ceph-cf1c32c6cde229ed393fd618383e763066bdd79e.tar.gz |
ceph-kvstore-tool: calc store crc
Reuse 'list()' function to traverse the store and calc not only version's
crcs, but also calc the store's crc.
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
-rw-r--r-- | src/tools/ceph-kvstore-tool.cc | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/tools/ceph-kvstore-tool.cc b/src/tools/ceph-kvstore-tool.cc index 8fcf3f30e82..5b4fdb73b93 100644 --- a/src/tools/ceph-kvstore-tool.cc +++ b/src/tools/ceph-kvstore-tool.cc @@ -39,7 +39,9 @@ class StoreTool db.reset(db_ptr); } - void list(const string &prefix, const bool do_crc) { + uint32_t traverse(const string &prefix, + const bool do_crc, + ostream *out) { KeyValueDB::WholeSpaceIterator iter = db->get_iterator(); if (prefix.empty()) @@ -47,18 +49,31 @@ class StoreTool else iter->seek_to_first(prefix); + uint32_t crc = 0; + while (iter->valid()) { pair<string,string> rk = iter->raw_key(); if (!prefix.empty() && (rk.first != prefix)) - break; + break; - std::cout << rk.first << ":" << rk.second; + if (out) + *out << rk.first << ":" << rk.second; if (do_crc) { - std::cout << " (" << iter->value().crc32c(0) << ")"; + crc = iter->value().crc32c(crc); + if (out) { + *out << " (" << iter->value().crc32c(0) << ")"; + } } - std::cout << std::endl; + if (out) + *out << std::endl; iter->next(); } + + return crc; + } + + void list(const string &prefix, const bool do_crc) { + traverse(prefix, do_crc, &std::cout); } bool exists(const string &prefix) { @@ -132,6 +147,7 @@ void usage(const char *pname) << " crc <prefix> <key>\n" << " get-size\n" << " set <prefix> <key> [ver <N>|in <file>]\n" + << " store-crc <path>\n" << std::endl; } @@ -260,6 +276,9 @@ int main(int argc, const char *argv[]) << prefix << "," << key << ")" << std::endl; return 1; } + } else if (cmd == "store-crc") { + uint32_t crc = st.traverse(string(), true, NULL); + std::cout << "store at '" << path << "' crc " << crc << std::endl; } else { std::cerr << "Unrecognized command: " << cmd << std::endl; |