]> git.saurik.com Git - redis.git/commit
Don't expire keys when loading an RDB after a SYNC
authorPieter Noordhuis <pcnoordhuis@gmail.com>
Sat, 14 Jan 2012 01:49:16 +0000 (17:49 -0800)
committerantirez <antirez@gmail.com>
Thu, 16 Feb 2012 16:21:13 +0000 (17:21 +0100)
commitcb598cdd59f48ffa1cb2f3d82d95b8b9eaee7195
tree88702b214a7b66305555120caf454aec8561f023
parentd347348109c955ebf287aafea5d7b65cd4ec9014
Don't expire keys when loading an RDB after a SYNC

The cron is responsible for expiring keys. When keys are expired at
load time, it is possible that the snapshot of a master node gets
modified. This can in turn lead to inconsistencies in the data set.

A more concrete example of this behavior follows. A user reported a
slave that would show an monotonically increase input buffer length,
shortly after completing a SYNC. Also, `INFO` output showed a single
blocked client, which could only be the master link. Investigation
showed that indeed the `BRPOP` command was fed by the master. This
command can only end up in the stream of write operations when it did
NOT block, and effectively executed `RPOP`. However, when the key
involved in the `BRPOP` is expired BEFORE the command is executed, the
client executing it will block. The client in this case, is the master
link.
src/rdb.c