GNU bug report logs -
#52555
[RFC PATCH 0/3] Decentralized substitute distribution with ERIS
Previous Next
Full log
Message #100 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 (ipfs-daemon-alive?)
>> + "Attempt to connect to the IPFS daemon. Returns #t if the daemon is alive
>> +and #f else."
>> + (with-exception-handler
>> + (const #f)
>> + (lambda _
>> + (let ((response _
>> + (http-post (string-append (%ipfs-base-url)
>> + "/api/v0/version"))))
>> + (equal? 200 (response-code response))))
>> + #:unwind? #t))
>
> This should preferably only be catching exceptions indicating that
> the daemon is down (exceptions indicating 404s, or system-errors
> indicating network errors, ...).
Yes, I guess it could be checked a bit finer. But at the end if an
exception happens then the IPFS daemon is probably not reachable, right?
If we don't care about the reason why it is not reachable then why
bother with catching finer grained exceptions?
>> +
>> +(define guix-eris-block-reducer
>> + (case-lambda
>> +
>> + ;; Check if IPFS Daemon is running.
>> + (() (if (ipfs-daemon-alive?)
>> + (eris-blocks-ipfs-reducer)
>> + #f))
>> +
>> + ;; Completion. Nothing to do.
>> + ((_) #t)
>> +
>> + ((ipfs ref-block)
>> + ;; If IPFS has been initialized store block there
>> + (if ipfs
>> + (eris-blocks-ipfs-reducer ipfs ref-block)
>> + ipfs))))
>
> This (ipfs-daemon-alive?) seems racy, although it's probably not.
> Can we do
>
> (define guix-eris-block-reducer
> (case-lambda
> (() (guard (c (oops-it-fails-because-the-daemon-cannot-be-
> contacted? c)
> #false)
> (eris-block-ipfs-reducer))
> [...]))
>
> instead? (I don't think this will work as-is, because from the name and
> thunkiness, it would appear that eris-block-ipfs-reducer returns a
> procedure ...
Yes, eris-block-ipfs-reducer returns and SRFI-171 reducer. This is a
3-arity procedure that is either initialized, called with a block to
reduce and finalized.
The #f that the initialization case returns (0-arity call) is the state
of the reducer. In the block reducing case (2-ary call) the state (the
ipfs variable) is checked if ipfs is alive. If not the blocks are just
forgotten.
So guix-eris-block-reducer always returns a SRF-171 reducer, regardless
of if IPFS is alive or not. This is important as the ERIS URN can still
be computed without the IPFS daemon running.
-pukkamustard
This bug report was last modified 1 year and 168 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.