Skip to content

Commit

Permalink
Support the MAXAGE option for CLIENT KILL
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Gabriel Erzse committed Mar 5, 2024
1 parent dbf8f59 commit 97e78b2
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
10 changes: 10 additions & 0 deletions packages/client/lib/commands/CLIENT_KILL.spec.ts
Expand Up @@ -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']
);
});
});
});
19 changes: 14 additions & 5 deletions packages/client/lib/commands/CLIENT_KILL.ts
Expand Up @@ -6,7 +6,8 @@ export enum ClientKillFilters {
ID = 'ID',
TYPE = 'TYPE',
USER = 'USER',
SKIP_ME = 'SKIPME'
SKIP_ME = 'SKIPME',
MAX_AGE = 'MAXAGE'
}

interface KillFilter<T extends ClientKillFilters> {
Expand Down Expand Up @@ -37,7 +38,11 @@ type KillSkipMe = ClientKillFilters.SKIP_ME | (KillFilter<ClientKillFilters.SKIP
skipMe: boolean;
});

type KillFilters = KillAddress | KillLocalAddress | KillId | KillType | KillUser | KillSkipMe;
interface KillMaxAge extends KillFilter<ClientKillFilters.MAX_AGE> {
maxAge: number;
}

type KillFilters = KillAddress | KillLocalAddress | KillId | KillType | KillUser | KillSkipMe | KillMaxAge;

export function transformArguments(filters: KillFilters | Array<KillFilters>): RedisCommandArguments {
const args = ['CLIENT', 'KILL'];
Expand All @@ -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;
Expand All @@ -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;
}
}

Expand Down

0 comments on commit 97e78b2

Please sign in to comment.