summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoao Eduardo Luis <joao.luis@inktank.com>2013-10-13 13:44:29 +0100
committerJoao Eduardo Luis <joao.luis@inktank.com>2013-10-16 21:25:06 +0100
commit85914b27e67879e5d5b8f05c569919155b690d4f (patch)
tree801715a43bc1a5d14c4577ca15610896c8fd8055
parentda69fa09c8274585225471c68c1acc788a3881f4 (diff)
downloadceph-85914b27e67879e5d5b8f05c569919155b690d4f.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.cc34
1 files changed, 29 insertions, 5 deletions
diff --git a/src/tools/ceph-kvstore-tool.cc b/src/tools/ceph-kvstore-tool.cc
index 8fcf3f30e82..ffd462bbabd 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,36 @@ class StoreTool
else
iter->seek_to_first(prefix);
+ uint32_t crc = -1;
+
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) << ")";
+ bufferlist bl;
+ bl.append(rk.first);
+ bl.append(rk.second);
+ bl.append(iter->value());
+
+ crc = bl.crc32c(crc);
+ if (out) {
+ *out << " (" << bl.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 +152,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 +281,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;