Tracking: fix sending messages bug + tracking off bug.
This commit is contained in:
parent
40194a2a68
commit
6922ccc0b9
@ -2250,37 +2250,39 @@ NULL
|
|||||||
prefix = zrealloc(prefix,sizeof(robj*)*(numprefix+1));
|
prefix = zrealloc(prefix,sizeof(robj*)*(numprefix+1));
|
||||||
prefix[numprefix++] = c->argv[j];
|
prefix[numprefix++] = c->argv[j];
|
||||||
} else {
|
} else {
|
||||||
|
zfree(prefix);
|
||||||
addReply(c,shared.syntaxerr);
|
addReply(c,shared.syntaxerr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure options are compatible among each other and with the
|
|
||||||
* current state of the client. */
|
|
||||||
if (!bcast && numprefix) {
|
|
||||||
addReplyError(c,"PREFIX option requires BCAST mode to be enabled");
|
|
||||||
zfree(prefix);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c->flags & CLIENT_TRACKING) {
|
|
||||||
int oldbcast = !!c->flags & CLIENT_TRACKING_BCAST;
|
|
||||||
if (oldbcast != bcast) {
|
|
||||||
}
|
|
||||||
addReplyError(c,
|
|
||||||
"You can't switch BCAST mode on/off before disabling "
|
|
||||||
"tracking for this client, and then re-enabling it with "
|
|
||||||
"a different mode.");
|
|
||||||
zfree(prefix);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Options are ok: enable or disable the tracking for this client. */
|
/* Options are ok: enable or disable the tracking for this client. */
|
||||||
if (!strcasecmp(c->argv[2]->ptr,"on")) {
|
if (!strcasecmp(c->argv[2]->ptr,"on")) {
|
||||||
|
/* Before enabling tracking, make sure options are compatible
|
||||||
|
* among each other and with the current state of the client. */
|
||||||
|
if (!bcast && numprefix) {
|
||||||
|
addReplyError(c,
|
||||||
|
"PREFIX option requires BCAST mode to be enabled");
|
||||||
|
zfree(prefix);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c->flags & CLIENT_TRACKING) {
|
||||||
|
int oldbcast = !!c->flags & CLIENT_TRACKING_BCAST;
|
||||||
|
if (oldbcast != bcast) {
|
||||||
|
addReplyError(c,
|
||||||
|
"You can't switch BCAST mode on/off before disabling "
|
||||||
|
"tracking for this client, and then re-enabling it with "
|
||||||
|
"a different mode.");
|
||||||
|
zfree(prefix);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
enableTracking(c,redir,bcast,prefix,numprefix);
|
enableTracking(c,redir,bcast,prefix,numprefix);
|
||||||
} else if (!strcasecmp(c->argv[2]->ptr,"off")) {
|
} else if (!strcasecmp(c->argv[2]->ptr,"off")) {
|
||||||
disableTracking(c);
|
disableTracking(c);
|
||||||
} else {
|
} else {
|
||||||
|
zfree(prefix);
|
||||||
addReply(c,shared.syntaxerr);
|
addReply(c,shared.syntaxerr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -211,6 +211,12 @@ void sendTrackingMessage(client *c, char *keyname, size_t keylen, int proto) {
|
|||||||
/* We use a static object to speedup things, however we assume
|
/* We use a static object to speedup things, however we assume
|
||||||
* that addReplyPubsubMessage() will not take a reference. */
|
* that addReplyPubsubMessage() will not take a reference. */
|
||||||
addReplyPubsubMessage(c,TrackingChannelName,NULL);
|
addReplyPubsubMessage(c,TrackingChannelName,NULL);
|
||||||
|
} else {
|
||||||
|
/* If are here, the client is not using RESP3, nor is
|
||||||
|
* redirecting to another client. We can't send anything to
|
||||||
|
* it since RESP2 does not support push messages in the same
|
||||||
|
* connection. */
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send the "value" part, which is the array of keys. */
|
/* Send the "value" part, which is the array of keys. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user