summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2020-04-09 11:09:40 +0200
committerantirez <antirez@gmail.com>2020-04-09 11:09:40 +0200
commit3d5b2d41b52906269778c42fec40d3c85535b9bf (patch)
treedd39abaf96a0318076ee91c7e5fcb41c2bd6c847
parent30adc62232b2f8fe7dc31b850d8df3979f443234 (diff)
downloadredis-3d5b2d41b52906269778c42fec40d3c85535b9bf.tar.gz
RDB: clarify a condition in rdbLoadRio().
-rw-r--r--src/rdb.c10
-rw-r--r--src/rdb.h1
2 files changed, 9 insertions, 2 deletions
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);