- Replication now uses CreateMultipartUpload/UploadPart/CompleteMultipartUpload
for objects above REPLICATION_STREAMING_THRESHOLD_BYTES, with adaptive part
size (max(8 MiB, size/10000)) and 4 concurrent part uploads. Previously a
single put_object was used regardless of size, which combined with the AWS
SDK read_timeout capped every transfer at the timeout (default 30s) and
made replication of any object above ~bandwidth*30s impossible.
- REPLICATION_READ_TIMEOUT_SECONDS default raised 30 -> 120 and documented as
per-part / per-attempt rather than end-to-end.
- Added background healer worker that auto-retries persisted replication
failures with exponential backoff (60s..3600s) capped at
REPLICATION_HEALER_MAX_ATTEMPTS attempts. Configurable via
REPLICATION_HEALER_ENABLED / REPLICATION_HEALER_INTERVAL_SECONDS /
REPLICATION_HEALER_MAX_ATTEMPTS.
- Source objects now carry __replication_status__ (PENDING/COMPLETED/FAILED)
metadata, surfaced as the x-amz-replication-status response header on
GetObject and HeadObject.