Skip to content

Commit 3f3c0f3

Browse files
authored
Merge pull request #474 from raakella1/add_metrics
add metrics
2 parents 0f8cb3f + 63ec167 commit 3f3c0f3

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

conanfile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
class HomestoreConan(ConanFile):
1111
name = "homestore"
12-
version = "6.4.30"
12+
version = "6.4.31"
1313

1414
homepage = "https://github.com/eBay/Homestore"
1515
description = "HomeStore Storage Engine"

src/lib/replication/log_store/repl_log_store.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,14 @@ void ReplLogStore::end_of_append_batch(ulong start_lsn, ulong count) {
7070
// In the meanwhile, we can flush the journal for this lsn batch. It is ok to flush the entries in log before
7171
// actual data is written, because, even if we have the log, it doesn't mean data is committed, until state
7272
// machine reports that. This way the flush and fetch both can run in parallel.
73+
auto cur_time = std::chrono::steady_clock::now();
7374
HomeRaftLogStore::end_of_append_batch(start_lsn, count);
75+
HISTOGRAM_OBSERVE(m_rd.metrics(), raft_end_of_append_batch_latency_us, get_elapsed_time_us(cur_time));
7476

77+
cur_time = std::chrono::steady_clock::now();
7578
// Wait for the fetch and write to be completed successfully.
7679
std::move(fut).wait();
80+
HISTOGRAM_OBSERVE(m_rd.metrics(), data_channel_wait_latency_us, get_elapsed_time_us(cur_time));
7781

7882
// Mark all the reqs also completely written
7983
for (auto const& rreq : *reqs) {

src/lib/replication/repl_dev/raft_repl_dev.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,12 +250,14 @@ void RaftReplDev::push_data_to_all_followers(repl_req_ptr_t rreq, sisl::sg_list
250250
}
251251

252252
void RaftReplDev::on_push_data_received(intrusive< sisl::GenericRpcData >& rpc_data) {
253+
auto const push_data_rcv_time = Clock::now();
253254
auto const& incoming_buf = rpc_data->request_blob();
254255
if (!incoming_buf.cbytes()) {
255256
RD_LOGW("Data Channel: PushData received with empty buffer, ignoring this call");
256257
rpc_data->send_response();
257258
return;
258259
}
260+
259261
auto const fb_size =
260262
flatbuffers::ReadScalar< flatbuffers::uoffset_t >(incoming_buf.cbytes()) + sizeof(flatbuffers::uoffset_t);
261263
auto push_req = GetSizePrefixedPushDataRequest(incoming_buf.cbytes());
@@ -295,7 +297,6 @@ void RaftReplDev::on_push_data_received(intrusive< sisl::GenericRpcData >& rpc_d
295297
COUNTER_INCREMENT(m_metrics, total_write_cnt, 1);
296298
COUNTER_INCREMENT(m_metrics, outstanding_data_write_cnt, 1);
297299

298-
auto const push_data_rcv_time = Clock::now();
299300
// Schedule a write and upon completion, mark the data as written.
300301
data_service()
301302
.async_write(r_cast< const char* >(rreq->data()), push_req->data_size(), rreq->local_blkid())
@@ -320,10 +321,10 @@ void RaftReplDev::on_push_data_received(intrusive< sisl::GenericRpcData >& rpc_d
320321
auto const write_num_pieces = rreq->local_blkid().num_pieces();
321322

322323
HISTOGRAM_OBSERVE(m_metrics, rreq_pieces_per_write, write_num_pieces);
323-
HISTOGRAM_OBSERVE(m_metrics, rreq_data_write_latency_us, data_write_latency);
324+
HISTOGRAM_OBSERVE(m_metrics, rreq_push_data_latency_us, data_write_latency);
324325
HISTOGRAM_OBSERVE(m_metrics, rreq_total_data_write_latency_us, total_data_write_latency);
325326

326-
RD_LOGI("Data Channel: Data write completed for rreq=[{}], time_diff_data_log_us={}, "
327+
RD_LOGD("Data Channel: Data write completed for rreq=[{}], time_diff_data_log_us={}, "
327328
"data_write_latency_us={}, total_data_write_latency_us(rreq creation to write complete)={}, "
328329
"local_blkid.num_pieces={}",
329330
rreq->to_compact_string(), data_log_diff_us, data_write_latency, total_data_write_latency,
@@ -730,7 +731,7 @@ void RaftReplDev::handle_fetch_data_response(sisl::GenericClientResponse respons
730731
rreq->add_state(repl_req_state_t::DATA_WRITTEN);
731732
rreq->m_data_written_promise.setValue();
732733

733-
RD_LOGI("Data Channel: Data Write completed rreq=[{}], data_write_latency_us={}, "
734+
RD_LOGD("Data Channel: Data Write completed rreq=[{}], data_write_latency_us={}, "
734735
"total_write_latency_us={}, write_num_pieces={}",
735736
rreq->to_compact_string(), data_write_latency, total_data_write_latency, write_num_pieces);
736737
});

src/lib/replication/repl_dev/raft_repl_dev.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ class RaftReplDevMetrics : public sisl::MetricsGroup {
6262
{"op", "write"});
6363
REGISTER_HISTOGRAM(rreq_data_read_latency_us, "rreq data read latency in us", "rreq_data_op_latency",
6464
{"op", "read"}); // placeholder
65+
REGISTER_HISTOGRAM(rreq_push_data_latency_us, "rreq data write latency in us", "rreq_data_op_latency",
66+
{"op", "push"});
67+
// latency from req received to sending response
68+
REGISTER_HISTOGRAM(rreq_data_write_respond_latency_us, "rreq data write and respond latency in us",
69+
"rreq_data_op_latency", {"op", "respond"});
70+
// latency from req received to rpc complete
71+
REGISTER_HISTOGRAM(rreq_data_write_complete_latency_us, "rreq data rpc complete latency in us",
72+
"rreq_data_op_latency", {"op", "complete"});
6573
// latency from follower->originator->follower, not including actual data write on follower;
6674
REGISTER_HISTOGRAM(rreq_data_fetch_latency_us, "rreq data fetch latency in us", "rreq_data_op_latency",
6775
{"op", "fetch"});
@@ -75,6 +83,12 @@ class RaftReplDevMetrics : public sisl::MetricsGroup {
7583
REGISTER_HISTOGRAM(rreq_pieces_per_write, "Number of individual pieces per write",
7684
HistogramBucketsType(LinearUpto64Buckets));
7785

86+
// Raft channel metrics
87+
REGISTER_HISTOGRAM(raft_end_of_append_batch_latency_us, "Raft end_of_append_batch latency in us",
88+
"raft_logstore_append_latency", {"op", "end_of_append_batch"});
89+
REGISTER_HISTOGRAM(data_channel_wait_latency_us, "Data channel wait latency in us",
90+
"raft_logstore_append_latency", {"op", "wait_for_data"});
91+
7892
register_me_to_farm();
7993
}
8094

@@ -163,6 +177,7 @@ class RaftReplDev : public ReplDev,
163177
//////////////// Accessor/shortcut methods ///////////////////////
164178
nuraft_mesg::repl_service_ctx* group_msg_service();
165179
nuraft::raft_server* raft_server();
180+
RaftReplDevMetrics& metrics() { return m_metrics; }
166181

167182
//////////////// Methods needed for other Raft classes to access /////////////////
168183
void use_config(json_superblk raft_config_sb);

0 commit comments

Comments
 (0)