Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
6a16a636
Commit
6a16a636
authored
May 28, 2020
by
antirez
Browse files
Replication: showLatestBacklog() refactored out.
parent
484af8ed
Changes
3
Show whitespace changes
Inline
Side-by-side
src/networking.c
View file @
6a16a636
...
...
@@ -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
++
;
}
...
...
src/replication.c
View file @
6a16a636
...
...
@@ -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>
...
...
src/server.h
View file @
6a16a636
...
...
@@ -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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment