Fix the representation of the fixed output derivation hashes

Previously, they were nix-base32-string encoded, but the representation in the
derivations is base16, so it doesn't make sense to use a different
representation in the database.

Therefore, add some code that runs before the start of each job to convert the
data in the database. It was easier to do this in Guile with the existing
support for working with these bytevector representations. After some
migration period, the code for converting the old hashes can be removed.
This commit is contained in:
Christopher Baines 2019-12-26 08:53:51 +00:00
parent 4eb5a3417c
commit dd94f59acf
2 changed files with 52 additions and 1 deletions

View file

@ -1236,6 +1236,11 @@ SKIP LOCKED")
(with-postgresql-connection
(simple-format #f "load-new-guix-revision ~A" id)
(lambda (conn)
;; Fix the hash encoding of derivation_output_details. This'll only run
;; once on any given database, but is kept here just to make sure any
;; instances have the data updated.
(fix-derivation-output-details-hash-encoding conn)
(exec-query conn "BEGIN")
(match (select-job-for-update conn id)