[Cuirass] Download products can disappear, leading to HTTP 500

  • Done
  • quality assurance status badge
Details
3 participants
  • Ludovic Courtès
  • Ludovic Courtès
  • Maxim Cournoyer
Owner
unassigned
Submitted by
Ludovic Courtès
Severity
normal
L
L
Ludovic Courtès wrote on 27 Jun 2023 16:09
(address . bug-guix@gnu.org)
87bkh1uhdf.fsf@inria.fr
The /download endpoint refers directly to store items. However, they
can be GC’d in the meantime, in which case the HTTP handler fails
gracelessly (HTTP 500 or so) as shown here:

Toggle snippet (10 lines)
2023-06-27 16:02:24 GET /download/718
2023-06-27 16:02:24 Uncaught exception in task:
2023-06-27 16:02:24 In fibers.scm:
2023-06-27 16:02:24 172:8 1 (_)
2023-06-27 16:02:24 In ice-9/boot-9.scm:
2023-06-27 16:02:24 1685:16 0 (raise-exception _ #:continuable? _)
2023-06-27 16:02:24 ice-9/boot-9.scm:1685:16: In procedure raise-exception:
2023-06-27 16:02:24 In procedure open-file: No such file or directory: "/gnu/store/bnsh1yk4l913af8swqi3x7xp1xsa8gq7-guix-binary.tar.xz"

The solution IMO is to (1) register GC roots for these, (2) periodically
remove old GC roots, and (3) return 404 when the file has vanished.

Ludo’.
L
L
Ludovic Courtès wrote on 24 Aug 2023 17:22
(address . 64317-done@debbugs.gnu.org)
875y54xy6t.fsf@gnu.org
Ludovic Courtès <ludovic.courtes@inria.fr> skribis:

Toggle quote (16 lines)
> The /download endpoint refers directly to store items. However, they
> can be GC’d in the meantime, in which case the HTTP handler fails
> gracelessly (HTTP 500 or so) as shown here:
>
> 2023-06-27 16:02:24 GET /download/718
> 2023-06-27 16:02:24 Uncaught exception in task:
> 2023-06-27 16:02:24 In fibers.scm:
> 2023-06-27 16:02:24 172:8 1 (_)
> 2023-06-27 16:02:24 In ice-9/boot-9.scm:
> 2023-06-27 16:02:24 1685:16 0 (raise-exception _ #:continuable? _)
> 2023-06-27 16:02:24 ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> 2023-06-27 16:02:24 In procedure open-file: No such file or directory: "/gnu/store/bnsh1yk4l913af8swqi3x7xp1xsa8gq7-guix-binary.tar.xz"
>
> The solution IMO is to (1) register GC roots for these, (2) periodically
> remove old GC roots, and (3) return 404 when the file has vanished.

Fixed with these Cuirass commits:

9e897d8 'create-build-outputs' registers a GC root on build products.
103a6ec http: Gracefully handle missing files in "/download".
5e3e49c http: "/download" returns 404 rather than 500 for "not found".

Ludo’.
Closed
M
M
Maxim Cournoyer wrote on 26 Aug 2023 22:15
(address . 64317-done@debbugs.gnu.org)
87v8d1mufi.fsf@gmail.com
Hello,

Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (26 lines)
> Ludovic Courtès <ludovic.courtes@inria.fr> skribis:
>
>> The /download endpoint refers directly to store items. However, they
>> can be GC’d in the meantime, in which case the HTTP handler fails
>> gracelessly (HTTP 500 or so) as shown here:
>>
>> 2023-06-27 16:02:24 GET /download/718
>> 2023-06-27 16:02:24 Uncaught exception in task:
>> 2023-06-27 16:02:24 In fibers.scm:
>> 2023-06-27 16:02:24 172:8 1 (_)
>> 2023-06-27 16:02:24 In ice-9/boot-9.scm:
>> 2023-06-27 16:02:24 1685:16 0 (raise-exception _ #:continuable? _)
>> 2023-06-27 16:02:24 ice-9/boot-9.scm:1685:16: In procedure raise-exception:
>> 2023-06-27 16:02:24 In procedure open-file: No such file or
>> directory:
>> "/gnu/store/bnsh1yk4l913af8swqi3x7xp1xsa8gq7-guix-binary.tar.xz"
>>
>> The solution IMO is to (1) register GC roots for these, (2) periodically
>> remove old GC roots, and (3) return 404 when the file has vanished.
>
> Fixed with these Cuirass commits:
>
> 9e897d8 'create-build-outputs' registers a GC root on build products.
> 103a6ec http: Gracefully handle missing files in "/download".
> 5e3e49c http: "/download" returns 404 rather than 500 for "not found".

Yay! Thanks for fixing this long standing issue!

--
Thanks,
Maxim
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 64317@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 64317
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch