Summary
Track a SeaweedFS S3 compatibility gap for conditional stat and read on a missing object. When If-Match contains a valid ETag obtained from another object, or when If-Unmodified-Since is set, Amazon S3 preserves missing-object semantics while SeaweedFS returns 412 PreconditionFailed.
This is a SeaweedFS S3 parity issue, not an OpenDAL S3 capability limitation.
Verified behavior
Reproduced with AWS CLI requests against SeaweedFS 4.40 and the latest release, 4.44. The If-Match condition used a valid ETag returned after creating another object in the same bucket.
| Backend |
Version |
HEAD missing object |
GET missing object |
| AWS S3 |
live service, OpenDAL behavior CI |
NotFound |
NotFound |
| SeaweedFS |
4.40 |
412 PreconditionFailed |
412 PreconditionFailed |
| SeaweedFS |
4.44 |
412 PreconditionFailed |
412 PreconditionFailed |
Both SeaweedFS versions return 404 / NoSuchKey for the same missing object when no conditional header is present. SeaweedFS master still explicitly maps a missing entry with If-Match or If-Unmodified-Since to ErrPreconditionFailed.
Upstream report: seaweedfs/seaweedfs#10984
OpenDAL handling
OpenDAL's portable stat/read contract preserves NotFound when the target does not exist, including when if_match or if_unmodified_since is set. The S3 backend satisfies this contract against the live AWS service and should continue advertising these capabilities.
Until SeaweedFS matches AWS S3, its behavior-test configuration should override only these fixture capabilities:
stat_with_if_match=false
stat_with_if_unmodified_since=false
read_with_if_match=false
read_with_if_unmodified_since=false
Do not disable the S3 backend capabilities globally. Do not add a client-side existence probe: it would add another request and introduce a time-of-check/time-of-use race.
Current override:
|
OPENDAL_TEST_CAPABILITY_OVERRIDES=stat_with_version=false,read_with_version=false,delete_with_version=false,list_with_versions=false,list_with_deleted=false,copy_with_source_version=false,restore=false,restore_with_version=false,restore_with_if_not_exists=false,write_can_append=false,stat_with_if_match=false,stat_with_if_unmodified_since=false,read_with_if_match=false,read_with_if_unmodified_since=false |
Completion criteria
Related to #8168 and #8172.
AI assisted with actual-service reproduction, source verification, and drafting. The contributor directed the scope and conclusion.
Summary
Track a SeaweedFS S3 compatibility gap for conditional stat and read on a missing object. When
If-Matchcontains a valid ETag obtained from another object, or whenIf-Unmodified-Sinceis set, Amazon S3 preserves missing-object semantics while SeaweedFS returns412 PreconditionFailed.This is a SeaweedFS S3 parity issue, not an OpenDAL S3 capability limitation.
Verified behavior
Reproduced with AWS CLI requests against SeaweedFS 4.40 and the latest release, 4.44. The
If-Matchcondition used a valid ETag returned after creating another object in the same bucket.NotFoundNotFound412 PreconditionFailed412 PreconditionFailed412 PreconditionFailed412 PreconditionFailedBoth SeaweedFS versions return
404/NoSuchKeyfor the same missing object when no conditional header is present. SeaweedFSmasterstill explicitly maps a missing entry withIf-MatchorIf-Unmodified-SincetoErrPreconditionFailed.Upstream report: seaweedfs/seaweedfs#10984
OpenDAL handling
OpenDAL's portable stat/read contract preserves
NotFoundwhen the target does not exist, including whenif_matchorif_unmodified_sinceis set. The S3 backend satisfies this contract against the live AWS service and should continue advertising these capabilities.Until SeaweedFS matches AWS S3, its behavior-test configuration should override only these fixture capabilities:
Do not disable the S3 backend capabilities globally. Do not add a client-side existence probe: it would add another request and introduce a time-of-check/time-of-use race.
Current override:
opendal/.github/services/s3/seaweedfs_s3/action.yml
Line 38 in 844ef59
Completion criteria
If-MatchandIf-Unmodified-Since.Related to #8168 and #8172.
AI assisted with actual-service reproduction, source verification, and drafting. The contributor directed the scope and conclusion.