Skip to content

Commit 724eb5c

Browse files
author
gd.zhou
committed
[hotfix] master restart fail when ror server open gtid
1 parent bfb289d commit 724eb5c

File tree

7 files changed

+374
-585
lines changed

7 files changed

+374
-585
lines changed

src/networking.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2285,6 +2285,9 @@ static inline int _writeToClientSlave(client *c, ssize_t *nwritten) {
22852285
*nwritten = 0;
22862286
serverAssert(c->bufpos == 0 && listLength(c->reply) == 0);
22872287
replBufBlock *o = listNodeValue(c->ref_repl_buf_node);
2288+
if (o->used < c->ref_block_pos) {
2289+
serverLog(LL_WARNING, "o->used(%lld) < c->ref_block_pos(%lld)", o->used, c->ref_block_pos);
2290+
}
22882291
serverAssert(o->used >= c->ref_block_pos);
22892292
/* Send current block if it is not fully sent. */
22902293
if (o->used > c->ref_block_pos) {

src/rdb.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3841,7 +3841,8 @@ int rdbLoadRioWithLoadingCtx(rio *rdb, int rdbflags, rdbSaveInfo *rsi, rdbLoadin
38413841
serverAssert(server.repl_backlog != NULL && listLength(server.slaves) == 0);
38423842
robj keyobj;
38433843
initStaticStringObject(keyobj,key);
3844-
if (server.gtid_enabled || (rsi->gtid != NULL && rsi->gtid->repl_mode == REPL_MODE_XSYNC)) {
3844+
// || (rsi->gtid != NULL && rsi->gtid->repl_mode == REPL_MODE_XSYNC)
3845+
if (server.gtid_enabled) {
38453846
gno_t gno = 0;
38463847
char *buf, *uuid = server.uuid;
38473848
size_t bufmaxlen, buflen, uuid_len = server.uuid_len;

src/server.c

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7691,22 +7691,45 @@ void loadDataFromDisk(void) {
76917691
server.repl_backlog->offset = server.master_repl_offset -
76927692
server.repl_backlog->histlen + 1;
76937693
rebaseReplicationBuffer(rsi.repl_offset);
7694-
if (server.gtid_enabled || (rsi.gtid != NULL && rsi.gtid->repl_mode == REPL_MODE_XSYNC) ) {
7694+
// if (server.gtid_enabled || (rsi.gtid != NULL && rsi.gtid->repl_mode == REPL_MODE_XSYNC) ) {
7695+
// server.repl_mode->mode = REPL_MODE_XSYNC;
7696+
// server.repl_mode->from = rsi.repl_offset + 1;
7697+
// server.prev_repl_mode->mode = REPL_MODE_PSYNC;
7698+
// memcpy(server.prev_repl_mode->psync.replid,rsi.repl_id,sizeof(rsi.repl_id));
7699+
// server.prev_repl_mode->from = 1;
7700+
// gtidSeqRebaseOffset(server.gtid_seq, server.uuid, server.uuid_len, rsi.repl_offset);
7701+
// if (rsi.gtid != NULL) {
7702+
// serverGtidSetResetExecuted(gtidSetDup(rsi.gtid->gtid_executed));
7703+
// serverGtidSetResetLost(gtidSetDup(rsi.gtid->gtid_lost));
7704+
// }
7705+
// } else {
7706+
// serverAssert(server.repl_mode->mode == REPL_MODE_PSYNC);
7707+
// serverAssert(server.repl_mode->from == 1);
7708+
// }
7709+
if (server.gtid_enabled) {
76957710
server.repl_mode->mode = REPL_MODE_XSYNC;
76967711
server.repl_mode->from = rsi.repl_offset + 1;
76977712
server.prev_repl_mode->mode = REPL_MODE_PSYNC;
76987713
memcpy(server.prev_repl_mode->psync.replid,rsi.repl_id,sizeof(rsi.repl_id));
76997714
server.prev_repl_mode->from = 1;
77007715
gtidSeqRebaseOffset(server.gtid_seq, server.uuid, server.uuid_len, rsi.repl_offset);
77017716
if (rsi.gtid != NULL) {
7702-
serverGtidSetResetExecuted(gtidSetDup(rsi.gtid->gtid_executed));
7703-
serverGtidSetResetLost(gtidSetDup(rsi.gtid->gtid_lost));
7717+
// serverGtidSetResetExecuted(gtidSetDup(rsi.gtid->gtid_executed));
7718+
// serverGtidSetResetLost(gtidSetDup(rsi.gtid->gtid_lost));
7719+
gtidSetMerge(server.gtid_executed, rsi.gtid->gtid_executed);
7720+
gtidSetMerge(server.gtid_lost, rsi.gtid->gtid_lost);
77047721
}
77057722
} else {
7706-
serverAssert(server.repl_mode->mode == REPL_MODE_PSYNC);
7707-
serverAssert(server.repl_mode->from == 1);
7723+
if (rsi.gtid != NULL && rsi.gtid->repl_mode == REPL_MODE_XSYNC) {
7724+
server.prev_repl_mode->mode = REPL_MODE_XSYNC;
7725+
server.prev_repl_mode->from = 1;
7726+
server.repl_mode->mode=REPL_MODE_PSYNC;
7727+
server.repl_mode->from = rsi.repl_offset + 1;
7728+
} else {
7729+
serverAssert(server.repl_mode->mode == REPL_MODE_PSYNC);
7730+
serverAssert(server.repl_mode->from == 1);
7731+
}
77087732
}
7709-
77107733
server.repl_no_slaves_since = time(NULL);
77117734
}
77127735
}

tests/gtid/aof.tcl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1+
if {!$::swap} {
22
source tests/support/aofmanifest.tcl
33
set defaults {appendonly {yes} appendfilename {appendonly.aof} appenddirname {appendonlydir} auto-aof-rewrite-percentage {0}}
44
set server_path [tmpdir server.multi.aof]
@@ -162,4 +162,5 @@ test "aof" {
162162
}
163163
}
164164

165+
}
165166
}

0 commit comments

Comments
 (0)