mirror of
https://github.com/fluencelabs/redis
synced 2025-07-04 03:11:34 +00:00
Streams: initial work to use blocking lists logic for streams XREAD.
This commit is contained in:
11
src/server.h
11
src/server.h
@ -256,6 +256,7 @@ typedef long long mstime_t; /* millisecond time type. */
|
||||
#define BLOCKED_LIST 1 /* BLPOP & co. */
|
||||
#define BLOCKED_WAIT 2 /* WAIT for synchronous replication. */
|
||||
#define BLOCKED_MODULE 3 /* Blocked by a loadable module. */
|
||||
#define BLOCKED_STREAM 4 /* XREAD. */
|
||||
|
||||
/* Client request types */
|
||||
#define PROTO_REQ_INLINE 1
|
||||
@ -641,9 +642,9 @@ typedef struct blockingState {
|
||||
mstime_t timeout; /* Blocking operation timeout. If UNIX current time
|
||||
* is > timeout then the operation timed out. */
|
||||
|
||||
/* BLOCKED_LIST */
|
||||
/* BLOCKED_LIST and BLOCKED_STREAM */
|
||||
dict *keys; /* The keys we are waiting to terminate a blocking
|
||||
* operation such as BLPOP. Otherwise NULL. */
|
||||
* operation such as BLPOP or XREAD. Or NULL. */
|
||||
robj *target; /* The key that should receive the element,
|
||||
* for BRPOPLPUSH. */
|
||||
|
||||
@ -1291,6 +1292,7 @@ typedef struct {
|
||||
extern struct redisServer server;
|
||||
extern struct sharedObjectsStruct shared;
|
||||
extern dictType objectKeyPointerValueDictType;
|
||||
extern dictType objectKeyHeapPointerValueDictType;
|
||||
extern dictType setDictType;
|
||||
extern dictType zsetDictType;
|
||||
extern dictType clusterNodesDictType;
|
||||
@ -1413,9 +1415,7 @@ int listTypeEqual(listTypeEntry *entry, robj *o);
|
||||
void listTypeDelete(listTypeIterator *iter, listTypeEntry *entry);
|
||||
void listTypeConvert(robj *subject, int enc);
|
||||
void unblockClientWaitingData(client *c);
|
||||
void handleClientsBlockedOnLists(void);
|
||||
void popGenericCommand(client *c, int where);
|
||||
void signalListAsReady(redisDb *db, robj *key);
|
||||
|
||||
/* Stream data type. */
|
||||
stream *streamNew(void);
|
||||
@ -1798,6 +1798,9 @@ void unblockClient(client *c);
|
||||
void replyToBlockedClientTimedOut(client *c);
|
||||
int getTimeoutFromObjectOrReply(client *c, robj *object, mstime_t *timeout, int unit);
|
||||
void disconnectAllBlockedClients(void);
|
||||
void handleClientsBlockedOnKeys(void);
|
||||
void signalKeyAsReady(redisDb *db, robj *key);
|
||||
void blockForKeys(client *c, robj **keys, int numkeys, mstime_t timeout, robj *target);
|
||||
|
||||
/* expire.c -- Handling of expired keys */
|
||||
void activeExpireCycle(int type);
|
||||
|
Reference in New Issue
Block a user