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

Note that for the moment we disable curl on EL8 due to the old libcurl version on this platform.

@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

    22 files      22 suites   3d 20h 8m 20s ⏱️
 3 757 tests  3 757 ✅ 0 💤 0 ❌
75 642 runs  75 642 ✅ 0 💤 0 ❌

Results for commit 1b75b5d.

♻️ 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.

@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.

@jblomer jblomer force-pushed the http-curl branch 2 times, most recently from 2f01343 to 9ff1ef9 Compare January 20, 2026 15:18
@jblomer jblomer force-pushed the http-curl branch 2 times, most recently from 597c2ad to 1b75b5d Compare January 21, 2026 08:43
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.
Copy link
Member

@bellenot bellenot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Jakob!

@jblomer jblomer merged commit 24fe57c into root-project:master Jan 21, 2026
30 checks passed
@jblomer jblomer deleted the http-curl branch January 21, 2026 12:32
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