This is an automated email from the ASF dual-hosted git repository.
twice pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/kvrocks.git
The following commit(s) were added to refs/heads/unstable by this push:
new a7c51db98 fix(info): the slave lag in INFO command might be overflowed
(#3271)
a7c51db98 is described below
commit a7c51db98f3f2245eb9ff17b3e6a61ef562af808
Author: Raphael <[email protected]>
AuthorDate: Thu Nov 27 11:58:52 2025 +0800
fix(info): the slave lag in INFO command might be overflowed (#3271)
we found the master_repl_offset is smaller than slave offset during exec
"info replication" command, then the lag value is overflowed
eg:
#Replication
role:master
connected_slaves:2
slave0:xxxxxx
slave1:ip=xxxxx,port=xxxxx,offset=190907912,lag=18446744073709551607
master_repl_offset:190907903
---
src/server/server.cc | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/server/server.cc b/src/server/server.cc
index d16e756fa..a952cdadd 100644
--- a/src/server/server.cc
+++ b/src/server/server.cc
@@ -1215,24 +1215,25 @@ Server::InfoEntries Server::GetReplicationInfo() {
}
int idx = 0;
- rocksdb::SequenceNumber latest_seq = storage->LatestSeqNumber();
{
std::shared_lock<std::shared_mutex> guard(slave_threads_mu_);
entries.emplace_back("connected_slaves", slave_threads_.size());
+ rocksdb::SequenceNumber latest_seq = storage->LatestSeqNumber();
for (const auto &slave : slave_threads_) {
if (slave->IsStopped()) continue;
+ auto slave_ack_seq = slave->GetAckSeq();
entries.emplace_back(
"slave" + std::to_string(idx),
fmt::format("ip={},port={},offset={},lag={}",
slave->GetConn()->GetAnnounceIP(),
- slave->GetConn()->GetAnnouncePort(), slave->GetAckSeq(),
latest_seq - slave->GetAckSeq()));
+ slave->GetConn()->GetAnnouncePort(), slave_ack_seq >=
latest_seq ? latest_seq : slave_ack_seq,
+ slave_ack_seq >= latest_seq ? 0 : latest_seq -
slave_ack_seq));
++idx;
}
+ entries.emplace_back("master_repl_offset", latest_seq);
}
- entries.emplace_back("master_repl_offset", latest_seq);
-
return entries;
}