diff options
author | Christopher Baines <mail@cbaines.net> | 2019-07-12 19:54:25 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2019-07-12 19:57:13 +0100 |
commit | a6bd46b829070fca8843bc0155e5bf2b71d422dd (patch) | |
tree | 66cf242c4f1c0a53468870f17dfa43cc963223fa /guix-data-service/jobs | |
parent | 05c828796514b7bcd8a613da8ab1d6a5402931fa (diff) | |
download | data-service-a6bd46b829070fca8843bc0155e5bf2b71d422dd.tar data-service-a6bd46b829070fca8843bc0155e5bf2b71d422dd.tar.gz |
Obtain a lock when inserting the data for a new revision
This is working towards running the jobs in parallel. Each job looks at the
records in the database, and adds missing ones. If other jobs, running in
different transactions insert the same missing records at the same time, this
could cause an error.
Therefore, to just avoid this problem, lock before inserting the data. This
will allow the jobs to be processed in parallel, and it shouldn't have too
much of an effect on performance, as the slow bit is outside of the
transaction.
Diffstat (limited to 'guix-data-service/jobs')
-rw-r--r-- | guix-data-service/jobs/load-new-guix-revision.scm | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/guix-data-service/jobs/load-new-guix-revision.scm b/guix-data-service/jobs/load-new-guix-revision.scm index 401a2c7..a69b690 100644 --- a/guix-data-service/jobs/load-new-guix-revision.scm +++ b/guix-data-service/jobs/load-new-guix-revision.scm @@ -553,6 +553,11 @@ (lambda () (all-inferior-package-derivations store inf packages))))) + ;; Wait until this is the only transaction inserting data, to + ;; avoid any concurrency issues + (obtain-advisory-transaction-lock conn + 'load-new-guix-revision-inserts) + (let* ((package-derivation-ids (packages-and-inferior-data->package-derivation-ids conn inf packages inferior-data-4-tuples)) |