]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kv/RocksDBStore: Add protection against mounting database that is during resharding
authorAdam Kupczyk <akupczyk@redhat.com>
Wed, 22 Apr 2020 12:01:47 +0000 (14:01 +0200)
committerAdam Kupczyk <akupczyk@redhat.com>
Thu, 14 May 2020 16:09:58 +0000 (18:09 +0200)
Signed-off-by: Adam Kupczyk <akupczyk@redhat.com>
src/kv/RocksDBStore.cc

index 1693885c0c81db1e4c5daa182b97b3024e608a26..12d285f908c51a859a11e4c5efd0d4990bc6c7c1 100644 (file)
@@ -2670,6 +2670,7 @@ int RocksDBStore::prepare_for_reshard(const std::string& new_sharding,
                                      std::vector<std::string>& to_process_columns,
                                      std::vector<rocksdb::ColumnFamilyHandle*>& to_process_handles)
 {
+  //0. lock db from opening
   //1. list existing columns
   //2. apply merge operator to (main + columns) opts
   //3. prepare std::vector<rocksdb::ColumnFamilyDescriptor> existing_cfs
@@ -2691,6 +2692,25 @@ int RocksDBStore::prepare_for_reshard(const std::string& new_sharding,
     return -EINVAL;
   }
 
+  //0. lock db from opening
+  std::string stored_sharding_text;
+  rocksdb::ReadFileToString(env,
+                           sharding_def_file,
+                           &stored_sharding_text);
+  if (stored_sharding_text.find("reshardingXcommencingXlocked") == string::npos) {
+    rocksdb::Status status;
+    if (stored_sharding_text.size() != 0)
+      stored_sharding_text += " ";
+    stored_sharding_text += "reshardingXcommencingXlocked";
+    env->CreateDir(sharding_def_dir);
+    status = rocksdb::WriteStringToFile(env, stored_sharding_text,
+                                       sharding_def_file, true);
+    if (!status.ok()) {
+      derr << __func__ << " cannot write to " << sharding_def_file << dendl;
+      return -EIO;
+    }
+  }
+
   //1. list existing columns
 
   rocksdb::Status status;