v0.15.0
Note
This release is brought to you by the Shipyard team.
Added
- Background
FindPeerlookups, the ones someguy dispatches for provider records that arrive without addresses, are now capped at 512 concurrent per instance. These lookups outlive the request that triggered them, so a client could close its connection and leave a full DHT walk running, with nothing bounding how many piled up. Measured ondelegated-ipfs.devan instance runs on the order of 20 at once, so the cap only engages far outside normal traffic. Three metrics were added to watch it:someguy_cached_router_find_peer_lookups_in_flight,someguy_cached_router_find_peer_lookups_rejected, andsomeguy_cached_router_find_peer_lookup_duration_seconds. Tune withSOMEGUY_CACHED_ADDR_BOOK_MAX_CONCURRENT_FIND_PEERS. #169 SOMEGUY_ROUTING_TIMEOUTsets how long one/routing/v1request may spend in the routers, defaulting to 25s. It has to stay below the timeout clients put on the whole request, otherwise a client gives up before someguy flushes and every record someguy resolved is lost. #169
Changed
- boxo (
main, past v0.42.0) and go-libp2p-kad-dht v0.42.1 #171 - someguy now shuts the DHT down explicitly. Its constructors stopped taking a context in go-libp2p-kad-dht v0.42.0, so cancelling the context that built them no longer stops their long-lived goroutines.
SIGTERMnow closes both the standard and accelerated clients before someguy exits. #171 /routing/v1responses no longer let a cache serve a two-day-old answer while someguy is healthy.stale-while-revalidateis now 10 minutes for responses with results and 1 minute for empty ones, which covers a background refresh.stale-if-erroronly applies when someguy is failing, so responses with results keep the 48h Amino DHT expiration window, and empty ones drop to 1 hour.max-ageis unchanged. The addresses someguy returns come from short-lived sources such as relay reservations, so a stale window measured in days handed clients addresses that had stopped working long ago. ipfs/boxo#1195
Fixed
Accept: application/x-ndjsonresponses now reach the client as each record is produced, instead of arriving in one batch at the end. Response compression was holding writes back until 200 bytes had accumulated, and a provider record is often smaller than that, so a provider someguy had already resolved sat in a buffer while it looked up the rest. Clients that give up before someguy finishes, such as Helia's delegated routing client with its 30s deadline, saw an empty result even though providers had been found. Response headers were withheld the same way, so the request appeared to hang. #169- someguy now stops its routing lookups at 25s rather than 30s, so it finishes and flushes before clients that bound the whole request at 30s walk away. Results found near the deadline now reach the client instead of being discarded with the aborted request. #169
Full Changelog: v0.14.1...v0.15.0
