crates/ecstore/docs/internode-transport/transport-capabilities.md
Status: design note for backend-neutral capability reporting. This document does not add a backend or transport crate.
The OSS scope is:
InternodeDataTransport adapter;tcp-http as the default backend;The OSS scope is not:
InternodeDataTransportCapabilities describes what a backend can honestly do
for RustFS internode data-plane transfers. The fields describe observable
adapter behavior without naming a specific transport implementation.
The capability report is descriptive. It does not select a backend, negotiate with peers, or weaken object correctness semantics.
| Field | Meaning |
|---|---|
streaming_read | The backend can open a remote disk reader for read_file_stream. |
streaming_write | The backend can open a remote disk writer for create_file or append_file. |
streaming_walk_dir | The backend can stream walk_dir responses. |
ordered_delivery | Bytes for each opened transfer are delivered in order. |
max_transfer_size | Optional RustFS-level cap for a single transfer. None means no additional cap beyond the backend/protocol/runtime limits. |
fallback_supported | The backend can participate in the behavior-preserving TCP fallback path. |
The default TCP/HTTP backend reports only capabilities it actually provides:
| Field | TCP/HTTP value | Reason |
|---|---|---|
streaming_read | true | HttpReader streams /rustfs/rpc/read_file_stream responses. |
streaming_write | true | HttpWriter streams /rustfs/rpc/put_file_stream request bodies. |
streaming_walk_dir | true | HttpReader streams /rustfs/rpc/walk_dir responses. |
ordered_delivery | true | Each HTTP request body or response body is consumed as an ordered byte stream. |
max_transfer_size | None | RustFS does not impose an extra per-transfer cap at the capability layer. |
fallback_supported | true | TCP/HTTP is the behavior-preserving default and fallback path. |
Any new capability field should describe observable RustFS behavior without assuming a specific transport implementation:
| Capability shape | Interpretation |
|---|---|
max_transfer_size=Some(n) | The backend has a RustFS-visible transfer size ceiling and callers must split larger transfers or use fallback behavior. |
ordered_delivery=false | The backend cannot be used behind the current stream API without an ordering or reassembly layer. |
Unsupported or mismatched capabilities must not silently change quorum, integrity verification, retry, or timeout semantics.