diff --git a/src/rdb.c b/src/rdb.c index d3104ffbf..313830c25 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -2231,8 +2231,14 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) { * an RDB file from disk, either at startup, or when an RDB was * received from the master. In the latter case, the master is * responsible for key expiry. If we would expire keys here, the - * snapshot taken by the master may not be reflected on the slave. */ - if (iAmMaster() && !(rdbflags&RDBFLAGS_AOF_PREAMBLE) && expiretime != -1 && expiretime < now) { + * snapshot taken by the master may not be reflected on the slave. + * Similarly if the RDB is the preamble of an AOF file, we want to + * load all the keys as they are, since the log of operations later + * assume to work in an exact keyspace state. */ + if (iAmMaster() && + !(rdbflags&RDBFLAGS_AOF_PREAMBLE) && + expiretime != -1 && expiretime < now) + { sdsfree(key); decrRefCount(val); } else { diff --git a/src/rdb.h b/src/rdb.h index 526ed116b..9dfcae7a5 100644 --- a/src/rdb.h +++ b/src/rdb.h @@ -125,6 +125,7 @@ #define RDBFLAGS_NONE 0 #define RDBFLAGS_AOF_PREAMBLE (1<<0) #define RDBFLAGS_REPLICATION (1<<1) +#define RDBFLAGS_ALLOW_DUP (1<<2) int rdbSaveType(rio *rdb, unsigned char type); int rdbLoadType(rio *rdb);