Skip to content

Commit

Permalink
Use fake client flag to replace not conn check (valkey-io#1198)
Browse files Browse the repository at this point in the history
The fake client flag was introduced in valkey-io#1063, 
we want this to replace all !conn fake client checks.

Signed-off-by: Binbin <[email protected]>
  • Loading branch information
enjoy-binbin authored Nov 27, 2024
1 parent 66ae8b7 commit 5d08149
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 6 deletions.
1 change: 1 addition & 0 deletions src/module.c
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,7 @@ void moduleReleaseTempClient(client *c) {
c->bufpos = 0;
c->raw_flag = 0;
c->flag.module = 1;
c->flag.fake = 1;
c->user = NULL; /* Root user */
c->cmd = c->lastcmd = c->realcmd = c->io_parsed_cmd = NULL;
if (c->bstate.async_rm_call_handle) {
Expand Down
12 changes: 10 additions & 2 deletions src/networking.c
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,11 @@ int prepareClientToWrite(client *c) {
* is set. */
if (c->flag.primary && !c->flag.primary_force_reply) return C_ERR;

if (!c->conn) return C_ERR; /* Fake client for AOF loading. */
/* Skip the fake client, such as the fake client for AOF loading.
* But CLIENT_ID_CACHED_RESPONSE is allowed since it is a fake client
* but has a connection to cache the response. */
if (c->flag.fake && c->id != CLIENT_ID_CACHED_RESPONSE) return C_ERR;
serverAssert(c->conn);

/* Schedule the client to write the output buffers to the socket, unless
* it should already be setup to do so (it has already pending data). */
Expand Down Expand Up @@ -348,6 +352,9 @@ sds aggregateClientOutputBuffer(client *c) {
* It needs be paired with `deleteCachedResponseClient` function to stop caching. */
client *createCachedResponseClient(int resp) {
struct client *recording_client = createClient(NULL);
/* It is a fake client but with a connection, setting a special client id,
* so we can identify it's a fake cached response client. */
recording_client->id = CLIENT_ID_CACHED_RESPONSE;
recording_client->resp = resp;
/* Allocating the `conn` allows to prepare the caching client before adding
* data to the clients output buffer by `prepareClientToWrite`. */
Expand Down Expand Up @@ -4499,7 +4506,8 @@ int checkClientOutputBufferLimits(client *c) {
*
* Returns 1 if client was (flagged) closed. */
int closeClientOnOutputBufferLimitReached(client *c, int async) {
if (!c->conn) return 0; /* It is unsafe to free fake clients. */
if (c->flag.fake) return 0; /* It is unsafe to free fake clients. */
serverAssert(c->conn);
serverAssert(c->reply_bytes < SIZE_MAX - (1024 * 64));
/* Note that c->reply_bytes is irrelevant for replica clients
* (they use the global repl buffers). */
Expand Down
3 changes: 2 additions & 1 deletion src/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -970,9 +970,10 @@ void updateClientMemoryUsage(client *c) {
}

int clientEvictionAllowed(client *c) {
if (server.maxmemory_clients == 0 || c->flag.no_evict || !c->conn) {
if (server.maxmemory_clients == 0 || c->flag.no_evict || c->flag.fake) {
return 0;
}
serverAssert(c->conn);
int type = getClientType(c);
return (type == CLIENT_TYPE_NORMAL || type == CLIENT_TYPE_PUBSUB);
}
Expand Down
7 changes: 4 additions & 3 deletions src/server.h
Original file line number Diff line number Diff line change
Expand Up @@ -1094,9 +1094,10 @@ typedef struct {
/* With multiplexing we need to take per-client state.
* Clients are taken in a linked list. */

#define CLIENT_ID_AOF (UINT64_MAX) /* Reserved ID for the AOF client. If you \
need more reserved IDs use UINT64_MAX-1, \
-2, ... and so forth. */
#define CLIENT_ID_AOF (UINT64_MAX) /* Reserved ID for the AOF client. If you \
need more reserved IDs use UINT64_MAX-1, \
-2, ... and so forth. */
#define CLIENT_ID_CACHED_RESPONSE (UINT64_MAX - 1) /* Client for cached response, see createCachedResponseClient. */

/* Replication backlog is not a separate memory, it just is one consumer of
* the global replication buffer. This structure records the reference of
Expand Down

0 comments on commit 5d08149

Please sign in to comment.