diff options
author | Huang Zhw <huang_zhw@126.com> | 2022-07-26 18:28:37 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-26 13:28:37 +0300 |
commit | 6f0a27e38e6dc1258f5f5790ec672f7fb555fcfb (patch) | |
tree | 0d05c1bf61e3030ae6a86cb6d6f8a0b00a93fcfa /src/tracking.c | |
parent | 020e046b4210f64a614d7ec51b4ee09f746e5350 (diff) | |
download | redis-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.c | 7 |
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); + } } } } |