Skip to content

[9.1] feat (WMS): access the DiracX sandbox store directly from SandboxStoreClient - #8831

Open
chrisburr wants to merge 3 commits into
DIRACGrid:integrationfrom
chrisburr:feat/sandbox-diracx-future-client
Open

chrisburr wants to merge 3 commits into
DIRACGrid:integrationfrom
chrisburr:feat/sandbox-diracx-future-client

Conversation

@chrisburr

@chrisburr chrisburr commented Oct 19, 2026 •

Copy link
Copy Markdown
Member

Add FutureClient/SandboxStoreClient which uploads, downloads and looks up sandboxes directly against the DiracX S3 backend using presigned URLs, instead of proxying them through the SandboxStore service.

To test this in CI, the S3Mock container is replaced by SeaweedFS (as used by DiracX). S3Mock 3.12.0 does not support presigned POST uploads and does not validate presigned requests, which was hiding several bugs in the S3Gateway that are also fixed here:

  • the gateway looked up urls.get("Fields") instead of the fields of each URL, so the checksum was never stored on upload
  • boto does not add the POST fields to the policy, so S3 rejects them as "Extra input fields"
  • exists() sent a GET to a URL signed for HEAD

BEGINRELEASENOTES
*WorkloadManagement
NEW: SandboxStoreClient can access the DiracX sandbox store directly when the SandboxStore FutureClient is enabled

*DataManagement
FIX: S3Gateway presigned URLs work with S3 implementations which validate them, and store the checksum on upload
ENDRELEASENOTES

@chrisburr
chrisburr force-pushed the feat/sandbox-diracx-future-client branch from f005ba1 to c649b15 Compare October 19, 2026 11:38
Accessing an S3 storage element through the S3Gateway was broken with S3
implementations which validate presigned requests:
- the gateway looked up urls.get("Fields") instead of the fields of each URL,
  so the checksum metadata was never stored on upload
- boto does not add the Fields of generate_presigned_post to the policy, so
  once passed S3 rejected them as "Extra input fields"
- exists() sent a GET to a URL signed for HEAD, which is rejected as Forbidden
S3Mock is pinned to 3.12.0, which does not support presigned POST uploads and
does not validate credentials or signatures. Use SeaweedFS, as DiracX does,
with real credentials for the S3 storage elements. This also allows uploads
through the S3Gateway to be tested again.
…eClient

When /DiracX/FutureClientEnabled/WorkloadManagement/SandboxStore is enabled,
sandboxes are uploaded to and downloaded from the DiracX S3 backend using
presigned URLs instead of being proxied through the SandboxStore service.
Transfers are streamed to disk, retried with a jittered backoff and the
checksum embedded in the PFN is verified after download. Sandboxes which are
not stored in S3 are still downloaded through their storage element.
@chrisburr

Copy link
Copy Markdown
Member Author

Needs #8836

@chrisburr
chrisburr marked this pull request as ready for review October 19, 2026 19:00
@fstagni

fstagni commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

A documentation line should be added somewhere to state that this future client is available -- prob in DiracX.

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants