From 2cd5f6f3ff9ad607164a65c08b247c7485e49968 Mon Sep 17 00:00:00 2001 From: Huang Zhw Date: Sun, 31 Jul 2022 21:14:39 +0800 Subject: tracking pending invalidation message of flushdb sent by (#11068) trackingHandlePendingKeyInvalidations should use proto. (cherry picked from commit 61451b02cb3dd5f274a2f5fe72bf0b80b02a744e) --- src/tracking.c | 16 +++++++++++----- tests/unit/tracking.tcl | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/tracking.c b/src/tracking.c index c4dbf82c0..32a4c6abc 100644 --- a/src/tracking.c +++ b/src/tracking.c @@ -416,9 +416,15 @@ void trackingHandlePendingKeyInvalidations() { robj *key = listNodeValue(ln); /* current_client maybe freed, so we need to send invalidation * message only when current_client is still alive */ - if (server.current_client != NULL) - sendTrackingMessage(server.current_client,(char *)key->ptr,sdslen(key->ptr),0); - decrRefCount(key); + if (server.current_client != NULL) { + if (key != NULL) { + sendTrackingMessage(server.current_client,(char *)key->ptr,sdslen(key->ptr),0); + } else { + sendTrackingMessage(server.current_client,shared.null[server.current_client->resp]->ptr, + sdslen(shared.null[server.current_client->resp]->ptr),1); + } + } + if (key != NULL) decrRefCount(key); } listEmpty(server.tracking_pending_keys); } @@ -448,8 +454,8 @@ void trackingInvalidateKeysOnFlush(int async) { client *c = listNodeValue(ln); if (c->flags & CLIENT_TRACKING) { if (c == server.current_client) { - incrRefCount(shared.null[c->resp]); - listAddNodeTail(server.tracking_pending_keys,shared.null[c->resp]); + /* We use a special NULL to indicate that we should send null */ + listAddNodeTail(server.tracking_pending_keys,NULL); } else { sendTrackingMessage(c,shared.null[c->resp]->ptr,sdslen(shared.null[c->resp]->ptr),1); } diff --git a/tests/unit/tracking.tcl b/tests/unit/tracking.tcl index a137274c6..5a4415856 100644 --- a/tests/unit/tracking.tcl +++ b/tests/unit/tracking.tcl @@ -529,7 +529,7 @@ start_server {tags {"tracking network"}} { assert_equal $res {OK} # Consume the invalidate message which is after command response r read - } {invalidate *_*} + } {invalidate {}} # Keys are defined to be evicted 100 at a time by default. # If after eviction the number of keys still surpasses the limit -- cgit v1.2.1