Raj Singh 3a355b1617 fix: add TCP connect timeout
known_addrs in PeerInfoInternal is append-only — addresses accumulate
via add_addr() and PeerList gossip but are never removed. In dynamic
environments (k8s pod restarts, DHCP, NAT traversal), this list grows
unboundedly with stale addresses.

Combined with sequential iteration in try_connect() and no TCP connect
timeout in netapp.rs, each unreachable address blocks reconnection for
the kernel's TCP SYN timeout (75-130s on Linux). With 10+ stale
addresses, worst-case reconnection exceeds 750s — a full outage for
replication_factor=3 clusters.

This patches includes a first change to fix this issue:

1. TCP connect timeout (netapp.rs): Wrap TcpStream::connect() in
   tokio::time::timeout(10s). Caps per-address attempt from 75-130s
   to 10s, reducing worst-case 10-addr reconnection from ~750s to ~100s.
2026-04-15 11:42:38 +00:00
2026-04-15 10:11:39 +00:00
2026-01-24 09:56:02 +01:00
2026-04-15 11:42:38 +00:00
2020-06-30 17:18:42 +02:00
2023-01-04 18:35:10 +01:00
2023-01-04 18:35:10 +01:00
2026-02-20 21:29:26 +00:00
2025-02-03 16:39:50 +01:00
2025-02-03 16:39:50 +01:00
2026-01-24 10:36:19 +01:00
2026-01-29 14:53:27 +01:00
2021-03-16 16:35:46 +01:00
2020-04-10 22:01:48 +02:00

Garage status-badge

Garage logo

[ Website and documentation | Binary releases | Git repository | Matrix channel ]

Garage is an S3-compatible distributed object storage service designed for self-hosting at a small-to-medium scale.

Garage is designed for storage clusters composed of nodes running at different physical locations, in order to easily provide a storage service that replicates data at these different locations and stays available even when some servers are unreachable. Garage also focuses on being lightweight, easy to operate, and highly resilient to machine failures.

Garage is built by Deuxfleurs, an experimental small-scale self hosted service provider, which has been using it in production since its first release in 2020.

Learn more on our dedicated documentation pages:

Garage is entirely free software released under the terms of the AGPLv3.

S
Description
S3-compatible object store for small self-hosted geo-distributed deployments.
Readme AGPL-3.0 52 MiB
Languages
Rust 95.1%
Shell 1.6%
Clojure 1.5%
Nix 1.1%
Python 0.5%
Other 0.2%