-
Notifications
You must be signed in to change notification settings - Fork 24.5k
Closed
Description
Describe the bug
RedisModule_SignalKeyAsReady does not work as expected.
To reproduce
Here a minimal module that reproduces the issue:
#include "redismodule.h"
#include <stdlib.h>
int BlockedReplyCallback(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
RedisModule_Log(ctx, "warning", "Reply callback!");
RedisModule_ReplyWithSimpleString(ctx, "We are done!");
return REDISMODULE_OK;
}
int TimeoutReplyCallback(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
RedisModule_Log(ctx, "warning", "Timed out!");
RedisModule_ReplyWithSimpleString(ctx, "Timed Out");
return REDISMODULE_OK;
}
void BlockedFreePrivdata(RedisModuleCtx *ctx, void *privdata) {
RedisModule_Log(ctx, "warning", "Freeing all priv data");
}
int HelloworldRand_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
RedisModuleBlockedClient* bc = RedisModule_BlockClientOnKeys(ctx,
BlockedReplyCallback,
TimeoutReplyCallback,
BlockedFreePrivdata,
10000,
&argv[1],
1,
NULL);
RedisModule_SignalKeyAsReady(ctx, argv[1]);
return REDISMODULE_OK;
}
int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
if (RedisModule_Init(ctx,"helloworld",1,REDISMODULE_APIVER_1)
== REDISMODULE_ERR) return REDISMODULE_ERR;
if (RedisModule_CreateCommand(ctx,"bug1",
HelloworldRand_RedisCommand, "",
0, 0, 0) == REDISMODULE_ERR)
return REDISMODULE_ERR;
return REDISMODULE_OK;
}Just load the module and run the command "bug1 123". It will be blocked until timing out after 10 seconds despite having called RedisModule_SignalKeyAsReady directly after blocking.
Note, I also tested to calling RedisModule_SignalKeyAsReady from a timer callback with the exact same result.
Expected behavior
The BlockedReplyCallback should be called after signaling that the key is ready.
Additional information
This is on a Mac running redis 6.0.8 and the latest redismodule.h (from yesterday).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels