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;
 }
 

Reply via email to