Skip to content

Conversation

@jblomer
Copy link
Contributor

@jblomer jblomer commented Sep 8, 2025

Add new TFile and RRawFile plugins that use libcurl for the HTTP transfers. This can eventually replace the Davix dependency and also the older TWebFile and TS3WebFile. 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 curl command 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 if Curl.ReplaceDavix: yes is 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

@bellenot
Copy link
Member

bellenot commented Sep 8, 2025

@jblomer I'll check

@jblomer jblomer force-pushed the http-curl branch 2 times, most recently from 78005e7 to 11c23f0 Compare September 8, 2025 11:49
@github-actions
Copy link

github-actions bot commented Sep 8, 2025

Test Results

    18 files      18 suites   2d 23h 39m 39s ⏱️
 3 654 tests  3 654 ✅ 0 💤 0 ❌
65 112 runs  65 112 ✅ 0 💤 0 ❌

Results for commit a59ad28.

♻️ This comment has been updated with latest results.

@jblomer jblomer force-pushed the http-curl branch 4 times, most recently from 2a5dd62 to a59ad28 Compare September 28, 2025 20:02
@bellenot
Copy link
Member

bellenot commented Oct 14, 2025

Note that after successful build on Windows, some of the tests fail like:

The following tests FAILED:
        157 - gtest-io-io-RRawFile (Failed)
        262 - gtest-net-curl-rawfile-curl (Failed)
        263 - gtest-net-curl-tfile-curl (Failed)
        488 - gtest-tree-dataframe-datasource-csv (Failed)
        493 - gtest-tree-dataframe-datasource-sqlite (Failed)
Errors while running CTest

Copy link
Member

@dpiparo dpiparo left a 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.

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
@jblomer jblomer requested a review from pcanal as a code owner January 16, 2026 14:04
@jblomer jblomer force-pushed the http-curl branch 3 times, most recently from b1bf36f to 11476da Compare January 16, 2026 14:57
@bellenot
Copy link
Member

Thanks @jblomer . FYI, I'll have to install libcurl and modify the environment on the build nodes (one after the other, by hand). Will try to do that tonight or over the weekend, and then I'll restart the builds on Windows.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants