This is an automated email from the ASF dual-hosted git repository.

gaborgsomogyi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new 83472155500 [FLINK-39709][s3]Update documentation for native-s3 
Implementation (#28200)
83472155500 is described below

commit 83472155500f46bbaf21f0dd716825e865dcb891
Author: Samrat <[email protected]>
AuthorDate: Thu May 21 19:24:01 2026 +0530

    [FLINK-39709][s3]Update documentation for native-s3 Implementation (#28200)
---
 flink-filesystems/flink-s3-fs-native/README.md | 59 +++++++++++++++++++-------
 1 file changed, 44 insertions(+), 15 deletions(-)

diff --git a/flink-filesystems/flink-s3-fs-native/README.md 
b/flink-filesystems/flink-s3-fs-native/README.md
index df9f58823fb..a3dc5c866c5 100644
--- a/flink-filesystems/flink-s3-fs-native/README.md
+++ b/flink-filesystems/flink-s3-fs-native/README.md
@@ -60,24 +60,45 @@ input.sinkTo(FileSink.forRowFormat(new 
Path("s3://my-bucket/output"),
 
 | Key | Default | Description |
 |-----|---------|-------------|
-| s3.access-key | (none) | AWS access key |
-| s3.secret-key | (none) | AWS secret key |
+| s3.access-key | (none) | AWS access key (fallback key: `s3.access.key`) |
+| s3.secret-key | (none) | AWS secret key (fallback key: `s3.secret.key`) |
 | s3.region | (auto-detect) | AWS region (auto-detected via AWS_REGION, 
~/.aws/config, EC2 metadata) |
 | s3.endpoint | (none) | Custom S3 endpoint (for MinIO, LocalStack, etc.) |
-| s3.path-style-access | false | Use path-style access (auto-enabled for 
custom endpoints) |
-| s3.upload.min.part.size | 5242880 | Minimum part size for multipart uploads 
(5MB) |
-| s3.upload.max.concurrent.uploads | CPU cores | Maximum concurrent uploads 
per stream |
+| s3.path-style-access | false | Use path-style access for S3 (required by 
most S3-compatible servers such as MinIO; fallback key: `s3.path.style.access`) 
|
+| s3.chunked-encoding.enabled | true | Enable chunked encoding for S3 
requests. Disable for S3-compatible servers that do not support it |
+| s3.checksum-validation.enabled | true | Enable checksum validation for S3 
requests. Disable for S3-compatible servers that do not support it |
+| s3.upload.min.part.size | 5242880 | Minimum part size for multipart uploads 
(5MB to 5GB) |
+| s3.upload.max.concurrent.uploads | CPU cores | Maximum concurrent part 
uploads per stream |
 | s3.entropy.key | (none) | Key for entropy injection in paths |
 | s3.entropy.length | 4 | Length of entropy string |
-| s3.bulk-copy.enabled | true | Enable bulk copy operations |
+| s3.bulk-copy.enabled | true | Enable bulk copy operations using 
S3TransferManager |
+| s3.bulk-copy.max-concurrent | 16 | Maximum number of concurrent copy 
operations |
+| s3.connection.max | 50 | Maximum HTTP connections in the S3 client 
connection pool. Applies to both sync (Apache HTTP) and async (Netty) clients. 
Must be ≥ `s3.bulk-copy.max-concurrent` |
 | s3.async.enabled | true | Enable async read/write with TransferManager |
 | s3.read.buffer.size | 262144 (256KB) | Read buffer size per stream (64KB - 
4MB) |
 
+### Credentials Provider
+
+| Key | Default | Description |
+|-----|---------|-------------|
+| fs.s3.aws.credentials.provider | (none) | Comma-separated list of AWS 
credentials provider class names. Providers are tried in order; the first one 
that returns credentials is used. Supports fully-qualified AWS SDK v2 class 
names (e.g. 
`software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider`) or 
simple names from the SDK auth package (e.g. `AnonymousCredentialsProvider`, 
`DefaultCredentialsProvider`). When not set, the default chain is used: 
delegation tokens → static cre [...]
+
+### Retries and Timeouts
+
+| Key | Default | Description |
+|-----|---------|-------------|
+| s3.retry.max-num-retries | 3 | Maximum retry attempts for failed S3 
requests. Uses the AWS SDK's default retry strategy (exponential backoff with 
jitter). Set to `0` to disable retries |
+| s3.connection.timeout | 60s | HTTP connection timeout for the S3 client 
(time to establish a connection) |
+| s3.socket.timeout | 60s | HTTP socket timeout for the S3 client (time to 
wait for data after connection is established) |
+| s3.connection.max-idle-time | 60s | Maximum idle time for HTTP connections 
in the connection pool |
+| s3.close.timeout | 60s | Timeout for closing the S3 filesystem (waiting for 
pending operations to complete during shutdown) |
+| s3.client.close.timeout | 30s | Timeout for closing the S3 client and 
releasing resources |
+
 ### Server-Side Encryption (SSE)
 
 | Key | Default | Description |
 |-----|---------|-------------|
-| s3.sse.type | none | Encryption type: `none`, `sse-s3` (AES256), `sse-kms` 
(AWS KMS) |
+| s3.sse.type | none | Encryption type. Accepted values: `none`, `sse-s3` or 
`aes256` (S3-managed keys), `sse-kms` or `aws:kms` (KMS-managed keys). The 
`aes256` and `aws:kms` aliases match Hadoop S3A's 
`fs.s3a.server-side-encryption-algorithm` values to ease migration |
 | s3.sse.kms.key-id | (none) | KMS key ID/ARN/alias for SSE-KMS (uses default 
aws/s3 key if not specified) |
 | s3.sse.kms.encryption-context | (none) | Encryption context key-value pairs 
for SSE-KMS. Format: `key1:value1,key2:value2`. Keys/values containing `:` must 
be quoted. |
 
@@ -108,13 +129,15 @@ Bucket names containing dots (e.g., `my.company.data`) 
are fully supported throu
 
 ### Supported Properties
 
-All global S3 configuration properties can be overridden at the bucket level:
+Only the following properties can be overridden at the bucket level. Any other 
`s3.bucket.<bucket>.<prop>` key is ignored (a warning is logged):
 
 - **Connection:** `region`, `endpoint`, `path-style-access`
 - **Credentials:** `access-key`, `secret-key`, `aws.credentials.provider`
 - **Encryption:** `sse.type`, `sse.kms.key-id`
 - **IAM Assume Role:** `assume-role.arn`, `assume-role.external-id`, 
`assume-role.session-name`, `assume-role.session-duration`
 
+Timeouts, retries, encoding/checksum flags, entropy, upload/copy settings, and 
the credentials provider chain are configured globally only.
+
 ## Server-Side Encryption (SSE)
 
 The filesystem supports server-side encryption for data at rest:
@@ -250,19 +273,23 @@ s3.assume-role.session-duration: 3600  # 1 hour
 
 ## MinIO and S3-Compatible Storage
 
-The filesystem auto-detects custom endpoints and configures appropriate 
settings:
+For S3-compatible servers (MinIO, LocalStack, Ceph RGW, etc.), set the 
endpoint plus any compatibility flags the server requires. These flags are not 
auto-detected from the endpoint value — the defaults target AWS S3 and must be 
overridden explicitly:
 
 ```yaml
 s3.access-key: minioadmin
-s3.secret-key: minioadmin  
+s3.secret-key: minioadmin
 s3.endpoint: http://localhost:9000
-s3.path-style-access: true  # Auto-enabled for custom endpoints
+
+# Required: MinIO does not support virtual-hosted-style addressing.
+s3.path-style-access: true
+
+# Required: MinIO does not support AWS chunked encoding or AWS-style
+# checksum trailers used by the SDK by default.
+s3.chunked-encoding.enabled: false
+s3.checksum-validation.enabled: false
 ```
 
-MinIO-specific optimizations are applied automatically:
-- Path-style access enabled
-- Chunked encoding disabled (compatibility)
-- Checksum validation disabled (compatibility)
+The exact subset of compatibility flags needed depends on the server and 
version — consult its documentation. The defaults in this filesystem 
(`path-style-access=false`, `chunked-encoding.enabled=true`, 
`checksum-validation.enabled=true`) are tuned for AWS S3.
 
 ## Memory Optimization for Large Files
 
@@ -395,6 +422,8 @@ s3.endpoint: http://localhost:9000
 s3.access-key: minioadmin
 s3.secret-key: minioadmin
 s3.path-style-access: true
+s3.chunked-encoding.enabled: false
+s3.checksum-validation.enabled: false
 EOF
 
 $FLINK_HOME/bin/flink run YourJob.jar

Reply via email to