Skip to content

Commit 7d2b8a1

Browse files
sarthakaggarwal97hpatromadolson
authored andcommitted
[Client Introspection] Client Commands Extended Filtering (valkey-io#1466)
In this PR, we introduce support for new filters for `CLIENT LIST` and `CLIENT KILL` commands. The new filters are: 1. FLAGS `Client must include this flag. This can be a string with bunch of flags present one after the other.` 2. NAME `client name` 3. IDLE `minimum idle time of the client` 4. LIB-NAME `clients with the specified lib name.` 5. LIB-VER `clients with the specified lib version.` 6. DB `clients currently operating on the specified database ID` 7. IP `client ip address` 8. CAPA `client capabilities` Partly Addresses: valkey-io#668 --------- Signed-off-by: Sarthak Aggarwal <sarthagg@amazon.com> Signed-off-by: Harkrishn Patro <harkrisp@amazon.com> Signed-off-by: Harkrishn Patro <bunty.hari@gmail.com> Co-authored-by: Harkrishn Patro <harkrisp@amazon.com> Co-authored-by: Harkrishn Patro <bunty.hari@gmail.com> Co-authored-by: Madelyn Olson <madelyneolson@gmail.com>
1 parent 828ddf9 commit 7d2b8a1

5 files changed

Lines changed: 787 additions & 17 deletions

File tree

src/commands.def

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1304,6 +1304,7 @@ commandHistory CLIENT_KILL_History[] = {
13041304
{"8.0.0","`MAXAGE` option."},
13051305
{"8.0.0","Replaced `master` `TYPE` with `primary`. `master` still supported for backward compatibility."},
13061306
{"8.1.0","`ID` option accepts multiple IDs."},
1307+
{"9.0.0","Added filters NAME, IDLE, FLAGS, LIB-NAME, LIB-VER, DB, CAPA, and IP."},
13071308
};
13081309
#endif
13091310

@@ -1342,12 +1343,20 @@ struct COMMAND_ARG CLIENT_KILL_filter_new_format_Subargs[] = {
13421343
{MAKE_ARG("laddr",ARG_TYPE_STRING,-1,"LADDR",NULL,"6.2.0",CMD_ARG_OPTIONAL,0,NULL),.display_text="ip:port"},
13431344
{MAKE_ARG("skipme",ARG_TYPE_ONEOF,-1,"SKIPME",NULL,NULL,CMD_ARG_OPTIONAL,2,NULL),.subargs=CLIENT_KILL_filter_new_format_skipme_Subargs},
13441345
{MAKE_ARG("maxage",ARG_TYPE_INTEGER,-1,"MAXAGE",NULL,"8.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1346+
{MAKE_ARG("name",ARG_TYPE_STRING,-1,"NAME",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1347+
{MAKE_ARG("idle",ARG_TYPE_INTEGER,-1,"IDLE",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1348+
{MAKE_ARG("flags",ARG_TYPE_STRING,-1,"FLAGS",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1349+
{MAKE_ARG("lib-name",ARG_TYPE_STRING,-1,"LIB-NAME",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1350+
{MAKE_ARG("lib-ver",ARG_TYPE_STRING,-1,"LIB-VER",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1351+
{MAKE_ARG("db",ARG_TYPE_INTEGER,-1,"DB",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1352+
{MAKE_ARG("capa",ARG_TYPE_STRING,-1,"CAPA",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1353+
{MAKE_ARG("ip",ARG_TYPE_STRING,-1,"IP",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
13451354
};
13461355

13471356
/* CLIENT KILL filter argument table */
13481357
struct COMMAND_ARG CLIENT_KILL_filter_Subargs[] = {
13491358
{MAKE_ARG("old-format",ARG_TYPE_STRING,-1,NULL,NULL,NULL,CMD_ARG_NONE,0,"2.8.12"),.display_text="ip:port"},
1350-
{MAKE_ARG("new-format",ARG_TYPE_ONEOF,-1,NULL,NULL,NULL,CMD_ARG_MULTIPLE,7,NULL),.subargs=CLIENT_KILL_filter_new_format_Subargs},
1359+
{MAKE_ARG("new-format",ARG_TYPE_ONEOF,-1,NULL,NULL,NULL,CMD_ARG_MULTIPLE,15,NULL),.subargs=CLIENT_KILL_filter_new_format_Subargs},
13511360
};
13521361

13531362
/* CLIENT KILL argument table */
@@ -1367,7 +1376,8 @@ commandHistory CLIENT_LIST_History[] = {
13671376
{"7.0.0","Added `resp`, `multi-mem`, `rbs` and `rbp` fields."},
13681377
{"7.0.3","Added `ssub` field."},
13691378
{"8.0.0","Replaced `master` `TYPE` with `primary`. `master` still supported for backward compatibility."},
1370-
{"8.1.0","Added filters USER, ADDR, LADDR, SKIPME, and MAXAGE"},
1379+
{"8.1.0","Added filters USER, ADDR, LADDR, SKIPME, and MAXAGE."},
1380+
{"9.0.0","Added filters NAME, IDLE, FLAGS, LIB-NAME, LIB-VER, DB, CAPA, and IP."},
13711381
};
13721382
#endif
13731383

@@ -1406,6 +1416,14 @@ struct COMMAND_ARG CLIENT_LIST_Args[] = {
14061416
{MAKE_ARG("laddr",ARG_TYPE_STRING,-1,"LADDR",NULL,"8.1.0",CMD_ARG_OPTIONAL,0,NULL),.display_text="ip:port"},
14071417
{MAKE_ARG("skipme",ARG_TYPE_ONEOF,-1,"SKIPME",NULL,"8.1.0",CMD_ARG_OPTIONAL,2,NULL),.subargs=CLIENT_LIST_skipme_Subargs},
14081418
{MAKE_ARG("maxage",ARG_TYPE_INTEGER,-1,"MAXAGE",NULL,"8.1.0",CMD_ARG_OPTIONAL,0,NULL)},
1419+
{MAKE_ARG("name",ARG_TYPE_STRING,-1,"NAME",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1420+
{MAKE_ARG("idle",ARG_TYPE_INTEGER,-1,"IDLE",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1421+
{MAKE_ARG("flags",ARG_TYPE_STRING,-1,"FLAGS",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1422+
{MAKE_ARG("lib-name",ARG_TYPE_STRING,-1,"LIB-NAME",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1423+
{MAKE_ARG("lib-ver",ARG_TYPE_STRING,-1,"LIB-VER",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1424+
{MAKE_ARG("db",ARG_TYPE_INTEGER,-1,"DB",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1425+
{MAKE_ARG("capa",ARG_TYPE_STRING,-1,"CAPA",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
1426+
{MAKE_ARG("ip",ARG_TYPE_STRING,-1,"IP",NULL,"9.0.0",CMD_ARG_OPTIONAL,0,NULL)},
14091427
};
14101428

14111429
/********** CLIENT NO_EVICT ********************/
@@ -1687,8 +1705,8 @@ struct COMMAND_STRUCT CLIENT_Subcommands[] = {
16871705
{MAKE_CMD("id","Returns the unique client ID of the connection.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,"connection",COMMAND_GROUP_CONNECTION,CLIENT_ID_History,0,CLIENT_ID_Tips,0,clientIDCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,CLIENT_ID_Keyspecs,0,NULL,0)},
16881706
{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},
16891707
{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)},
1690-
{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,8,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},
1691-
{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,8,CLIENT_LIST_Tips,1,clientListCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,CLIENT_LIST_Keyspecs,0,NULL,7),.args=CLIENT_LIST_Args},
1708+
{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},
1709+
{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},
16921710
{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},
16931711
{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},
16941712
{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},

src/commands/client-kill.json

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@
3939
[
4040
"8.1.0",
4141
"`ID` option accepts multiple IDs."
42+
],
43+
[
44+
"9.0.0",
45+
"Added filters NAME, IDLE, FLAGS, LIB-NAME, LIB-VER, DB, CAPA, and IP."
4246
]
4347
],
4448
"command_flags": [
@@ -162,6 +166,62 @@
162166
"type": "integer",
163167
"optional": true,
164168
"since": "8.0.0"
169+
},
170+
{
171+
"token": "NAME",
172+
"name": "name",
173+
"type": "string",
174+
"optional": true,
175+
"since": "9.0.0"
176+
},
177+
{
178+
"token": "IDLE",
179+
"name": "idle",
180+
"type": "integer",
181+
"optional": true,
182+
"since": "9.0.0"
183+
},
184+
{
185+
"token": "FLAGS",
186+
"name": "flags",
187+
"type": "string",
188+
"optional": true,
189+
"since": "9.0.0"
190+
},
191+
{
192+
"token": "LIB-NAME",
193+
"name": "lib-name",
194+
"type": "string",
195+
"optional": true,
196+
"since": "9.0.0"
197+
},
198+
{
199+
"token": "LIB-VER",
200+
"name": "lib-ver",
201+
"type": "string",
202+
"optional": true,
203+
"since": "9.0.0"
204+
},
205+
{
206+
"token": "DB",
207+
"name": "db",
208+
"type": "integer",
209+
"optional": true,
210+
"since": "9.0.0"
211+
},
212+
{
213+
"token": "CAPA",
214+
"name": "capa",
215+
"type": "string",
216+
"optional": true,
217+
"since": "9.0.0"
218+
},
219+
{
220+
"token": "IP",
221+
"name": "ip",
222+
"type": "string",
223+
"optional": true,
224+
"since": "9.0.0"
165225
}
166226
]
167227
}

src/commands/client-list.json

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@
3838
],
3939
[
4040
"8.1.0",
41-
"Added filters USER, ADDR, LADDR, SKIPME, and MAXAGE"
41+
"Added filters USER, ADDR, LADDR, SKIPME, and MAXAGE."
42+
],
43+
[
44+
"9.0.0",
45+
"Added filters NAME, IDLE, FLAGS, LIB-NAME, LIB-VER, DB, CAPA, and IP."
4246
]
4347
],
4448
"command_flags": [
@@ -144,6 +148,62 @@
144148
"type": "integer",
145149
"optional": true,
146150
"since": "8.1.0"
151+
},
152+
{
153+
"token": "NAME",
154+
"name": "name",
155+
"type": "string",
156+
"optional": true,
157+
"since": "9.0.0"
158+
},
159+
{
160+
"token": "IDLE",
161+
"name": "idle",
162+
"type": "integer",
163+
"optional": true,
164+
"since": "9.0.0"
165+
},
166+
{
167+
"token": "FLAGS",
168+
"name": "flags",
169+
"type": "string",
170+
"optional": true,
171+
"since": "9.0.0"
172+
},
173+
{
174+
"token": "LIB-NAME",
175+
"name": "lib-name",
176+
"type": "string",
177+
"optional": true,
178+
"since": "9.0.0"
179+
},
180+
{
181+
"token": "LIB-VER",
182+
"name": "lib-ver",
183+
"type": "string",
184+
"optional": true,
185+
"since": "9.0.0"
186+
},
187+
{
188+
"token": "DB",
189+
"name": "db",
190+
"type": "integer",
191+
"optional": true,
192+
"since": "9.0.0"
193+
},
194+
{
195+
"token": "CAPA",
196+
"name": "capa",
197+
"type": "string",
198+
"optional": true,
199+
"since": "9.0.0"
200+
},
201+
{
202+
"token": "IP",
203+
"name": "ip",
204+
"type": "string",
205+
"optional": true,
206+
"since": "9.0.0"
147207
}
148208
]
149209
}

0 commit comments

Comments
 (0)