From: Adam Kupczyk Date: Wed, 22 Apr 2020 12:01:47 +0000 (+0200) Subject: kv/RocksDBStore: Add protection against mounting database that is during resharding X-Git-Tag: v16.1.0~2102^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=90dd5d8e9e14f6fb1ac4844f299c8d2167891700;p=ceph.git kv/RocksDBStore: Add protection against mounting database that is during resharding Signed-off-by: Adam Kupczyk --- diff --git a/src/kv/RocksDBStore.cc b/src/kv/RocksDBStore.cc index 1693885c0c81..12d285f908c5 100644 --- a/src/kv/RocksDBStore.cc +++ b/src/kv/RocksDBStore.cc @@ -2670,6 +2670,7 @@ int RocksDBStore::prepare_for_reshard(const std::string& new_sharding, std::vector& to_process_columns, std::vector& to_process_handles) { + //0. lock db from opening //1. list existing columns //2. apply merge operator to (main + columns) opts //3. prepare std::vector 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;