Skip to content

Commit d7f04b4

Browse files
authored
Merge pull request #8 from hanxizh9910/auto-author-assign
CI: add auto-author-assign workflow
2 parents d452419 + 7c9bdec commit d7f04b4

22 files changed

Lines changed: 1518 additions & 455 deletions
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: Auto Author Assign
2+
3+
on:
4+
pull_request_target:
5+
types: [opened, reopened]
6+
7+
permissions:
8+
pull-requests: write
9+
10+
jobs:
11+
assign-author:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: toshimaru/auto-author-assign@v2.1.1

src/bio.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,15 @@
6161

6262

6363
#include "server.h"
64+
#include "connection.h"
6465
#include "bio.h"
6566
#include <stdatomic.h>
6667

6768
static char *bio_worker_title[] = {
6869
"bio_close_file",
6970
"bio_aof",
7071
"bio_lazy_free",
72+
"bio_rdb_save",
7173
};
7274

7375
#define BIO_WORKER_NUM (sizeof(bio_worker_title) / sizeof(*bio_worker_title))
@@ -77,13 +79,15 @@ static unsigned int bio_job_to_worker[] = {
7779
[BIO_AOF_FSYNC] = 1,
7880
[BIO_CLOSE_AOF] = 1,
7981
[BIO_LAZY_FREE] = 2,
82+
[BIO_RDB_SAVE] = 3,
8083
};
8184

8285
static pthread_t bio_threads[BIO_WORKER_NUM];
8386
static pthread_mutex_t bio_mutex[BIO_WORKER_NUM];
8487
static pthread_cond_t bio_newjob_cond[BIO_WORKER_NUM];
8588
static list *bio_jobs[BIO_WORKER_NUM];
8689
static unsigned long bio_jobs_counter[BIO_NUM_OPS] = {0};
90+
static __thread unsigned long bio_thread_id = 0;
8791

8892
/* This structure represents a background Job. It is only used locally to this
8993
* file as the API does not expose the internals at all. */
@@ -108,6 +112,12 @@ typedef union bio_job {
108112
lazy_free_fn *free_fn; /* Function that will free the provided arguments */
109113
void *free_args[]; /* List of arguments to be passed to the free function */
110114
} free_args;
115+
116+
struct {
117+
int type;
118+
connection *conn; /* Connection to download the RDB from */
119+
int is_dual_channel; /* Single vs dual channel */
120+
} save_to_disk_args;
111121
} bio_job;
112122

113123
void *bioProcessBackgroundJobs(void *arg);
@@ -203,6 +213,13 @@ void bioCreateFsyncJob(int fd, long long offset, int need_reclaim_cache) {
203213
bioSubmitJob(BIO_AOF_FSYNC, job);
204214
}
205215

216+
void bioCreateSaveRDBToDiskJob(connection *conn, int is_dual_channel) {
217+
bio_job *job = zmalloc(sizeof(*job));
218+
job->save_to_disk_args.conn = conn;
219+
job->save_to_disk_args.is_dual_channel = is_dual_channel;
220+
bioSubmitJob(BIO_RDB_SAVE, job);
221+
}
222+
206223
void *bioProcessBackgroundJobs(void *arg) {
207224
bio_job *job;
208225
unsigned long worker = (unsigned long)arg;
@@ -225,6 +242,8 @@ void *bioProcessBackgroundJobs(void *arg) {
225242
if (pthread_sigmask(SIG_BLOCK, &sigset, NULL))
226243
serverLog(LL_WARNING, "Warning: can't mask SIGALRM in bio.c thread: %s", strerror(errno));
227244

245+
bio_thread_id = worker;
246+
228247
while (1) {
229248
listNode *ln;
230249

@@ -278,6 +297,8 @@ void *bioProcessBackgroundJobs(void *arg) {
278297
if (job_type == BIO_CLOSE_AOF) close(job->fd_args.fd);
279298
} else if (job_type == BIO_LAZY_FREE) {
280299
job->free_args.free_fn(job->free_args.free_args);
300+
} else if (job_type == BIO_RDB_SAVE) {
301+
replicaReceiveRDBFromPrimaryToDisk(job->save_to_disk_args.conn, job->save_to_disk_args.is_dual_channel);
281302
} else {
282303
serverPanic("Wrong job type in bioProcessBackgroundJobs().");
283304
}
@@ -333,3 +354,7 @@ void bioKillThreads(void) {
333354
}
334355
}
335356
}
357+
358+
int inBioThread(void) {
359+
return bio_thread_id != 0;
360+
}

src/bio.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,16 @@ void bioCreateCloseJob(int fd, int need_fsync, int need_reclaim_cache);
4141
void bioCreateCloseAofJob(int fd, long long offset, int need_reclaim_cache);
4242
void bioCreateFsyncJob(int fd, long long offset, int need_reclaim_cache);
4343
void bioCreateLazyFreeJob(lazy_free_fn free_fn, int arg_count, ...);
44+
void bioCreateSaveRDBToDiskJob(connection *conn, int is_dual_channel);
45+
int inBioThread(void);
4446

4547
/* Background job opcodes */
4648
enum {
4749
BIO_CLOSE_FILE = 0, /* Deferred close(2) syscall. */
4850
BIO_AOF_FSYNC, /* Deferred AOF fsync. */
4951
BIO_LAZY_FREE, /* Deferred objects freeing. */
5052
BIO_CLOSE_AOF, /* Deferred close for AOF files. */
53+
BIO_RDB_SAVE, /* Deferred save RDB to disk on replica */
5154
BIO_NUM_OPS
5255
};
5356

src/cluster_legacy.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1692,8 +1692,6 @@ clusterNode *createClusterNode(char *nodename, int flags) {
16921692
* timestamps and keep the radix‐tree keys compact. The resulting timestamp is stored
16931693
* in big‑endian format, followed by the pointer to the clusterNode. */
16941694
static void encodeFailureReportKey(clusterNode *node, mstime_t report_time, unsigned char *buf_out) {
1695-
const size_t node_ptr_pad_bytes = (sizeof(clusterNode *) == 4) ? 4 : 0; // pad on 32-bit
1696-
16971695
/* Round up to the next second for fewer key splits and quorum grace */
16981696
mstime_t bucketed_time = (report_time / SEC_IN_MS) * SEC_IN_MS + SEC_IN_MS;
16991697

@@ -1702,8 +1700,7 @@ static void encodeFailureReportKey(clusterNode *node, mstime_t report_time, unsi
17021700
memcpy(buf_out, &big_endian_time, sizeof(uint64_t));
17031701

17041702
/* Append the node pointer, plus padding if necessary */
1705-
memcpy(buf_out + sizeof(uint64_t), &node, sizeof(node));
1706-
if (node_ptr_pad_bytes) memset(buf_out + sizeof(uint64_t) + sizeof(node), 0, node_ptr_pad_bytes);
1703+
writePointerWithPadding(buf_out + sizeof(uint64_t), node);
17071704
}
17081705

17091706
/* Reverses the operation of encodeFailureReportKey, reading back a timestamp

src/commands.def

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,7 +1334,7 @@ commandHistory CLIENT_KILL_History[] = {
13341334
{"8.0.0","`MAXAGE` option."},
13351335
{"8.0.0","Replaced `master` `TYPE` with `primary`. `master` still supported for backward compatibility."},
13361336
{"8.1.0","`ID` option accepts multiple IDs."},
1337-
{"9.0.0","Added filters NAME, IDLE, FLAGS, LIB-NAME, LIB-VER, DB, CAPA, and IP."},
1337+
{"9.0.0","Added filters NAME, IDLE, FLAGS, LIB-NAME, LIB-VER, DB, CAPA, and IP. And negative filters NOT-ID, NOT-TYPE, NOT-ADDR, NOT-LADDR, NOT-USER, NOT-FLAGS, NOT-NAME, NOT-LIB-NAME, NOT-LIB-VER, NOT-DB, NOT-CAPA, NOT-IP."},
13381338
};
13391339
#endif
13401340

@@ -1364,6 +1364,16 @@ struct COMMAND_ARG CLIENT_KILL_filter_new_format_skipme_Subargs[] = {
13641364
{MAKE_ARG("no",ARG_TYPE_PURE_TOKEN,-1,"NO",NULL,NULL,CMD_ARG_NONE,0,NULL)},
13651365
};
13661366

1367+
/* CLIENT KILL filter new_format not_client_type argument table */
1368+
struct COMMAND_ARG CLIENT_KILL_filter_new_format_not_client_type_Subargs[] = {
1369+
{MAKE_ARG("normal",ARG_TYPE_PURE_TOKEN,-1,"NORMAL",NULL,NULL,CMD_ARG_NONE,0,NULL)},
1370+
{MAKE_ARG("master",ARG_TYPE_PURE_TOKEN,-1,"MASTER",NULL,NULL,CMD_ARG_NONE,0,NULL)},
1371+
{MAKE_ARG("primary",ARG_TYPE_PURE_TOKEN,-1,"PRIMARY",NULL,NULL,CMD_ARG_NONE,0,NULL)},
1372+
{MAKE_ARG("slave",ARG_TYPE_PURE_TOKEN,-1,"SLAVE",NULL,NULL,CMD_ARG_NONE,0,NULL)},
1373+
{MAKE_ARG("replica",ARG_TYPE_PURE_TOKEN,-1,"REPLICA",NULL,NULL,CMD_ARG_NONE,0,NULL)},
1374+
{MAKE_ARG("pubsub",ARG_TYPE_PURE_TOKEN,-1,"PUBSUB",NULL,NULL,CMD_ARG_NONE,0,NULL)},
1375+
};
1376+
13671377
/* CLIENT KILL filter new_format argument table */
13681378
struct COMMAND_ARG CLIENT_KILL_filter_new_format_Subargs[] = {
13691379
{MAKE_ARG("client-id",ARG_TYPE_INTEGER,-1,"ID",NULL,"2.8.12",CMD_ARG_OPTIONAL|CMD_ARG_MULTIPLE,0,NULL)},
@@ -1381,12 +1391,24 @@ struct COMMAND_ARG CLIENT_KILL_filter_new_format_Subargs[] = {
13811391
{MAKE_ARG("db",ARG_TYPE_INTEGER,-1,"DB",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
13821392
{MAKE_ARG("capa",ARG_TYPE_STRING,-1,"CAPA",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
13831393
{MAKE_ARG("ip",ARG_TYPE_STRING,-1,"IP",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1394+
{MAKE_ARG("not-client-type",ARG_TYPE_ONEOF,-1,"NOT-TYPE",NULL,"9.0.0",CMD_ARG_OPTIONAL,6,NULL),.subargs=CLIENT_KILL_filter_new_format_not_client_type_Subargs},
1395+
{MAKE_ARG("not-client-id",ARG_TYPE_INTEGER,-1,"NOT-ID",NULL,"9.0.0",CMD_ARG_OPTIONAL|CMD_ARG_MULTIPLE,0,NULL)},
1396+
{MAKE_ARG("not-username",ARG_TYPE_STRING,-1,"NOT-USER",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1397+
{MAKE_ARG("not-addr",ARG_TYPE_STRING,-1,"NOT-ADDR",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL),.display_text="ip:port"},
1398+
{MAKE_ARG("not-laddr",ARG_TYPE_STRING,-1,"NOT-LADDR",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL),.display_text="ip:port"},
1399+
{MAKE_ARG("not-name",ARG_TYPE_STRING,-1,"NOT-NAME",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1400+
{MAKE_ARG("not-flags",ARG_TYPE_STRING,-1,"NOT-FLAGS",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1401+
{MAKE_ARG("not-lib-name",ARG_TYPE_STRING,-1,"NOT-LIB-NAME",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1402+
{MAKE_ARG("not-lib-ver",ARG_TYPE_STRING,-1,"NOT-LIB-VER",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1403+
{MAKE_ARG("not-db",ARG_TYPE_INTEGER,-1,"NOT-DB",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1404+
{MAKE_ARG("not-capa",ARG_TYPE_STRING,-1,"NOT-CAPA",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1405+
{MAKE_ARG("not-ip",ARG_TYPE_STRING,-1,"NOT-IP",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
13841406
};
13851407

13861408
/* CLIENT KILL filter argument table */
13871409
struct COMMAND_ARG CLIENT_KILL_filter_Subargs[] = {
13881410
{MAKE_ARG("old-format",ARG_TYPE_STRING,-1,NULL,NULL,NULL,CMD_ARG_NONE,0,"2.8.12"),.display_text="ip:port"},
1389-
{MAKE_ARG("new-format",ARG_TYPE_ONEOF,-1,NULL,NULL,NULL,CMD_ARG_MULTIPLE,15,NULL),.subargs=CLIENT_KILL_filter_new_format_Subargs},
1411+
{MAKE_ARG("new-format",ARG_TYPE_ONEOF,-1,NULL,NULL,NULL,CMD_ARG_MULTIPLE,27,NULL),.subargs=CLIENT_KILL_filter_new_format_Subargs},
13901412
};
13911413

13921414
/* CLIENT KILL argument table */
@@ -1407,7 +1429,7 @@ commandHistory CLIENT_LIST_History[] = {
14071429
{"7.0.3","Added `ssub` field."},
14081430
{"8.0.0","Replaced `master` `TYPE` with `primary`. `master` still supported for backward compatibility."},
14091431
{"8.1.0","Added filters USER, ADDR, LADDR, SKIPME, and MAXAGE."},
1410-
{"9.0.0","Added filters NAME, IDLE, FLAGS, LIB-NAME, LIB-VER, DB, CAPA, and IP."},
1432+
{"9.0.0","Added filters NAME, IDLE, FLAGS, LIB-NAME, LIB-VER, DB, CAPA, and IP. And negative filters NOT-ID, NOT-TYPE, NOT-ADDR, NOT-LADDR, NOT-USER, NOT-FLAGS, NOT-NAME, NOT-LIB-NAME, NOT-LIB-VER, NOT-DB, NOT-CAPA, NOT-IP."},
14111433
};
14121434
#endif
14131435

@@ -1437,6 +1459,14 @@ struct COMMAND_ARG CLIENT_LIST_skipme_Subargs[] = {
14371459
{MAKE_ARG("no",ARG_TYPE_PURE_TOKEN,-1,"NO",NULL,NULL,CMD_ARG_NONE,0,NULL)},
14381460
};
14391461

1462+
/* CLIENT LIST not_client_type argument table */
1463+
struct COMMAND_ARG CLIENT_LIST_not_client_type_Subargs[] = {
1464+
{MAKE_ARG("normal",ARG_TYPE_PURE_TOKEN,-1,"NORMAL",NULL,NULL,CMD_ARG_NONE,0,NULL)},
1465+
{MAKE_ARG("master",ARG_TYPE_PURE_TOKEN,-1,"MASTER",NULL,NULL,CMD_ARG_NONE,0,NULL)},
1466+
{MAKE_ARG("replica",ARG_TYPE_PURE_TOKEN,-1,"REPLICA",NULL,NULL,CMD_ARG_NONE,0,NULL)},
1467+
{MAKE_ARG("pubsub",ARG_TYPE_PURE_TOKEN,-1,"PUBSUB",NULL,NULL,CMD_ARG_NONE,0,NULL)},
1468+
};
1469+
14401470
/* CLIENT LIST argument table */
14411471
struct COMMAND_ARG CLIENT_LIST_Args[] = {
14421472
{MAKE_ARG("client-type",ARG_TYPE_ONEOF,-1,"TYPE",NULL,"5.0.0",CMD_ARG_OPTIONAL,4,NULL),.subargs=CLIENT_LIST_client_type_Subargs},
@@ -1454,6 +1484,18 @@ struct COMMAND_ARG CLIENT_LIST_Args[] = {
14541484
{MAKE_ARG("db",ARG_TYPE_INTEGER,-1,"DB",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
14551485
{MAKE_ARG("capa",ARG_TYPE_STRING,-1,"CAPA",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
14561486
{MAKE_ARG("ip",ARG_TYPE_STRING,-1,"IP",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1487+
{MAKE_ARG("not-client-type",ARG_TYPE_ONEOF,-1,"NOT-TYPE",NULL,"9.0.0",CMD_ARG_OPTIONAL,4,NULL),.subargs=CLIENT_LIST_not_client_type_Subargs},
1488+
{MAKE_ARG("not-client-id",ARG_TYPE_INTEGER,-1,"NOT-ID",NULL,"9.0.0",CMD_ARG_OPTIONAL|CMD_ARG_MULTIPLE,0,NULL)},
1489+
{MAKE_ARG("not-username",ARG_TYPE_STRING,-1,"NOT-USER",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1490+
{MAKE_ARG("not-addr",ARG_TYPE_STRING,-1,"NOT-ADDR",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL),.display_text="ip:port"},
1491+
{MAKE_ARG("not-laddr",ARG_TYPE_STRING,-1,"NOT-LADDR",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL),.display_text="ip:port"},
1492+
{MAKE_ARG("not-name",ARG_TYPE_STRING,-1,"NOT-NAME",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1493+
{MAKE_ARG("not-flags",ARG_TYPE_STRING,-1,"NOT-FLAGS",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1494+
{MAKE_ARG("not-lib-name",ARG_TYPE_STRING,-1,"NOT-LIB-NAME",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1495+
{MAKE_ARG("not-lib-ver",ARG_TYPE_STRING,-1,"NOT-LIB-VER",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1496+
{MAKE_ARG("not-db",ARG_TYPE_INTEGER,-1,"NOT-DB",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1497+
{MAKE_ARG("not-capa",ARG_TYPE_STRING,-1,"NOT-CAPA",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1498+
{MAKE_ARG("not-ip",ARG_TYPE_STRING,-1,"NOT-IP",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
14571499
};
14581500

14591501
/********** CLIENT NO_EVICT ********************/
@@ -1736,7 +1778,7 @@ struct COMMAND_STRUCT CLIENT_Subcommands[] = {
17361778
{MAKE_CMD("import-source","Mark this client as an import source when server is in import mode.","O(1)","8.1.0",CMD_DOC_NONE,NULL,NULL,"connection",COMMAND_GROUP_CONNECTION,CLIENT_IMPORT_SOURCE_History,0,CLIENT_IMPORT_SOURCE_Tips,0,clientImportSourceCommand,3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,ACL_CATEGORY_CONNECTION,CLIENT_IMPORT_SOURCE_Keyspecs,0,NULL,1),.args=CLIENT_IMPORT_SOURCE_Args},
17371779
{MAKE_CMD("info","Returns information about the connection.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,"connection",COMMAND_GROUP_CONNECTION,CLIENT_INFO_History,0,CLIENT_INFO_Tips,1,clientInfoCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,CLIENT_INFO_Keyspecs,0,NULL,0)},
17381780
{MAKE_CMD("kill","Terminates open connections.","O(N) where N is the number of client connections","2.4.0",CMD_DOC_NONE,NULL,NULL,"connection",COMMAND_GROUP_CONNECTION,CLIENT_KILL_History,9,CLIENT_KILL_Tips,0,clientKillCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,CLIENT_KILL_Keyspecs,0,NULL,1),.args=CLIENT_KILL_Args},
1739-
{MAKE_CMD("list","Lists open connections.","O(N) where N is the number of client connections","2.4.0",CMD_DOC_NONE,NULL,NULL,"connection",COMMAND_GROUP_CONNECTION,CLIENT_LIST_History,9,CLIENT_LIST_Tips,1,clientListCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,CLIENT_LIST_Keyspecs,0,NULL,15),.args=CLIENT_LIST_Args},
1781+
{MAKE_CMD("list","Lists open connections.","O(N) where N is the number of client connections","2.4.0",CMD_DOC_NONE,NULL,NULL,"connection",COMMAND_GROUP_CONNECTION,CLIENT_LIST_History,9,CLIENT_LIST_Tips,1,clientListCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,CLIENT_LIST_Keyspecs,0,NULL,27),.args=CLIENT_LIST_Args},
17401782
{MAKE_CMD("no-evict","Sets the client eviction mode of the connection.","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,"connection",COMMAND_GROUP_CONNECTION,CLIENT_NO_EVICT_History,0,CLIENT_NO_EVICT_Tips,0,clientNoEvictCommand,3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,CLIENT_NO_EVICT_Keyspecs,0,NULL,1),.args=CLIENT_NO_EVICT_Args},
17411783
{MAKE_CMD("no-touch","Controls whether commands sent by the client affect the LRU/LFU of accessed keys.","O(1)","7.2.0",CMD_DOC_NONE,NULL,NULL,"connection",COMMAND_GROUP_CONNECTION,CLIENT_NO_TOUCH_History,0,CLIENT_NO_TOUCH_Tips,0,clientNoTouchCommand,3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,ACL_CATEGORY_CONNECTION,CLIENT_NO_TOUCH_Keyspecs,0,NULL,1),.args=CLIENT_NO_TOUCH_Args},
17421784
{MAKE_CMD("pause","Suspends commands processing.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,"connection",COMMAND_GROUP_CONNECTION,CLIENT_PAUSE_History,1,CLIENT_PAUSE_Tips,0,clientPauseCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,CLIENT_PAUSE_Keyspecs,0,NULL,2),.args=CLIENT_PAUSE_Args},

0 commit comments

Comments
 (0)