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 &&
|
if (ctype == CLIENT_TYPE_MASTER && server.repl_backlog &&
|
||||||
server.repl_backlog_histlen > 0)
|
server.repl_backlog_histlen > 0)
|
||||||
{
|
{
|
||||||
long long dumplen = 256;
|
showLatestBacklog();
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
server.stat_unexpected_error_replies++;
|
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
|
/* This function is used in order to proxy what we receive from our master
|
||||||
* to our sub-slaves. */
|
* to our sub-slaves. */
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
@ -1810,6 +1810,7 @@ void clearReplicationId2(void);
|
|||||||
void chopReplicationBacklog(void);
|
void chopReplicationBacklog(void);
|
||||||
void replicationCacheMasterUsingMyself(void);
|
void replicationCacheMasterUsingMyself(void);
|
||||||
void feedReplicationBacklog(void *ptr, size_t len);
|
void feedReplicationBacklog(void *ptr, size_t len);
|
||||||
|
void showLatestBacklog(void);
|
||||||
void rdbPipeReadHandler(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask);
|
void rdbPipeReadHandler(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask);
|
||||||
void rdbPipeWriteHandlerConnRemoved(struct connection *conn);
|
void rdbPipeWriteHandlerConnRemoved(struct connection *conn);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user