提交 825adcf3 编写于 作者: A antirez

Modules: block on keys: finish implementing RM_UnblockClient().

上级 37bf3e18
...@@ -4201,15 +4201,24 @@ int moduleClientIsBlockedOnKeys(client *c) { ...@@ -4201,15 +4201,24 @@ int moduleClientIsBlockedOnKeys(client *c) {
* needs to be passed to the client, included but not limited some slow * needs to be passed to the client, included but not limited some slow
* to compute reply or some reply obtained via networking. * to compute reply or some reply obtained via networking.
* *
* Note: this function can be called from threads spawned by the module. * Note 1: this function can be called from threads spawned by the module.
* *
* Note: when we unblock a client that is blocked for keys using * Note 2: when we unblock a client that is blocked for keys using
* the API RedisModule_BlockClientOnKeys(), the privdata argument here is * the API RedisModule_BlockClientOnKeys(), the privdata argument here is
* not used, and the reply callback is called with the privdata pointer that * not used, and the reply callback is called with the privdata pointer that
* was passed when blocking the client. Also note if you unblock clients * was passed when blocking the client.
* blocked on keys in this way, the reply callback should be ready to handle *
* the fact the key may not be ready at all. */ * Unblocking a client that was blocked for keys using this API will still
* require the client to get some reply, so the function will use the
* "timeout" handler in order to do so. */
int RM_UnblockClient(RedisModuleBlockedClient *bc, void *privdata) { int RM_UnblockClient(RedisModuleBlockedClient *bc, void *privdata) {
if (bc->blocked_on_keys) {
/* In theory the user should always pass the timeout handler as an
* argument, but better to be safe than sorry. */
if (bc->timeout_callback == NULL) return REDISMODULE_ERR;
if (bc->unblocked) return REDISMODULE_OK;
if (bc->client) moduleBlockedClientTimedOut(bc->client);
}
moduleUnblockClientByHandle(bc,privdata); moduleUnblockClientByHandle(bc,privdata);
return REDISMODULE_OK; return REDISMODULE_OK;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册