summaryrefslogtreecommitdiff
path: root/src/tracking.c
diff options
context:
space:
mode:
authorHuang Zhw <huang_zhw@126.com>2022-07-26 18:28:37 +0800
committerGitHub <noreply@github.com>2022-07-26 13:28:37 +0300
commit6f0a27e38e6dc1258f5f5790ec672f7fb555fcfb (patch)
tree0d05c1bf61e3030ae6a86cb6d6f8a0b00a93fcfa /src/tracking.c
parent020e046b4210f64a614d7ec51b4ee09f746e5350 (diff)
downloadredis-6f0a27e38e6dc1258f5f5790ec672f7fb555fcfb.tar.gz
When client tracking is on, invalidation message of flushdb in a (#11038)
When FLUSHDB / FLUSHALL / SWAPDB is inside MULTI / EXEC, the client side tracking invalidation message was interleaved with transaction response.
Diffstat (limited to 'src/tracking.c')
-rw-r--r--src/tracking.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/tracking.c b/src/tracking.c
index a659e98dd..c98421edb 100644
--- a/src/tracking.c
+++ b/src/tracking.c
@@ -454,7 +454,12 @@ void trackingInvalidateKeysOnFlush(int async) {
while ((ln = listNext(&li)) != NULL) {
client *c = listNodeValue(ln);
if (c->flags & CLIENT_TRACKING) {
- sendTrackingMessage(c,shared.null[c->resp]->ptr,sdslen(shared.null[c->resp]->ptr),1);
+ if (c == server.current_client) {
+ incrRefCount(shared.null[c->resp]);
+ listAddNodeTail(server.tracking_pending_keys,shared.null[c->resp]);
+ } else {
+ sendTrackingMessage(c,shared.null[c->resp]->ptr,sdslen(shared.null[c->resp]->ptr),1);
+ }
}
}
}