Skip to content

[core] Unify the object storage User-Agent format - #991

Open
sundapeng wants to merge 1 commit into
apache:mainfrom
sundapeng:storage-user-agent
Open

sundapeng wants to merge 1 commit into
apache:mainfrom
sundapeng:storage-user-agent

Conversation

@sundapeng

@sundapeng sundapeng commented Sep 28, 2026 •

Copy link
Copy Markdown
Member

Purpose

Object storage requests from paimon-rust carry no User-Agent, since neither opendal nor reqwest sets one, so this traffic can't be attributed in OSS access logs. The DLF access tracking info (dlf.access-tracking.extended-info) never reaches it either.

This gives object storage requests Paimon's unified User-Agent format, <module>(<transport>[;<feature>...])[ <extended>], which the REST client and the Java and Python clients adopt as well.

Brief change log

  • Every opendal backend sends paimon-rust/<version>(opendal/<version>), built from the catalog options user-agent.module, user-agent.features and user-agent.extended, which REST requests read too ([core] Unify the REST User-Agent format #992). Both versions are compile-time constants. The header is added in the shared HTTP transport, only when a request has none, after signing.
  • For OSS, fs.oss.user.agent.module/features/extended override the matching part.
  • dlf.access-tracking.extended-info, which DLF sends with the data token, is appended after the extended part.

Examples:

Backend Options User-Agent
any none paimon-rust/0.4.0(opendal/0.58.2)
any user-agent.features=Flink, user-agent.extended=vvr paimon-rust/0.4.0(opendal/0.58.2;Flink) vvr
OSS the above plus fs.oss.user.agent.features=DataFusion, on a DLF catalog with access tracking enabled paimon-rust/0.4.0(opendal/0.58.2;DataFusion) vvr tenantId/<uid> principalType/<type> userName/<name>

Related: #992 (Rust REST), apache/paimon#10306 (Java OSS), apache/paimon#10307 (Python OSS).

Tests

  • io:: unit tests: new cases for the shared options on every backend, the per-part OSS override and the tracking info, 1 of them against a local HTTP endpoint; 192 passed. Also checked on a live DLF catalog with access tracking enabled: the OSS access log shows the tracking info.
  • cargo fmt --all -- --check and cargo clippy --locked --all-targets --workspace --features fulltext,vortex -- -D warnings.

API and Format

No.

Documentation

No.

@sundapeng sundapeng changed the title [core] Send a Jindo-style User-Agent on object storage requests [core] Unify the object storage User-Agent format Sep 28, 2026
Object storage requests went out without a User-Agent. Every opendal
backend now sends Paimon's unified User-Agent format,
module(transport;features) extended, by default
paimon-rust/<version>(opendal/<version>).

The parts come from the catalog options user-agent.module,
user-agent.features and user-agent.extended, which REST requests share.
For OSS, fs.oss.user.agent.module, fs.oss.user.agent.features and
fs.oss.user.agent.extended override them part by part.
dlf.access-tracking.extended-info is appended after the extended part.
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.

1 participant