apache / apache/opendal

Tracking issues of presign options support across all backends

Open
#6,274 2 comments 2 reactions 0 assignees View on GitHub
core services/azblob services/cos services/obs services/oss services/s3
Dominant language
Rust
Stars
5.4k
Forks
825
Avg merge
1d 14m
Merged PRs (30d)
127

Description

# Summary

While implementing presign_xxx_options support in [#6273](https://github.com/apache/opendal/pull/6273), we discovered that several backends either ignore or only partially support key presign options such as cache_control, if_modified_since, and others. This issue will track an investigation into each presign-capable backend to determine:

- Whether these options are supported by the underlying service.
- Whether the current implementation forwards them correctly.
- Whether headers can be overridden and respected as expected.

## Status

> Note: This investigation below is not complete and may be lacking information/context across each service.

- [ ] **S3**
- Known Issues:
- Write options aren't passed to put operations

- [ ] **Azure (azblob)**
- Known Issues:
- Options ignored
- Azure requires headers embedded during SAS token generation, but reqsign lacks support for custom headers during SAS signing

- [ ] **B2**
- Known Issues:
- Options not passed to presign operations
- Some headers (e.g. Content-Type: b2/x-auto) are hardcoded, overriding input.
- Requires investigation into whether B2 accepts override headers and how to pass them.

- [ ] **COS**
- Known Issues:
- Limited write option support, Need to determine if these headers are supported and how to correctly inject them.

- [ ] **OBS**
- Known Issues:
- Limited write option support, Need to determine if these headers are supported and how to correctly inject them.

- [ ] **OSS**
- Known Issues:
- Partial support—some headers are hardcoded and not customizable.
- Needs review to identify which options are respected and how to enforce them.

## Testing Strategy

For each backend, we will investigate their presigning documentation to understand the workflow for leveraging each option in the respective operations (GET, PUT, HEAD) and ensure the options are respected. Since there are no existing tests for presign write or presign stat with any options, we can leverage a local unit test that won't be committed until this work is done. Similar to the ones in this [commit](https://github.com/apache/opendal/blob/79c76b2ce96109c7c579f804355ae6cb417ab7ca/core/tests/behavior/async_presign.rs) which helps validate that each option behaves as expected under different scenarios.

Contributor guide

Open the contributing guide

Research direction

Start with the presign behavior example in core/tests/behavior/async_presign.rs and the presign documentation for each listed backend. Compare GET, PUT, and HEAD handling of the named options and record whether each backend forwards or overrides them. Done means every listed backend has documented support findings and tests covering the supported presign options.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, azure, rust
Domain
api, backend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.