This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new d6db7986927 branch-4.0: [enhance](meta-service)add bvar for fdb
process status #59329 (#59526)
d6db7986927 is described below
commit d6db7986927be793af1f453ff88ed616b5bd7593
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Jan 5 11:46:49 2026 +0800
branch-4.0: [enhance](meta-service)add bvar for fdb process status #59329
(#59526)
Cherry-picked from #59329
Co-authored-by: koarz <[email protected]>
---
cloud/src/common/bvars.cpp | 14 +---
cloud/src/common/bvars.h | 14 +---
cloud/src/common/metric.cpp | 189 +++++++++++++++++++++++++-------------------
cloud/test/metric_test.cpp | 137 ++++++++++++++++++++++++--------
4 files changed, 216 insertions(+), 138 deletions(-)
diff --git a/cloud/src/common/bvars.cpp b/cloud/src/common/bvars.cpp
index ac36976553b..dc567b6dad8 100644
--- a/cloud/src/common/bvars.cpp
+++ b/cloud/src/common/bvars.cpp
@@ -218,19 +218,9 @@ bvar::Status<int64_t>
g_bvar_fdb_qos_worst_data_lag_storage_server_ns("fdb_qos_w
bvar::Status<int64_t>
g_bvar_fdb_qos_worst_durability_lag_storage_server_ns("fdb_qos_worst_durability_lag_storage_server_ns",
BVAR_FDB_INVALID_VALUE);
bvar::Status<int64_t>
g_bvar_fdb_qos_worst_log_server_queue_bytes("fdb_qos_worst_log_server_queue_bytes",
BVAR_FDB_INVALID_VALUE);
bvar::Status<int64_t>
g_bvar_fdb_qos_worst_storage_server_queue_bytes("fdb_qos_worst_storage_server_queue_bytes",
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t>
g_bvar_fdb_workload_conflict_rate_hz("fdb_workload_conflict_rate_hz",
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t>
g_bvar_fdb_workload_location_rate_hz("fdb_workload_location_rate_hz",
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t>
g_bvar_fdb_workload_keys_read_hz("fdb_workload_keys_read_hz",
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t>
g_bvar_fdb_workload_read_bytes_hz("fdb_workload_read_bytes_hz",
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t>
g_bvar_fdb_workload_read_rate_hz("fdb_workload_read_rate_hz",
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t>
g_bvar_fdb_workload_write_rate_hz("fdb_workload_write_rate_hz",
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t>
g_bvar_fdb_workload_written_bytes_hz("fdb_workload_written_bytes_hz",
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t>
g_bvar_fdb_workload_transactions_started_hz("fdb_workload_transactions_started_hz",
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t>
g_bvar_fdb_workload_transactions_committed_hz("fdb_workload_transactions_committed_hz",
BVAR_FDB_INVALID_VALUE);
-bvar::Status<int64_t>
g_bvar_fdb_workload_transactions_rejected_hz("fdb_workload_transactions_rejected_hz",
BVAR_FDB_INVALID_VALUE);
bvar::Status<int64_t>
g_bvar_fdb_client_thread_busyness_percent("fdb_client_thread_busyness_percent",
BVAR_FDB_INVALID_VALUE);
-mBvarStatus<int64_t> g_bvar_fdb_process_status_int("fdb_process_status_int",
{"process_id", "component", "metric"});
-mBvarStatus<double>
g_bvar_fdb_process_status_float("fdb_process_status_float", {"process_id",
"component", "metric"});
+mBvarStatus<double> g_bvar_fdb_cluster_processes("fdb_cluster_processes",
{"process_id", "component", "metric"});
+mBvarStatus<double> g_bvar_fdb_cluster_workload("fdb_cluster_workload",
{"component", "metric"});
// checker's bvars
BvarStatusWithTag<int64_t> g_bvar_checker_num_scanned("checker",
"num_scanned");
diff --git a/cloud/src/common/bvars.h b/cloud/src/common/bvars.h
index 5641a2a30ce..94494acc650 100644
--- a/cloud/src/common/bvars.h
+++ b/cloud/src/common/bvars.h
@@ -710,19 +710,9 @@ extern bvar::Status<int64_t>
g_bvar_fdb_qos_worst_data_lag_storage_server_ns;
extern bvar::Status<int64_t>
g_bvar_fdb_qos_worst_durability_lag_storage_server_ns;
extern bvar::Status<int64_t> g_bvar_fdb_qos_worst_log_server_queue_bytes;
extern bvar::Status<int64_t> g_bvar_fdb_qos_worst_storage_server_queue_bytes;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_conflict_rate_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_location_rate_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_keys_read_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_read_bytes_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_read_rate_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_write_rate_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_written_bytes_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_transactions_started_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_transactions_committed_hz;
-extern bvar::Status<int64_t> g_bvar_fdb_workload_transactions_rejected_hz;
extern bvar::Status<int64_t> g_bvar_fdb_client_thread_busyness_percent;
-extern mBvarStatus<int64_t> g_bvar_fdb_process_status_int;
-extern mBvarStatus<double> g_bvar_fdb_process_status_float;
+extern mBvarStatus<double> g_bvar_fdb_cluster_processes;
+extern mBvarStatus<double> g_bvar_fdb_cluster_workload;
// checker
extern BvarStatusWithTag<long> g_bvar_checker_num_scanned;
diff --git a/cloud/src/common/metric.cpp b/cloud/src/common/metric.cpp
index ac0193a9921..d41e7ea6e0f 100644
--- a/cloud/src/common/metric.cpp
+++ b/cloud/src/common/metric.cpp
@@ -141,68 +141,6 @@ static void export_fdb_status_details(const std::string&
status_str) {
DCHECK(node->value.IsDouble());
return static_cast<int64_t>(node->value.GetDouble() * NANOSECONDS);
};
- auto get_process_metric = [&](std::string component) {
- auto node = document.FindMember("cluster");
- if (!node->value.HasMember("processes")) return;
- node = node->value.FindMember("processes");
- // process
- for (auto process_node = node->value.MemberBegin(); process_node !=
node->value.MemberEnd();
- process_node++) {
- const char* process_id = process_node->name.GetString();
- decltype(process_node) component_node;
- // get component iter
- if (!process_node->value.HasMember(component.data())) return;
- component_node = process_node->value.FindMember(component.data());
- // There are three cases here: int64, double, and object.
- // If it is double or int64, put it directly into the bvar.
- // If it is an object, recursively obtain the full name and
corresponding value.
- // such as: {"disk": {"reads": {"counter": 123, "hz": 0}}}
- // component is "disk", the names of these two values should be
"reads_counter" and "reads_hz"
- auto recursive_name_helper = [](std::string& origin_name,
- const char* next_level_name) ->
std::string {
- return origin_name + '_' + next_level_name;
- };
- // proved two type lambda func to handle object and other type
-
- // set_bvar_value is responsible for setting integer and float
values to the corresponding bvar.
- auto set_bvar_value = [&process_id, &component](
- std::string& name,
- decltype(process_node)& temp_node)
-> void {
- if (temp_node->value.IsInt64()) {
- g_bvar_fdb_process_status_int.put({process_id, component,
name},
-
temp_node->value.GetInt64());
- return;
- }
- if (temp_node->value.IsDouble()) {
- g_bvar_fdb_process_status_float.put({process_id,
component, name},
-
temp_node->value.GetDouble());
- return;
- }
- LOG(WARNING) << fmt::format(
- "Get process metrics set_bvar_value input a wrong type
node {}", name);
- };
- auto object_recursive = [&set_bvar_value, &recursive_name_helper](
- auto&& self, std::string name,
- decltype(process_node) temp_node)
-> void {
- // if the node is an object, then get Member(iter) and
recursive with iter as arg
- if (temp_node->value.IsObject()) {
- for (auto iter = temp_node->value.MemberBegin();
- iter != temp_node->value.MemberEnd(); iter++) {
- self(self, recursive_name_helper(name,
iter->name.GetString()), iter);
- }
- return;
- }
- // if not object, set bvar value
- set_bvar_value(name, temp_node);
- };
- // Note that the parameter passed to set_bvar_value here is the
current node, not its Member
- // so we can directly call object_recursive in the loop
- for (auto metric_node = component_node->value.MemberBegin();
- metric_node != component_node->value.MemberEnd();
metric_node++) {
- object_recursive(object_recursive,
metric_node->name.GetString(), metric_node);
- }
- }
- };
// Configuration
g_bvar_fdb_configuration_coordinators_count.set_value(
get_value({"configuration", "coordinators_count"}));
@@ -245,26 +183,6 @@ static void export_fdb_status_details(const std::string&
status_str) {
get_nanoseconds({"latency_probe", "commit_seconds"}));
g_bvar_fdb_latency_probe_read_ns.set_value(get_nanoseconds({"latency_probe",
"read_seconds"}));
- // Workload
- g_bvar_fdb_workload_conflict_rate_hz.set_value(
- get_value({"workload", "transactions", "conflicted", "hz"}));
- g_bvar_fdb_workload_location_rate_hz.set_value(
- get_value({"workload", "operations", "location_requests", "hz"}));
- g_bvar_fdb_workload_keys_read_hz.set_value(get_value({"workload", "keys",
"read", "hz"}));
- g_bvar_fdb_workload_read_bytes_hz.set_value(get_value({"workload",
"bytes", "read", "hz"}));
- g_bvar_fdb_workload_read_rate_hz.set_value(
- get_value({"workload", "operations", "reads", "hz"}));
- g_bvar_fdb_workload_written_bytes_hz.set_value(
- get_value({"workload", "bytes", "written", "hz"}));
- g_bvar_fdb_workload_write_rate_hz.set_value(
- get_value({"workload", "operations", "writes", "hz"}));
- g_bvar_fdb_workload_transactions_started_hz.set_value(
- get_value({"workload", "transactions", "started", "hz"}));
- g_bvar_fdb_workload_transactions_committed_hz.set_value(
- get_value({"workload", "transactions", "committed", "hz"}));
- g_bvar_fdb_workload_transactions_rejected_hz.set_value(
- get_value({"workload", "transactions",
"rejected_for_queued_too_long", "hz"}));
-
// QOS
g_bvar_fdb_qos_worst_data_lag_storage_server_ns.set_value(
get_nanoseconds({"qos", "worst_data_lag_storage_server",
"seconds"}));
@@ -296,10 +214,117 @@ static void export_fdb_status_details(const std::string&
status_str) {
}
}
+ // Helper function for recursive name construction
+ // such as: {"disk": {"reads": {"counter": 123, "hz": 0}}}
+ // component is "disk", the names of these two values should be
"reads_counter" and "reads_hz"
+ auto recursive_name_helper = [](std::string& origin_name,
+ const char* next_level_name) ->
std::string {
+ return origin_name + '_' + next_level_name;
+ };
+
+ // Generic recursive function to traverse JSON node and set bvar values
+ // There are three cases here: int64, double, and object.
+ // If it is double or int64, put it directly into the bvar.
+ // If it is an object, recursively obtain the full name and corresponding
value.
+ auto recursive_traverse_and_set = [&recursive_name_helper](auto&&
set_value_callback,
+ auto&& self,
std::string name,
+ auto temp_node)
-> void {
+ // if the node is an object, then get Member(iter) and recursive with
iter as arg
+ if (temp_node->value.IsObject()) {
+ for (auto iter = temp_node->value.MemberBegin(); iter !=
temp_node->value.MemberEnd();
+ iter++) {
+ self(set_value_callback, self, recursive_name_helper(name,
iter->name.GetString()),
+ iter);
+ }
+ return;
+ }
+ // if not object, set bvar value
+ set_value_callback(name, temp_node);
+ };
+
+ auto get_process_metric = [&](std::string component) {
+ auto node = document.FindMember("cluster");
+ if (!node->value.HasMember("processes")) return;
+ node = node->value.FindMember("processes");
+ // process
+ for (auto process_node = node->value.MemberBegin(); process_node !=
node->value.MemberEnd();
+ process_node++) {
+ const char* process_id = process_node->name.GetString();
+ decltype(process_node) component_node;
+ // get component iter
+ if (!process_node->value.HasMember(component.data())) continue;
+ component_node = process_node->value.FindMember(component.data());
+
+ // set_bvar_value is responsible for setting integer and float
values to the corresponding bvar.
+ auto set_bvar_value = [&process_id, &component](
+ std::string& name,
+ decltype(process_node)& temp_node)
-> void {
+ if (temp_node->value.IsInt64()) {
+ g_bvar_fdb_cluster_processes.put(
+ {process_id, component, name},
+ static_cast<double>(temp_node->value.GetInt64()));
+ return;
+ }
+ if (temp_node->value.IsDouble()) {
+ g_bvar_fdb_cluster_processes.put({process_id, component,
name},
+
temp_node->value.GetDouble());
+ return;
+ }
+ LOG(WARNING) << fmt::format(
+ "Get process metrics set_bvar_value input a wrong type
node {}", name);
+ };
+ // Note that the parameter passed to set_bvar_value here is the
current node, not its Member
+ // so we can directly call recursive_traverse_and_set in the loop
+ for (auto metric_node = component_node->value.MemberBegin();
+ metric_node != component_node->value.MemberEnd();
metric_node++) {
+ recursive_traverse_and_set(set_bvar_value,
recursive_traverse_and_set,
+ metric_node->name.GetString(),
metric_node);
+ }
+ }
+ };
+
+ auto get_workload_metric = [&](std::string component) {
+ auto node = document.FindMember("cluster");
+ if (!node->value.HasMember("workload")) return;
+ node = node->value.FindMember("workload");
+
+ if (!node->value.HasMember(component.data())) return;
+ auto component_node = node->value.FindMember(component.data());
+
+ // set_bvar_value is responsible for setting integer and float values
to the corresponding bvar.
+ auto set_bvar_value = [&component](std::string& name,
+ decltype(component_node)&
temp_node) -> void {
+ if (temp_node->value.IsInt64()) {
+ g_bvar_fdb_cluster_workload.put({component, name},
+
static_cast<double>(temp_node->value.GetInt64()));
+ return;
+ }
+ if (temp_node->value.IsDouble()) {
+ g_bvar_fdb_cluster_workload.put({component, name},
temp_node->value.GetDouble());
+ return;
+ }
+ LOG(WARNING) << fmt::format(
+ "Get workload metrics set_bvar_value input a wrong type
node {}", name);
+ };
+
+ // Reuse the common recursive_traverse_and_set function
+ for (auto metric_node = component_node->value.MemberBegin();
+ metric_node != component_node->value.MemberEnd(); metric_node++) {
+ recursive_traverse_and_set(set_bvar_value,
recursive_traverse_and_set,
+ metric_node->name.GetString(),
metric_node);
+ }
+ };
+
// Process Status
get_process_metric("cpu");
get_process_metric("disk");
get_process_metric("memory");
+
+ // Workload Status
+ get_workload_metric("keys");
+ get_workload_metric("bytes");
+ get_workload_metric("operations");
+ get_workload_metric("transactions");
}
// boundaries include the key category{meta, txn, recycle...}, instance_id and
sub_category{rowset, txn_label...}
diff --git a/cloud/test/metric_test.cpp b/cloud/test/metric_test.cpp
index 81174c73924..e00f62d990e 100644
--- a/cloud/test/metric_test.cpp
+++ b/cloud/test/metric_test.cpp
@@ -196,97 +196,170 @@ TEST(MetricTest, FdbMetricExporterTest) {
fdb_metric_exporter.start();
std::this_thread::sleep_for(std::chrono::milliseconds(10));
fdb_metric_exporter.stop();
- ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "cpu",
"usage_cores"}),
0.0012292);
- ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "disk",
"busy"}),
0.0085999800000000001);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "disk",
"free_bytes"}),
490412584960);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "disk",
"reads_counter"}),
854857);
- ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "disk",
"reads_hz"}),
0);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "disk",
"reads_sectors"}),
0);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "disk",
"total_bytes"}),
527295578112);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "disk",
"writes_counter"}),
73765457);
- ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "disk",
"writes_hz"}),
26.1999);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "disk",
"writes_sectors"}),
1336);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "memory",
"available_bytes"}),
3065090867);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "memory",
"limit_bytes"}),
8589934592);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "memory",
"rss_bytes"}),
46551040);
-
ASSERT_EQ(g_bvar_fdb_process_status_int.get({"09ca90b9f3f413e5816b2610ed8b465d",
"memory",
-
"unused_allocated_memory"}),
+
ASSERT_EQ(g_bvar_fdb_cluster_processes.get({"09ca90b9f3f413e5816b2610ed8b465d",
"memory",
+
"unused_allocated_memory"}),
655360);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"09ca90b9f3f413e5816b2610ed8b465d", "memory",
"used_bytes"}),
122974208);
// test second process
- ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "cpu",
"usage_cores"}),
0.0049765900000000004);
- ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "disk",
"busy"}),
0.012200000000000001);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "disk",
"free_bytes"}),
489160159232);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "disk",
"reads_counter"}),
877107);
- ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "disk",
"reads_hz"}),
0);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "disk",
"reads_sectors"}),
0);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "disk",
"total_bytes"}),
527295578112);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "disk",
"writes_counter"}),
79316112);
- ASSERT_EQ(g_bvar_fdb_process_status_float.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "disk",
"writes_hz"}),
30.9999);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "disk",
"writes_sectors"}),
744);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "memory",
"available_bytes"}),
3076787404);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "memory",
"limit_bytes"}),
8589934592);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "memory",
"rss_bytes"}),
72359936);
-
ASSERT_EQ(g_bvar_fdb_process_status_int.get({"0a456165f04e1ec1a2ade0ce523d54a8",
"memory",
-
"unused_allocated_memory"}),
+
ASSERT_EQ(g_bvar_fdb_cluster_processes.get({"0a456165f04e1ec1a2ade0ce523d54a8",
"memory",
+
"unused_allocated_memory"}),
393216);
- ASSERT_EQ(g_bvar_fdb_process_status_int.get(
+ ASSERT_EQ(g_bvar_fdb_cluster_processes.get(
{"0a456165f04e1ec1a2ade0ce523d54a8", "memory",
"used_bytes"}),
157978624);
}
+
+ // workload status
+ {
+ g_bvar_fdb_machines_count.set_value(BVAR_FDB_INVALID_VALUE);
+ g_bvar_fdb_client_count.set_value(BVAR_FDB_INVALID_VALUE);
+
+ std::string fdb_metric_example = "./fdb_metric_example.json";
+ std::ifstream inFile(fdb_metric_example);
+
+ ASSERT_TRUE(inFile.is_open());
+ std::string fileContent((std::istreambuf_iterator<char>(inFile)),
+ std::istreambuf_iterator<char>());
+
+ std::shared_ptr<TxnKv> txn_kv = std::make_shared<MemTxnKv>();
+ std::unique_ptr<Transaction> txn;
+ ASSERT_EQ(txn_kv->create_txn(&txn), TxnErrorCode::TXN_OK);
+ txn->put("\xff\xff/status/json", fileContent);
+ ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK);
+
+ FdbMetricExporter fdb_metric_exporter(txn_kv);
+ fdb_metric_exporter.sleep_interval_ms_ = 1;
+ fdb_metric_exporter.start();
+ std::this_thread::sleep_for(std::chrono::milliseconds(10));
+ fdb_metric_exporter.stop();
+
+ // Test transactions component
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions",
"started_hz"}), 12);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions",
"started_counter"}), 196874980);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions",
"committed_hz"}), 3.4);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions",
"committed_counter"}), 2083958);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions",
"conflicted_hz"}), 0);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions",
"conflicted_counter"}), 2970);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions",
"started_batch_priority_hz"}),
+ 0);
+ ASSERT_EQ(
+ g_bvar_fdb_cluster_workload.get({"transactions",
"started_batch_priority_counter"}),
+ 155);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"transactions",
"started_default_priority_hz"}),
+ 11);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get(
+ {"transactions",
"started_default_priority_counter"}),
+ 192248190);
+ ASSERT_EQ(
+ g_bvar_fdb_cluster_workload.get({"transactions",
"started_immediate_priority_hz"}),
+ 0.999999);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get(
+ {"transactions",
"started_immediate_priority_counter"}),
+ 4626635);
+
+ // Test operations component
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations", "reads_hz"}),
24.6);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations",
"reads_counter"}), 324877376);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations",
"writes_hz"}), 7.39999);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations",
"writes_counter"}), 4336393);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations",
"location_requests_hz"}), 0);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations",
"location_requests_counter"}),
+ 107543);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations",
"read_requests_hz"}), 24.4);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations",
"read_requests_counter"}),
+ 324877376);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations",
"memory_errors_hz"}), 0);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"operations",
"memory_errors_counter"}), 0);
+
+ // Test bytes component
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"bytes", "read_hz"}),
18468.2);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"bytes", "read_counter"}),
312243021624);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"bytes", "written_hz"}),
2042.2);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"bytes",
"written_counter"}), 6678975461);
+
+ // Test keys component
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"keys", "read_hz"}), 56.6);
+ ASSERT_EQ(g_bvar_fdb_cluster_workload.get({"keys", "read_counter"}),
728858585);
+ }
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]