mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 16:18:28 -05:00
Add cluster info and cluster nodes to bug report (#11656)
Adds the CLUSTER INFO and CLUSTER NODES to the bug report string. Co-authored-by: Madelyn Olson <34459052+madolson@users.noreply.github.com>
This commit is contained in:
parent
383d902ce6
commit
d2d6bc18eb
153
src/cluster.c
153
src/cluster.c
@ -56,7 +56,6 @@ void clusterSendFail(char *nodename);
|
|||||||
void clusterSendFailoverAuthIfNeeded(clusterNode *node, clusterMsg *request);
|
void clusterSendFailoverAuthIfNeeded(clusterNode *node, clusterMsg *request);
|
||||||
void clusterUpdateState(void);
|
void clusterUpdateState(void);
|
||||||
int clusterNodeGetSlotBit(clusterNode *n, int slot);
|
int clusterNodeGetSlotBit(clusterNode *n, int slot);
|
||||||
sds clusterGenNodesDescription(int filter, int use_pport);
|
|
||||||
list *clusterGetNodesInMyShard(clusterNode *node);
|
list *clusterGetNodesInMyShard(clusterNode *node);
|
||||||
int clusterNodeAddSlave(clusterNode *master, clusterNode *slave);
|
int clusterNodeAddSlave(clusterNode *master, clusterNode *slave);
|
||||||
int clusterAddSlot(clusterNode *n, int slot);
|
int clusterAddSlot(clusterNode *n, int slot);
|
||||||
@ -5527,6 +5526,84 @@ void clusterReplyMultiBulkSlots(client * c) {
|
|||||||
setDeferredArrayLen(c, slot_replylen, num_masters);
|
setDeferredArrayLen(c, slot_replylen, num_masters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sds genClusterInfoString() {
|
||||||
|
sds info = sdsempty();
|
||||||
|
char *statestr[] = {"ok","fail"};
|
||||||
|
int slots_assigned = 0, slots_ok = 0, slots_pfail = 0, slots_fail = 0;
|
||||||
|
uint64_t myepoch;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
for (j = 0; j < CLUSTER_SLOTS; j++) {
|
||||||
|
clusterNode *n = server.cluster->slots[j];
|
||||||
|
|
||||||
|
if (n == NULL) continue;
|
||||||
|
slots_assigned++;
|
||||||
|
if (nodeFailed(n)) {
|
||||||
|
slots_fail++;
|
||||||
|
} else if (nodeTimedOut(n)) {
|
||||||
|
slots_pfail++;
|
||||||
|
} else {
|
||||||
|
slots_ok++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myepoch = (nodeIsSlave(myself) && myself->slaveof) ?
|
||||||
|
myself->slaveof->configEpoch : myself->configEpoch;
|
||||||
|
|
||||||
|
info = sdscatprintf(info,
|
||||||
|
"cluster_state:%s\r\n"
|
||||||
|
"cluster_slots_assigned:%d\r\n"
|
||||||
|
"cluster_slots_ok:%d\r\n"
|
||||||
|
"cluster_slots_pfail:%d\r\n"
|
||||||
|
"cluster_slots_fail:%d\r\n"
|
||||||
|
"cluster_known_nodes:%lu\r\n"
|
||||||
|
"cluster_size:%d\r\n"
|
||||||
|
"cluster_current_epoch:%llu\r\n"
|
||||||
|
"cluster_my_epoch:%llu\r\n"
|
||||||
|
, statestr[server.cluster->state],
|
||||||
|
slots_assigned,
|
||||||
|
slots_ok,
|
||||||
|
slots_pfail,
|
||||||
|
slots_fail,
|
||||||
|
dictSize(server.cluster->nodes),
|
||||||
|
server.cluster->size,
|
||||||
|
(unsigned long long) server.cluster->currentEpoch,
|
||||||
|
(unsigned long long) myepoch
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Show stats about messages sent and received. */
|
||||||
|
long long tot_msg_sent = 0;
|
||||||
|
long long tot_msg_received = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < CLUSTERMSG_TYPE_COUNT; i++) {
|
||||||
|
if (server.cluster->stats_bus_messages_sent[i] == 0) continue;
|
||||||
|
tot_msg_sent += server.cluster->stats_bus_messages_sent[i];
|
||||||
|
info = sdscatprintf(info,
|
||||||
|
"cluster_stats_messages_%s_sent:%lld\r\n",
|
||||||
|
clusterGetMessageTypeString(i),
|
||||||
|
server.cluster->stats_bus_messages_sent[i]);
|
||||||
|
}
|
||||||
|
info = sdscatprintf(info,
|
||||||
|
"cluster_stats_messages_sent:%lld\r\n", tot_msg_sent);
|
||||||
|
|
||||||
|
for (int i = 0; i < CLUSTERMSG_TYPE_COUNT; i++) {
|
||||||
|
if (server.cluster->stats_bus_messages_received[i] == 0) continue;
|
||||||
|
tot_msg_received += server.cluster->stats_bus_messages_received[i];
|
||||||
|
info = sdscatprintf(info,
|
||||||
|
"cluster_stats_messages_%s_received:%lld\r\n",
|
||||||
|
clusterGetMessageTypeString(i),
|
||||||
|
server.cluster->stats_bus_messages_received[i]);
|
||||||
|
}
|
||||||
|
info = sdscatprintf(info,
|
||||||
|
"cluster_stats_messages_received:%lld\r\n", tot_msg_received);
|
||||||
|
|
||||||
|
info = sdscatprintf(info,
|
||||||
|
"total_cluster_links_buffer_limit_exceeded:%llu\r\n",
|
||||||
|
server.cluster->stat_cluster_links_buffer_limit_exceeded);
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
void clusterCommand(client *c) {
|
void clusterCommand(client *c) {
|
||||||
if (server.cluster_enabled == 0) {
|
if (server.cluster_enabled == 0) {
|
||||||
addReplyError(c,"This instance has cluster support disabled");
|
addReplyError(c,"This instance has cluster support disabled");
|
||||||
@ -5859,78 +5936,8 @@ NULL
|
|||||||
addReplySds(c,reply);
|
addReplySds(c,reply);
|
||||||
} else if (!strcasecmp(c->argv[1]->ptr,"info") && c->argc == 2) {
|
} else if (!strcasecmp(c->argv[1]->ptr,"info") && c->argc == 2) {
|
||||||
/* CLUSTER INFO */
|
/* CLUSTER INFO */
|
||||||
char *statestr[] = {"ok","fail"};
|
|
||||||
int slots_assigned = 0, slots_ok = 0, slots_pfail = 0, slots_fail = 0;
|
sds info = genClusterInfoString();
|
||||||
uint64_t myepoch;
|
|
||||||
int j;
|
|
||||||
|
|
||||||
for (j = 0; j < CLUSTER_SLOTS; j++) {
|
|
||||||
clusterNode *n = server.cluster->slots[j];
|
|
||||||
|
|
||||||
if (n == NULL) continue;
|
|
||||||
slots_assigned++;
|
|
||||||
if (nodeFailed(n)) {
|
|
||||||
slots_fail++;
|
|
||||||
} else if (nodeTimedOut(n)) {
|
|
||||||
slots_pfail++;
|
|
||||||
} else {
|
|
||||||
slots_ok++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
myepoch = (nodeIsSlave(myself) && myself->slaveof) ?
|
|
||||||
myself->slaveof->configEpoch : myself->configEpoch;
|
|
||||||
|
|
||||||
sds info = sdscatprintf(sdsempty(),
|
|
||||||
"cluster_state:%s\r\n"
|
|
||||||
"cluster_slots_assigned:%d\r\n"
|
|
||||||
"cluster_slots_ok:%d\r\n"
|
|
||||||
"cluster_slots_pfail:%d\r\n"
|
|
||||||
"cluster_slots_fail:%d\r\n"
|
|
||||||
"cluster_known_nodes:%lu\r\n"
|
|
||||||
"cluster_size:%d\r\n"
|
|
||||||
"cluster_current_epoch:%llu\r\n"
|
|
||||||
"cluster_my_epoch:%llu\r\n"
|
|
||||||
, statestr[server.cluster->state],
|
|
||||||
slots_assigned,
|
|
||||||
slots_ok,
|
|
||||||
slots_pfail,
|
|
||||||
slots_fail,
|
|
||||||
dictSize(server.cluster->nodes),
|
|
||||||
server.cluster->size,
|
|
||||||
(unsigned long long) server.cluster->currentEpoch,
|
|
||||||
(unsigned long long) myepoch
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Show stats about messages sent and received. */
|
|
||||||
long long tot_msg_sent = 0;
|
|
||||||
long long tot_msg_received = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < CLUSTERMSG_TYPE_COUNT; i++) {
|
|
||||||
if (server.cluster->stats_bus_messages_sent[i] == 0) continue;
|
|
||||||
tot_msg_sent += server.cluster->stats_bus_messages_sent[i];
|
|
||||||
info = sdscatprintf(info,
|
|
||||||
"cluster_stats_messages_%s_sent:%lld\r\n",
|
|
||||||
clusterGetMessageTypeString(i),
|
|
||||||
server.cluster->stats_bus_messages_sent[i]);
|
|
||||||
}
|
|
||||||
info = sdscatprintf(info,
|
|
||||||
"cluster_stats_messages_sent:%lld\r\n", tot_msg_sent);
|
|
||||||
|
|
||||||
for (int i = 0; i < CLUSTERMSG_TYPE_COUNT; i++) {
|
|
||||||
if (server.cluster->stats_bus_messages_received[i] == 0) continue;
|
|
||||||
tot_msg_received += server.cluster->stats_bus_messages_received[i];
|
|
||||||
info = sdscatprintf(info,
|
|
||||||
"cluster_stats_messages_%s_received:%lld\r\n",
|
|
||||||
clusterGetMessageTypeString(i),
|
|
||||||
server.cluster->stats_bus_messages_received[i]);
|
|
||||||
}
|
|
||||||
info = sdscatprintf(info,
|
|
||||||
"cluster_stats_messages_received:%lld\r\n", tot_msg_received);
|
|
||||||
|
|
||||||
info = sdscatprintf(info,
|
|
||||||
"total_cluster_links_buffer_limit_exceeded:%llu\r\n",
|
|
||||||
server.cluster->stat_cluster_links_buffer_limit_exceeded);
|
|
||||||
|
|
||||||
/* Produce the reply protocol. */
|
/* Produce the reply protocol. */
|
||||||
addReplyVerbatim(c,info,sdslen(info),"txt");
|
addReplyVerbatim(c,info,sdslen(info),"txt");
|
||||||
|
@ -419,5 +419,7 @@ void slotToChannelAdd(sds channel);
|
|||||||
void slotToChannelDel(sds channel);
|
void slotToChannelDel(sds channel);
|
||||||
void clusterUpdateMyselfHostname(void);
|
void clusterUpdateMyselfHostname(void);
|
||||||
void clusterUpdateMyselfAnnouncedPorts(void);
|
void clusterUpdateMyselfAnnouncedPorts(void);
|
||||||
|
sds clusterGenNodesDescription(int filter, int use_pport);
|
||||||
|
sds genClusterInfoString();
|
||||||
|
|
||||||
#endif /* __CLUSTER_H */
|
#endif /* __CLUSTER_H */
|
||||||
|
13
src/debug.c
13
src/debug.c
@ -35,6 +35,7 @@
|
|||||||
#include "bio.h"
|
#include "bio.h"
|
||||||
#include "quicklist.h"
|
#include "quicklist.h"
|
||||||
#include "fpconv_dtoa.h"
|
#include "fpconv_dtoa.h"
|
||||||
|
#include "cluster.h"
|
||||||
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@ -1763,6 +1764,15 @@ void logStackTrace(void *eip, int uplevel) {
|
|||||||
|
|
||||||
#endif /* HAVE_BACKTRACE */
|
#endif /* HAVE_BACKTRACE */
|
||||||
|
|
||||||
|
sds genClusterDebugString(sds infostring) {
|
||||||
|
infostring = sdscatprintf(infostring, "\r\n# Cluster info\r\n");
|
||||||
|
infostring = sdscatsds(infostring, genClusterInfoString());
|
||||||
|
infostring = sdscatprintf(infostring, "\n------ CLUSTER NODES OUTPUT ------\n");
|
||||||
|
infostring = sdscatsds(infostring, clusterGenNodesDescription(0, 0));
|
||||||
|
|
||||||
|
return infostring;
|
||||||
|
}
|
||||||
|
|
||||||
/* Log global server info */
|
/* Log global server info */
|
||||||
void logServerInfo(void) {
|
void logServerInfo(void) {
|
||||||
sds infostring, clients;
|
sds infostring, clients;
|
||||||
@ -1772,6 +1782,9 @@ void logServerInfo(void) {
|
|||||||
argv[0] = createStringObject("all", strlen("all"));
|
argv[0] = createStringObject("all", strlen("all"));
|
||||||
dict *section_dict = genInfoSectionDict(argv, 1, NULL, &all, &everything);
|
dict *section_dict = genInfoSectionDict(argv, 1, NULL, &all, &everything);
|
||||||
infostring = genRedisInfoString(section_dict, all, everything);
|
infostring = genRedisInfoString(section_dict, all, everything);
|
||||||
|
if (server.cluster_enabled){
|
||||||
|
infostring = genClusterDebugString(infostring);
|
||||||
|
}
|
||||||
serverLogRaw(LL_WARNING|LL_RAW, infostring);
|
serverLogRaw(LL_WARNING|LL_RAW, infostring);
|
||||||
serverLogRaw(LL_WARNING|LL_RAW, "\n------ CLIENT LIST OUTPUT ------\n");
|
serverLogRaw(LL_WARNING|LL_RAW, "\n------ CLIENT LIST OUTPUT ------\n");
|
||||||
clients = getAllClientsInfoString(-1);
|
clients = getAllClientsInfoString(-1);
|
||||||
|
Loading…
Reference in New Issue
Block a user