GNU bug report logs -
#52555
[RFC PATCH 0/3] Decentralized substitute distribution with ERIS
Previous Next
Full log
Message #97 received at 52555 <at> debbugs.gnu.org (full text, mbox):
Maxime Devos <maximedevos <at> telenet.be> writes:
> pukkamustard schreef op di 25-01-2022 om 19:21 [+0000]:
>> + (define (eris-encode-nar compressions)
>> + (and (member %eris-zstd-compression compressions)
>> + (let* ((nar (nar-cache-file cache item
>> + #:compression %eris-zstd-compression))
>> + (stat (stat nar #f)))
>> + (and stat
>> + (call-with-input-file nar
>> + (cut eris-encode->string <>
>> + #:block-size %eris-block-size-large))))))
>
> Why are exceptions turned into #f (in (stat nar #f))?
> Should this be done for all I/O errors, including, say, EOVERFLOW,
> ENOMEM or ENAMETOOLONG, or only for ENOENT?
>
> Is a race condition possible here? If so, maybe consider doing
> something like
>
> (catch 'system-error
> (lambda () (call-with-input-file ...))
> (lambda exception
> (and it-is-a-ENOENT
> (apply throw exception))))
>
> to avoid it?
A valid question. But (stat nar #f) is not something I introduced. It is
already in guix/scripts/publish.scm like that.
To me turning all exceptions to #f makes sense. Here we only want to
know if the file is readable. As the NAR is baked in the background by
another thread the case where the compressed NAR does exist yet will
happen. In that case we don't worry, we just don't publish the
`FileSize` and `ERIS` fields in the narinfo.
-pukkamustard
This bug report was last modified 1 year and 169 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.