Switch all remote access from XRootD to WebDAV - #33
Open
djw8605 wants to merge 1 commit into
Open
Conversation
Replace the XRootD.client library with webdav4 (httpx-based) for every remote operation: directory listing, file reading, and metadata. All target repositories are globally read-only over HTTPS, so no authentication is required, and the same host/port serve WebDAV. bin/cvmfs_sync: - Drop XRootD.client; add webdav4 + xml.etree. - propfind_dir(): one Depth:1 PROPFIND per directory, parsed by XML local-name, returning name / is_dir / size / executable (Apache mod_dav executable property; falls back to 0644). - process_download_file(): stream the file via an httpx GET into the existing cvmfs_swissknife graft pipe, preserving deadline checks, EPIPE handling, child cleanup, and chmod. - Remove lookup_dataserver(); HTTP redirects (redirector -> data server) are followed transparently. - Remove the unused GridFTP/uberftp checksum path. - Keep the multiprocessing download pool and threaded listing workers. config/*.config: rewrite source URLs from root:// to https:// (same host/port). cvmfs-sync-driver: drop gridftp_source handling. cvmfs-sync.spec: Requires python3-webdav4 instead of xrootd-python; update the user description text. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Convert cvmfs-sync remote filesystem access from XRootD to WebDAV/HTTPS using webdav4, updating both the sync implementation and the shipped configs/spec so deployments no longer depend on xrootd-python.
Changes:
- Replace XRootD directory listing + file reads in
bin/cvmfs_syncwith WebDAV PROPFIND/GET streaming viawebdav4(httpx). - Update
config/*.configsource =URLs fromroot://…tohttps://…. - Remove legacy
gridftp_sourcehandling from the driver and switch RPM dependency topython3-webdav4.
Reviewed changes
Copilot reviewed 26 out of 27 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| bin/cvmfs_sync | Replaces XRootD operations with WebDAV PROPFIND/GET streaming and updates directory-walk metadata plumbing. |
| update-scripts/cvmfs-sync-driver | Removes gridftp_source concatenation so the driver passes a single source URL. |
| config/cvmfs-sync.spec | Switches runtime dependency to python3-webdav4 and updates user description text. |
| config/virgo.storage.igwn.org.config | Updates source to https://…. |
| config/uhawaii.osgstorage.org.config | Updates source to https://… (multiple sync sections). |
| config/uboone.osgstorage.org.config | Updates source (and commented alternatives) to https://…. |
| config/snomass21.osgstorage.org.config | Updates commented source examples to https://…. |
| config/shared.storage.igwn.org.config | Updates source to https://…. |
| config/sdsc-nrp-osdf-origin.osgstorage.org.config | Updates source to https://…. |
| config/scitokens.osgstorage.org.config | Updates commented source to https://…. |
| config/sbnd.osgstorage.org.config | Updates source (and commented alternative) to https://…. |
| config/sbn.osgstorage.org.config | Updates source (and commented alternative) to https://…. |
| config/public-uc.osgstorage.org.config | Updates source to https://…. |
| config/nova.osgstorage.org.config | Updates source entries (and commented alternatives) to https://…. |
| config/mu2e.osgstorage.org.config | Updates source (and commented alternatives) to https://…. |
| config/minerva.osgstorage.org.config | Updates source (and commented alternatives) to https://…. |
| config/ligo.storage.igwn.org.config | Updates source to https://…. |
| config/ligo-test.storage.igwn.org.config | Updates source to https://…. |
| config/kagra.storage.igwn.org.config | Updates source to https://…. |
| config/jlab.osgstorage.org.config | Updates source entries to https://…. |
| config/icecube.osgstorage.org.config | Updates source to https://…. |
| config/icarus.osgstorage.org.config | Updates source (and commented alternative) to https://…. |
| config/gwosc.osgstorage.org.config | Updates source to https://…. |
| config/gluex.osgstorage.org.config | Updates source entries to https://…. |
| config/et-gw.osgstorage.org.config | Updates source to https://…. |
| config/dune.osgstorage.org.config | Updates source (and commented alternatives) to https://…. |
| config/des.osgstorage.org.config | Updates source (and commented alternative) to https://…. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Convert every remote file operation in
cvmfs-syncfrom theXRootD.clientlibrary to WebDAV (HTTPS), using thewebdav4library (httpx-based). This covers directory listing, file reading, and metadata.Why
All target repositories are globally read-only and already serve WebDAV over HTTPS on the same host/port, so no authentication is required. Moving to WebDAV drops the
xrootd-pythondependency.Changes
bin/cvmfs_syncimport XRootD.client; addwebdav4+xml.etree.propfind_dir(): oneDepth: 1PROPFIND per directory (same request count as the olddirlist), parsed by XML local-name since servers vary on namespace prefixes. Returns name / is_dir / size / executable.executableproperty (T/F), falling back to0644when absent.process_download_file(): streams the file via an httpx GET in 1 MB chunks into the existingcvmfs_swissknife graftpipe — all deadline checks, EPIPE handling, child cleanup, and finalchmodpreserved.lookup_dataserver(): HTTP redirects (redirector → data server) are followed transparently by httpx.uberftpchecksum path.config/*.config— rewritesource =URLs fromroot://host:port/pathtohttps://host:port/path(same host/port).update-scripts/cvmfs-sync-driver— dropgridftp_sourcehandling.config/cvmfs-sync.spec—Requires: python3-webdav4instead ofxrootd-python; update user description text.Verification
Tested against the live public origin
pelican-osdf-public.tempest.uchicago.edu:8443:.siffiles flagged executable).process_diryields correct(relpath, size, executable)tuples.process_download_filestreamed 640 B and 15 KB files end-to-end through a stand-incvmfs_swissknife; byte counts matched and modes applied correctly (0644/0755).Reviewer notes
python3-webdav4/python3-httpxmay not be in base EL repos — they may need EPEL, pip, or a bundled venv.stashredirector.fnal.govandstash-origin.icecube.wisc.eduhad no explicit port underroot://(xrootd default 1094) and now default to HTTPS 443. Worth confirming those serve WebDAV on 443, or adding an explicit port.🤖 Generated with Claude Code