mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 09:00:51 +00:00
PSYNC2: clarify the scenario when repl_stream_db can be -1
This commit is contained in:
parent
885c4f856e
commit
b8579c225c
27
src/rdb.c
27
src/rdb.c
@ -2035,14 +2035,25 @@ rdbSaveInfo *rdbPopulateSaveInfo(rdbSaveInfo *rsi) {
|
|||||||
*rsi = rsi_init;
|
*rsi = rsi_init;
|
||||||
|
|
||||||
/* If the instance is a master, we can populate the replication info
|
/* If the instance is a master, we can populate the replication info
|
||||||
* in all the cases, even if sometimes in incomplete (but safe) form. */
|
* only when repl_backlog is not NULL. If the repl_backlog is NULL,
|
||||||
if (!server.masterhost) {
|
* it means that the instance isn't in any replication chains. In this
|
||||||
if (server.repl_backlog) rsi->repl_stream_db = server.slaveseldb;
|
* scenario the replication info is useless, because when a slave
|
||||||
/* Note that if repl_backlog is NULL, it means that histories
|
* connect to us, the NULL repl_backlog will trigger a full synchronization,
|
||||||
* following from this point will trigger a full synchronization
|
* at the same time we will use a new replid and clear replid2.
|
||||||
* generating a SELECT statement, so we can leave the currently
|
* And remember that after free backlog if we reach repl_backlog_time_limit,
|
||||||
* selected DB set to -1. This allows a restarted master to reload
|
* we will use a new replid and clear replid2 too. So there is only one
|
||||||
* its replication ID/offset when there are no connected slaves. */
|
* scenario which can make repl_stream_db be -1, that is the instance is
|
||||||
|
* a master, and it have repl_backlog, but server.slaveseldb is -1. */
|
||||||
|
if (!server.masterhost && server.repl_backlog) {
|
||||||
|
rsi->repl_stream_db = server.slaveseldb;
|
||||||
|
/* Note that server.slaveseldb may be -1, it means that this master
|
||||||
|
* didn't apply any write commands after a full synchronization,
|
||||||
|
* so we can leave the currently selected DB set to -1, because the
|
||||||
|
* next write command must generate a SELECT statement. This allows
|
||||||
|
* a restarted slave to reload replication ID/offset even the repl_stream_db
|
||||||
|
* is -1, but we should not do that, because older implementations
|
||||||
|
* may save a repl_stream_db as -1 in a wrong way. Maybe we can fix
|
||||||
|
* it in the next release version. */
|
||||||
return rsi;
|
return rsi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3536,7 +3536,8 @@ void loadDataFromDisk(void) {
|
|||||||
rsi.repl_id_is_set &&
|
rsi.repl_id_is_set &&
|
||||||
rsi.repl_offset != -1 &&
|
rsi.repl_offset != -1 &&
|
||||||
/* Note that older implementations may save a repl_stream_db
|
/* Note that older implementations may save a repl_stream_db
|
||||||
* of -1 inside the RDB file. */
|
* of -1 inside the RDB file in a wrong way, see more information
|
||||||
|
* in function rdbPopulateSaveInfo. */
|
||||||
rsi.repl_stream_db != -1)
|
rsi.repl_stream_db != -1)
|
||||||
{
|
{
|
||||||
memcpy(server.replid,rsi.repl_id,sizeof(server.replid));
|
memcpy(server.replid,rsi.repl_id,sizeof(server.replid));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user