Coverage Report

Created: 2025-12-27 01:05

/root/doris/cloud/src/common/bvars.h
Line
Count
Source (jump to first uncovered line)
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
#pragma once
19
20
#include <aws/core/external/cjson/cJSON.h>
21
#include <bthread/bthread.h>
22
#include <bthread/mutex.h>
23
#include <bthread/unstable.h>
24
#include <bvar/bvar.h>
25
#include <bvar/latency_recorder.h>
26
#include <bvar/multi_dimension.h>
27
#include <bvar/passive_status.h>
28
#include <bvar/reducer.h>
29
#include <bvar/status.h>
30
#include <cpp/sync_point.h>
31
#include <gmock/gmock-actions.h>
32
33
#include <atomic>
34
#include <cstdint>
35
#include <initializer_list>
36
#include <map>
37
#include <memory>
38
#include <mutex>
39
#include <string>
40
#include <type_traits>
41
#include <utility>
42
43
#include "common/logging.h"
44
45
/**
46
 * Manage bvars that with similar names (identical prefix)
47
 * ${module}_${name}_${tag}
48
 * where `tag` is added automatically when calling `get` or `put`
49
 */
50
template <typename Bvar, bool is_status = false>
51
class BvarWithTag {
52
public:
53
    BvarWithTag(std::string module, std::string name)
54
2.97k
            : module_(std::move(module)), name_(std::move(name)) {}
_ZN11BvarWithTagIN4bvar15LatencyRecorderELb0EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_
Line
Count
Source
54
2.22k
            : module_(std::move(module)), name_(std::move(name)) {}
_ZN11BvarWithTagIN4bvar6StatusIlvEELb1EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_
Line
Count
Source
54
750
            : module_(std::move(module)), name_(std::move(name)) {}
55
56
    template <typename ValType>
57
        requires std::is_integral_v<ValType>
58
141k
    void put(const std::string& tag, ValType value) {
59
141k
        std::shared_ptr<Bvar> instance = nullptr;
60
141k
        {
61
141k
            std::lock_guard<bthread::Mutex> l(mutex_);
62
141k
            auto it = bvar_map_.find(tag);
63
141k
            if (it == bvar_map_.end()) {
64
1.19k
                instance = std::make_shared<Bvar>(module_, name_ + "_" + tag, ValType());
65
1.19k
                bvar_map_[tag] = instance;
66
139k
            } else {
67
139k
                instance = it->second;
68
139k
            }
69
141k
        }
70
        // FIXME(gavin): check bvar::Adder and more
71
141k
        if constexpr (std::is_same_v<Bvar, bvar::LatencyRecorder>) {
72
136
            (*instance) << value;
73
136
        } else if constexpr (is_status) {
74
136
            instance->set_value(value);
75
136
        } else {
76
            // This branch mean to be unreachable, add an assert(false) here to
77
            // prevent missing branch match.
78
            // Postpone deduction of static_assert by evaluating sizeof(T)
79
141k
            static_assert(!sizeof(Bvar), "all types must be matched with if constexpr");
80
141k
        }
81
141k
    }
_ZN11BvarWithTagIN4bvar15LatencyRecorderELb0EE3putIlEEvRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_
Line
Count
Source
58
140k
    void put(const std::string& tag, ValType value) {
59
140k
        std::shared_ptr<Bvar> instance = nullptr;
60
140k
        {
61
140k
            std::lock_guard<bthread::Mutex> l(mutex_);
62
140k
            auto it = bvar_map_.find(tag);
63
140k
            if (it == bvar_map_.end()) {
64
1.10k
                instance = std::make_shared<Bvar>(module_, name_ + "_" + tag, ValType());
65
1.10k
                bvar_map_[tag] = instance;
66
139k
            } else {
67
139k
                instance = it->second;
68
139k
            }
69
140k
        }
70
        // FIXME(gavin): check bvar::Adder and more
71
140k
        if constexpr (std::is_same_v<Bvar, bvar::LatencyRecorder>) {
72
140k
            (*instance) << value;
73
140k
        } else if constexpr (is_status) {
74
140k
            instance->set_value(value);
75
140k
        } else {
76
            // This branch mean to be unreachable, add an assert(false) here to
77
            // prevent missing branch match.
78
            // Postpone deduction of static_assert by evaluating sizeof(T)
79
140k
            static_assert(!sizeof(Bvar), "all types must be matched with if constexpr");
80
140k
        }
81
140k
    }
_ZN11BvarWithTagIN4bvar6StatusIlvEELb1EE3putIlEEvRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_
Line
Count
Source
58
136
    void put(const std::string& tag, ValType value) {
59
136
        std::shared_ptr<Bvar> instance = nullptr;
60
136
        {
61
136
            std::lock_guard<bthread::Mutex> l(mutex_);
62
136
            auto it = bvar_map_.find(tag);
63
136
            if (it == bvar_map_.end()) {
64
84
                instance = std::make_shared<Bvar>(module_, name_ + "_" + tag, ValType());
65
84
                bvar_map_[tag] = instance;
66
84
            } else {
67
52
                instance = it->second;
68
52
            }
69
136
        }
70
        // FIXME(gavin): check bvar::Adder and more
71
136
        if constexpr (std::is_same_v<Bvar, bvar::LatencyRecorder>) {
72
136
            (*instance) << value;
73
136
        } else if constexpr (is_status) {
74
136
            instance->set_value(value);
75
136
        } else {
76
            // This branch mean to be unreachable, add an assert(false) here to
77
            // prevent missing branch match.
78
            // Postpone deduction of static_assert by evaluating sizeof(T)
79
136
            static_assert(!sizeof(Bvar), "all types must be matched with if constexpr");
80
136
        }
81
136
    }
82
83
799
    std::shared_ptr<Bvar> get(const std::string& tag) {
84
799
        std::shared_ptr<Bvar> instance = nullptr;
85
799
        std::lock_guard<bthread::Mutex> l(mutex_);
86
87
799
        auto it = bvar_map_.find(tag);
88
799
        if (it == bvar_map_.end()) {
89
1
            instance = std::make_shared<Bvar>(module_, name_ + "_" + tag);
90
1
            bvar_map_[tag] = instance;
91
1
            return instance;
92
1
        }
93
798
        return it->second;
94
799
    }
95
96
    void remove(const std::string& tag) {
97
        std::lock_guard<bthread::Mutex> l(mutex_);
98
        bvar_map_.erase(tag);
99
    }
100
101
private:
102
    bthread::Mutex mutex_;
103
    std::string module_;
104
    std::string name_;
105
    std::map<std::string, std::shared_ptr<Bvar>> bvar_map_;
106
};
107
108
using BvarLatencyRecorderWithTag = BvarWithTag<bvar::LatencyRecorder>;
109
110
template <typename T>
111
    requires std::is_integral_v<T>
112
using BvarStatusWithTag = BvarWithTag<bvar::Status<T>, true>;
113
114
/**
115
@brief: A wrapper class for multidimensional bvar metrics.
116
This template class provides a convenient interface for managing multidimensional
117
bvar metrics. It supports various bvar types including Adder, IntRecorder,
118
LatencyRecorder, Maxer, and Status.
119
@param: BvarType The type of bvar metric to use (must be one of the supported types)
120
@output: Based on the bvar multidimensional counter implementation,
121
the metrics output format would typically follow this structure:
122
{metric_name}{dimension1="value1",dimension2="value2",...} value
123
@example: Basic usage with an Adder:
124
// Create a 2-dimensional counter with dimensions "region" and "service"
125
mBvarWrapper<bvar::Adder<int>> request_counter("xxx_request_count", {"region", "service"});
126
// Increment the counter for specific dimension values
127
request_counter.put({"east", "login"}, 1);
128
request_counter.put({"west", "search"}, 1);
129
request_counter.put({"east", "login"}, 1); // Now east/login has value 2
130
// the output of above metrics:
131
xxx_request_count{region="east",service="login"} 2
132
xxx_request_count{region="west",service="search"} 1
133
@note: The dimensions provided in the constructor and the values provided to
134
put() and get() methods must match in count. Also, all supported bvar types
135
have different behaviors for how values are processed and retrieved.
136
*/
137
138
template <typename T>
139
struct is_valid_bvar_type : std::false_type {};
140
template <typename T>
141
struct is_valid_bvar_type<bvar::Adder<T>> : std::true_type {};
142
template <>
143
struct is_valid_bvar_type<bvar::IntRecorder> : std::true_type {};
144
template <typename T>
145
struct is_valid_bvar_type<bvar::Maxer<T>> : std::true_type {};
146
template <typename T>
147
struct is_valid_bvar_type<bvar::Status<T>> : std::true_type {};
148
template <>
149
struct is_valid_bvar_type<bvar::LatencyRecorder> : std::true_type {};
150
template <typename T>
151
struct is_bvar_status : std::false_type {};
152
template <typename T>
153
struct is_bvar_status<bvar::Status<T>> : std::true_type {};
154
155
template <typename BvarType>
156
class mBvarWrapper {
157
public:
158
    mBvarWrapper(const std::string& metric_name,
159
                 const std::initializer_list<std::string>& dim_names)
160
8.28k
            : counter_(metric_name, std::list<std::string>(dim_names)) {
161
8.28k
        static_assert(is_valid_bvar_type<BvarType>::value,
162
8.28k
                      "BvarType must be one of the supported bvar types (Adder, IntRecorder, "
163
8.28k
                      "LatencyRecorder, Maxer, Status)");
164
8.28k
    }
_ZN12mBvarWrapperIN4bvar5AdderIiEEEC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt16initializer_listIS9_E
Line
Count
Source
160
90
            : counter_(metric_name, std::list<std::string>(dim_names)) {
161
90
        static_assert(is_valid_bvar_type<BvarType>::value,
162
90
                      "BvarType must be one of the supported bvar types (Adder, IntRecorder, "
163
90
                      "LatencyRecorder, Maxer, Status)");
164
90
    }
_ZN12mBvarWrapperIN4bvar6StatusIlvEEEC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt16initializer_listIS9_E
Line
Count
Source
160
330
            : counter_(metric_name, std::list<std::string>(dim_names)) {
161
330
        static_assert(is_valid_bvar_type<BvarType>::value,
162
330
                      "BvarType must be one of the supported bvar types (Adder, IntRecorder, "
163
330
                      "LatencyRecorder, Maxer, Status)");
164
330
    }
_ZN12mBvarWrapperIN4bvar6StatusIdvEEEC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt16initializer_listIS9_E
Line
Count
Source
160
120
            : counter_(metric_name, std::list<std::string>(dim_names)) {
161
120
        static_assert(is_valid_bvar_type<BvarType>::value,
162
120
                      "BvarType must be one of the supported bvar types (Adder, IntRecorder, "
163
120
                      "LatencyRecorder, Maxer, Status)");
164
120
    }
_ZN12mBvarWrapperIN4bvar5AdderIlEEEC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt16initializer_listIS9_E
Line
Count
Source
160
7.74k
            : counter_(metric_name, std::list<std::string>(dim_names)) {
161
7.74k
        static_assert(is_valid_bvar_type<BvarType>::value,
162
7.74k
                      "BvarType must be one of the supported bvar types (Adder, IntRecorder, "
163
7.74k
                      "LatencyRecorder, Maxer, Status)");
164
7.74k
    }
165
166
    template <typename ValType>
167
817k
    void put(const std::initializer_list<std::string>& dim_values, ValType value) {
168
817k
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
169
817k
        if (stats) {
170
817k
            if constexpr (is_bvar_status<BvarType>::value) {
171
766k
                stats->set_value(value);
172
766k
            } else {
173
766k
                *stats << value;
174
766k
            }
175
817k
        }
176
817k
    }
_ZN12mBvarWrapperIN4bvar5AdderIlEEE3putIlEEvRKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_
Line
Count
Source
167
717k
    void put(const std::initializer_list<std::string>& dim_values, ValType value) {
168
717k
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
169
717k
        if (stats) {
170
717k
            if constexpr (is_bvar_status<BvarType>::value) {
171
717k
                stats->set_value(value);
172
717k
            } else {
173
717k
                *stats << value;
174
717k
            }
175
717k
        }
176
717k
    }
_ZN12mBvarWrapperIN4bvar5AdderIlEEE3putImEEvRKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_
Line
Count
Source
167
6
    void put(const std::initializer_list<std::string>& dim_values, ValType value) {
168
6
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
169
6
        if (stats) {
170
6
            if constexpr (is_bvar_status<BvarType>::value) {
171
6
                stats->set_value(value);
172
6
            } else {
173
6
                *stats << value;
174
6
            }
175
6
        }
176
6
    }
_ZN12mBvarWrapperIN4bvar6StatusIlvEEE3putIlEEvRKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_
Line
Count
Source
167
950
    void put(const std::initializer_list<std::string>& dim_values, ValType value) {
168
950
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
169
950
        if (stats) {
170
950
            if constexpr (is_bvar_status<BvarType>::value) {
171
950
                stats->set_value(value);
172
950
            } else {
173
950
                *stats << value;
174
950
            }
175
950
        }
176
950
    }
_ZN12mBvarWrapperIN4bvar6StatusIdvEEE3putIdEEvRKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_
Line
Count
Source
167
627
    void put(const std::initializer_list<std::string>& dim_values, ValType value) {
168
627
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
169
627
        if (stats) {
170
627
            if constexpr (is_bvar_status<BvarType>::value) {
171
627
                stats->set_value(value);
172
627
            } else {
173
627
                *stats << value;
174
627
            }
175
627
        }
176
627
    }
Unexecuted instantiation: _ZN12mBvarWrapperIN4bvar6StatusIlvEEE3putImEEvRKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_
_ZN12mBvarWrapperIN4bvar6StatusIlvEEE3putIyEEvRKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_
Line
Count
Source
167
49.0k
    void put(const std::initializer_list<std::string>& dim_values, ValType value) {
168
49.0k
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
169
49.0k
        if (stats) {
170
49.0k
            if constexpr (is_bvar_status<BvarType>::value) {
171
49.0k
                stats->set_value(value);
172
49.0k
            } else {
173
49.0k
                *stats << value;
174
49.0k
            }
175
49.0k
        }
176
49.0k
    }
_ZN12mBvarWrapperIN4bvar5AdderIlEEE3putIyEEvRKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_
Line
Count
Source
167
49.0k
    void put(const std::initializer_list<std::string>& dim_values, ValType value) {
168
49.0k
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
169
49.0k
        if (stats) {
170
49.0k
            if constexpr (is_bvar_status<BvarType>::value) {
171
49.0k
                stats->set_value(value);
172
49.0k
            } else {
173
49.0k
                *stats << value;
174
49.0k
            }
175
49.0k
        }
176
49.0k
    }
_ZN12mBvarWrapperIN4bvar5AdderIiEEE3putIiEEvRKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_
Line
Count
Source
167
618
    void put(const std::initializer_list<std::string>& dim_values, ValType value) {
168
618
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
169
618
        if (stats) {
170
617
            if constexpr (is_bvar_status<BvarType>::value) {
171
617
                stats->set_value(value);
172
617
            } else {
173
617
                *stats << value;
174
617
            }
175
617
        }
176
618
    }
177
178
228
    auto get(const std::initializer_list<std::string>& dim_values) {
179
228
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
180
228
        using ReturnType = decltype(stats->get_value());
181
228
        if (stats) {
182
228
            return stats->get_value();
183
228
        }
184
0
        return ReturnType {};
185
228
    }
_ZN12mBvarWrapperIN4bvar6StatusIdvEEE3getERKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE
Line
Count
Source
178
8
    auto get(const std::initializer_list<std::string>& dim_values) {
179
8
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
180
8
        using ReturnType = decltype(stats->get_value());
181
8
        if (stats) {
182
8
            return stats->get_value();
183
8
        }
184
0
        return ReturnType {};
185
8
    }
_ZN12mBvarWrapperIN4bvar6StatusIlvEEE3getERKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE
Line
Count
Source
178
22
    auto get(const std::initializer_list<std::string>& dim_values) {
179
22
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
180
22
        using ReturnType = decltype(stats->get_value());
181
22
        if (stats) {
182
22
            return stats->get_value();
183
22
        }
184
0
        return ReturnType {};
185
22
    }
_ZN12mBvarWrapperIN4bvar5AdderIlEEE3getERKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE
Line
Count
Source
178
198
    auto get(const std::initializer_list<std::string>& dim_values) {
179
198
        BvarType* stats = counter_.get_stats(std::list<std::string>(dim_values));
180
198
        using ReturnType = decltype(stats->get_value());
181
198
        if (stats) {
182
198
            return stats->get_value();
183
198
        }
184
0
        return ReturnType {};
185
198
    }
186
187
private:
188
    bvar::MultiDimension<BvarType> counter_;
189
};
190
/**
191
 * @class BvarLatencyRecorderWithStatus
192
 * @brief A latency recorder with auto-exposed max and average metrics
193
 *
194
 * This class wraps a bvar::LatencyRecorder and automatically creates two
195
 * additional PassiveStatus metrics to expose the maximum and average latency.
196
 * This makes it convenient to track these key metrics in monitoring systems.
197
 * 
198
 * @tparam N Window size in seconds for the latency recorder, defaults to 60 seconds
199
 *
200
 * @note Unlike mBvarLatencyRecorderWithStatus, this class doesn't support multi-dimensional
201
 * metrics and doesn't use a timer to update status. It uses PassiveStatus to calculate
202
 * statistics in real-time when queried.
203
 *
204
 * @example Basic usage:
205
 *   // Create a latency recorder
206
 *   BvarLatencyRecorderWithStatus<> my_latency("my_service_latency");
207
 *   // Record a latency value (in microseconds)
208
 *   my_latency << 1500;  // or my_latency.put(1500);
209
 *   // This will create three metrics:
210
 *   // - The original latency recorder (hidden)
211
 *   // - my_service_latency_max (showing maximum latency)
212
 *   // - my_service_latency_avg (showing average latency)
213
 */
214
template <int N = 60>
215
class BvarLatencyRecorderWithStatus {
216
public:
217
    /**
218
     * @brief Constructor
219
     * @param metric_name Base name for the metrics, _max and _avg suffixes will be added
220
     */
221
    BvarLatencyRecorderWithStatus(const std::string& metric_name)
222
            : recorder_(N),
223
              max_status_(metric_name + "_max", get_max_latency, this),
224
              avg_status_(metric_name + "_avg", get_avg_latency, this),
225
60
              count_status_(metric_name + "_count", get_count_latency, this) {
226
60
        recorder_.hide();
227
60
    }
228
229
    /**
230
     * @brief Constructor with prefix
231
     * @param prefix Prefix for the metric name
232
     * @param metric_name Base name for the metrics
233
     */
234
    BvarLatencyRecorderWithStatus(const std::string& prefix, const std::string& metric_name)
235
60
            : BvarLatencyRecorderWithStatus(prefix + "_" + metric_name) {}
236
237
    /**
238
     * @brief Record a latency value
239
     * @param value Latency value to record (in microseconds)
240
     */
241
    void put(int64_t value) { recorder_ << value; }
242
243
    /**
244
     * @brief Stream operator for recording latency values
245
     * @param value Latency value to record (in microseconds)
246
     */
247
952
    void operator<<(int64_t value) { recorder_ << value; }
248
249
    int64_t max() const { return recorder_.max_latency(); }
250
251
    int64_t avg() const { return recorder_.latency(); }
252
253
    int64_t count() const { return recorder_.count(); }
254
255
private:
256
    bvar::LatencyRecorder recorder_;            // The underlying latency recorder
257
    bvar::PassiveStatus<int64_t> max_status_;   // Passive status for maximum latency
258
    bvar::PassiveStatus<int64_t> avg_status_;   // Passive status for average latency
259
    bvar::PassiveStatus<int64_t> count_status_; // Passive status for count latency
260
261
    /**
262
     * @brief Callback function to get maximum latency
263
     * @param arg Pointer to the BvarLatencyRecorderWithStatus instance
264
     * @return Maximum latency value, or 0 if negative
265
     */
266
1.61k
    static int64_t get_max_latency(void* arg) {
267
1.61k
        auto* self = static_cast<BvarLatencyRecorderWithStatus*>(arg);
268
1.61k
        int64_t value = self->recorder_.max_latency();
269
1.61k
        return value >= 0 ? value : 0;
270
1.61k
    }
271
272
    /**
273
     * @brief Callback function to get average latency
274
     * @param arg Pointer to the BvarLatencyRecorderWithStatus instance
275
     * @return Average latency value, or 0 if negative
276
     */
277
1.61k
    static int64_t get_avg_latency(void* arg) {
278
1.61k
        auto* self = static_cast<BvarLatencyRecorderWithStatus*>(arg);
279
1.61k
        int64_t value = self->recorder_.latency();
280
1.61k
        return value >= 0 ? value : 0;
281
1.61k
    }
282
283
    /**
284
     * @brief Callback function to get count latency
285
     * @param arg Pointer to the BvarLatencyRecorderWithStatus instance
286
     * @return Count latency value, or 0 if negative
287
     */
288
1.61k
    static int64_t get_count_latency(void* arg) {
289
1.61k
        auto* self = static_cast<BvarLatencyRecorderWithStatus*>(arg);
290
1.61k
        int64_t value = self->recorder_.count();
291
1.61k
        return value >= 0 ? value : 0;
292
1.61k
    }
293
};
294
295
/**
296
 * @class MBvarLatencyRecorderWithStatus
297
 * @brief A multi-dimensional latency recorder with status metrics
298
 * 
299
 * This class provides a way to record latency metrics across multiple dimensions and
300
 * automatically update status metrics (max and average) at regular intervals.
301
 * It leverages bvar's MultiDimension capability to track metrics per dimension combination.
302
 * 
303
 * @tparam N Window size in seconds for the latency recorder (default: 60)
304
 */
305
template <int N = 60>
306
class MBvarLatencyRecorderWithStatus {
307
private:
308
    /**
309
    * @class ScheduledLatencyUpdater
310
    * @brief A helper class to schedule deferred execution of tasks using bthread timer.
311
    * 
312
    * This class provides a way to execute a callback function after a specified time interval.
313
    * It takes care of safely managing the lifecycle of the timer and ensures the callback
314
    * is only executed if the timer and its arguments are still valid.
315
    * 
316
    * @note This class requires bthread to be initialized before use. If bthread is not
317
    * initialized, timer creation will fail.
318
    */
319
    class ScheduledLatencyUpdater : public bvar::LatencyRecorder {
320
    public:
321
        /**
322
        * @brief Constructor for ScheduledLatencyUpdater
323
        * 
324
        * @param interval_s The time interval in seconds after which the callback should be executed
325
        * @param arg Optional argument to pass to the callback function
326
        */
327
        ScheduledLatencyUpdater(size_t interval_s, void* arg = nullptr)
328
312
                : bvar::LatencyRecorder(interval_s), _interval_s(interval_s), _arg(arg) {
329
312
            hide();
330
312
        }
331
332
        /**
333
        * @brief Destructor
334
        * 
335
        * Stops the timer if it's still running to prevent any callbacks after destruction
336
        */
337
200
        ~ScheduledLatencyUpdater() { stop(); }
338
339
        /**
340
        * @brief Start the timer
341
        * 
342
        * Schedules the callback function to be executed after the specified interval.
343
        * Does nothing if the timer has already been started.
344
        * 
345
        * @return true if the timer was successfully started, false otherwise
346
        */
347
40.8k
        bool start() {
348
40.8k
            if (!_started.load()) {
349
345
                {
350
345
                    std::lock_guard<bthread::Mutex> l(init_mutex_);
351
345
                    if (!_started.load()) {
352
312
                        if (!schedule()) {
353
0
                            return false;
354
0
                        }
355
312
                        _started.store(true);
356
312
                    }
357
345
                    return true;
358
345
                }
359
345
            }
360
40.5k
            return true;
361
40.8k
        }
362
363
        /*** @brief Reschedule the timer
364
        * 
365
        * Scheduling a one-time task.
366
        * This is useful if you want to reset the timer interval.
367
        */
368
924
        bool schedule() {
369
924
            if (bthread_timer_add(&_timer, butil::seconds_from_now(_interval_s), update, this) !=
370
924
                0) {
371
0
                LOG(WARNING) << "Failed to add bthread timer for ScheduledLatencyUpdater";
372
0
                return false;
373
0
            }
374
924
            return true;
375
924
        }
376
377
        /**
378
        * @brief Background update function
379
        * 
380
        * This function is called periodically by the timer to update the status metrics
381
        * with the current values from the latency recorders.
382
        * 
383
        * @param arg Pointer to the mBvarLatencyRecorderWithStatus instance
384
        */
385
612
        static void update(void* arg) {
386
612
            auto* latency_updater = static_cast<ScheduledLatencyUpdater*>(arg);
387
612
            if (!latency_updater || !latency_updater->_started) {
388
0
                LOG(WARNING) << "Invalid ScheduledLatencyUpdater in timer callback";
389
0
                return;
390
0
            }
391
392
612
            VLOG_DEBUG << "Timer triggered for ScheduledLatencyUpdater, interval: "
393
0
                       << latency_updater->_interval_s << "s";
394
395
612
            auto* parent = static_cast<MBvarLatencyRecorderWithStatus*>(latency_updater->_arg);
396
612
            if (!parent) {
397
0
                LOG(WARNING) << "Invalid parent container in timer callback";
398
0
                return;
399
0
            }
400
401
612
            std::list<std::string> current_dim_list;
402
612
            {
403
612
                std::lock_guard<bthread::Mutex> l(parent->recorder_mutex_);
404
30.3k
                for (const auto& it : parent->recorder_) {
405
30.3k
                    if (it.second.get() == latency_updater) {
406
612
                        current_dim_list = it.first;
407
612
                        break;
408
612
                    }
409
30.3k
                }
410
612
            }
411
412
612
            if (current_dim_list.empty()) {
413
0
                LOG(WARNING) << "Could not find dimension for ScheduledLatencyUpdater";
414
0
                return;
415
0
            }
416
417
612
            {
418
612
                std::lock_guard<bthread::Mutex> l(parent->timer_mutex_);
419
420
612
                bvar::Status<int64_t>* max_status = parent->max_status_.get_stats(current_dim_list);
421
612
                bvar::Status<int64_t>* avg_status = parent->avg_status_.get_stats(current_dim_list);
422
612
                bvar::Status<int64_t>* count_status =
423
612
                        parent->count_status_.get_stats(current_dim_list);
424
425
612
                VLOG_DEBUG << "Updating latency recorder status for dimension, "
426
0
                           << "max_latency: " << latency_updater->max_latency()
427
0
                           << ", avg_latency: " << latency_updater->latency();
428
612
                TEST_SYNC_POINT("mBvarLatencyRecorderWithStatus::update");
429
430
612
                if (max_status) {
431
612
                    max_status->set_value(latency_updater->max_latency());
432
612
                }
433
612
                if (avg_status) {
434
612
                    avg_status->set_value(latency_updater->latency());
435
612
                }
436
612
                if (count_status) {
437
612
                    count_status->set_value(latency_updater->count());
438
612
                }
439
612
            }
440
441
612
            if (latency_updater->_started && !latency_updater->schedule()) {
442
0
                LOG(WARNING) << "Failed to reschedule timer for ScheduledLatencyUpdater";
443
0
                latency_updater->_started = false;
444
0
            }
445
612
        }
446
447
        /**
448
        * @brief Stop the timer
449
        * 
450
        * Cancels the timer if it's running and marks arguments as invalid to prevent
451
        * any pending callbacks from accessing potentially freed resources.
452
        */
453
200
        void stop() {
454
200
            if (_started.load()) {
455
200
                bthread_timer_del(_timer);
456
200
                _started = false;
457
200
            }
458
200
        }
459
460
    private:
461
        int _interval_s;                   // Timer interval in seconds
462
        void* _arg;                        // Argument to pass to the callback
463
        bthread_timer_t _timer;            // The bthread timer handle
464
        std::atomic_bool _started {false}; // Whether the timer has been started
465
        bthread::Mutex init_mutex_;        // Mutex for timer_map_
466
    };
467
468
public:
469
    /**
470
     * @brief Constructor
471
     * 
472
     * @param metric_name Base name for the metrics
473
     * @param dim_names List of dimension names
474
     */
475
    MBvarLatencyRecorderWithStatus(const std::string& metric_name,
476
                                   const std::initializer_list<std::string>& dim_names)
477
            : _metric_name(metric_name),
478
              max_status_(metric_name + "_max", std::list<std::string>(dim_names)),
479
              avg_status_(metric_name + "_avg", std::list<std::string>(dim_names)),
480
62
              count_status_(metric_name + "_count", std::list<std::string>(dim_names)) {}
481
482
    MBvarLatencyRecorderWithStatus(const std::string& prefix, const std::string& metric_name,
483
                                   const std::initializer_list<std::string>& dim_names)
484
60
            : MBvarLatencyRecorderWithStatus(prefix + "_" + metric_name, dim_names) {}
485
486
    /**
487
     * @brief Record a latency value
488
     * 
489
     * @param dim_values List of dimension values (must match the number of dimensions)
490
     * @param value The latency value to record
491
     */
492
40.9k
    void put(const std::initializer_list<std::string>& dim_values, int64_t value) {
493
40.9k
        std::list<std::string> dim_list(dim_values);
494
40.9k
        std::shared_ptr<ScheduledLatencyUpdater> latency = nullptr;
495
40.9k
        {
496
40.9k
            std::lock_guard<bthread::Mutex> l(recorder_mutex_);
497
40.9k
            auto it = recorder_.find(dim_list);
498
40.9k
            if (it == recorder_.end()) {
499
312
                int inteval_s = N;
500
312
                TEST_SYNC_POINT_CALLBACK("mBvarLatencyRecorderWithStatus::put", &inteval_s);
501
312
                latency = std::make_shared<ScheduledLatencyUpdater>(inteval_s, this);
502
312
                recorder_[dim_list] = latency;
503
40.6k
            } else {
504
40.6k
                latency = it->second;
505
40.6k
            }
506
40.9k
        }
507
508
40.9k
        auto* latency_ptr = latency.get();
509
40.9k
        latency->start();
510
40.9k
        *latency_ptr << value;
511
40.9k
    }
512
513
39.5k
    int64_t get_max(const std::initializer_list<std::string>& dim_values) {
514
39.5k
        return max_status_.get_stats(std::list<std::string>(dim_values))->get_value();
515
39.5k
    }
516
517
39.5k
    int64_t get_avg(const std::initializer_list<std::string>& dim_values) {
518
39.5k
        return avg_status_.get_stats(std::list<std::string>(dim_values))->get_value();
519
39.5k
    }
520
521
39.6k
    int64_t get_count(const std::initializer_list<std::string>& dim_values) {
522
39.6k
        return count_status_.get_stats(std::list<std::string>(dim_values))->get_value();
523
39.6k
    }
524
525
private:
526
    std::string _metric_name;
527
    // dim_names -> recorder
528
    std::map<std::list<std::string>, std::shared_ptr<ScheduledLatencyUpdater>> recorder_;
529
    bvar::MultiDimension<bvar::Status<int64_t>> max_status_;
530
    bvar::MultiDimension<bvar::Status<int64_t>> avg_status_;
531
    bvar::MultiDimension<bvar::Status<int64_t>> count_status_;
532
    bthread::Mutex recorder_mutex_; // Mutex for recorder_
533
    bthread::Mutex timer_mutex_;    // Mutex for timer_map_
534
};
535
536
using mBvarIntAdder = mBvarWrapper<bvar::Adder<int>>;
537
using mBvarInt64Adder = mBvarWrapper<bvar::Adder<int64_t>>;
538
using mBvarDoubleAdder = mBvarWrapper<bvar::Adder<double>>;
539
using mBvarIntRecorder = mBvarWrapper<bvar::IntRecorder>;
540
using mBvarLatencyRecorder = mBvarWrapper<bvar::LatencyRecorder>;
541
using mBvarIntMaxer = mBvarWrapper<bvar::Maxer<int>>;
542
using mBvarDoubleMaxer = mBvarWrapper<bvar::Maxer<double>>;
543
template <typename T>
544
using mBvarStatus = mBvarWrapper<bvar::Status<T>>;
545
546
// meta-service's bvars
547
extern BvarLatencyRecorderWithTag g_bvar_ms_begin_txn;
548
extern BvarLatencyRecorderWithTag g_bvar_ms_precommit_txn;
549
extern BvarLatencyRecorderWithTag g_bvar_ms_commit_txn;
550
extern BvarLatencyRecorderWithTag g_bvar_ms_commit_txn_eventually;
551
extern BvarLatencyRecorderWithTag g_bvar_ms_abort_txn;
552
extern BvarLatencyRecorderWithTag g_bvar_ms_get_txn;
553
extern BvarLatencyRecorderWithTag g_bvar_ms_get_current_max_txn_id;
554
extern BvarLatencyRecorderWithTag g_bvar_ms_check_txn_conflict;
555
extern BvarLatencyRecorderWithTag g_bvar_ms_abort_txn_with_coordinator;
556
extern BvarLatencyRecorderWithTag g_bvar_ms_begin_sub_txn;
557
extern BvarLatencyRecorderWithTag g_bvar_ms_abort_sub_txn;
558
extern BvarLatencyRecorderWithTag g_bvar_ms_clean_txn_label;
559
extern BvarLatencyRecorderWithTag g_bvar_ms_get_version;
560
extern BvarLatencyRecorderWithTag g_bvar_ms_batch_get_version;
561
extern BvarLatencyRecorderWithTag g_bvar_ms_create_tablets;
562
extern BvarLatencyRecorderWithTag g_bvar_ms_update_tablet;
563
extern BvarLatencyRecorderWithTag g_bvar_ms_get_tablet;
564
extern BvarLatencyRecorderWithTag g_bvar_ms_prepare_rowset;
565
extern BvarLatencyRecorderWithTag g_bvar_ms_commit_rowset;
566
extern BvarLatencyRecorderWithTag g_bvar_ms_update_tmp_rowset;
567
extern BvarLatencyRecorderWithTag g_bvar_ms_get_rowset;
568
extern BvarLatencyRecorderWithTag g_bvar_ms_drop_index;
569
extern BvarLatencyRecorderWithTag g_bvar_ms_prepare_index;
570
extern BvarLatencyRecorderWithTag g_bvar_ms_commit_index;
571
extern BvarLatencyRecorderWithTag g_bvar_ms_prepare_partition;
572
extern BvarLatencyRecorderWithTag g_bvar_ms_commit_partition;
573
extern BvarLatencyRecorderWithTag g_bvar_ms_drop_partition;
574
extern BvarLatencyRecorderWithTag g_bvar_ms_prepare_restore_job;
575
extern BvarLatencyRecorderWithTag g_bvar_ms_commit_restore_job;
576
extern BvarLatencyRecorderWithTag g_bvar_ms_finish_restore_job;
577
extern BvarLatencyRecorderWithTag g_bvar_ms_get_tablet_stats;
578
extern BvarLatencyRecorderWithTag g_bvar_ms_get_obj_store_info;
579
extern BvarLatencyRecorderWithTag g_bvar_ms_alter_obj_store_info;
580
extern BvarLatencyRecorderWithTag g_bvar_ms_alter_storage_vault;
581
extern BvarLatencyRecorderWithTag g_bvar_ms_create_instance;
582
extern BvarLatencyRecorderWithTag g_bvar_ms_alter_instance;
583
extern BvarLatencyRecorderWithTag g_bvar_ms_alter_cluster;
584
extern BvarLatencyRecorderWithTag g_bvar_ms_get_cluster;
585
extern BvarLatencyRecorderWithTag g_bvar_ms_create_stage;
586
extern BvarLatencyRecorderWithTag g_bvar_ms_get_stage;
587
extern BvarLatencyRecorderWithTag g_bvar_ms_drop_stage;
588
extern BvarLatencyRecorderWithTag g_bvar_ms_get_iam;
589
extern BvarLatencyRecorderWithTag g_bvar_ms_update_ak_sk;
590
extern BvarLatencyRecorderWithTag g_bvar_ms_alter_iam;
591
extern BvarLatencyRecorderWithTag g_bvar_ms_alter_ram_user;
592
extern BvarLatencyRecorderWithTag g_bvar_ms_begin_copy;
593
extern BvarLatencyRecorderWithTag g_bvar_ms_finish_copy;
594
extern BvarLatencyRecorderWithTag g_bvar_ms_get_copy_job;
595
extern BvarLatencyRecorderWithTag g_bvar_ms_get_copy_files;
596
extern BvarLatencyRecorderWithTag g_bvar_ms_filter_copy_files;
597
extern BvarLatencyRecorderWithTag g_bvar_ms_start_tablet_job;
598
extern BvarLatencyRecorderWithTag g_bvar_ms_finish_tablet_job;
599
extern BvarLatencyRecorderWithTag g_bvar_ms_update_delete_bitmap;
600
extern BvarLatencyRecorderWithTag g_bvar_ms_get_delete_bitmap;
601
extern BvarLatencyRecorderWithTag g_bvar_ms_get_delete_bitmap_update_lock;
602
extern BvarLatencyRecorderWithTag g_bvar_ms_remove_delete_bitmap;
603
extern BvarLatencyRecorderWithTag g_bvar_ms_remove_delete_bitmap_update_lock;
604
extern BvarLatencyRecorderWithTag g_bvar_ms_get_cluster_status;
605
extern BvarLatencyRecorderWithTag g_bvar_ms_set_cluster_status;
606
extern BvarLatencyRecorderWithTag g_bvar_ms_get_instance;
607
extern BvarLatencyRecorderWithTag g_bvar_ms_get_rl_task_commit_attach;
608
extern BvarLatencyRecorderWithTag g_bvar_ms_get_streaming_task_commit_attach;
609
extern BvarLatencyRecorderWithTag g_bvar_ms_delete_streaming_job;
610
extern BvarLatencyRecorderWithTag g_bvar_ms_reset_streaming_job_offset;
611
extern BvarLatencyRecorderWithTag g_bvar_ms_reset_rl_progress;
612
extern BvarLatencyRecorderWithTag g_bvar_ms_get_txn_id;
613
extern BvarLatencyRecorderWithTag g_bvar_ms_check_kv;
614
extern BvarLatencyRecorderWithTag g_bvar_ms_get_schema_dict;
615
extern BvarLatencyRecorderWithTag g_bvar_ms_begin_snapshot;
616
extern BvarLatencyRecorderWithTag g_bvar_ms_commit_snapshot;
617
extern BvarLatencyRecorderWithTag g_bvar_ms_abort_snapshot;
618
extern BvarLatencyRecorderWithTag g_bvar_ms_drop_snapshot;
619
extern BvarLatencyRecorderWithTag g_bvar_ms_list_snapshot;
620
extern BvarLatencyRecorderWithTag g_bvar_ms_clone_instance;
621
extern bvar::Adder<int64_t> g_bvar_update_delete_bitmap_fail_counter;
622
extern bvar::Adder<int64_t> g_bvar_get_delete_bitmap_fail_counter;
623
extern BvarLatencyRecorderWithStatus<60> g_bvar_ms_txn_commit_with_tablet_count;
624
extern BvarLatencyRecorderWithStatus<60> g_bvar_ms_txn_commit_with_partition_count;
625
extern MBvarLatencyRecorderWithStatus<60> g_bvar_instance_txn_commit_with_partition_count;
626
extern MBvarLatencyRecorderWithStatus<60> g_bvar_instance_txn_commit_with_tablet_count;
627
628
// recycler's bvars
629
extern BvarStatusWithTag<int64_t> g_bvar_recycler_recycle_index_earlest_ts;
630
extern BvarStatusWithTag<int64_t> g_bvar_recycler_recycle_partition_earlest_ts;
631
extern BvarStatusWithTag<int64_t> g_bvar_recycler_recycle_rowset_earlest_ts;
632
extern BvarStatusWithTag<int64_t> g_bvar_recycler_recycle_tmp_rowset_earlest_ts;
633
extern BvarStatusWithTag<int64_t> g_bvar_recycler_recycle_expired_txn_label_earlest_ts;
634
extern BvarStatusWithTag<int64_t> g_bvar_recycler_recycle_restore_job_earlest_ts;
635
636
// recycler's mbvars
637
extern bvar::Status<int64_t> g_bvar_recycler_task_max_concurrency;
638
extern mBvarIntAdder g_bvar_recycler_instance_recycle_task_status;
639
extern mBvarStatus<int64_t> g_bvar_recycler_instance_last_round_recycle_duration;
640
extern mBvarStatus<int64_t> g_bvar_recycler_instance_next_ts;
641
extern mBvarStatus<int64_t> g_bvar_recycler_instance_recycle_start_ts;
642
extern mBvarStatus<int64_t> g_bvar_recycler_instance_recycle_end_ts;
643
extern mBvarStatus<int64_t> g_bvar_recycler_instance_recycle_last_success_ts;
644
645
extern mBvarIntAdder g_bvar_recycler_vault_recycle_task_status;
646
extern mBvarStatus<int64_t> g_bvar_recycler_instance_last_round_recycled_num;
647
extern mBvarStatus<int64_t> g_bvar_recycler_instance_last_round_to_recycle_num;
648
extern mBvarStatus<int64_t> g_bvar_recycler_instance_last_round_recycled_bytes;
649
extern mBvarStatus<int64_t> g_bvar_recycler_instance_last_round_to_recycle_bytes;
650
extern mBvarStatus<double> g_bvar_recycler_instance_last_round_recycle_elpased_ts;
651
extern mBvarInt64Adder g_bvar_recycler_instance_recycle_total_num_since_started;
652
extern mBvarInt64Adder g_bvar_recycler_instance_recycle_total_bytes_since_started;
653
extern mBvarIntAdder g_bvar_recycler_instance_recycle_round;
654
extern mBvarStatus<double> g_bvar_recycler_instance_recycle_time_per_resource;
655
extern mBvarStatus<double> g_bvar_recycler_instance_recycle_bytes_per_ms;
656
657
// txn_kv's bvars
658
extern bvar::LatencyRecorder g_bvar_txn_kv_get;
659
extern bvar::LatencyRecorder g_bvar_txn_kv_range_get;
660
extern bvar::LatencyRecorder g_bvar_txn_kv_put;
661
extern bvar::LatencyRecorder g_bvar_txn_kv_commit;
662
extern bvar::LatencyRecorder g_bvar_txn_kv_atomic_set_ver_key;
663
extern bvar::LatencyRecorder g_bvar_txn_kv_atomic_set_ver_value;
664
extern bvar::LatencyRecorder g_bvar_txn_kv_atomic_add;
665
extern bvar::LatencyRecorder g_bvar_txn_kv_remove;
666
extern bvar::LatencyRecorder g_bvar_txn_kv_range_remove;
667
extern bvar::LatencyRecorder g_bvar_txn_kv_get_read_version;
668
extern bvar::LatencyRecorder g_bvar_txn_kv_get_committed_version;
669
extern bvar::LatencyRecorder g_bvar_txn_kv_batch_get;
670
671
extern bvar::Adder<int64_t> g_bvar_txn_kv_commit_error_counter;
672
extern bvar::Adder<int64_t> g_bvar_txn_kv_commit_conflict_counter;
673
extern bvar::Adder<int64_t> g_bvar_txn_kv_get_count_normalized;
674
675
extern bvar::Adder<int64_t> g_bvar_delete_bitmap_lock_txn_put_conflict_counter;
676
extern bvar::Adder<int64_t> g_bvar_delete_bitmap_lock_txn_remove_conflict_by_fail_counter;
677
extern bvar::Adder<int64_t> g_bvar_delete_bitmap_lock_txn_remove_conflict_by_load_counter;
678
extern bvar::Adder<int64_t>
679
        g_bvar_delete_bitmap_lock_txn_remove_conflict_by_compaction_commit_counter;
680
extern bvar::Adder<int64_t>
681
        g_bvar_delete_bitmap_lock_txn_remove_conflict_by_compaction_lease_counter;
682
extern bvar::Adder<int64_t>
683
        g_bvar_delete_bitmap_lock_txn_remove_conflict_by_compaction_abort_counter;
684
685
extern const int64_t BVAR_FDB_INVALID_VALUE;
686
extern bvar::Status<int64_t> g_bvar_fdb_client_count;
687
extern bvar::Status<int64_t> g_bvar_fdb_configuration_coordinators_count;
688
extern bvar::Status<int64_t> g_bvar_fdb_configuration_usable_regions;
689
extern bvar::Status<int64_t> g_bvar_fdb_coordinators_unreachable_count;
690
extern bvar::Status<int64_t> g_bvar_fdb_fault_tolerance_count;
691
extern bvar::Status<int64_t> g_bvar_fdb_data_average_partition_size_bytes;
692
extern bvar::Status<int64_t> g_bvar_fdb_data_log_server_space_bytes;
693
extern bvar::Status<int64_t> g_bvar_fdb_data_moving_data_highest_priority;
694
extern bvar::Status<int64_t> g_bvar_fdb_data_moving_data_in_flight_bytes;
695
extern bvar::Status<int64_t> g_bvar_fdb_data_moving_data_in_queue_bytes;
696
extern bvar::Status<int64_t> g_bvar_fdb_data_moving_total_written_bytes;
697
extern bvar::Status<int64_t> g_bvar_fdb_data_partition_count;
698
extern bvar::Status<int64_t> g_bvar_fdb_data_storage_server_space_bytes;
699
extern bvar::Status<int64_t> g_bvar_fdb_data_state_min_replicas_remaining;
700
extern bvar::Status<int64_t> g_bvar_fdb_data_total_kv_size_bytes;
701
extern bvar::Status<int64_t> g_bvar_fdb_data_total_disk_used_bytes;
702
extern bvar::Status<int64_t> g_bvar_fdb_generation;
703
extern bvar::Status<int64_t> g_bvar_fdb_incompatible_connections;
704
extern bvar::Status<int64_t> g_bvar_fdb_latency_probe_transaction_start_ns;
705
extern bvar::Status<int64_t> g_bvar_fdb_latency_probe_commit_ns;
706
extern bvar::Status<int64_t> g_bvar_fdb_latency_probe_read_ns;
707
extern bvar::Status<int64_t> g_bvar_fdb_machines_count;
708
extern bvar::Status<int64_t> g_bvar_fdb_process_count;
709
extern bvar::Status<int64_t> g_bvar_fdb_qos_worst_data_lag_storage_server_ns;
710
extern bvar::Status<int64_t> g_bvar_fdb_qos_worst_durability_lag_storage_server_ns;
711
extern bvar::Status<int64_t> g_bvar_fdb_qos_worst_log_server_queue_bytes;
712
extern bvar::Status<int64_t> g_bvar_fdb_qos_worst_storage_server_queue_bytes;
713
extern bvar::Status<int64_t> g_bvar_fdb_workload_conflict_rate_hz;
714
extern bvar::Status<int64_t> g_bvar_fdb_workload_location_rate_hz;
715
extern bvar::Status<int64_t> g_bvar_fdb_workload_keys_read_hz;
716
extern bvar::Status<int64_t> g_bvar_fdb_workload_read_bytes_hz;
717
extern bvar::Status<int64_t> g_bvar_fdb_workload_read_rate_hz;
718
extern bvar::Status<int64_t> g_bvar_fdb_workload_write_rate_hz;
719
extern bvar::Status<int64_t> g_bvar_fdb_workload_written_bytes_hz;
720
extern bvar::Status<int64_t> g_bvar_fdb_workload_transactions_started_hz;
721
extern bvar::Status<int64_t> g_bvar_fdb_workload_transactions_committed_hz;
722
extern bvar::Status<int64_t> g_bvar_fdb_workload_transactions_rejected_hz;
723
extern bvar::Status<int64_t> g_bvar_fdb_client_thread_busyness_percent;
724
extern mBvarStatus<int64_t> g_bvar_fdb_process_status_int;
725
extern mBvarStatus<double> g_bvar_fdb_process_status_float;
726
727
// checker
728
extern BvarStatusWithTag<long> g_bvar_checker_num_scanned;
729
extern BvarStatusWithTag<long> g_bvar_checker_num_scanned_with_segment;
730
extern BvarStatusWithTag<long> g_bvar_checker_num_check_failed;
731
extern BvarStatusWithTag<long> g_bvar_checker_check_cost_s;
732
extern BvarStatusWithTag<long> g_bvar_checker_enqueue_cost_s;
733
extern BvarStatusWithTag<long> g_bvar_checker_last_success_time_ms;
734
extern BvarStatusWithTag<long> g_bvar_checker_instance_volume;
735
extern BvarStatusWithTag<long> g_bvar_inverted_checker_num_scanned;
736
extern BvarStatusWithTag<long> g_bvar_inverted_checker_num_check_failed;
737
738
extern BvarStatusWithTag<int64_t> g_bvar_inverted_checker_leaked_delete_bitmaps;
739
extern BvarStatusWithTag<int64_t> g_bvar_inverted_checker_abnormal_delete_bitmaps;
740
extern BvarStatusWithTag<int64_t> g_bvar_inverted_checker_delete_bitmaps_scanned;
741
extern BvarStatusWithTag<int64_t> g_bvar_max_rowsets_with_useless_delete_bitmap_version;
742
743
extern BvarStatusWithTag<int64_t> g_bvar_checker_restore_job_prepared_state;
744
extern BvarStatusWithTag<int64_t> g_bvar_checker_restore_job_committed_state;
745
extern BvarStatusWithTag<int64_t> g_bvar_checker_restore_job_dropped_state;
746
extern BvarStatusWithTag<int64_t> g_bvar_checker_restore_job_completed_state;
747
extern BvarStatusWithTag<int64_t> g_bvar_checker_restore_job_recycling_state;
748
extern BvarStatusWithTag<int64_t> g_bvar_checker_restore_job_cost_many_time;
749
750
// rpc kv
751
extern mBvarInt64Adder g_bvar_rpc_kv_get_rowset_get_counter;
752
extern mBvarInt64Adder g_bvar_rpc_kv_get_version_get_counter;
753
extern mBvarInt64Adder g_bvar_rpc_kv_get_schema_dict_get_counter;
754
extern mBvarInt64Adder g_bvar_rpc_kv_create_tablets_get_counter;
755
extern mBvarInt64Adder g_bvar_rpc_kv_create_tablets_put_counter;
756
extern mBvarInt64Adder g_bvar_rpc_kv_update_tablet_get_counter;
757
extern mBvarInt64Adder g_bvar_rpc_kv_update_tablet_put_counter;
758
extern mBvarInt64Adder g_bvar_rpc_kv_get_tablet_get_counter;
759
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_rowset_get_counter;
760
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_rowset_put_counter;
761
extern mBvarInt64Adder g_bvar_rpc_kv_commit_rowset_get_counter;
762
extern mBvarInt64Adder g_bvar_rpc_kv_commit_rowset_put_counter;
763
extern mBvarInt64Adder g_bvar_rpc_kv_commit_rowset_del_counter;
764
extern mBvarInt64Adder g_bvar_rpc_kv_update_tmp_rowset_get_counter;
765
extern mBvarInt64Adder g_bvar_rpc_kv_update_tmp_rowset_put_counter;
766
extern mBvarInt64Adder g_bvar_rpc_kv_get_tablet_stats_get_counter;
767
extern mBvarInt64Adder g_bvar_rpc_kv_update_delete_bitmap_get_counter;
768
extern mBvarInt64Adder g_bvar_rpc_kv_update_delete_bitmap_put_counter;
769
extern mBvarInt64Adder g_bvar_rpc_kv_update_delete_bitmap_del_counter;
770
extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_get_counter;
771
extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_update_lock_get_counter;
772
extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_update_lock_put_counter;
773
extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_update_lock_del_counter;
774
extern mBvarInt64Adder g_bvar_rpc_kv_remove_delete_bitmap_update_lock_get_counter;
775
extern mBvarInt64Adder g_bvar_rpc_kv_remove_delete_bitmap_update_lock_put_counter;
776
extern mBvarInt64Adder g_bvar_rpc_kv_remove_delete_bitmap_update_lock_del_counter;
777
extern mBvarInt64Adder g_bvar_rpc_kv_remove_delete_bitmap_del_counter;
778
extern mBvarInt64Adder g_bvar_rpc_kv_start_tablet_job_get_counter;
779
extern mBvarInt64Adder g_bvar_rpc_kv_start_tablet_job_put_counter;
780
extern mBvarInt64Adder g_bvar_rpc_kv_finish_tablet_job_get_counter;
781
extern mBvarInt64Adder g_bvar_rpc_kv_finish_tablet_job_put_counter;
782
extern mBvarInt64Adder g_bvar_rpc_kv_finish_tablet_job_del_counter;
783
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_index_get_counter;
784
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_index_put_counter;
785
extern mBvarInt64Adder g_bvar_rpc_kv_commit_index_get_counter;
786
extern mBvarInt64Adder g_bvar_rpc_kv_commit_index_put_counter;
787
extern mBvarInt64Adder g_bvar_rpc_kv_commit_index_del_counter;
788
extern mBvarInt64Adder g_bvar_rpc_kv_drop_index_get_counter;
789
extern mBvarInt64Adder g_bvar_rpc_kv_drop_index_put_counter;
790
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_partition_get_counter;
791
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_partition_put_counter;
792
extern mBvarInt64Adder g_bvar_rpc_kv_commit_partition_get_counter;
793
extern mBvarInt64Adder g_bvar_rpc_kv_commit_partition_put_counter;
794
extern mBvarInt64Adder g_bvar_rpc_kv_commit_partition_del_counter;
795
extern mBvarInt64Adder g_bvar_rpc_kv_drop_partition_get_counter;
796
extern mBvarInt64Adder g_bvar_rpc_kv_drop_partition_put_counter;
797
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_restore_job_get_counter;
798
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_restore_job_put_counter;
799
extern mBvarInt64Adder g_bvar_rpc_kv_commit_restore_job_get_counter;
800
extern mBvarInt64Adder g_bvar_rpc_kv_commit_restore_job_put_counter;
801
extern mBvarInt64Adder g_bvar_rpc_kv_finish_restore_job_get_counter;
802
extern mBvarInt64Adder g_bvar_rpc_kv_finish_restore_job_put_counter;
803
extern mBvarInt64Adder g_bvar_rpc_kv_check_kv_get_counter;
804
extern mBvarInt64Adder g_bvar_rpc_kv_get_obj_store_info_get_counter;
805
extern mBvarInt64Adder g_bvar_rpc_kv_alter_storage_vault_get_counter;
806
extern mBvarInt64Adder g_bvar_rpc_kv_alter_storage_vault_put_counter;
807
extern mBvarInt64Adder g_bvar_rpc_kv_alter_storage_vault_del_counter;
808
extern mBvarInt64Adder g_bvar_rpc_kv_alter_obj_store_info_get_counter;
809
extern mBvarInt64Adder g_bvar_rpc_kv_alter_obj_store_info_put_counter;
810
extern mBvarInt64Adder g_bvar_rpc_kv_update_ak_sk_get_counter;
811
extern mBvarInt64Adder g_bvar_rpc_kv_update_ak_sk_put_counter;
812
extern mBvarInt64Adder g_bvar_rpc_kv_create_instance_get_counter;
813
extern mBvarInt64Adder g_bvar_rpc_kv_create_instance_put_counter;
814
extern mBvarInt64Adder g_bvar_rpc_kv_get_instance_get_counter;
815
extern mBvarInt64Adder g_bvar_rpc_kv_alter_cluster_get_counter;
816
extern mBvarInt64Adder g_bvar_rpc_kv_get_cluster_get_counter;
817
extern mBvarInt64Adder g_bvar_rpc_kv_get_cluster_put_counter;
818
extern mBvarInt64Adder g_bvar_rpc_kv_create_stage_get_counter;
819
extern mBvarInt64Adder g_bvar_rpc_kv_create_stage_put_counter;
820
extern mBvarInt64Adder g_bvar_rpc_kv_get_stage_get_counter;
821
extern mBvarInt64Adder g_bvar_rpc_kv_get_iam_get_counter;
822
extern mBvarInt64Adder g_bvar_rpc_kv_alter_iam_get_counter;
823
extern mBvarInt64Adder g_bvar_rpc_kv_alter_iam_put_counter;
824
extern mBvarInt64Adder g_bvar_rpc_kv_alter_ram_user_get_counter;
825
extern mBvarInt64Adder g_bvar_rpc_kv_alter_ram_user_put_counter;
826
extern mBvarInt64Adder g_bvar_rpc_kv_begin_copy_get_counter;
827
extern mBvarInt64Adder g_bvar_rpc_kv_begin_copy_put_counter;
828
extern mBvarInt64Adder g_bvar_rpc_kv_finish_copy_get_counter;
829
extern mBvarInt64Adder g_bvar_rpc_kv_finish_copy_put_counter;
830
extern mBvarInt64Adder g_bvar_rpc_kv_finish_copy_del_counter;
831
extern mBvarInt64Adder g_bvar_rpc_kv_get_copy_job_get_counter;
832
extern mBvarInt64Adder g_bvar_rpc_kv_get_copy_files_get_counter;
833
extern mBvarInt64Adder g_bvar_rpc_kv_filter_copy_files_get_counter;
834
extern mBvarInt64Adder g_bvar_rpc_kv_get_cluster_status_get_counter;
835
extern mBvarInt64Adder g_bvar_rpc_kv_begin_txn_get_counter;
836
extern mBvarInt64Adder g_bvar_rpc_kv_begin_txn_put_counter;
837
extern mBvarInt64Adder g_bvar_rpc_kv_precommit_txn_get_counter;
838
extern mBvarInt64Adder g_bvar_rpc_kv_precommit_txn_put_counter;
839
extern mBvarInt64Adder g_bvar_rpc_kv_get_rl_task_commit_attach_get_counter;
840
extern mBvarInt64Adder g_bvar_rpc_kv_get_streaming_task_commit_attach_get_counter;
841
extern mBvarInt64Adder g_bvar_rpc_kv_delete_streaming_job_del_counter;
842
extern mBvarInt64Adder g_bvar_rpc_kv_reset_streaming_job_offset_get_counter;
843
extern mBvarInt64Adder g_bvar_rpc_kv_reset_streaming_job_offset_put_counter;
844
extern mBvarInt64Adder g_bvar_rpc_kv_reset_streaming_job_offset_del_counter;
845
extern mBvarInt64Adder g_bvar_rpc_kv_reset_rl_progress_get_counter;
846
extern mBvarInt64Adder g_bvar_rpc_kv_reset_rl_progress_put_counter;
847
extern mBvarInt64Adder g_bvar_rpc_kv_reset_rl_progress_del_counter;
848
extern mBvarInt64Adder g_bvar_rpc_kv_commit_txn_get_counter;
849
extern mBvarInt64Adder g_bvar_rpc_kv_commit_txn_put_counter;
850
extern mBvarInt64Adder g_bvar_rpc_kv_commit_txn_del_counter;
851
extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_get_counter;
852
extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_put_counter;
853
extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_del_counter;
854
extern mBvarInt64Adder g_bvar_rpc_kv_get_txn_get_counter;
855
extern mBvarInt64Adder g_bvar_rpc_kv_get_current_max_txn_id_get_counter;
856
extern mBvarInt64Adder g_bvar_rpc_kv_begin_sub_txn_get_counter;
857
extern mBvarInt64Adder g_bvar_rpc_kv_begin_sub_txn_put_counter;
858
extern mBvarInt64Adder g_bvar_rpc_kv_begin_sub_txn_del_counter;
859
extern mBvarInt64Adder g_bvar_rpc_kv_abort_sub_txn_get_counter;
860
extern mBvarInt64Adder g_bvar_rpc_kv_abort_sub_txn_put_counter;
861
extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_with_coordinator_get_counter;
862
extern mBvarInt64Adder g_bvar_rpc_kv_check_txn_conflict_get_counter;
863
extern mBvarInt64Adder g_bvar_rpc_kv_clean_txn_label_get_counter;
864
extern mBvarInt64Adder g_bvar_rpc_kv_clean_txn_label_put_counter;
865
extern mBvarInt64Adder g_bvar_rpc_kv_clean_txn_label_del_counter;
866
extern mBvarInt64Adder g_bvar_rpc_kv_get_txn_id_get_counter;
867
extern mBvarInt64Adder g_bvar_rpc_kv_begin_snapshot_get_counter;
868
extern mBvarInt64Adder g_bvar_rpc_kv_begin_snapshot_put_counter;
869
extern mBvarInt64Adder g_bvar_rpc_kv_begin_snapshot_del_counter;
870
extern mBvarInt64Adder g_bvar_rpc_kv_commit_snapshot_get_counter;
871
extern mBvarInt64Adder g_bvar_rpc_kv_commit_snapshot_put_counter;
872
extern mBvarInt64Adder g_bvar_rpc_kv_commit_snapshot_del_counter;
873
extern mBvarInt64Adder g_bvar_rpc_kv_abort_snapshot_get_counter;
874
extern mBvarInt64Adder g_bvar_rpc_kv_abort_snapshot_put_counter;
875
extern mBvarInt64Adder g_bvar_rpc_kv_abort_snapshot_del_counter;
876
extern mBvarInt64Adder g_bvar_rpc_kv_list_snapshot_get_counter;
877
extern mBvarInt64Adder g_bvar_rpc_kv_list_snapshot_put_counter;
878
extern mBvarInt64Adder g_bvar_rpc_kv_list_snapshot_del_counter;
879
extern mBvarInt64Adder g_bvar_rpc_kv_drop_snapshot_get_counter;
880
extern mBvarInt64Adder g_bvar_rpc_kv_drop_snapshot_put_counter;
881
extern mBvarInt64Adder g_bvar_rpc_kv_drop_snapshot_del_counter;
882
extern mBvarInt64Adder g_bvar_rpc_kv_clone_instance_get_counter;
883
extern mBvarInt64Adder g_bvar_rpc_kv_clone_instance_put_counter;
884
extern mBvarInt64Adder g_bvar_rpc_kv_clone_instance_del_counter;
885
886
extern mBvarInt64Adder g_bvar_rpc_kv_get_rowset_get_bytes;
887
extern mBvarInt64Adder g_bvar_rpc_kv_get_version_get_bytes;
888
extern mBvarInt64Adder g_bvar_rpc_kv_get_schema_dict_get_bytes;
889
extern mBvarInt64Adder g_bvar_rpc_kv_create_tablets_get_bytes;
890
extern mBvarInt64Adder g_bvar_rpc_kv_create_tablets_put_bytes;
891
extern mBvarInt64Adder g_bvar_rpc_kv_update_tablet_get_bytes;
892
extern mBvarInt64Adder g_bvar_rpc_kv_update_tablet_put_bytes;
893
extern mBvarInt64Adder g_bvar_rpc_kv_get_tablet_get_bytes;
894
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_rowset_get_bytes;
895
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_rowset_put_bytes;
896
extern mBvarInt64Adder g_bvar_rpc_kv_commit_rowset_get_bytes;
897
extern mBvarInt64Adder g_bvar_rpc_kv_commit_rowset_put_bytes;
898
extern mBvarInt64Adder g_bvar_rpc_kv_commit_rowset_del_bytes;
899
extern mBvarInt64Adder g_bvar_rpc_kv_update_tmp_rowset_get_bytes;
900
extern mBvarInt64Adder g_bvar_rpc_kv_update_tmp_rowset_put_bytes;
901
extern mBvarInt64Adder g_bvar_rpc_kv_get_tablet_stats_get_bytes;
902
extern mBvarInt64Adder g_bvar_rpc_kv_update_delete_bitmap_get_bytes;
903
extern mBvarInt64Adder g_bvar_rpc_kv_update_delete_bitmap_put_bytes;
904
extern mBvarInt64Adder g_bvar_rpc_kv_update_delete_bitmap_del_bytes;
905
extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_get_bytes;
906
extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_update_lock_get_bytes;
907
extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_update_lock_put_bytes;
908
extern mBvarInt64Adder g_bvar_rpc_kv_get_delete_bitmap_update_lock_del_bytes;
909
extern mBvarInt64Adder g_bvar_rpc_kv_remove_delete_bitmap_update_lock_get_bytes;
910
extern mBvarInt64Adder g_bvar_rpc_kv_remove_delete_bitmap_update_lock_put_bytes;
911
extern mBvarInt64Adder g_bvar_rpc_kv_remove_delete_bitmap_update_lock_del_bytes;
912
extern mBvarInt64Adder g_bvar_rpc_kv_remove_delete_bitmap_del_bytes;
913
extern mBvarInt64Adder g_bvar_rpc_kv_start_tablet_job_get_bytes;
914
extern mBvarInt64Adder g_bvar_rpc_kv_start_tablet_job_put_bytes;
915
extern mBvarInt64Adder g_bvar_rpc_kv_finish_tablet_job_get_bytes;
916
extern mBvarInt64Adder g_bvar_rpc_kv_finish_tablet_job_put_bytes;
917
extern mBvarInt64Adder g_bvar_rpc_kv_finish_tablet_job_del_bytes;
918
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_index_get_bytes;
919
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_index_put_bytes;
920
extern mBvarInt64Adder g_bvar_rpc_kv_commit_index_get_bytes;
921
extern mBvarInt64Adder g_bvar_rpc_kv_commit_index_put_bytes;
922
extern mBvarInt64Adder g_bvar_rpc_kv_commit_index_del_bytes;
923
extern mBvarInt64Adder g_bvar_rpc_kv_drop_index_get_bytes;
924
extern mBvarInt64Adder g_bvar_rpc_kv_drop_index_put_bytes;
925
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_partition_get_bytes;
926
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_partition_put_bytes;
927
extern mBvarInt64Adder g_bvar_rpc_kv_commit_partition_get_bytes;
928
extern mBvarInt64Adder g_bvar_rpc_kv_commit_partition_put_bytes;
929
extern mBvarInt64Adder g_bvar_rpc_kv_commit_partition_del_bytes;
930
extern mBvarInt64Adder g_bvar_rpc_kv_drop_partition_get_bytes;
931
extern mBvarInt64Adder g_bvar_rpc_kv_drop_partition_put_bytes;
932
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_restore_job_get_bytes;
933
extern mBvarInt64Adder g_bvar_rpc_kv_prepare_restore_job_put_bytes;
934
extern mBvarInt64Adder g_bvar_rpc_kv_commit_restore_job_get_bytes;
935
extern mBvarInt64Adder g_bvar_rpc_kv_commit_restore_job_put_bytes;
936
extern mBvarInt64Adder g_bvar_rpc_kv_finish_restore_job_get_bytes;
937
extern mBvarInt64Adder g_bvar_rpc_kv_finish_restore_job_put_bytes;
938
extern mBvarInt64Adder g_bvar_rpc_kv_check_kv_get_bytes;
939
extern mBvarInt64Adder g_bvar_rpc_kv_get_obj_store_info_get_bytes;
940
extern mBvarInt64Adder g_bvar_rpc_kv_alter_storage_vault_get_bytes;
941
extern mBvarInt64Adder g_bvar_rpc_kv_alter_storage_vault_put_bytes;
942
extern mBvarInt64Adder g_bvar_rpc_kv_alter_storage_vault_del_bytes;
943
extern mBvarInt64Adder g_bvar_rpc_kv_alter_obj_store_info_get_bytes;
944
extern mBvarInt64Adder g_bvar_rpc_kv_alter_obj_store_info_put_bytes;
945
extern mBvarInt64Adder g_bvar_rpc_kv_update_ak_sk_get_bytes;
946
extern mBvarInt64Adder g_bvar_rpc_kv_update_ak_sk_put_bytes;
947
extern mBvarInt64Adder g_bvar_rpc_kv_create_instance_get_bytes;
948
extern mBvarInt64Adder g_bvar_rpc_kv_create_instance_put_bytes;
949
extern mBvarInt64Adder g_bvar_rpc_kv_get_instance_get_bytes;
950
extern mBvarInt64Adder g_bvar_rpc_kv_alter_cluster_get_bytes;
951
extern mBvarInt64Adder g_bvar_rpc_kv_get_cluster_get_bytes;
952
extern mBvarInt64Adder g_bvar_rpc_kv_get_cluster_put_bytes;
953
extern mBvarInt64Adder g_bvar_rpc_kv_create_stage_get_bytes;
954
extern mBvarInt64Adder g_bvar_rpc_kv_create_stage_put_bytes;
955
extern mBvarInt64Adder g_bvar_rpc_kv_get_stage_get_bytes;
956
extern mBvarInt64Adder g_bvar_rpc_kv_get_iam_get_bytes;
957
extern mBvarInt64Adder g_bvar_rpc_kv_alter_iam_get_bytes;
958
extern mBvarInt64Adder g_bvar_rpc_kv_alter_iam_put_bytes;
959
extern mBvarInt64Adder g_bvar_rpc_kv_alter_ram_user_get_bytes;
960
extern mBvarInt64Adder g_bvar_rpc_kv_alter_ram_user_put_bytes;
961
extern mBvarInt64Adder g_bvar_rpc_kv_begin_copy_get_bytes;
962
extern mBvarInt64Adder g_bvar_rpc_kv_begin_copy_put_bytes;
963
extern mBvarInt64Adder g_bvar_rpc_kv_finish_copy_get_bytes;
964
extern mBvarInt64Adder g_bvar_rpc_kv_finish_copy_put_bytes;
965
extern mBvarInt64Adder g_bvar_rpc_kv_finish_copy_del_bytes;
966
extern mBvarInt64Adder g_bvar_rpc_kv_get_copy_job_get_bytes;
967
extern mBvarInt64Adder g_bvar_rpc_kv_get_copy_files_get_bytes;
968
extern mBvarInt64Adder g_bvar_rpc_kv_filter_copy_files_get_bytes;
969
extern mBvarInt64Adder g_bvar_rpc_kv_get_cluster_status_get_bytes;
970
extern mBvarInt64Adder g_bvar_rpc_kv_begin_txn_get_bytes;
971
extern mBvarInt64Adder g_bvar_rpc_kv_begin_txn_put_bytes;
972
extern mBvarInt64Adder g_bvar_rpc_kv_precommit_txn_get_bytes;
973
extern mBvarInt64Adder g_bvar_rpc_kv_precommit_txn_put_bytes;
974
extern mBvarInt64Adder g_bvar_rpc_kv_get_rl_task_commit_attach_get_bytes;
975
extern mBvarInt64Adder g_bvar_rpc_kv_get_streaming_task_commit_attach_get_bytes;
976
extern mBvarInt64Adder g_bvar_rpc_kv_delete_streaming_job_del_bytes;
977
extern mBvarInt64Adder g_bvar_rpc_kv_reset_streaming_job_offset_get_bytes;
978
extern mBvarInt64Adder g_bvar_rpc_kv_reset_streaming_job_offset_put_bytes;
979
extern mBvarInt64Adder g_bvar_rpc_kv_reset_streaming_job_offset_del_bytes;
980
extern mBvarInt64Adder g_bvar_rpc_kv_reset_rl_progress_get_bytes;
981
extern mBvarInt64Adder g_bvar_rpc_kv_reset_rl_progress_put_bytes;
982
extern mBvarInt64Adder g_bvar_rpc_kv_reset_rl_progress_del_bytes;
983
extern mBvarInt64Adder g_bvar_rpc_kv_commit_txn_get_bytes;
984
extern mBvarInt64Adder g_bvar_rpc_kv_commit_txn_put_bytes;
985
extern mBvarInt64Adder g_bvar_rpc_kv_commit_txn_del_bytes;
986
extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_get_bytes;
987
extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_put_bytes;
988
extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_del_bytes;
989
extern mBvarInt64Adder g_bvar_rpc_kv_get_txn_get_bytes;
990
extern mBvarInt64Adder g_bvar_rpc_kv_get_current_max_txn_id_get_bytes;
991
extern mBvarInt64Adder g_bvar_rpc_kv_begin_sub_txn_get_bytes;
992
extern mBvarInt64Adder g_bvar_rpc_kv_begin_sub_txn_put_bytes;
993
extern mBvarInt64Adder g_bvar_rpc_kv_begin_sub_txn_del_bytes;
994
extern mBvarInt64Adder g_bvar_rpc_kv_abort_sub_txn_get_bytes;
995
extern mBvarInt64Adder g_bvar_rpc_kv_abort_sub_txn_put_bytes;
996
extern mBvarInt64Adder g_bvar_rpc_kv_abort_txn_with_coordinator_get_bytes;
997
extern mBvarInt64Adder g_bvar_rpc_kv_check_txn_conflict_get_bytes;
998
extern mBvarInt64Adder g_bvar_rpc_kv_clean_txn_label_get_bytes;
999
extern mBvarInt64Adder g_bvar_rpc_kv_clean_txn_label_put_bytes;
1000
extern mBvarInt64Adder g_bvar_rpc_kv_clean_txn_label_del_bytes;
1001
extern mBvarInt64Adder g_bvar_rpc_kv_get_txn_id_get_bytes;
1002
extern mBvarInt64Adder g_bvar_rpc_kv_begin_snapshot_get_bytes;
1003
extern mBvarInt64Adder g_bvar_rpc_kv_begin_snapshot_put_bytes;
1004
extern mBvarInt64Adder g_bvar_rpc_kv_begin_snapshot_del_bytes;
1005
extern mBvarInt64Adder g_bvar_rpc_kv_commit_snapshot_get_bytes;
1006
extern mBvarInt64Adder g_bvar_rpc_kv_commit_snapshot_put_bytes;
1007
extern mBvarInt64Adder g_bvar_rpc_kv_commit_snapshot_del_bytes;
1008
extern mBvarInt64Adder g_bvar_rpc_kv_abort_snapshot_get_bytes;
1009
extern mBvarInt64Adder g_bvar_rpc_kv_abort_snapshot_put_bytes;
1010
extern mBvarInt64Adder g_bvar_rpc_kv_abort_snapshot_del_bytes;
1011
extern mBvarInt64Adder g_bvar_rpc_kv_drop_snapshot_get_bytes;
1012
extern mBvarInt64Adder g_bvar_rpc_kv_drop_snapshot_put_bytes;
1013
extern mBvarInt64Adder g_bvar_rpc_kv_drop_snapshot_del_bytes;
1014
extern mBvarInt64Adder g_bvar_rpc_kv_list_snapshot_get_bytes;
1015
extern mBvarInt64Adder g_bvar_rpc_kv_list_snapshot_put_bytes;
1016
extern mBvarInt64Adder g_bvar_rpc_kv_list_snapshot_del_bytes;
1017
extern mBvarInt64Adder g_bvar_rpc_kv_clone_instance_get_bytes;
1018
extern mBvarInt64Adder g_bvar_rpc_kv_clone_instance_put_bytes;
1019
extern mBvarInt64Adder g_bvar_rpc_kv_clone_instance_del_bytes;
1020
1021
// meta ranges
1022
extern mBvarStatus<int64_t> g_bvar_fdb_kv_ranges_count;