From e4f3fa9ba0c8926b97c0150bb38f1acd09d0eb6f Mon Sep 17 00:00:00 2001 From: Jan Eitzinger Date: Mon, 16 Mar 2026 11:25:49 +0100 Subject: [PATCH] Wrap SyncJobs in transaction Entire-Checkpoint: d4f6c79a8dc1 --- internal/repository/jobCreate.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/internal/repository/jobCreate.go b/internal/repository/jobCreate.go index 9a4ab04d..465d8d9c 100644 --- a/internal/repository/jobCreate.go +++ b/internal/repository/jobCreate.go @@ -141,7 +141,13 @@ func (r *JobRepository) SyncJobs() ([]*schema.Job, error) { // TransferCachedJobToMain moves a job from job_cache to the job table. // Caller must hold r.Mutex. Returns the new job table ID. func (r *JobRepository) TransferCachedJobToMain(cacheID int64) (int64, error) { - res, err := r.DB.Exec( + tx, err := r.DB.Beginx() + if err != nil { + return 0, fmt.Errorf("TransferCachedJobToMain: begin transaction: %w", err) + } + defer tx.Rollback() + + res, err := tx.Exec( "INSERT INTO job (job_id, cluster, subcluster, start_time, hpc_user, project, cluster_partition, array_job_id, num_nodes, num_hwthreads, num_acc, shared, monitoring_status, smt, job_state, duration, walltime, footprint, energy, energy_footprint, resources, meta_data) SELECT job_id, cluster, subcluster, start_time, hpc_user, project, cluster_partition, array_job_id, num_nodes, num_hwthreads, num_acc, shared, monitoring_status, smt, job_state, duration, walltime, footprint, energy, energy_footprint, resources, meta_data FROM job_cache WHERE id = ?", cacheID) if err != nil { @@ -153,11 +159,15 @@ func (r *JobRepository) TransferCachedJobToMain(cacheID int64) (int64, error) { return 0, fmt.Errorf("getting new job ID after transfer failed: %w", err) } - _, err = r.DB.Exec("DELETE FROM job_cache WHERE id = ?", cacheID) + _, err = tx.Exec("DELETE FROM job_cache WHERE id = ?", cacheID) if err != nil { return 0, fmt.Errorf("deleting cached job %d after transfer failed: %w", cacheID, err) } + if err := tx.Commit(); err != nil { + return 0, fmt.Errorf("TransferCachedJobToMain: commit: %w", err) + } + return newID, nil }