diff --git a/cloud/src/common/bvars.cpp b/cloud/src/common/bvars.cpp index 0e595aff50abb9..773acde508bf0a 100644 --- a/cloud/src/common/bvars.cpp +++ b/cloud/src/common/bvars.cpp @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -#include "common/bvars.h" +#include "bvars.h" #include #include @@ -25,6 +25,8 @@ #include #include +#include "common/bvars.h" + // clang-format off // meta-service's bvars @@ -91,6 +93,8 @@ BvarLatencyRecorderWithTag g_bvar_ms_get_cluster_status("ms", "get_cluster_statu BvarLatencyRecorderWithTag g_bvar_ms_set_cluster_status("ms", "set_cluster_status"); BvarLatencyRecorderWithTag g_bvar_ms_check_kv("ms", "check_kv"); BvarLatencyRecorderWithTag g_bvar_ms_get_schema_dict("ms", "get_schema_dict"); +BvarAdderWithTag g_bvar_ms_get_delete_bitmap_bytes("ms", "get_delete_bitmap_bytes"); +BvarAdderWithTag g_bvar_ms_update_delete_bitmap_bytes("ms", "update_delete_bitmap_bytes"); bvar::Adder g_bvar_update_delete_bitmap_fail_counter; bvar::Window > g_bvar_update_delete_bitmap_fail_counter_minute("ms", "update_delete_bitmap_fail", &g_bvar_update_delete_bitmap_fail_counter, 60); bvar::Adder g_bvar_get_delete_bitmap_fail_counter; diff --git a/cloud/src/common/bvars.h b/cloud/src/common/bvars.h index 5534567091116e..e299743671c6aa 100644 --- a/cloud/src/common/bvars.h +++ b/cloud/src/common/bvars.h @@ -38,8 +38,10 @@ * ${module}_${name}_${tag} * where `tag` is added automatically when calling `get` or `put` */ -template +template class BvarWithTag { + static_assert(!(is_status && is_adder), "is_status and is_adder cannot both be true"); + public: BvarWithTag(std::string module, std::string name) : module_(std::move(module)), name_(std::move(name)) {} @@ -52,14 +54,18 @@ class BvarWithTag { std::lock_guard l(mutex_); auto it = bvar_map_.find(tag); if (it == bvar_map_.end()) { - instance = std::make_shared(module_, name_ + "_" + tag, ValType()); + if constexpr (is_adder) { + instance = std::make_shared(module_, name_ + "_" + tag); + } else { + instance = std::make_shared(module_, name_ + "_" + tag, ValType()); + } bvar_map_[tag] = instance; } else { instance = it->second; } } // FIXME(gavin): check bvar::Adder and more - if constexpr (std::is_same_v) { + if constexpr (std::is_same_v || is_adder) { (*instance) << value; } else if constexpr (is_status) { instance->set_value(value); @@ -98,6 +104,10 @@ class BvarWithTag { using BvarLatencyRecorderWithTag = BvarWithTag; +template + requires std::is_integral_v +using BvarAdderWithTag = BvarWithTag>; + template requires std::is_integral_v using BvarStatusWithTag = BvarWithTag, true>; @@ -255,6 +265,8 @@ extern BvarLatencyRecorderWithTag g_bvar_ms_check_kv; extern BvarLatencyRecorderWithTag g_bvar_ms_get_schema_dict; extern bvar::Adder g_bvar_update_delete_bitmap_fail_counter; extern bvar::Adder g_bvar_get_delete_bitmap_fail_counter; +extern BvarAdderWithTag g_bvar_ms_get_delete_bitmap_bytes; +extern BvarAdderWithTag g_bvar_ms_update_delete_bitmap_bytes; // recycler's bvars extern BvarStatusWithTag g_bvar_recycler_recycle_index_earlest_ts; diff --git a/cloud/src/meta-service/meta_service.cpp b/cloud/src/meta-service/meta_service.cpp index 8d3dbd82eb74c1..9a9ee64b4bf088 100644 --- a/cloud/src/meta-service/meta_service.cpp +++ b/cloud/src/meta-service/meta_service.cpp @@ -47,6 +47,7 @@ #include #include +#include "../common/bvars.h" #include "common/bvars.h" #include "common/config.h" #include "common/encryption_util.h" @@ -2375,6 +2376,7 @@ void MetaServiceImpl::update_delete_bitmap(google::protobuf::RpcController* cont << " txn_size=" << txn->approximate_bytes(); msg = ss.str(); g_bvar_update_delete_bitmap_fail_counter << 1; + g_bvar_ms_update_delete_bitmap_bytes.put(instance_id, total_txn_put_bytes); return; } stats.get_bytes += txn->get_bytes(); @@ -2389,6 +2391,7 @@ void MetaServiceImpl::update_delete_bitmap(google::protobuf::RpcController* cont if (err != TxnErrorCode::TXN_OK) { code = cast_as(err); msg = "failed to init txn"; + g_bvar_ms_update_delete_bitmap_bytes.put(instance_id, total_txn_put_bytes); return; } if (!without_lock) { @@ -2515,6 +2518,9 @@ void MetaServiceImpl::update_delete_bitmap(google::protobuf::RpcController* cont total_txn_put_bytes += txn->put_bytes(); total_txn_size += txn->approximate_bytes(); total_txn_count++; + + g_bvar_ms_update_delete_bitmap_bytes.put(instance_id, total_txn_put_bytes); + if (err != TxnErrorCode::TXN_OK) { if (err == TxnErrorCode::TXN_CONFLICT) { g_bvar_delete_bitmap_lock_txn_put_conflict_counter << 1; @@ -2629,6 +2635,7 @@ void MetaServiceImpl::get_delete_bitmap(google::protobuf::RpcController* control code = cast_as(err); ss << "failed to init txn, retry=" << retry << ", internal round=" << round; msg = ss.str(); + g_bvar_ms_get_delete_bitmap_bytes.put(instance_id, delete_bitmap_byte); return; } if (test) { @@ -2648,6 +2655,7 @@ void MetaServiceImpl::get_delete_bitmap(google::protobuf::RpcController* control << ", ret=" << err; msg = ss.str(); g_bvar_get_delete_bitmap_fail_counter << 1; + g_bvar_ms_get_delete_bitmap_bytes.put(instance_id, delete_bitmap_byte); return; } @@ -2692,6 +2700,7 @@ void MetaServiceImpl::get_delete_bitmap(google::protobuf::RpcController* control msg = ss.str(); LOG(WARNING) << msg; g_bvar_get_delete_bitmap_fail_counter << 1; + g_bvar_ms_get_delete_bitmap_bytes.put(instance_id, delete_bitmap_byte); return; } round++; @@ -2705,6 +2714,7 @@ void MetaServiceImpl::get_delete_bitmap(google::protobuf::RpcController* control LOG(INFO) << "finish get delete bitmap for tablet=" << tablet_id << ", delete_bitmap_num=" << delete_bitmap_num << ", delete_bitmap_byte=" << delete_bitmap_byte; + g_bvar_ms_get_delete_bitmap_bytes.put(instance_id, delete_bitmap_byte); if (request->has_idx()) { std::unique_ptr txn;