Bug #6754
closed[Workbench] Report HTTP error instead of sending 0-byte file when error fetching from keep
0%
Description
Problem¶
Workbench shows files from collections by piping from arv-get. If arv-get can't download the file for any reason, Workbench returns a 200 OK status, with a 0-byte response.
Fix¶
- Add an attribute to CollectionsController's FileStreamer class, and corresponding test stub classes, that captures the exit status of arv-get (
$?
). Before arv-get is run, this attribute isnil
. - Near the end of CollectionsController#show_file, capture the FileStreamer created by file_enumerator. Hook up its
each
strings toresponse.stream
as we do now. In the ensure block, if we haven't written any bytes toresponse.stream
and the arv-get exit attribute does not have status 0, setresponse.status = 500
.
Updated by Tom Clegg over 9 years ago
Workbench imagines itself to be in "sending data to client, impossible to change headers" mode even when it fails to get the very first data byte from Keep. The more general version of this problem is a bit harder, but if the first block fails, it should be easy enough to 5xx.
See show_file around source:apps/workbench/app/controllers/collections_controller.rb#L153
At least if the file size is handed to us in params[:size]
: if the file size is non-zero but no bytes are sent, send an HTTP 5xx error.
Updated by Brett Smith over 9 years ago
- Target version changed from Bug Triage to Arvados Future Sprints
Updated by Brett Smith over 9 years ago
- Description updated (diff)
Updating description based on Tom's note.
Updated by Brett Smith over 9 years ago
- Target version changed from Arvados Future Sprints to Deferred
I consider this basically obsolete now that keepdl is imminent.
Updated by Peter Amstutz almost 8 years ago
- Status changed from New to Rejected
Workbench download is deprecated and scheduled for removal, superseded by keep-web.