diff --git a/src/replication.cpp b/src/replication.cpp index cc4ffbaed..bbfd40cff 100644 --- a/src/replication.cpp +++ b/src/replication.cpp @@ -5210,7 +5210,7 @@ void failoverCommand(client *c) { addReply(c,shared.ok); } -int FBrokenLinkToMaster() +int FBrokenLinkToMaster(int *pmastersOnline) { listIter li; listNode *ln; @@ -5224,6 +5224,10 @@ int FBrokenLinkToMaster() ++connected; } + + if (pmastersOnline != nullptr) + *pmastersOnline = connected; + if (g_pserver->repl_quorum < 0) { return connected < (int)listLength(g_pserver->masters); } else { diff --git a/src/server.cpp b/src/server.cpp index d10dec038..99cbec3f0 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -5984,8 +5984,11 @@ sds genRedisInfoString(const char *section) { listLength(g_pserver->masters) == 0 ? "master" : g_pserver->fActiveReplica ? "active-replica" : "slave"); if (listLength(g_pserver->masters)) { + int connectedMasters = 0; info = sdscatprintf(info, "master_global_link_status:%s\r\n", - FBrokenLinkToMaster() ? "down" : "up"); + FBrokenLinkToMaster(&connectedMasters) ? "down" : "up"); + + info = sdscatprintf(info, "connected_masters:%d\r\n", connectedMasters); int cmasters = 0; listIter li; diff --git a/src/server.h b/src/server.h index 1aad87c3e..b4098cf01 100644 --- a/src/server.h +++ b/src/server.h @@ -3788,7 +3788,7 @@ void failoverCommand(client *c); void lfenceCommand(client *c); -int FBrokenLinkToMaster(); +int FBrokenLinkToMaster(int *pconnectMasters = nullptr); int FActiveMaster(client *c); struct redisMaster *MasterInfoFromClient(client *c);