mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-08 15:28:25 +00:00
Optimize token cleanup job
This commit is contained in:
@@ -31,9 +31,10 @@ export const identityAccessTokenDALFactory = (db: TDbClient) => {
|
|||||||
logger.info(`${QueueName.DailyResourceCleanUp}: remove expired access token started`);
|
logger.info(`${QueueName.DailyResourceCleanUp}: remove expired access token started`);
|
||||||
|
|
||||||
const MAX_TTL = 315_360_000; // Maximum TTL value in seconds (10 years)
|
const MAX_TTL = 315_360_000; // Maximum TTL value in seconds (10 years)
|
||||||
|
const QUERY_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
|
||||||
|
|
||||||
try {
|
const performDelete = (dbClient: Knex | Knex.Transaction) =>
|
||||||
const docs = (tx || db)(TableName.IdentityAccessToken)
|
dbClient(TableName.IdentityAccessToken)
|
||||||
.where({
|
.where({
|
||||||
isAccessTokenRevoked: true
|
isAccessTokenRevoked: true
|
||||||
})
|
})
|
||||||
@@ -47,30 +48,24 @@ export const identityAccessTokenDALFactory = (db: TDbClient) => {
|
|||||||
);
|
);
|
||||||
})
|
})
|
||||||
.orWhere((qb) => {
|
.orWhere((qb) => {
|
||||||
void qb.where("accessTokenTTL", ">", 0).andWhere((qb2) => {
|
void qb
|
||||||
void qb2
|
.where("accessTokenTTL", ">", 0)
|
||||||
.where((qb3) => {
|
.andWhereRaw(
|
||||||
void qb3
|
`COALESCE("${TableName.IdentityAccessToken}"."accessTokenLastRenewedAt", "${TableName.IdentityAccessToken}"."createdAt") + make_interval(secs => LEAST("${TableName.IdentityAccessToken}"."accessTokenTTL", ?)) < NOW()`,
|
||||||
.whereNotNull("accessTokenLastRenewedAt")
|
[MAX_TTL]
|
||||||
// accessTokenLastRenewedAt + convert_integer_to_seconds(accessTokenTTL) < present_date
|
);
|
||||||
.andWhereRaw(
|
|
||||||
`"${TableName.IdentityAccessToken}"."accessTokenLastRenewedAt" + make_interval(secs => LEAST("${TableName.IdentityAccessToken}"."accessTokenTTL", ?)) < NOW()`,
|
|
||||||
[MAX_TTL]
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.orWhere((qb3) => {
|
|
||||||
void qb3
|
|
||||||
.whereNull("accessTokenLastRenewedAt")
|
|
||||||
// created + convert_integer_to_seconds(accessTokenTTL) < present_date
|
|
||||||
.andWhereRaw(
|
|
||||||
`"${TableName.IdentityAccessToken}"."createdAt" + make_interval(secs => LEAST("${TableName.IdentityAccessToken}"."accessTokenTTL", ?)) < NOW()`,
|
|
||||||
[MAX_TTL]
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
.delete();
|
.delete();
|
||||||
await docs;
|
|
||||||
|
try {
|
||||||
|
if (tx) {
|
||||||
|
await performDelete(tx);
|
||||||
|
} else {
|
||||||
|
await db.transaction(async (trx) => {
|
||||||
|
await trx.raw(`SET statement_timeout = ${QUERY_TIMEOUT_MS}`);
|
||||||
|
await performDelete(trx);
|
||||||
|
});
|
||||||
|
}
|
||||||
logger.info(`${QueueName.DailyResourceCleanUp}: remove expired access token completed`);
|
logger.info(`${QueueName.DailyResourceCleanUp}: remove expired access token completed`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw new DatabaseError({ error, name: "IdentityAccessTokenPrune" });
|
throw new DatabaseError({ error, name: "IdentityAccessTokenPrune" });
|
||||||
|
|||||||
Reference in New Issue
Block a user