MCPcopy Create free account
hub / github.com/F-Stack/f-stack / blockonkeys_lpush

Function blockonkeys_lpush

app/redis-6.2.6/tests/modules/blockonkeys.c:357–383  ·  view source on GitHub ↗

BLOCKONKEYS.LPUSH key val [val ..] * BLOCKONKEYS.LPUSH_UNBLOCK key val [val ..] * * A module equivalent of LPUSH. If the name LPUSH_UNBLOCK is used, * RM_SignalKeyAsReady() is also called. */

Source from the content-addressed store, hash-verified

355 * A module equivalent of LPUSH. If the name LPUSH_UNBLOCK is used,
356 * RM_SignalKeyAsReady() is also called. */
357int blockonkeys_lpush(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
358 if (argc < 3)
359 return RedisModule_WrongArity(ctx);
360
361 RedisModuleKey *key = RedisModule_OpenKey(ctx, argv[1], REDISMODULE_WRITE);
362 if (RedisModule_KeyType(key) != REDISMODULE_KEYTYPE_EMPTY &&
363 RedisModule_KeyType(key) != REDISMODULE_KEYTYPE_LIST) {
364 RedisModule_ReplyWithError(ctx, REDISMODULE_ERRORMSG_WRONGTYPE);
365 } else {
366 for (int i = 2; i < argc; i++) {
367 if (RedisModule_ListPush(key, REDISMODULE_LIST_HEAD,
368 argv[i]) != REDISMODULE_OK) {
369 RedisModule_CloseKey(key);
370 return RedisModule_ReplyWithError(ctx, "ERR Push failed");
371 }
372 }
373 }
374 RedisModule_CloseKey(key);
375
376 /* signal key as ready if the command is lpush_unblock */
377 size_t len;
378 const char *str = RedisModule_StringPtrLen(argv[0], &len);
379 if (!strncasecmp(str, "blockonkeys.lpush_unblock", len)) {
380 RedisModule_SignalKeyAsReady(ctx, argv[1]);
381 }
382 return RedisModule_ReplyWithSimpleString(ctx, "OK");
383}
384
385/* Callback for the BLOCKONKEYS.BLPOPN command */
386int blockonkeys_blpopn_reply_callback(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {

Callers

nothing calls this directly

Calls 1

strncasecmpFunction · 0.85

Tested by

no test coverage detected