feat(coderd/database/dbpurge): make API keys retention configurable (#21037)

Replace hardcoded 7-day retention for expired API keys with configurable
retention from deployment settings. Skips deletion entirely when effective
retention is 0.

Depends on #21021
Updates #20743
This commit is contained in:
Mathias Fredriksson
2025-12-02 15:41:38 +00:00
committed by GitHub
parent 929db243cb
commit 9ec90cf2e7
4 changed files with 167 additions and 41 deletions
+13 -16
View File
@@ -1107,24 +1107,20 @@ func (q *sqlQuerier) DeleteApplicationConnectAPIKeysByUserID(ctx context.Context
return err
}
const deleteExpiredAPIKeys = `-- name: DeleteExpiredAPIKeys :one
const deleteExpiredAPIKeys = `-- name: DeleteExpiredAPIKeys :execrows
WITH expired_keys AS (
SELECT id
FROM api_keys
-- expired keys only
WHERE expires_at < $1::timestamptz
LIMIT $2
),
deleted_rows AS (
DELETE FROM
api_keys
USING
expired_keys
WHERE
api_keys.id = expired_keys.id
RETURNING api_keys.id
)
SELECT COUNT(deleted_rows.id) AS deleted_count FROM deleted_rows
)
DELETE FROM
api_keys
USING
expired_keys
WHERE
api_keys.id = expired_keys.id
`
type DeleteExpiredAPIKeysParams struct {
@@ -1133,10 +1129,11 @@ type DeleteExpiredAPIKeysParams struct {
}
func (q *sqlQuerier) DeleteExpiredAPIKeys(ctx context.Context, arg DeleteExpiredAPIKeysParams) (int64, error) {
row := q.db.QueryRowContext(ctx, deleteExpiredAPIKeys, arg.Before, arg.LimitCount)
var deleted_count int64
err := row.Scan(&deleted_count)
return deleted_count, err
result, err := q.db.ExecContext(ctx, deleteExpiredAPIKeys, arg.Before, arg.LimitCount)
if err != nil {
return 0, err
}
return result.RowsAffected()
}
const expirePrebuildsAPIKeys = `-- name: ExpirePrebuildsAPIKeys :exec