Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
ed622885
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ed622885
编写于
10月 15, 2015
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
PR 2813 fix ported to unstable.
上级
35a0c772
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
25 addition
and
20 deletion
+25
-20
src/replication.c
src/replication.c
+23
-20
src/server.h
src/server.h
+2
-0
未找到文件。
src/replication.c
浏览文件 @
ed622885
...
...
@@ -909,6 +909,13 @@ void updateSlavesWaitingBgsave(int bgsaveerr, int type) {
/* ----------------------------------- SLAVE -------------------------------- */
/* Returns 1 if the given replication state is a handshake state,
* 0 otherwise. */
int
slaveIsInHandshakeState
(
void
)
{
return
server
.
repl_state
>=
REPL_STATE_RECEIVE_PONG
&&
server
.
repl_state
<=
REPL_STATE_RECEIVE_PSYNC
;
}
/* Abort the async download of the bulk dataset while SYNC-ing with master */
void
replicationAbortSyncTransfer
(
void
)
{
serverAssert
(
server
.
repl_state
==
REPL_STATE_TRANSFER
);
...
...
@@ -1206,6 +1213,7 @@ char *sendSynchronousCommand(int flags, int fd, ...) {
return
sdscatprintf
(
sdsempty
(),
"-Reading from master: %s"
,
strerror
(
errno
));
}
server
.
repl_transfer_lastio
=
server
.
unixtime
;
return
sdsnew
(
buf
);
}
return
NULL
;
...
...
@@ -1636,7 +1644,7 @@ void undoConnectWithMaster(void) {
int
fd
=
server
.
repl_transfer_s
;
serverAssert
(
server
.
repl_state
==
REPL_STATE_CONNECTING
||
server
.
repl_state
==
REPL_STATE_RECEIVE_PONG
);
slaveIsInHandshakeState
()
);
aeDeleteFileEvent
(
server
.
el
,
fd
,
AE_READABLE
|
AE_WRITABLE
);
close
(
fd
);
server
.
repl_transfer_s
=
-
1
;
...
...
@@ -1655,7 +1663,7 @@ int cancelReplicationHandshake(void) {
if
(
server
.
repl_state
==
REPL_STATE_TRANSFER
)
{
replicationAbortSyncTransfer
();
}
else
if
(
server
.
repl_state
==
REPL_STATE_CONNECTING
||
server
.
repl_state
==
REPL_STATE_RECEIVE_PONG
)
slaveIsInHandshakeState
()
)
{
undoConnectWithMaster
();
}
else
{
...
...
@@ -1790,22 +1798,17 @@ void roleCommand(client *c) {
addReplyBulkCBuffer
(
c
,
"slave"
,
5
);
addReplyBulkCString
(
c
,
server
.
masterhost
);
addReplyLongLong
(
c
,
server
.
masterport
);
switch
(
server
.
repl_state
)
{
case
REPL_STATE_NONE
:
slavestate
=
"none"
;
break
;
case
REPL_STATE_CONNECT
:
slavestate
=
"connect"
;
break
;
case
REPL_STATE_CONNECTING
:
slavestate
=
"connecting"
;
break
;
case
REPL_STATE_RECEIVE_PONG
:
case
REPL_STATE_SEND_AUTH
:
case
REPL_STATE_RECEIVE_AUTH
:
case
REPL_STATE_SEND_PORT
:
case
REPL_STATE_RECEIVE_PORT
:
case
REPL_STATE_SEND_CAPA
:
case
REPL_STATE_RECEIVE_CAPA
:
case
REPL_STATE_SEND_PSYNC
:
case
REPL_STATE_RECEIVE_PSYNC
:
slavestate
=
"handshake"
;
break
;
case
REPL_STATE_TRANSFER
:
slavestate
=
"sync"
;
break
;
case
REPL_STATE_CONNECTED
:
slavestate
=
"connected"
;
break
;
default:
slavestate
=
"unknown"
;
break
;
if
(
slaveIsInHandshakeState
())
{
slavestate
=
"handshake"
;
}
else
{
switch
(
server
.
repl_state
)
{
case
REPL_STATE_NONE
:
slavestate
=
"none"
;
break
;
case
REPL_STATE_CONNECT
:
slavestate
=
"connect"
;
break
;
case
REPL_STATE_CONNECTING
:
slavestate
=
"connecting"
;
break
;
case
REPL_STATE_TRANSFER
:
slavestate
=
"sync"
;
break
;
case
REPL_STATE_CONNECTED
:
slavestate
=
"connected"
;
break
;
default:
slavestate
=
"unknown"
;
break
;
}
}
addReplyBulkCString
(
c
,
slavestate
);
addReplyLongLong
(
c
,
server
.
master
?
server
.
master
->
reploff
:
-
1
);
...
...
@@ -2182,8 +2185,8 @@ void replicationCron(void) {
/* Non blocking connection timeout? */
if
(
server
.
masterhost
&&
(
server
.
repl_state
==
REPL_STATE_CONNECTING
||
s
erver
.
repl_state
==
REPL_STATE_RECEIVE_PONG
)
&&
(
time
(
NULL
)
-
server
.
repl_transfer_lastio
)
>
server
.
repl_timeout
)
s
laveIsInHandshakeState
()
)
&&
(
time
(
NULL
)
-
server
.
repl_transfer_lastio
)
>
server
.
repl_timeout
)
{
serverLog
(
LL_WARNING
,
"Timeout connecting to the MASTER..."
);
undoConnectWithMaster
();
...
...
src/server.h
浏览文件 @
ed622885
...
...
@@ -271,6 +271,7 @@ typedef long long mstime_t; /* millisecond time type. */
#define REPL_STATE_NONE 0
/* No active replication */
#define REPL_STATE_CONNECT 1
/* Must connect to master */
#define REPL_STATE_CONNECTING 2
/* Connecting to master */
/* --- Handshake states, must be ordered --- */
#define REPL_STATE_RECEIVE_PONG 3
/* Wait for PING reply */
#define REPL_STATE_SEND_AUTH 4
/* Send AUTH to master */
#define REPL_STATE_RECEIVE_AUTH 5
/* Wait for AUTH reply */
...
...
@@ -280,6 +281,7 @@ typedef long long mstime_t; /* millisecond time type. */
#define REPL_STATE_RECEIVE_CAPA 9
/* Wait for REPLCONF reply */
#define REPL_STATE_SEND_PSYNC 10
/* Send PSYNC */
#define REPL_STATE_RECEIVE_PSYNC 11
/* Wait for PSYNC reply */
/* --- End of handshake states --- */
#define REPL_STATE_TRANSFER 12
/* Receiving .rdb from master */
#define REPL_STATE_CONNECTED 13
/* Connected to master */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录