Describe the bug
PR #20345 fixed S3 Outposts endpoint routing so the repository-s3 plugin can now correctly reach the Outposts S3 data plane. However, actual snapshot writes still fail with HTTP 501 "A header you provided implies functionality that is not implemented."
Root cause: AWS SDK Java v2 bundled in repository-s3 3.5.0 defaults requestChecksumCalculation to supported, which automatically appends a x-amz-checksum-crc64nvme header to all PutObject requests. S3 Outposts firmware does not implement CRC64NVME and rejects these requests with 501.
Workarounds attempted:
- Setting AWS_REQUEST_CHECKSUM_CALCULATION=when_required (env var) — no effect
- Setting -Daws.requestChecksumCalculation=when_required (JVM property) — blocked by OpenSearch security manager
Result: S3 Outposts is still not usable as a snapshot repository in OpenSearch 3.5.0 despite PR #20345 being merged.
Related component
No response
To Reproduce
-
Deploy OpenSearch 3.5.0 with repository-s3 plugin on a Kubernetes cluster running on an AWS Outpost rack.
-
Register a snapshot repository using an S3 Outposts access point ARN:
PUT /_snapshot/outposts-repo?verify=false
{
"type": "s3",
"settings": {
"bucket": "arn:aws:s3-outposts:us-east-1::outpost//accesspoint/",
"region": "us-east-1",
"base_path": "snapshots"
}
}
→ Returns {"acknowledged":true} (routing fix from #20345 works)
- Trigger any snapshot:
PUT /_snapshot/outposts-repo/test-snap?wait_for_completion=true
{
"ignore_unavailable": true,
"include_global_state": false
}
→ Fails with 501 (see error message in Additional Details below)
Expected behavior
Snapshot writes to S3 Outposts access point ARNs should succeed. The SDK should either default to a checksum algorithm supported by S3 Outposts (e.g. CRC32), or the repository-s3 plugin should expose a setting such as request_checksum_calculation to let operators override the SDK default — for example:
s3.client.default.request_checksum_calculation: when_required
Additional Details
Plugin version: repository-s3 3.5.0 (bundles AWS SDK Java v2.32.29)
Exact error message:
Unable to upload object [snapshots/meta-.dat] using a single upload
A header you provided implies functionality that is not implemented
(Service: S3, Status Code: 501, Request ID: ...)
Environment:
- OS: Bottlerocket OS 1.55.0 (aws-k8s-1.31)
- OpenSearch version: 3.5.0
- Deployment: Kubernetes (EKS on AWS Outpost rack)
- Node instances: r5.xlarge / c5.xlarge (Nitro-based)
- S3 target: S3 Outposts access point ARN
Related issues: #19897, #19900
Related PR: #20345 (introduced routing fix, but write path remains broken)
Suggested fix: Expose request_checksum_calculation as a repository-s3 client setting, defaulting to when_required for Outposts-style endpoints, or document a supported workaround.
Describe the bug
PR #20345 fixed S3 Outposts endpoint routing so the repository-s3 plugin can now correctly reach the Outposts S3 data plane. However, actual snapshot writes still fail with HTTP 501 "A header you provided implies functionality that is not implemented."
Root cause: AWS SDK Java v2 bundled in repository-s3 3.5.0 defaults requestChecksumCalculation to
supported, which automatically appends ax-amz-checksum-crc64nvmeheader to all PutObject requests. S3 Outposts firmware does not implement CRC64NVME and rejects these requests with 501.Workarounds attempted:
Result: S3 Outposts is still not usable as a snapshot repository in OpenSearch 3.5.0 despite PR #20345 being merged.
Related component
No response
To Reproduce
Deploy OpenSearch 3.5.0 with repository-s3 plugin on a Kubernetes cluster running on an AWS Outpost rack.
Register a snapshot repository using an S3 Outposts access point ARN:
PUT /_snapshot/outposts-repo?verify=false
{
"type": "s3",
"settings": {
"bucket": "arn:aws:s3-outposts:us-east-1::outpost//accesspoint/",
"region": "us-east-1",
"base_path": "snapshots"
}
}
→ Returns {"acknowledged":true} (routing fix from #20345 works)
PUT /_snapshot/outposts-repo/test-snap?wait_for_completion=true
{
"ignore_unavailable": true,
"include_global_state": false
}
→ Fails with 501 (see error message in Additional Details below)
Expected behavior
Snapshot writes to S3 Outposts access point ARNs should succeed. The SDK should either default to a checksum algorithm supported by S3 Outposts (e.g. CRC32), or the repository-s3 plugin should expose a setting such as
request_checksum_calculationto let operators override the SDK default — for example:s3.client.default.request_checksum_calculation: when_required
Additional Details
Plugin version: repository-s3 3.5.0 (bundles AWS SDK Java v2.32.29)
Exact error message:
Unable to upload object [snapshots/meta-.dat] using a single upload
A header you provided implies functionality that is not implemented
(Service: S3, Status Code: 501, Request ID: ...)
Environment:
Related issues: #19897, #19900
Related PR: #20345 (introduced routing fix, but write path remains broken)
Suggested fix: Expose request_checksum_calculation as a repository-s3 client setting, defaulting to when_required for Outposts-style endpoints, or document a supported workaround.