Skip to content

tracking: re-enable SeaweedFS conditional stat/read tests after S3 parity fix #8178

Description

@Xuanwo

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions