aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2021-10-03 14:54:43 +0100
committerChristopher Baines <mail@cbaines.net>2021-10-03 14:54:43 +0100
commitb28d338de75a6470097b9c12769dcb1ba143f09d (patch)
treeef2b82c30452018d8b942dff56aca34b0dfc6232 /guix-data-service
parent0796cb3bd38b8462ccc7ada22f5504e43f88923f (diff)
downloaddata-service-b28d338de75a6470097b9c12769dcb1ba143f09d.tar
data-service-b28d338de75a6470097b9c12769dcb1ba143f09d.tar.gz
Insert derivations in chunks
To avoid making a very large query when inserting lots of derivations.
Diffstat (limited to 'guix-data-service')
-rw-r--r--guix-data-service/model/derivation.scm13
1 files changed, 8 insertions, 5 deletions
diff --git a/guix-data-service/model/derivation.scm b/guix-data-service/model/derivation.scm
index 3178e83..b258803 100644
--- a/guix-data-service/model/derivation.scm
+++ b/guix-data-service/model/derivation.scm
@@ -1514,7 +1514,7 @@ LIMIT $1"
(map read-derivation-from-file
missing-derivations-filenames))))))
- (define (insert-into-derivations)
+ (define (insert-into-derivations dervs)
(string-append
"INSERT INTO derivations "
"(file_name, builder, args, env_vars, system_id) VALUES "
@@ -1535,7 +1535,7 @@ LIMIT $1"
env-vars)
",")
(system->system-id conn system))))
- derivations)
+ dervs)
",")
" RETURNING id"
";"))
@@ -1544,9 +1544,12 @@ LIMIT $1"
#t "debug: insert-missing-derivations: inserting ~A derivations\n"
(length derivations))
(let ((derivation-ids
- (map (lambda (result)
- (string->number (car result)))
- (exec-query conn (insert-into-derivations)))))
+ (append-map
+ (lambda (chunk)
+ (map (lambda (result)
+ (string->number (car result)))
+ (exec-query conn (insert-into-derivations chunk))))
+ (chunk derivations 5000))))
(simple-format
#t "debug: insert-missing-derivations: updating hash table\n")