This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.1 by this push:
new d016936db75 branch-3.1: [improve](cloud-mow)Add white list for delete
bitmap update lock version #50173 (#52147)
d016936db75 is described below
commit d016936db75386829cd1c67f733599af4051c3aa
Author: meiyi <[email protected]>
AuthorDate: Tue Jun 24 10:51:24 2025 +0800
branch-3.1: [improve](cloud-mow)Add white list for delete bitmap update
lock version #50173 (#52147)
Cherry-pick #50173
Co-authored-by: huanghaibin <[email protected]>
---
cloud/src/common/config.h | 7 +-
cloud/src/common/configbase.cpp | 9 +-
cloud/src/common/configbase.h | 3 +
cloud/src/meta-service/CMakeLists.txt | 1 +
.../meta-service/delete_bitmap_lock_white_list.cpp | 84 +++
.../meta-service/delete_bitmap_lock_white_list.h | 47 ++
cloud/src/meta-service/meta_service.cpp | 153 ++--
cloud/src/meta-service/meta_service.h | 24 +-
cloud/src/meta-service/meta_service_job.cpp | 36 +-
cloud/test/meta_service_http_test.cpp | 114 +++
cloud/test/meta_service_job_test.cpp | 825 ++++++++++++++++++---
cloud/test/recycler_test.cpp | 2 +-
12 files changed, 1088 insertions(+), 217 deletions(-)
diff --git a/cloud/src/common/config.h b/cloud/src/common/config.h
index df5856365d1..bbf40cd3826 100644
--- a/cloud/src/common/config.h
+++ b/cloud/src/common/config.h
@@ -288,7 +288,12 @@ CONF_Bool(enable_check_instance_id, "true");
CONF_Bool(enable_loopback_address_for_ms, "false");
// delete_bitmap_lock version config
-CONF_mString(use_delete_bitmap_lock_version, "v1");
+// here is some examples:
+// 1. If instance1,instance2 use v2, config should be
+// delete_bitmap_lock_v2_white_list = instance1;instance2
+// 2. If all instance use v2, config should be
+// delete_bitmap_lock_v2_white_list = *
+CONF_mString(delete_bitmap_lock_v2_white_list, "");
// FOR DEBUGGING
CONF_mBool(use_delete_bitmap_lock_random_version, "false");
diff --git a/cloud/src/common/configbase.cpp b/cloud/src/common/configbase.cpp
index cacbf3479d8..ae32ffb5f4d 100644
--- a/cloud/src/common/configbase.cpp
+++ b/cloud/src/common/configbase.cpp
@@ -26,6 +26,7 @@
#include <list>
#include <map>
#include <mutex>
+#include <shared_mutex>
#include <sstream>
#include <utility>
@@ -38,7 +39,7 @@ namespace doris::cloud::config {
std::map<std::string, Register::Field>* Register::_s_field_map = nullptr;
std::map<std::string, std::function<bool()>>*
RegisterConfValidator::_s_field_validator = nullptr;
std::map<std::string, std::string>* full_conf_map = nullptr;
-std::mutex mutable_string_config_lock;
+std::shared_mutex mutable_string_config_lock;
std::mutex conf_persist_lock;
// trim string
@@ -406,7 +407,7 @@ bool do_set_config(const Register::Field& feild, const
std::string& value, bool
UPDATE_FIELD(feild, value, double, need_persist);
{
// add lock to ensure thread safe
- std::lock_guard<std::mutex> lock(mutable_string_config_lock);
+ std::unique_lock<std::shared_mutex> lock(mutable_string_config_lock);
UPDATE_FIELD(feild, value, std::string, need_persist);
}
return false;
@@ -457,4 +458,8 @@ std::pair<bool, std::string>
set_config(std::unordered_map<std::string, std::str
"failed, plz check config::custom_conf_path and
io status",
custom_conf_path)};
}
+
+std::shared_mutex* get_mutable_string_config_lock() {
+ return &mutable_string_config_lock;
+}
} // namespace doris::cloud::config
diff --git a/cloud/src/common/configbase.h b/cloud/src/common/configbase.h
index 6eee2639468..f1cc3716ba3 100644
--- a/cloud/src/common/configbase.h
+++ b/cloud/src/common/configbase.h
@@ -21,6 +21,7 @@
#include <functional>
#include <map>
#include <mutex>
+#include <shared_mutex>
#include <string>
#include <utility>
#include <vector>
@@ -178,4 +179,6 @@ bool init(const char* conf_file, bool fill_conf_map =
false, bool must_exist = t
std::pair<bool, std::string> set_config(std::unordered_map<std::string,
std::string> field_map,
bool need_persist, const std::string&
custom_conf_path);
+std::shared_mutex* get_mutable_string_config_lock();
+
} // namespace doris::cloud::config
diff --git a/cloud/src/meta-service/CMakeLists.txt
b/cloud/src/meta-service/CMakeLists.txt
index d11f87e7fa2..6a2ea4b921e 100644
--- a/cloud/src/meta-service/CMakeLists.txt
+++ b/cloud/src/meta-service/CMakeLists.txt
@@ -26,4 +26,5 @@ add_library(MetaService
mem_txn_kv.cpp
http_encode_key.cpp
txn_lazy_committer.cpp
+ delete_bitmap_lock_white_list.cpp
)
diff --git a/cloud/src/meta-service/delete_bitmap_lock_white_list.cpp
b/cloud/src/meta-service/delete_bitmap_lock_white_list.cpp
new file mode 100644
index 00000000000..6d2c00a085c
--- /dev/null
+++ b/cloud/src/meta-service/delete_bitmap_lock_white_list.cpp
@@ -0,0 +1,84 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include "delete_bitmap_lock_white_list.h"
+
+namespace doris::cloud {
+
+bool use_new_version_random() {
+ std::mt19937 gen {std::random_device {}()};
+ auto p = 0.5;
+ std::bernoulli_distribution inject_fault {p};
+ if (inject_fault(gen)) {
+ return true;
+ }
+ return false;
+}
+
+DeleteBitmapLockWhiteList::DeleteBitmapLockWhiteList() {}
+
+DeleteBitmapLockWhiteList::~DeleteBitmapLockWhiteList() {}
+
+void DeleteBitmapLockWhiteList::init() {
+ update_white_list(config::delete_bitmap_lock_v2_white_list);
+}
+
+void DeleteBitmapLockWhiteList::update_white_list(std::string white_list) {
+ std::unique_lock<std::shared_mutex> lock(_rw_mutex);
+ _delete_bitmap_lock_v2_white_list_set.clear();
+ if (!white_list.empty()) {
+ auto white_list_vector = split(white_list, ';');
+ for (auto& item : white_list_vector) {
+ if (!item.empty()) {
+ trim(item);
+ _delete_bitmap_lock_v2_white_list_set.insert(item);
+ }
+ }
+ }
+ _last_white_list_value = white_list;
+}
+
+std::string
DeleteBitmapLockWhiteList::get_delete_bitmap_lock_version(std::string
instance_id) {
+ if (config::use_delete_bitmap_lock_random_version) {
+ if (use_new_version_random()) {
+ return "v2";
+ } else {
+ return "v1";
+ }
+ }
+ std::string white_list;
+ {
+ std::shared_lock<std::shared_mutex>
lock(*config::get_mutable_string_config_lock());
+ white_list = config::delete_bitmap_lock_v2_white_list;
+ }
+ if (white_list == "*") {
+ return "v2";
+ }
+ if (_last_white_list_value != white_list) {
+ update_white_list(white_list);
+ }
+ {
+ std::shared_lock<std::shared_mutex> lock(_rw_mutex);
+ auto it = _delete_bitmap_lock_v2_white_list_set.find(instance_id);
+ if (it != _delete_bitmap_lock_v2_white_list_set.end()) {
+ return "v2";
+ } else {
+ return "v1";
+ }
+ }
+}
+} // namespace doris::cloud
\ No newline at end of file
diff --git a/cloud/src/meta-service/delete_bitmap_lock_white_list.h
b/cloud/src/meta-service/delete_bitmap_lock_white_list.h
new file mode 100644
index 00000000000..87b5f06c9f8
--- /dev/null
+++ b/cloud/src/meta-service/delete_bitmap_lock_white_list.h
@@ -0,0 +1,47 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+#include <chrono>
+#include <random>
+#include <set>
+#include <shared_mutex>
+#include <string>
+#include <thread>
+
+#include "common/config.h"
+#include "common/logging.h"
+#include "common/string_util.h"
+
+namespace doris::cloud {
+class DeleteBitmapLockWhiteList;
+class DeleteBitmapLockWhiteList {
+public:
+ DeleteBitmapLockWhiteList();
+ ~DeleteBitmapLockWhiteList();
+ void init();
+ void update_white_list(std::string white_list);
+ std::string get_delete_bitmap_lock_version(std::string instance_id);
+
+private:
+ std::set<std::string> _delete_bitmap_lock_v2_white_list_set;
+ std::string _last_white_list_value;
+ std::shared_mutex _rw_mutex;
+};
+
+} // namespace doris::cloud
diff --git a/cloud/src/meta-service/meta_service.cpp
b/cloud/src/meta-service/meta_service.cpp
index 2de89f26786..eaa93199e17 100644
--- a/cloud/src/meta-service/meta_service.cpp
+++ b/cloud/src/meta-service/meta_service.cpp
@@ -56,6 +56,7 @@
#include "cpp/sync_point.h"
#include "keys.h"
#include "meta-service/codec.h"
+#include "meta-service/delete_bitmap_lock_white_list.h"
#include "meta-service/doris_txn.h"
#include "meta-service/keys.h"
#include "meta-service/meta_service_helper.h"
@@ -77,6 +78,8 @@ MetaServiceImpl::MetaServiceImpl(std::shared_ptr<TxnKv>
txn_kv,
rate_limiter_ = rate_limiter;
rate_limiter_->init(this);
txn_lazy_committer_ = std::make_shared<TxnLazyCommitter>(txn_kv_);
+ delete_bitmap_lock_white_list_ =
std::make_shared<DeleteBitmapLockWhiteList>();
+ delete_bitmap_lock_white_list_->init();
}
MetaServiceImpl::~MetaServiceImpl() = default;
@@ -1984,14 +1987,10 @@ static bool check_delete_bitmap_lock(MetaServiceCode&
code, std::string& msg, st
}
return true;
}
-static bool use_new_version_random() {
- std::mt19937 gen {std::random_device {}()};
- auto p = 0.5;
- std::bernoulli_distribution inject_fault {p};
- if (inject_fault(gen)) {
- return true;
- }
- return false;
+
+void MetaServiceImpl::get_delete_bitmap_lock_version(std::string& use_version,
+ std::string& instance_id)
{
+ use_version =
delete_bitmap_lock_white_list_->get_delete_bitmap_lock_version(instance_id);
}
static bool process_pending_delete_bitmap(MetaServiceCode& code, std::string&
msg,
@@ -2135,10 +2134,6 @@ void
MetaServiceImpl::update_delete_bitmap(google::protobuf::RpcController* cont
const UpdateDeleteBitmapRequest*
request,
UpdateDeleteBitmapResponse*
response,
::google::protobuf::Closure* done) {
- std::string use_version = config::use_delete_bitmap_lock_version;
- if (config::use_delete_bitmap_lock_random_version &&
!use_new_version_random()) {
- use_version = "v1";
- }
RPC_PREPROCESS(update_delete_bitmap);
std::string cloud_unique_id = request->has_cloud_unique_id() ?
request->cloud_unique_id() : "";
if (cloud_unique_id.empty()) {
@@ -2154,6 +2149,8 @@ void
MetaServiceImpl::update_delete_bitmap(google::protobuf::RpcController* cont
LOG(WARNING) << msg << ", cloud_unique_id=" <<
request->cloud_unique_id();
return;
}
+ std::string use_version =
+
delete_bitmap_lock_white_list_->get_delete_bitmap_lock_version(instance_id);
RPC_RATE_LIMIT(update_delete_bitmap)
uint64_t fdb_txn_size = 0;
@@ -2332,7 +2329,8 @@ void
MetaServiceImpl::update_delete_bitmap(google::protobuf::RpcController* cont
<< " total_value_count=" << total_value_count << " unlock=" <<
unlock
<< " total_txn_put_keys=" << total_txn_put_keys
<< " total_txn_put_bytes=" << total_txn_put_bytes
- << " total_txn_size=" << total_txn_size << " total_txn_count="
<< total_txn_count;
+ << " total_txn_size=" << total_txn_size << " total_txn_count="
<< total_txn_count
+ << " instance_id=" << instance_id << " use_version=" <<
use_version;
}
void MetaServiceImpl::get_delete_bitmap(google::protobuf::RpcController*
controller,
@@ -2567,26 +2565,10 @@ static bool
put_delete_bitmap_update_lock_key(MetaServiceCode& code, std::string
void MetaServiceImpl::get_delete_bitmap_update_lock_v2(
google::protobuf::RpcController* controller,
const GetDeleteBitmapUpdateLockRequest* request,
- GetDeleteBitmapUpdateLockResponse* response,
::google::protobuf::Closure* done) {
+ GetDeleteBitmapUpdateLockResponse* response,
::google::protobuf::Closure* done,
+ std::string& instance_id, MetaServiceCode& code, std::string& msg,
std::stringstream& ss) {
VLOG_DEBUG << "get delete bitmap update lock in v2 for table=" <<
request->table_id()
<< ",lock id=" << request->lock_id() << ",initiator=" <<
request->initiator();
- RPC_PREPROCESS(get_delete_bitmap_update_lock);
- std::string cloud_unique_id = request->has_cloud_unique_id() ?
request->cloud_unique_id() : "";
- if (cloud_unique_id.empty()) {
- code = MetaServiceCode::INVALID_ARGUMENT;
- msg = "cloud unique id not set";
- return;
- }
-
- instance_id = get_instance_id(resource_mgr_, cloud_unique_id);
- if (instance_id.empty()) {
- code = MetaServiceCode::INVALID_ARGUMENT;
- msg = "empty instance_id";
- LOG(INFO) << msg << ", cloud_unique_id=" << cloud_unique_id;
- return;
- }
-
- RPC_RATE_LIMIT(get_delete_bitmap_update_lock)
auto table_id = request->table_id();
std::string lock_key = meta_delete_bitmap_update_lock_key({instance_id,
table_id, -1});
bool first_retry = true;
@@ -2915,25 +2897,10 @@ void MetaServiceImpl::get_delete_bitmap_update_lock_v2(
void MetaServiceImpl::get_delete_bitmap_update_lock_v1(
google::protobuf::RpcController* controller,
const GetDeleteBitmapUpdateLockRequest* request,
- GetDeleteBitmapUpdateLockResponse* response,
::google::protobuf::Closure* done) {
+ GetDeleteBitmapUpdateLockResponse* response,
::google::protobuf::Closure* done,
+ std::string& instance_id, MetaServiceCode& code, std::string& msg,
std::stringstream& ss) {
VLOG_DEBUG << "get delete bitmap update lock in v1 for table=" <<
request->table_id()
<< ",lock id=" << request->lock_id() << ",initiator=" <<
request->initiator();
- RPC_PREPROCESS(get_delete_bitmap_update_lock);
- std::string cloud_unique_id = request->has_cloud_unique_id() ?
request->cloud_unique_id() : "";
- if (cloud_unique_id.empty()) {
- code = MetaServiceCode::INVALID_ARGUMENT;
- msg = "cloud unique id not set";
- return;
- }
- instance_id = get_instance_id(resource_mgr_, cloud_unique_id);
- if (instance_id.empty()) {
- code = MetaServiceCode::INVALID_ARGUMENT;
- msg = "empty instance_id";
- LOG(INFO) << msg << ", cloud_unique_id=" << cloud_unique_id;
- return;
- }
-
- RPC_RATE_LIMIT(get_delete_bitmap_update_lock)
std::unique_ptr<Transaction> txn;
TxnErrorCode err = txn_kv_->create_txn(&txn);
if (err != TxnErrorCode::TXN_OK) {
@@ -3103,26 +3070,10 @@ void MetaServiceImpl::get_delete_bitmap_update_lock_v1(
void MetaServiceImpl::remove_delete_bitmap_update_lock_v2(
google::protobuf::RpcController* controller,
const RemoveDeleteBitmapUpdateLockRequest* request,
- RemoveDeleteBitmapUpdateLockResponse* response,
::google::protobuf::Closure* done) {
+ RemoveDeleteBitmapUpdateLockResponse* response,
::google::protobuf::Closure* done,
+ std::string& instance_id, MetaServiceCode& code, std::string& msg,
std::stringstream& ss) {
VLOG_DEBUG << "remove delete bitmap update lock in v2 for table=" <<
request->table_id()
<< ",lock id=" << request->lock_id() << ",initiator=" <<
request->initiator();
- RPC_PREPROCESS(remove_delete_bitmap_update_lock);
- std::string cloud_unique_id = request->has_cloud_unique_id() ?
request->cloud_unique_id() : "";
- if (cloud_unique_id.empty()) {
- code = MetaServiceCode::INVALID_ARGUMENT;
- msg = "cloud unique id not set";
- return;
- }
-
- instance_id = get_instance_id(resource_mgr_, cloud_unique_id);
- if (instance_id.empty()) {
- code = MetaServiceCode::INVALID_ARGUMENT;
- msg = "empty instance_id";
- LOG(INFO) << msg << ", cloud_unique_id=" << cloud_unique_id;
- return;
- }
-
- RPC_RATE_LIMIT(remove_delete_bitmap_update_lock)
std::unique_ptr<Transaction> txn;
TxnErrorCode err = txn_kv_->create_txn(&txn);
if (err != TxnErrorCode::TXN_OK) {
@@ -3198,24 +3149,10 @@ void
MetaServiceImpl::remove_delete_bitmap_update_lock_v2(
void MetaServiceImpl::remove_delete_bitmap_update_lock_v1(
google::protobuf::RpcController* controller,
const RemoveDeleteBitmapUpdateLockRequest* request,
- RemoveDeleteBitmapUpdateLockResponse* response,
::google::protobuf::Closure* done) {
+ RemoveDeleteBitmapUpdateLockResponse* response,
::google::protobuf::Closure* done,
+ std::string& instance_id, MetaServiceCode& code, std::string& msg,
std::stringstream& ss) {
VLOG_DEBUG << "remove delete bitmap update lock in v1 for table=" <<
request->table_id()
<< ",lock id=" << request->lock_id() << ",initiator=" <<
request->initiator();
- RPC_PREPROCESS(remove_delete_bitmap_update_lock);
- std::string cloud_unique_id = request->has_cloud_unique_id() ?
request->cloud_unique_id() : "";
- if (cloud_unique_id.empty()) {
- code = MetaServiceCode::INVALID_ARGUMENT;
- msg = "cloud unique id not set";
- return;
- }
- instance_id = get_instance_id(resource_mgr_, cloud_unique_id);
- if (instance_id.empty()) {
- code = MetaServiceCode::INVALID_ARGUMENT;
- msg = "empty instance_id";
- LOG(INFO) << msg << ", cloud_unique_id=" << cloud_unique_id;
- return;
- }
- RPC_RATE_LIMIT(remove_delete_bitmap_update_lock)
std::unique_ptr<Transaction> txn;
TxnErrorCode err = txn_kv_->create_txn(&txn);
if (err != TxnErrorCode::TXN_OK) {
@@ -3279,14 +3216,30 @@ void
MetaServiceImpl::get_delete_bitmap_update_lock(google::protobuf::RpcControl
const
GetDeleteBitmapUpdateLockRequest* request,
GetDeleteBitmapUpdateLockResponse* response,
::google::protobuf::Closure* done) {
- std::string use_version = config::use_delete_bitmap_lock_version;
- if (config::use_delete_bitmap_lock_random_version &&
!use_new_version_random()) {
- use_version = "v1";
+ RPC_PREPROCESS(get_delete_bitmap_update_lock);
+ std::string cloud_unique_id = request->has_cloud_unique_id() ?
request->cloud_unique_id() : "";
+ if (cloud_unique_id.empty()) {
+ code = MetaServiceCode::INVALID_ARGUMENT;
+ msg = "cloud unique id not set";
+ return;
+ }
+ instance_id = get_instance_id(resource_mgr_, cloud_unique_id);
+ if (instance_id.empty()) {
+ code = MetaServiceCode::INVALID_ARGUMENT;
+ msg = "empty instance_id";
+ return;
}
+ RPC_RATE_LIMIT(get_delete_bitmap_update_lock)
+ std::string use_version =
+
delete_bitmap_lock_white_list_->get_delete_bitmap_lock_version(instance_id);
+ LOG(INFO) << "get_delete_bitmap_update_lock instance_id=" << instance_id
+ << " use_version=" << use_version;
if (use_version == "v2") {
- get_delete_bitmap_update_lock_v2(controller, request, response, done);
+ get_delete_bitmap_update_lock_v2(controller, request, response, done,
instance_id, code,
+ msg, ss);
} else {
- get_delete_bitmap_update_lock_v1(controller, request, response, done);
+ get_delete_bitmap_update_lock_v1(controller, request, response, done,
instance_id, code,
+ msg, ss);
}
}
@@ -3294,14 +3247,30 @@ void MetaServiceImpl::remove_delete_bitmap_update_lock(
google::protobuf::RpcController* controller,
const RemoveDeleteBitmapUpdateLockRequest* request,
RemoveDeleteBitmapUpdateLockResponse* response,
::google::protobuf::Closure* done) {
- std::string use_version = config::use_delete_bitmap_lock_version;
- if (config::use_delete_bitmap_lock_random_version &&
!use_new_version_random()) {
- use_version = "v1";
+ RPC_PREPROCESS(remove_delete_bitmap_update_lock);
+ std::string cloud_unique_id = request->has_cloud_unique_id() ?
request->cloud_unique_id() : "";
+ if (cloud_unique_id.empty()) {
+ code = MetaServiceCode::INVALID_ARGUMENT;
+ msg = "cloud unique id not set";
+ return;
+ }
+ instance_id = get_instance_id(resource_mgr_, cloud_unique_id);
+ if (instance_id.empty()) {
+ code = MetaServiceCode::INVALID_ARGUMENT;
+ msg = "empty instance_id";
+ return;
}
+ RPC_RATE_LIMIT(remove_delete_bitmap_update_lock)
+ std::string use_version =
+
delete_bitmap_lock_white_list_->get_delete_bitmap_lock_version(instance_id);
+ LOG(INFO) << "remove_delete_bitmap_update_lock instance_id=" << instance_id
+ << " use_version=" << use_version;
if (use_version == "v2") {
- remove_delete_bitmap_update_lock_v2(controller, request, response,
done);
+ remove_delete_bitmap_update_lock_v2(controller, request, response,
done, instance_id, code,
+ msg, ss);
} else {
- remove_delete_bitmap_update_lock_v1(controller, request, response,
done);
+ remove_delete_bitmap_update_lock_v1(controller, request, response,
done, instance_id, code,
+ msg, ss);
}
}
diff --git a/cloud/src/meta-service/meta_service.h
b/cloud/src/meta-service/meta_service.h
index 0bc0b7ce8c1..b537c35b32d 100644
--- a/cloud/src/meta-service/meta_service.h
+++ b/cloud/src/meta-service/meta_service.h
@@ -29,6 +29,7 @@
#include "common/config.h"
#include "cpp/sync_point.h"
+#include "meta-service/delete_bitmap_lock_white_list.h"
#include "meta-service/txn_kv.h"
#include "meta-service/txn_lazy_committer.h"
#include "rate-limiter/rate_limiter.h"
@@ -324,6 +325,8 @@ public:
MetaServiceResponseStatus fix_tablet_stats(std::string cloud_unique_id_str,
std::string table_id_str);
+ void get_delete_bitmap_lock_version(std::string& use_version, std::string&
instance_id);
+
private:
std::pair<MetaServiceCode, std::string> alter_instance(
const AlterInstanceRequest* request,
@@ -332,27 +335,36 @@ private:
void get_delete_bitmap_update_lock_v2(google::protobuf::RpcController*
controller,
const
GetDeleteBitmapUpdateLockRequest* request,
GetDeleteBitmapUpdateLockResponse*
response,
- ::google::protobuf::Closure* done);
+ ::google::protobuf::Closure* done,
+ std::string& instance_id,
MetaServiceCode& code,
+ std::string& msg, std::stringstream&
ss);
void get_delete_bitmap_update_lock_v1(google::protobuf::RpcController*
controller,
const
GetDeleteBitmapUpdateLockRequest* request,
GetDeleteBitmapUpdateLockResponse*
response,
- ::google::protobuf::Closure* done);
+ ::google::protobuf::Closure* done,
+ std::string& instance_id,
MetaServiceCode& code,
+ std::string& msg, std::stringstream&
ss);
void remove_delete_bitmap_update_lock_v2(google::protobuf::RpcController*
controller,
const
RemoveDeleteBitmapUpdateLockRequest* request,
RemoveDeleteBitmapUpdateLockResponse* response,
- ::google::protobuf::Closure*
done);
+ ::google::protobuf::Closure* done,
+ std::string& instance_id,
MetaServiceCode& code,
+ std::string& msg,
std::stringstream& ss);
void remove_delete_bitmap_update_lock_v1(google::protobuf::RpcController*
controller,
const
RemoveDeleteBitmapUpdateLockRequest* request,
RemoveDeleteBitmapUpdateLockResponse* response,
- ::google::protobuf::Closure*
done);
+ ::google::protobuf::Closure* done,
+ std::string& instance_id,
MetaServiceCode& code,
+ std::string& msg,
std::stringstream& ss);
std::shared_ptr<TxnKv> txn_kv_;
std::shared_ptr<ResourceManager> resource_mgr_;
std::shared_ptr<RateLimiter> rate_limiter_;
std::shared_ptr<TxnLazyCommitter> txn_lazy_committer_;
+ std::shared_ptr<DeleteBitmapLockWhiteList> delete_bitmap_lock_white_list_;
};
class MetaServiceProxy final : public MetaService {
@@ -734,6 +746,10 @@ public:
call_impl(&cloud::MetaService::get_schema_dict, controller, request,
response, done);
}
+ void get_delete_bitmap_lock_version(std::string& use_version, std::string&
instance_id) {
+ impl_->get_delete_bitmap_lock_version(use_version, instance_id);
+ }
+
private:
template <typename Request, typename Response>
using MetaServiceMethod = void
(cloud::MetaService::*)(::google::protobuf::RpcController*,
diff --git a/cloud/src/meta-service/meta_service_job.cpp
b/cloud/src/meta-service/meta_service_job.cpp
index b00d834e322..0c77d5d33b8 100644
--- a/cloud/src/meta-service/meta_service_job.cpp
+++ b/cloud/src/meta-service/meta_service_job.cpp
@@ -672,21 +672,12 @@ static void
remove_delete_bitmap_update_lock(std::unique_ptr<Transaction>& txn,
}
}
-static bool use_new_version_random() {
- std::mt19937 gen {std::random_device {}()};
- auto p = 0.5;
- std::bernoulli_distribution inject_fault {p};
- if (inject_fault(gen)) {
- return true;
- }
- return false;
-}
-
void process_compaction_job(MetaServiceCode& code, std::string& msg,
std::stringstream& ss,
std::unique_ptr<Transaction>& txn,
const FinishTabletJobRequest* request,
FinishTabletJobResponse* response,
TabletJobInfoPB& recorded_job,
- std::string& instance_id, std::string& job_key,
bool& need_commit) {
+ std::string& instance_id, std::string& job_key,
bool& need_commit,
+ std::string& use_version) {
//==========================================================================
// check
//==========================================================================
@@ -757,10 +748,6 @@ void process_compaction_job(MetaServiceCode& code,
std::string& msg, std::string
INSTANCE_LOG(INFO) << "abort tablet compaction job, tablet_id=" <<
tablet_id
<< " key=" << hex(job_key);
if (compaction.has_delete_bitmap_lock_initiator()) {
- std::string use_version = config::use_delete_bitmap_lock_version;
- if (config::use_delete_bitmap_lock_random_version &&
!use_new_version_random()) {
- use_version = "v1";
- }
remove_delete_bitmap_update_lock(
txn, instance_id, table_id, tablet_id,
COMPACTION_DELETE_BITMAP_LOCK_ID,
compaction.delete_bitmap_lock_initiator(), use_version);
@@ -913,10 +900,6 @@ void process_compaction_job(MetaServiceCode& code,
std::string& msg, std::string
// remove delete bitmap update lock for MoW table
if (compaction.has_delete_bitmap_lock_initiator()) {
- std::string use_version = config::use_delete_bitmap_lock_version;
- if (config::use_delete_bitmap_lock_random_version &&
!use_new_version_random()) {
- use_version = "v1";
- }
bool success = check_and_remove_delete_bitmap_update_lock(
code, msg, ss, txn, instance_id, table_id, tablet_id,
COMPACTION_DELETE_BITMAP_LOCK_ID,
compaction.delete_bitmap_lock_initiator(),
@@ -1101,7 +1084,8 @@ void process_schema_change_job(MetaServiceCode& code,
std::string& msg, std::str
std::unique_ptr<Transaction>& txn,
const FinishTabletJobRequest* request,
FinishTabletJobResponse* response,
TabletJobInfoPB& recorded_job,
- std::string& instance_id, std::string& job_key,
bool& need_commit) {
+ std::string& instance_id, std::string& job_key,
bool& need_commit,
+ std::string& use_version) {
//==========================================================================
// check
//==========================================================================
@@ -1417,10 +1401,6 @@ void process_schema_change_job(MetaServiceCode& code,
std::string& msg, std::str
// process mow table, check lock
if (new_tablet_meta.enable_unique_key_merge_on_write()) {
- std::string use_version = config::use_delete_bitmap_lock_version;
- if (config::use_delete_bitmap_lock_random_version &&
!use_new_version_random()) {
- use_version = "v1";
- }
bool success = check_and_remove_delete_bitmap_update_lock(
code, msg, ss, txn, instance_id, new_table_id, new_tablet_id,
SCHEMA_CHANGE_DELETE_BITMAP_LOCK_ID,
schema_change.delete_bitmap_lock_initiator(),
@@ -1585,18 +1565,20 @@ void
MetaServiceImpl::finish_tablet_job(::google::protobuf::RpcController* contr
return;
}
});
-
+ std::string use_version =
+
delete_bitmap_lock_white_list_->get_delete_bitmap_lock_version(instance_id);
+ LOG(INFO) << "finish_tablet_job instance_id=" << instance_id << "
use_version=" << use_version;
// Process compaction commit
if (!request->job().compaction().empty()) {
process_compaction_job(code, msg, ss, txn, request, response,
recorded_job, instance_id,
- job_key, need_commit);
+ job_key, need_commit, use_version);
return;
}
// Process schema change commit
if (request->job().has_schema_change()) {
process_schema_change_job(code, msg, ss, txn, request, response,
recorded_job, instance_id,
- job_key, need_commit);
+ job_key, need_commit, use_version);
return;
}
}
diff --git a/cloud/test/meta_service_http_test.cpp
b/cloud/test/meta_service_http_test.cpp
index 7131505ae7f..c16e8e705df 100644
--- a/cloud/test/meta_service_http_test.cpp
+++ b/cloud/test/meta_service_http_test.cpp
@@ -1769,6 +1769,101 @@ TEST(MetaServiceHttpTest, UpdateConfig) {
ASSERT_EQ(retention_s, 259219);
}
}
+ {
+ auto [status_code, content] =
+ ctx.query<std::string>("update_config",
+
"configs=delete_bitmap_lock_v2_white_list="
+
"warehouse2;warehouse3&persist=true");
+
+ ASSERT_EQ(status_code, 200);
+ ASSERT_EQ(config::delete_bitmap_lock_v2_white_list,
"warehouse2;warehouse3");
+ auto& meta_service = ctx.meta_service_;
+ std::string use_version = "";
+ std::string instance_id = "warehouse1";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v1");
+ instance_id = "warehouse2";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v2");
+ instance_id = "warehouse3";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v2");
+ config::Properties props;
+ ASSERT_TRUE(props.load(config::custom_conf_path.c_str(), true));
+ {
+ bool new_val_set = false;
+ std::string white_list = "";
+
ASSERT_TRUE(props.get_or_default("delete_bitmap_lock_v2_white_list", nullptr,
+ white_list, &new_val_set));
+ ASSERT_TRUE(new_val_set);
+ ASSERT_EQ(white_list, "warehouse2;warehouse3");
+ instance_id = "warehouse1";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v1");
+ instance_id = "warehouse2";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v2");
+ instance_id = "warehouse3";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v2");
+ }
+ }
+ //resend config will rewrite it
+ {
+ auto [status_code, content] = ctx.query<std::string>(
+ "update_config",
"configs=delete_bitmap_lock_v2_white_list=''&persist=true");
+ ASSERT_EQ(status_code, 200);
+ ASSERT_EQ(config::delete_bitmap_lock_v2_white_list, "''");
+ auto& meta_service = ctx.meta_service_;
+ std::string use_version = "";
+ std::string instance_id = "warehouse1";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v1");
+ instance_id = "warehouse2";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v1");
+ instance_id = "warehouse3";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v1");
+ }
+ {
+ auto [status_code, content] =
+ ctx.query<std::string>("update_config",
+
"configs=delete_bitmap_lock_v2_white_list="
+
"warehouse4;warehouse5&persist=true");
+ ASSERT_EQ(status_code, 200);
+ ASSERT_EQ(config::delete_bitmap_lock_v2_white_list,
"warehouse4;warehouse5");
+ auto& meta_service = ctx.meta_service_;
+ std::string use_version = "";
+ std::string instance_id = "warehouse3";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v1");
+ instance_id = "warehouse4";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v2");
+ instance_id = "warehouse5";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v2");
+ config::Properties props;
+ ASSERT_TRUE(props.load(config::custom_conf_path.c_str(), true));
+ {
+ bool new_val_set = false;
+ std::string white_list = "";
+
ASSERT_TRUE(props.get_or_default("delete_bitmap_lock_v2_white_list", nullptr,
+ white_list, &new_val_set));
+ ASSERT_TRUE(new_val_set);
+ ASSERT_EQ(white_list, "warehouse4;warehouse5");
+ instance_id = "warehouse3";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v1");
+ instance_id = "warehouse4";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v2");
+ instance_id = "warehouse5";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v2");
+ }
+ }
{
auto [status_code, content] = ctx.query<std::string>(
"update_config",
"configs=enable_s3_rate_limiter=false&persist=true");
@@ -1801,6 +1896,25 @@ TEST(MetaServiceHttpTest, UpdateConfig) {
ASSERT_TRUE(new_val_set);
ASSERT_FALSE(enable_s3_rate_limiter);
}
+ {
+ bool new_val_set = false;
+ std::string white_list = "";
+
ASSERT_TRUE(props.get_or_default("delete_bitmap_lock_v2_white_list", nullptr,
+ white_list, &new_val_set));
+ ASSERT_TRUE(new_val_set);
+ ASSERT_EQ(white_list, "warehouse4;warehouse5");
+ auto& meta_service = ctx.meta_service_;
+ std::string use_version = "";
+ std::string instance_id = "warehouse3";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v1");
+ instance_id = "warehouse4";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v2");
+ instance_id = "warehouse5";
+ meta_service->get_delete_bitmap_lock_version(use_version,
instance_id);
+ ASSERT_EQ(use_version, "v2");
+ }
}
std::filesystem::remove(config::custom_conf_path);
config::custom_conf_path = original_conf_path;
diff --git a/cloud/test/meta_service_job_test.cpp
b/cloud/test/meta_service_job_test.cpp
index 048295d8643..f0e5cb8fe3d 100644
--- a/cloud/test/meta_service_job_test.cpp
+++ b/cloud/test/meta_service_job_test.cpp
@@ -152,11 +152,13 @@ void insert_rowsets(TxnKv* txn_kv, int64_t table_id,
int64_t index_id, int64_t p
}
MetaServiceCode get_delete_bitmap_lock(MetaServiceProxy* meta_service, int64_t
table_id,
- int64_t lock_id, int64_t initor,
int64_t expiration = 5) {
+ int64_t lock_id, int64_t initor,
+ std::string cloud_unique_id =
"test_cloud_unique_id",
+ int64_t expiration = 5) {
brpc::Controller cntl;
GetDeleteBitmapUpdateLockRequest req;
GetDeleteBitmapUpdateLockResponse res;
- req.set_cloud_unique_id("test_cloud_unique_id");
+ req.set_cloud_unique_id(cloud_unique_id);
req.set_table_id(table_id);
req.set_expiration(expiration);
req.set_lock_id(lock_id);
@@ -1115,6 +1117,41 @@ TEST(MetaServiceJobTest, CompactionJobTest) {
ASSERT_NO_FATAL_FAILURE(test_abort_compaction_job(1, 2, 3, 7));
}
+void check_delete_bitmap_lock(MetaServiceProxy* meta_service, std::string
instance_id,
+ int64_t table_id, int64_t lock_id, bool exist) {
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(meta_service->txn_kv()->create_txn(&txn), TxnErrorCode::TXN_OK);
+ std::string lock_key = meta_delete_bitmap_update_lock_key({instance_id,
table_id, -1});
+ std::string lock_val;
+ DeleteBitmapUpdateLockPB lock_info;
+ TxnErrorCode err = txn->get(lock_key, &lock_val);
+ if (exist) {
+ ASSERT_TRUE(err == TxnErrorCode::TXN_OK);
+ } else {
+ ASSERT_TRUE(err == TxnErrorCode::TXN_KEY_NOT_FOUND);
+ return;
+ }
+ ASSERT_TRUE(lock_info.ParseFromString(lock_val));
+ ASSERT_TRUE(lock_info.lock_id() == lock_id);
+}
+
+void check_compaction_key(MetaServiceProxy* meta_service, std::string
instance_id, int64_t table_id,
+ int64_t initiator, bool exist) {
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(meta_service->txn_kv()->create_txn(&txn), TxnErrorCode::TXN_OK);
+ std::string tablet_compaction_key =
+ mow_tablet_compaction_key({instance_id, table_id, initiator});
+ std::string tablet_compaction_val;
+ TxnErrorCode err = txn->get(tablet_compaction_key, &tablet_compaction_val);
+ LOG(INFO) << "check_compaction_key instance_id=" << instance_id <<
",initiator=" << initiator
+ << ",exist=" << exist << ",err=" << err;
+ if (exist) {
+ ASSERT_TRUE(err == TxnErrorCode::TXN_OK);
+ } else {
+ ASSERT_TRUE(err == TxnErrorCode::TXN_KEY_NOT_FOUND);
+ }
+}
+
TEST(MetaServiceJobTest, DeleteBitmapUpdateLockCompatibilityTest) {
auto meta_service = get_meta_service();
auto sp = SyncPoint::get_instance();
@@ -1132,7 +1169,8 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
auto test_start_compaction_job = [&](int64_t table_id, int64_t index_id,
int64_t partition_id,
int64_t tablet_id,
TabletCompactionJobPB::CompactionType
type,
- std::string job_id = "job_id123") {
+ std::string job_id = "job_id123",
+ std::string instance_id =
"MetaServiceJobTest") {
StartTabletJobResponse res;
auto index_key = meta_tablet_idx_key({instance_id, tablet_id});
@@ -1160,7 +1198,8 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
int64_t tablet_id,
TabletCompactionJobPB::CompactionType type,
int64_t initiator = 12345,
- std::string job_id = "job_id123") {
+ std::string job_id = "job_id123",
+ std::string instance_id =
"MetaServiceJobTest") {
FinishTabletJobRequest req;
auto compaction = req.mutable_job()->add_compaction();
@@ -1318,21 +1357,21 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
// case 1: lock key does not exist, get and remove load lock in new way,
success
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
auto res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 123,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 123,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// case 2: lock key does not exist, get and remove load lock in old way,
success
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 123, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 123,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// case 3: lock key does not exist, get and remove compaction lock in new
way, success
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 12345);
ASSERT_EQ(res_code, MetaServiceCode::OK);
@@ -1343,7 +1382,7 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
clear_rowsets(5);
// case 4: lock key does not exist, get and remove compaction lock in old
way, success
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 12345);
ASSERT_EQ(res_code, MetaServiceCode::OK);
@@ -1358,14 +1397,14 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 5.2 load get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 222, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 5.3 compaction get lock in new way, failed
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 111);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_CONFLICT);
// 5.4 load remove lock in old way, success
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 222,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
@@ -1374,14 +1413,14 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 6.2 load get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 222, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 6.3 compaction get lock in old way, failed
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 111);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_CONFLICT);
// 6.4 load remove lock in new way, success
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 222,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
@@ -1391,14 +1430,14 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
clear_rowsets(table_id);
// 7.2 compaction get lock in new way
remove_delete_bitmap_lock(meta_service.get(), table_id);
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 777);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 7.3 load get lock in new way
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 123, -1);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_CONFLICT);
// 7.4 compaction update delete bitmap in old way failed, abort compaction
job
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
777);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1410,14 +1449,14 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 8.2 compaction get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 888);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 8.3 load get lock in old way
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 124, -1);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_CONFLICT);
// 8.4 compaction update delete bitmap in new way failed, abort compaction
job
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
888);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1429,11 +1468,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 9.2 compaction1 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 901);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 9.3 compaction2 get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 902);
ASSERT_EQ(res_code, MetaServiceCode::OK);
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
@@ -1443,13 +1482,13 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
clear_rowsets(5);
// 9.4 load get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 199, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 199,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 9.5 compaction3 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 903);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 9.6 compaction1 update delete bitmap in new way failed, abort job
@@ -1464,11 +1503,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 10.2 compaction1 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1001);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 10.3 compaction2 get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1002);
ASSERT_EQ(res_code, MetaServiceCode::OK);
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
@@ -1478,17 +1517,17 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
clear_rowsets(5);
// 10.4 load get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1910, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1910,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 10.5 compaction3 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1003);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 10.6 compaction1 update delete bitmap in new way success, commit job
failed
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1001);
ASSERT_EQ(res_code, MetaServiceCode::OK);
@@ -1501,11 +1540,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 11.2 compaction1 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1101);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 11.3 compaction2 get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1102);
ASSERT_EQ(res_code, MetaServiceCode::OK);
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
@@ -1520,11 +1559,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 11.5 compaction3 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1103);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 11.6 compaction1 update delete bitmap in new way failed, abort job
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1101);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1536,11 +1575,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 12.2 compaction1 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1201);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 12.3 compaction2 get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1202);
ASSERT_EQ(res_code, MetaServiceCode::OK);
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
@@ -1550,17 +1589,17 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
clear_rowsets(5);
// 12.4 sc get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 12.5 compaction3 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1203);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 12.6 compaction1 update delete bitmap in new way success, commit job
failed
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1201);
ASSERT_EQ(res_code, MetaServiceCode::OK);
@@ -1573,11 +1612,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 13.2 compaction1 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1301);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 13.3 compaction2 get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1302);
ASSERT_EQ(res_code, MetaServiceCode::OK);
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
@@ -1587,17 +1626,17 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
clear_rowsets(5);
// 13.4 load get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1390, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1390,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 13.5 compaction3 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1303);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 13.6 compaction1 update delete bitmap in new way failed, abort job
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1301);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1609,11 +1648,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 14.2 compaction1 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1401);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 14.3 compaction2 get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1402);
ASSERT_EQ(res_code, MetaServiceCode::OK);
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
@@ -1623,17 +1662,17 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
clear_rowsets(5);
// 14.4 load get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1490, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1490,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 14.5 compaction3 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1403);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 14.6 compaction1 update delete bitmap in old way failed, abort job
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1401);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1645,11 +1684,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 15.2 compaction1 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1501);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 15.3 compaction2 get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1502);
ASSERT_EQ(res_code, MetaServiceCode::OK);
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
@@ -1659,17 +1698,17 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
clear_rowsets(5);
// 15.4 sc get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 15.5 compaction3 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1503);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 15.6 compaction1 update delete bitmap in old way failed, abort job
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1501);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1681,11 +1720,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 16.2 compaction1 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1601);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 16.3 compaction2 get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1602);
ASSERT_EQ(res_code, MetaServiceCode::OK);
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
@@ -1695,17 +1734,17 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
ASSERT_EQ(res.status().code(), MetaServiceCode::OK);
clear_rowsets(5);
// 16.4 sc get and remove lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 16.5 compaction3 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1603);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 16.6 compaction1 update delete bitmap in old way failed, abort job
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1601);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1717,21 +1756,21 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 17.2 compaction1 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1701);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 17.3 load get and remove lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1793, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1793,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 17.4 compaction2 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1702);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 17.5 compaction1 update delete bitmap in new way failed, abort job
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1701);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1743,21 +1782,21 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 18.2 compaction1 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1801);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 18.3 load get and remove lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1893, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1893,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 18.4 compaction2 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1802);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 18.5 compaction1 update delete bitmap in new way failed, abort job
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1801);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1769,21 +1808,21 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 19.2 compaction1 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1901);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 19.3 sc get and remove lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 19.4 compaction2 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1902);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 19.5 compaction1 update delete bitmap in new way failed, abort job
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1901);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1795,21 +1834,21 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 20.2 compaction1 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2001);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 20.3 sc get and remove lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 20.4 compaction2 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2002);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 20.5 compaction1 update delete bitmap in new way failed, abort job
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
2001);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1821,21 +1860,21 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 21.2 compaction1 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2101);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 21.3 load get and remove lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 2190, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 2190,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 21.4 compaction2 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2102);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 21.5 compaction1 update delete bitmap in old way failed, abort job
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
2101);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1847,21 +1886,21 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 22.2 compaction1 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2201);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 22.3 load get and remove lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 2290, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 2290,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 22.4 compaction2 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2202);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 22.5 compaction1 update delete bitmap in old way failed, abort job
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
2201);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1873,21 +1912,21 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 23.2 compaction1 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2301);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 23.3 sc get and remove lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 2390, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 2390,
-1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 23.4 compaction2 get lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2302);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 23.5 compaction1 update delete bitmap in old way failed, abort job
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
2301);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1899,21 +1938,21 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 24.2 compaction1 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2401);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 24.3 sc get and remove lock in new way
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2, -1);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 24.4 compaction2 get lock in old way
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2402);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 24.5 compaction1 update delete bitmap in old way failed, abort job
- config::use_delete_bitmap_lock_version = "v1";
+ config::delete_bitmap_lock_v2_white_list = "";
test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE);
res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
2401);
ASSERT_EQ(res_code, MetaServiceCode::LOCK_EXPIRED);
@@ -1945,7 +1984,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
remove_delete_bitmap_lock(meta_service.get(), table_id);
clear_rowsets(table_id);
// 2 compaction1 get lock in old/new way
- config::use_delete_bitmap_lock_version = lock_version;
+ if (lock_version == "v1") {
+ config::delete_bitmap_lock_v2_white_list = "";
+ } else {
+ config::delete_bitmap_lock_v2_white_list = "*";
+ }
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1,
2501);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 3 sc、load、compaction get and remove lock in new or old way
@@ -1955,7 +1998,11 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
for (int i = 0; i < 10; i++) {
int num = std::rand() % 3;
std::string use_version = (std::rand() % 2 == 0 ? "v2" : "v1");
- config::use_delete_bitmap_lock_version = use_version;
+ if (use_version == "v1") {
+ config::delete_bitmap_lock_v2_white_list = "";
+ } else {
+ config::delete_bitmap_lock_v2_white_list = "*";
+ }
LOG(INFO) << "i=" << i << ",num=" << num << ",use_version=" <<
use_version;
switch (num) {
case 0: {
@@ -2004,11 +2051,19 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
}
}
// 4 compaction2 get lock in old/new way
- config::use_delete_bitmap_lock_version = lock_version;
+ if (lock_version == "v1") {
+ config::delete_bitmap_lock_v2_white_list = "";
+ } else {
+ config::delete_bitmap_lock_v2_white_list = "*";
+ }
res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1,
2502);
ASSERT_EQ(res_code, MetaServiceCode::OK);
// 5 if sc or load succeed,compaction1 remove lock in old/new way
failed
- config::use_delete_bitmap_lock_version = lock_version;
+ if (lock_version == "v1") {
+ config::delete_bitmap_lock_v2_white_list = "";
+ } else {
+ config::delete_bitmap_lock_v2_white_list = "*";
+ }
test_start_compaction_job(table_id, 2, 3, 5,
TabletCompactionJobPB::BASE);
test_commit_compaction_job(table_id, 2, 3, 5,
TabletCompactionJobPB::BASE, 2501);
if (load_or_sc_succeed) {
@@ -2016,6 +2071,596 @@ TEST(MetaServiceJobTest,
DeleteBitmapUpdateLockCompatibilityTest) {
}
clear_rowsets(5);
}
+
+ //white list test
+ //1. normal test
+ config::delete_bitmap_lock_v2_white_list =
+
"instance_id1;instance_id1;instance_id2;仓库6;Instance_id7;Instance_id*;instance_id10$;"
+ "instance_id11 ;;instance_id12";
+ //after parse config, the following instance will use v2:
+ //instance_id1,instance_id2,instance_id11,instance_id12
+ table_id = 7890;
+ //compaction
+ remove_delete_bitmap_lock(meta_service.get(), table_id);
+ std::string instance_id_x = "instance_id1";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 101);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 101,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
101);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
101, "job_id123",
+ instance_id_x);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 101,
false);
+ clear_rowsets(5);
+
+ instance_id_x = "instance_id2";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 102);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 102,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
102);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
102, "job_id123",
+ instance_id_x);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 102,
false);
+ clear_rowsets(5);
+
+ instance_id_x = "instance_id3";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 103);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
103);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
103, "job_id123",
+ instance_id_x);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
false);
+ clear_rowsets(5);
+
+ instance_id_x = "instance_id6";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 106);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
106);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
106, "job_id123",
+ instance_id_x);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
false);
+ clear_rowsets(5);
+
+ instance_id_x = "instance_id7";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 107);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
107);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
107, "job_id123",
+ instance_id_x);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
false);
+ clear_rowsets(5);
+
+ instance_id_x = "instance_id10";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1010);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1010);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
1010, "job_id123",
+ instance_id_x);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
false);
+ clear_rowsets(5);
+
+ instance_id_x = "instance_id11";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1011);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 1011,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1011);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
1011, "job_id123",
+ instance_id_x);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 1011,
false);
+ clear_rowsets(5);
+
+ instance_id_x = "instance_id12";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 1012);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 1012,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
1012);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
1012, "job_id123",
+ instance_id_x);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 1012,
false);
+ clear_rowsets(5);
+
+ //load
+ instance_id_x = "instance_id1";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1121, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1121, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1121,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1121, false);
+
+ instance_id_x = "instance_id2";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1122, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1122, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1122,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1122, false);
+
+ instance_id_x = "instance_id3";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1123, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1123, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1123,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1123, false);
+
+ instance_id_x = "instance_id6";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1126, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1126, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1126,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1126, false);
+
+ instance_id_x = "instance_id7";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1127, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1127, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1127,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1127, false);
+
+ instance_id_x = "instance_id10";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1130, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1130, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1130,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1130, false);
+
+ instance_id_x = "instance_id11";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1131, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1131, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1131,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1131, false);
+
+ instance_id_x = "instance_id12";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 1132, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1132, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 1132,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
1132, false);
+
+ //sc
+ instance_id_x = "instance_id1";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 1301);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
1301);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ instance_id_x = "instance_id2";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 1302);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
1302);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ instance_id_x = "instance_id3";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 1303);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
1303);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ instance_id_x = "instance_id6";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 1306);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
1306);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ instance_id_x = "instance_id7";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 1307);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
1307);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ instance_id_x = "instance_id10";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 1310);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
1310);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ instance_id_x = "instance_id11";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 1311);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
1311);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ instance_id_x = "instance_id12";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 1312);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
1312);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ //2. empty white list
+ config::delete_bitmap_lock_v2_white_list = "";
+ // compaction
+ instance_id_x = "instance_id20";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ //compaction
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 2000);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
2000);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
2000, "job_id123",
+ instance_id_x);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
false);
+ // load
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 2001, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
2001, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 2001,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
2001, false);
+ // sc
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 2002);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
2002);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ //3. 1000 item white list
+ std::stringstream ss;
+ ss << "instance_id0;";
+ for (int i = 1; i < 1000; i++) {
+ ss << "instance_id" << i << ";";
+ }
+ ss << "instance_id1000";
+ config::delete_bitmap_lock_v2_white_list = ss.str();
+ instance_id_x = "instance_id0";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ //compaction
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 3000);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 3000,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
3000);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
3000, "job_id123",
+ instance_id_x);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 3000,
false);
+ clear_rowsets(5);
+ // load
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 3001, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
3001, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 3001,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
3001, false);
+ // sc
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 3002);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
3002);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ //4.config single item
+ config::delete_bitmap_lock_v2_white_list = "instance_id40";
+ instance_id_x = "instance_id40";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+
+ //instance_id40->v2
+ //compaction
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 4000);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 4000,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
4000);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
4000, "job_id123",
+ instance_id_x);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 4000,
false);
+ clear_rowsets(5);
+ // load
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 4001, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
4001, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 4001,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
4001, false);
+ // sc
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 4002);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
4002);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ //instance_id41->v1
+ instance_id_x = "instance_id41";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+ //compaction
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 4100);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
4100);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
4100, "job_id123",
+ instance_id_x);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
false);
+ // load
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 4101, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
4101, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 4101,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
4101, false);
+ // sc
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 4102);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
4102);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ //5.config *
+ //instance_id50->v2
+ config::delete_bitmap_lock_v2_white_list = "*";
+ instance_id_x = "instance_id50";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+
+ //compaction
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 5000);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 5000,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
5000);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
5000, "job_id123",
+ instance_id_x);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 5000,
false);
+ clear_rowsets(5);
+ // load
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 5001, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
5001, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 5001,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
5001, false);
+ // sc
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 5002);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
5002);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
+
+ //instance_id51->v2
+ instance_id_x = "instance_id51";
+ sp->set_call_back("get_instance_id", [&](auto&& args) {
+ auto* ret = try_any_cast_ret<std::string>(args);
+ ret->first = instance_id_x;
+ ret->second = true;
+ });
+
+ //compaction
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -1, 5100);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -1,
true);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 5100,
true);
+ test_start_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
"job_id123",
+ instance_id_x);
+ res_code = update_delete_bitmap(meta_service.get(), table_id, 3, 5, -1,
5100);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ test_commit_compaction_job(table_id, 2, 3, 5, TabletCompactionJobPB::BASE,
5100, "job_id123",
+ instance_id_x);
+ check_compaction_key(meta_service.get(), instance_id_x, table_id, 5100,
false);
+ clear_rowsets(5);
+ // load
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, 5101, -1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
5101, true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, 5101,
-1);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id,
5101, false);
+ // sc
+ res_code = get_delete_bitmap_lock(meta_service.get(), table_id, -2, 5102);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
true);
+ res_code = remove_delete_bitmap_lock(meta_service.get(), table_id, -2,
5102);
+ ASSERT_EQ(res_code, MetaServiceCode::OK);
+ check_delete_bitmap_lock(meta_service.get(), instance_id_x, table_id, -2,
false);
}
TEST(MetaServiceJobTest, CompactionJobWithMoWTest) {
diff --git a/cloud/test/recycler_test.cpp b/cloud/test/recycler_test.cpp
index 81da3646772..0278b504315 100644
--- a/cloud/test/recycler_test.cpp
+++ b/cloud/test/recycler_test.cpp
@@ -3171,7 +3171,7 @@ void remove_delete_bitmap_lock(MetaServiceProxy*
meta_service, int64_t table_id)
TEST(CheckerTest, check_compaction_key) {
config::enable_mow_compaction_key_check = true;
config::compaction_key_check_expiration_diff_seconds = 0;
- config::use_delete_bitmap_lock_version = "v2";
+ config::delete_bitmap_lock_v2_white_list = "*";
std::string instance_id = "test_check_compaction_key";
[[maybe_unused]] auto sp = SyncPoint::get_instance();
std::unique_ptr<int, std::function<void(int*)>> defer(
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]