From 97e78b2059806ac9f2cb5103a7fed2874fd74b44 Mon Sep 17 00:00:00 2001 From: Gabriel Erzse Date: Tue, 5 Mar 2024 17:20:52 +0200 Subject: [PATCH] Support the MAXAGE option for CLIENT KILL Issue #2706 Starting with Redis 7.6, the CLIENT KILL command has a new option, called MAXAGE, to kill clients older than a given age. Add support for this new option. --- .../client/lib/commands/CLIENT_KILL.spec.ts | 10 ++++++++++ packages/client/lib/commands/CLIENT_KILL.ts | 19 ++++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/client/lib/commands/CLIENT_KILL.spec.ts b/packages/client/lib/commands/CLIENT_KILL.spec.ts index 2fe894f3610..982f34169b1 100644 --- a/packages/client/lib/commands/CLIENT_KILL.spec.ts +++ b/packages/client/lib/commands/CLIENT_KILL.spec.ts @@ -106,5 +106,15 @@ describe('CLIENT KILL', () => { ['CLIENT', 'KILL', 'TYPE', 'master', 'SKIPME'] ); }); + + it('MAX_AGE', () => { + assert.deepEqual( + transformArguments({ + filter: ClientKillFilters.MAX_AGE, + maxAge: 5 + }), + ['CLIENT', 'KILL', 'MAXAGE', '5'] + ); + }); }); }); diff --git a/packages/client/lib/commands/CLIENT_KILL.ts b/packages/client/lib/commands/CLIENT_KILL.ts index adb2a5a6569..11fd171a942 100644 --- a/packages/client/lib/commands/CLIENT_KILL.ts +++ b/packages/client/lib/commands/CLIENT_KILL.ts @@ -6,7 +6,8 @@ export enum ClientKillFilters { ID = 'ID', TYPE = 'TYPE', USER = 'USER', - SKIP_ME = 'SKIPME' + SKIP_ME = 'SKIPME', + MAX_AGE = 'MAXAGE' } interface KillFilter { @@ -37,7 +38,11 @@ type KillSkipMe = ClientKillFilters.SKIP_ME | (KillFilter { + maxAge: number; +} + +type KillFilters = KillAddress | KillLocalAddress | KillId | KillType | KillUser | KillSkipMe | KillMaxAge; export function transformArguments(filters: KillFilters | Array): RedisCommandArguments { const args = ['CLIENT', 'KILL']; @@ -61,7 +66,7 @@ function pushFilter(args: RedisCommandArguments, filter: KillFilters): void { args.push(filter.filter); - switch(filter.filter) { + switch (filter.filter) { case ClientKillFilters.ADDRESS: args.push(filter.address); break; @@ -83,12 +88,16 @@ function pushFilter(args: RedisCommandArguments, filter: KillFilters): void { break; case ClientKillFilters.USER: - args.push(filter.username); - break; + args.push(filter.username); + break; case ClientKillFilters.SKIP_ME: args.push(filter.skipMe ? 'yes' : 'no'); break; + + case ClientKillFilters.MAX_AGE: + args.push(filter.maxAge.toString()); + break; } }