3 Commits

Author SHA1 Message Date
64de0e432c Merge pull request 'fix: queue on-create jobs sequentially and fix history ordering' (#56) from feat/jobs-system into dev
All checks were successful
CI / test (push) Successful in 13s
CI / build-dev (push) Successful in 28s
Reviewed-on: #56
2026-03-28 20:12:31 -04:00
a5b409a348 Merge branch 'dev' into feat/jobs-system
All checks were successful
CI / test (pull_request) Successful in 14s
CI / build-dev (pull_request) Has been skipped
2026-03-28 20:09:59 -04:00
8f35724bde fix: queue on-create jobs sequentially and fix history ordering
All checks were successful
CI / test (pull_request) Successful in 13s
CI / build-dev (pull_request) Has been skipped
runJobsOnCreate now awaits each job before starting the next,
ensuring they don't stomp each other's DB writes in parallel.

getInstanceHistory changed to ORDER BY changed_at ASC, id ASC so
the creation event (lowest id) is always first regardless of
same-second timestamps.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 20:09:32 -04:00
2 changed files with 4 additions and 2 deletions

View File

@@ -227,7 +227,7 @@ export function importInstances(rows, historyRows = []) {
export function getInstanceHistory(vmid) { export function getInstanceHistory(vmid) {
return db.prepare( return db.prepare(
'SELECT * FROM instance_history WHERE vmid = ? ORDER BY changed_at DESC' 'SELECT * FROM instance_history WHERE vmid = ? ORDER BY changed_at ASC, id ASC'
).all(vmid); ).all(vmid);
} }

View File

@@ -132,7 +132,9 @@ const _intervals = new Map();
export async function runJobsOnCreate() { export async function runJobsOnCreate() {
for (const job of getJobs()) { for (const job of getJobs()) {
const cfg = JSON.parse(job.config || '{}'); const cfg = JSON.parse(job.config || '{}');
if (cfg.run_on_create) runJob(job.id).catch(e => console.error(`runJobsOnCreate job ${job.id}:`, e)); if (cfg.run_on_create) {
try { await runJob(job.id); } catch (e) { console.error(`runJobsOnCreate job ${job.id}:`, e); }
}
} }
} }