-
Notifications
You must be signed in to change notification settings - Fork 77
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multipart response / byte range(s) decoding bug? Cannot decode header in multipart message
#319
Comments
Hi, I already saw problems with different http servers not correctly implemented multi-range requests. Or you can check if your server correctly implements such multi-range request as described here: https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests I do not think that usage of There was issue with EOS - see root-project/root#13018. |
Thanks for the speedy response! It's entirely possible that the XRootD http server has a nonstandard implementation of multipart responses - I'd assumed it was fine as my browser was able to download the file, but I realise now that probably wouldn't involve multirange requests.
Yes it does - access to our server via URL and eos token alone should be sufficient, but then I'm unsure about that because it's collaboration internal data. If I put a dummy/opendata file somewhere in our EOS area then we might be able to get around that. In the meantime I can provide the headers and response, which I hope can help in the meantime:
response headers:
request and headers
|
Any test ROOT file - like hsimple.root - will be sufficient for me. If you can explain how I can configure xrootd server myself - I will try to test it directly on my machine. May be |
I'll contact your privately to provide a reproducer URL. |
Can you provide me working link? |
In case when reordering detected - try to search in all requested fragments for provided data range. Will not work if server creates more fragments than requested. Coalesing should be OK. Special situation of EOS server
In case when reordering detected - try to search in all requested fragments for provided data range. Will not work if server creates more fragments than requested. Coalesing should be OK. Special situation of EOS server
Problem was identified. It is reordering of fragments in reply of EOS server. Fix provided in master and 7.7 branches. Thanks for reporting it. |
Fantastic! Thank you @linev |
1. Fix - handle reordering of fragments in multipart reply root-project/jsroot#319 2. Fix - properly show non-zero entries root-project/jsroot#320 3. Fix - display empty hist bin if fSumw2 not zero 4. Fix - let use batch_mode script injection in interactive session
1. Fix - handle reordering of fragments in multipart reply root-project/jsroot#319 2. Fix - properly show non-zero entries root-project/jsroot#320 3. Fix - display empty hist bin if fSumw2 not zero 4. Fix - let use batch_mode script injection in interactive session
Fix published in https://github.com/root-project/jsroot/releases/tag/7.7.5 |
Thank you for dealing with this so quickly (as usual!) I've updated our install of JSROOT and confirmed 7.7.5 fixes the issue. |
Hi there! I am attempting to use the JSROOT v7.7.4
HierarchyPainter
in my NextJS app like this:https://gitlab.cern.ch/lhcb-dpa/analysis-productions/LbAPWeb/-/blob/main/components/pipelines/JSROOTgui.jsx?ref_type=heads#L32
to render a ROOT file browser in our webapp. I am running into a error, where the
openRootFile
call returnsfalse
. When I open the file directly withopenFile(url)
fromjsroot/io
I get the following:We recently switched from putting the ROOT files on S3 (where they could be read by JSRoot with a signed URL generated by S3) to reading the files from EOS routing the output through our API to sidestep CORS problems.
The requests appear to fetch ranges from the ROOT file and are marked successful in the browser console. I am also able to download the ROOT file normally with my browser by going directly to the link, and browse in a regular TBrowser.
I've managed to trace the problem to possibly how JSROOT is decoding the multipart response, i.e. where the content type is
as I only seem to run into the issue when JSROOT requests multiple byte ranges rather than single ranges. When I set:
the ROOT file does then start load in the browser and things do function as normal, although slower (which is understandable due to forcing 1 request per range).
I start to wonder now if it's because of how jsroot interprets the multipart boundary and
multipart/byteranges
content types? Or indeed it could be because EOS / xrootd is usingEOSMULTIPARTBOUNDARY
as a boundary rather than a lowercase random-ish alphanumeric string which seems to be more standard. The RFC's defining the boundaries for multipart responses doesn't seem to exclude this kind of boundary, though.Any advice much appreciated. Let me know if I can help and provide more information.
The text was updated successfully, but these errors were encountered: