]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
tools/ceph-kvstore-tool: add destination store type to store-copy
authorJosh Durgin <jdurgin@redhat.com>
Tue, 26 Sep 2017 02:32:39 +0000 (19:32 -0700)
committerJosh Durgin <jdurgin@redhat.com>
Wed, 4 Apr 2018 14:12:43 +0000 (10:12 -0400)
This allows e.g. copying from leveldb into rocksdb

Signed-off-by: Josh Durgin <jdurgin@redhat.com>
(cherry picked from commit a65a7f0430a32a7748b54f4babecba0f58a5e42f)

src/tools/ceph_kvstore_tool.cc

index 751bf106c70410f8964fe22ade72c9ee516fc1c1..1a9af24108b408598832f5ff746d5f588c20c889 100644 (file)
@@ -142,7 +142,7 @@ class StoreTool
   }
 
   int copy_store_to(string type, const string &other_path,
-                   const int num_keys_per_tx) {
+                   const int num_keys_per_tx, const string &other_type) {
 
     if (num_keys_per_tx <= 0) {
       std::cerr << "must specify a number of keys/tx > 0" << std::endl;
@@ -150,7 +150,7 @@ class StoreTool
     }
 
     // open or create a leveldb store at @p other_path
-    KeyValueDB *other = KeyValueDB::create(g_ceph_context, type, other_path);
+    KeyValueDB *other = KeyValueDB::create(g_ceph_context, other_type, other_path);
     int err = other->create_and_open(std::cerr);
     if (err < 0)
       return err;
@@ -219,7 +219,7 @@ void usage(const char *pname)
     << "  crc <prefix> <key>\n"
     << "  get-size [<prefix> <key>]\n"
     << "  set <prefix> <key> [ver <N>|in <file>]\n"
-    << "  store-copy <path> [num-keys-per-tx]\n"
+    << "  store-copy <path> [num-keys-per-tx] [leveldb|rocksdb|...] \n"
     << "  store-crc <path>\n"
     << std::endl;
 }
@@ -408,8 +408,12 @@ int main(int argc, const char *argv[])
         return 1;
       }
     }
+    string other_store_type = argv[1];
+    if (argc > 6) {
+      other_store_type = argv[6];
+    }
 
-    int ret = st.copy_store_to(argv[1], argv[4], num_keys_per_tx);
+    int ret = st.copy_store_to(argv[1], argv[4], num_keys_per_tx, other_store_type);
     if (ret < 0) {
       std::cerr << "error copying store to path '" << argv[4]
                 << "': " << cpp_strerror(ret) << std::endl;