bugfix, move reconcile to job scheduler

This commit is contained in:
Alex Holliday committed 2026-06-25 11:47:22 -07:00
1 parent b21ef60cda
commit ef353dcb36
9 files changed
+88 -71

No files matched your search

@@ -10,6 +10,7 @@ const QueueWorkerSchema = new Schema<QueueWorkerDocument>(
{
_id: { type: String, required: true },
mode: { type: String, enum: QueueModes, required: true },
processesJobs: { type: Boolean, required: true },
lastSeenAt: { type: Date, default: Date.now, expires: WORKER_TTL_SECONDS },
},
{ timestamps: true }
@@ -2,7 +2,7 @@ import type { QueueMode } from "@/domain/app-settings/app-settings.type.js";
import type { QueueWorker } from "@/domain/queue-workers/queue-worker.type.js";
export interface IQueueWorkersRepository {
upsert(workerId: string, mode: QueueMode): Promise<void>;
upsert(workerId: string, mode: QueueMode, processesJobs: boolean): Promise<void>;
findRecent(maxAgeMs: number): Promise<QueueWorker[]>;
deleteById(workerId: string): Promise<void>;
}
@@ -11,12 +11,13 @@ class MongoQueueWorkersRepository implements IQueueWorkersRepository {
return {
workerId: doc._id,
mode: doc.mode,
processesJobs: doc.processesJobs,
lastSeenAt: doc.lastSeenAt.getTime(),
};
};
upsert = async (workerId: string, mode: QueueMode): Promise<void> => {
await QueueWorkerModel.updateOne({ _id: workerId }, { $set: { mode, lastSeenAt: new Date() } }, { upsert: true });
upsert = async (workerId: string, mode: QueueMode, processesJobs: boolean): Promise<void> => {
await QueueWorkerModel.updateOne({ _id: workerId }, { $set: { mode, processesJobs, lastSeenAt: new Date() } }, { upsert: true });
};
findRecent = async (maxAgeMs: number): Promise<QueueWorker[]> => {
@@ -1,11 +1,9 @@
import { type QueueMode } from "@/domain/app-settings/app-settings.type.js";
// Heartbeat presence record for a scheduler instance. _id is the scheduler's
// workerId (hostname:pid:uuid). The TTL index on lastSeenAt garbage-collects
// records for instances that have stopped heartbeating.
export interface QueueWorkerDocument {
_id: string;
mode: QueueMode;
processesJobs: boolean;
lastSeenAt: Date;
createdAt: Date;
updatedAt: Date;
@@ -14,5 +12,6 @@ export interface QueueWorkerDocument {
export type QueueWorker = {
workerId: string; // hostname:pid:uuid
mode: QueueMode;
processesJobs: boolean;
lastSeenAt: number; // epoch ms of the last heartbeat
};