summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQu Chen <QuChen88@users.noreply.github.com>2020-10-22 02:57:45 -0700
committerOran Agra <oran@redislabs.com>2020-10-27 09:12:01 +0200
commitcebc1f2696fe3b58009c813ce28b27b98f9b4209 (patch)
tree2c8cee0896bd6342022de59b36ac8411c322b8e9
parent56d8ad932ddeac50b0c8c645d94b8006977cc06c (diff)
downloadredis-cebc1f2696fe3b58009c813ce28b27b98f9b4209.tar.gz
WATCH no longer ignores keys which have expired for MULTI/EXEC. (#7920)
This wrong behavior was backed by a test, and also documentation, and dates back to 2010. But it makes no sense to anyone involved so it was decided to change that. Note that 20eeddf (invalidate watch on expire on access) was released in 6.0 RC2 and 2d1968f released in in 6.0.0 GA (invalidate watch when key is evicted). both of which do similar changes. (cherry picked from commit 556acefe7556443b6d1741d804add92047bf4a8b)
-rw-r--r--src/expire.c2
-rw-r--r--tests/unit/multi.tcl4
2 files changed, 3 insertions, 3 deletions
diff --git a/src/expire.c b/src/expire.c
index 85fd59fe2..cac208573 100644
--- a/src/expire.c
+++ b/src/expire.c
@@ -64,7 +64,7 @@ int activeExpireCycleTryExpire(redisDb *db, dictEntry *de, long long now) {
dbSyncDelete(db,keyobj);
notifyKeyspaceEvent(NOTIFY_EXPIRED,
"expired",keyobj,db->id);
- trackingInvalidateKey(NULL,keyobj);
+ signalModifiedKey(NULL, db, keyobj);
decrRefCount(keyobj);
server.stat_expiredkeys++;
return 1;
diff --git a/tests/unit/multi.tcl b/tests/unit/multi.tcl
index 817d509c5..e45a2d8f4 100644
--- a/tests/unit/multi.tcl
+++ b/tests/unit/multi.tcl
@@ -221,7 +221,7 @@ start_server {tags {"multi"}} {
r exec
} {}
- test {WATCH will not consider touched expired keys} {
+ test {WATCH will consider touched expired keys} {
r del x
r set x foo
r expire x 1
@@ -230,7 +230,7 @@ start_server {tags {"multi"}} {
r multi
r ping
r exec
- } {PONG}
+ } {}
test {DISCARD should clear the WATCH dirty flag on the client} {
r watch x