mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 08:08:53 -05:00
Replication: showLatestBacklog() refactored out.
This commit is contained in:
parent
484af8ed53
commit
6a16a636bf
@ -396,31 +396,7 @@ void addReplyErrorLength(client *c, const char *s, size_t len) {
|
||||
if (ctype == CLIENT_TYPE_MASTER && server.repl_backlog &&
|
||||
server.repl_backlog_histlen > 0)
|
||||
{
|
||||
long long dumplen = 256;
|
||||
if (server.repl_backlog_histlen < dumplen)
|
||||
dumplen = server.repl_backlog_histlen;
|
||||
|
||||
/* Identify the first byte to dump. */
|
||||
long long idx =
|
||||
(server.repl_backlog_idx + (server.repl_backlog_size - dumplen)) %
|
||||
server.repl_backlog_size;
|
||||
|
||||
/* Scan the circular buffer to collect 'dumplen' bytes. */
|
||||
sds dump = sdsempty();
|
||||
while(dumplen) {
|
||||
long long thislen =
|
||||
((server.repl_backlog_size - idx) < dumplen) ?
|
||||
(server.repl_backlog_size - idx) : dumplen;
|
||||
|
||||
dump = sdscatrepr(dump,server.repl_backlog+idx,thislen);
|
||||
dumplen -= thislen;
|
||||
idx = 0;
|
||||
}
|
||||
|
||||
/* Finally log such bytes: this is vital debugging info to
|
||||
* understand what happened. */
|
||||
serverLog(LL_WARNING,"Latest backlog is: '%s'", dump);
|
||||
sdsfree(dump);
|
||||
showLatestBacklog();
|
||||
}
|
||||
server.stat_unexpected_error_replies++;
|
||||
}
|
||||
|
@ -307,6 +307,40 @@ void replicationFeedSlaves(list *slaves, int dictid, robj **argv, int argc) {
|
||||
}
|
||||
}
|
||||
|
||||
/* This is a debugging function that gets called when we detect something
|
||||
* wrong with the replication protocol: the goal is to peek into the
|
||||
* replication backlog and show a few final bytes to make simpler to
|
||||
* guess what kind of bug it could be. */
|
||||
void showLatestBacklog(void) {
|
||||
if (server.repl_backlog == NULL) return;
|
||||
|
||||
long long dumplen = 256;
|
||||
if (server.repl_backlog_histlen < dumplen)
|
||||
dumplen = server.repl_backlog_histlen;
|
||||
|
||||
/* Identify the first byte to dump. */
|
||||
long long idx =
|
||||
(server.repl_backlog_idx + (server.repl_backlog_size - dumplen)) %
|
||||
server.repl_backlog_size;
|
||||
|
||||
/* Scan the circular buffer to collect 'dumplen' bytes. */
|
||||
sds dump = sdsempty();
|
||||
while(dumplen) {
|
||||
long long thislen =
|
||||
((server.repl_backlog_size - idx) < dumplen) ?
|
||||
(server.repl_backlog_size - idx) : dumplen;
|
||||
|
||||
dump = sdscatrepr(dump,server.repl_backlog+idx,thislen);
|
||||
dumplen -= thislen;
|
||||
idx = 0;
|
||||
}
|
||||
|
||||
/* Finally log such bytes: this is vital debugging info to
|
||||
* understand what happened. */
|
||||
serverLog(LL_WARNING,"Latest backlog is: '%s'", dump);
|
||||
sdsfree(dump);
|
||||
}
|
||||
|
||||
/* This function is used in order to proxy what we receive from our master
|
||||
* to our sub-slaves. */
|
||||
#include <ctype.h>
|
||||
|
@ -1810,6 +1810,7 @@ void clearReplicationId2(void);
|
||||
void chopReplicationBacklog(void);
|
||||
void replicationCacheMasterUsingMyself(void);
|
||||
void feedReplicationBacklog(void *ptr, size_t len);
|
||||
void showLatestBacklog(void);
|
||||
void rdbPipeReadHandler(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask);
|
||||
void rdbPipeWriteHandlerConnRemoved(struct connection *conn);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user