Optimize token cleanup job

This commit is contained in:
x032205
2025-07-11 22:05:32 -04:00
parent 6df6f44b50
commit 218408493a
@@ -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" });