diff --git a/components/gitpod-db/src/periodic-deleter.ts b/components/gitpod-db/src/periodic-deleter.ts index 50b5859f1d4fcb..6e41390c8a6fff 100644 --- a/components/gitpod-db/src/periodic-deleter.ts +++ b/components/gitpod-db/src/periodic-deleter.ts @@ -16,13 +16,18 @@ export class PeriodicDbDeleter { @inject(GitpodTableDescriptionProvider) protected readonly tableProvider: GitpodTableDescriptionProvider; @inject(TypeORM) protected readonly typeORM: TypeORM; - start() { + start(shouldRunFn: () => Promise) { log.info("[PeriodicDbDeleter] Start ..."); - this.sync().catch((err) => log.error("[PeriodicDbDeleter] sync failed", err)); + this.sync(shouldRunFn).catch((err) => log.error("[PeriodicDbDeleter] sync failed", err)); } - protected async sync() { + protected async sync(shouldRunFn: () => Promise) { const doSync = async () => { + const shouldRun = await shouldRunFn(); + if (!shouldRun) { + return; + } + const tickID = new Date().toISOString(); log.info("[PeriodicDbDeleter] Starting to collect deleted rows.", { periodicDeleterTickId: tickID, diff --git a/components/server/src/server.ts b/components/server/src/server.ts index e611a4d7a8b92f..f5f540b1dac518 100644 --- a/components/server/src/server.ts +++ b/components/server/src/server.ts @@ -334,13 +334,13 @@ export class Server { if (!this.config.runDbDeleter) { return; } - const areWeLeader = await this.qorum.areWeLeader(); - if (areWeLeader) { - log.info("[PeriodicDbDeleter] Current instance is leader, starting periodic deleter."); - this.periodicDbDeleter.start(); - } else { - log.info("[PeriodicDbDeleter] Current instance is not the leader, periodic deleter will not run."); - } + this.periodicDbDeleter.start(async () => { + const areWeLeader = await this.qorum.areWeLeader(); + log.info( + "[PeriodicDbDeleter]" + areWeLeader ? "Deleter should run." : "Current instance is not the leader", + ); + return areWeLeader; + }); } protected async registerRoutes(app: express.Application) {