-
Notifications
You must be signed in to change notification settings - Fork 1.4k
[net] Add libcurl based support for files on HTTP remotes #19842
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
Conversation
|
@jblomer I'll check |
78005e7 to
11c23f0
Compare
Test Results 22 files 22 suites 3d 20h 8m 20s ⏱️ Results for commit 1b75b5d. ♻️ This comment has been updated with latest results. |
2a5dd62 to
a59ad28
Compare
|
Note that after successful build on Windows, some of the tests fail like: |
dpiparo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for these changes. I approved them provided that the win tests are understood and something in the release notes is added about this new option.
b1bf36f to
11476da
Compare
|
Thanks @jblomer . FYI, I'll have to install |
1742175 to
fbac668
Compare
2f01343 to
9ff1ef9
Compare
RCurlConnection is an internal class that wraps around a libcurl easy handle. The RCurlConnection class takes care of - URL escaping - HEAD request - (Multi-)Range GET requests
597c2ad to
1b75b5d
Compare
We currently disable curl on EL8, the oldest supported platform. EL8 comes with curl 7.61, EL9 comes with curl 7.76. Importantly missing in EL8 are the curl_url() APIs and the AWS v4 signature generation (not yet used). EL8 receives security support until ~2029.
bellenot
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks Jakob!
Add new
TFileandRRawFileplugins that use libcurl for the HTTP transfers. This can eventually replace the Davix dependency and also the olderTWebFileandTS3WebFile. The curl library gives access to a modern HTTP implementation (e.g., h2), and it works on Linux, macOS, and Windows with their respective native SSL stacks.@bellenot: on Windows, we may need to build libcurl ourselves. As far as I understand, Windows ships the
curlcommand line library but not the library.The current implementation does HEAD and (multi-)range GET queries, which provides the basics for efficient use of HTTP in ROOT. It can be enabled with
-Dcurl=on. If davix is available alongside the curl plugins, the curl plugins replace the davix plugins ifCurl.ReplaceDavix: yesis set in the rootrc file.Authentication can relatively easily be added, since S3 (AWSv4 signatures), bearer token authentication and X.509 client certificates are already supported by libcurl.
Metalink support can in principle be added if still needed. It requires XML parsing of the metalink snippet.
Write support (POST, PUT) requests can in principle be added if still needed, but require a closer look.
See also root-project/root-ci-images#73 and root-project/root-ci-images#75
Note that for the moment we disable curl on EL8 due to the old libcurl version on this platform.