Added
-
Unified Cache-Control Headers: Move default Cache-Control from Envoy's catch-all route into Express middleware, eliminating duplicate headers and making data handler cache durations operator-configurable via
DEFAULT_CACHE_CONTROL_MAX_AGE_SECONDS,STABLE_CACHE_CONTROL_MAX_AGE_DAYS, and related env vars (PE-9002) -
Cache-Only Client IPs/CIDRs: New
CACHE_ONLY_CLIENT_IPS_AND_CIDRSenv var to short-circuit data retrieval requests with a 404 if the data is not already cached locally, useful for protecting upstream bandwidth from specific high-volume clients -
Client Disconnect Prometheus Metric: New
client_disconnect_totalcounter metric tracks when clients abort requests before the response completes (PE-9000) -
P2P Contiguous Data Retrieval Improvements: Major overhaul of peer data retrieval to reduce tail latency and improve cache efficiency (PE-9007)
- Hedged requests: Fires a second request to the next candidate peer after a configurable delay (
PEER_HEDGE_DELAY_MS) if no response yet; first success cancels all others, capped atPEER_MAX_HEDGED_REQUESTS - Per-peer concurrency limiter: Fail-fast counter that skips saturated peers instead of queuing, configurable via
PEER_MAX_CONCURRENT_OUTBOUND - Consistent hash ring: Routes each data ID to the same small set of "home" peers for cache locality, with weighted fallback for remaining slots; configured via
PEER_HASH_RING_VIRTUAL_NODESandPEER_HASH_RING_HOME_SET_SIZE - Decoupled candidate pool:
PEER_CANDIDATE_COUNTreplaces the oldmin(peerCount, 3)logic, giving hedging a deeper bench to draw from - Chunk peer selection via hash ring: Chunk requests are also routed through the hash ring by absolute offset for improved peer cache utilization
- Hedged requests: Fires a second request to the next candidate peer after a configurable delay (
-
Request Trace IDs: Every HTTP request gets a unique
requestIdin Winston log entries via AsyncLocalStorage, independent of OTEL. Reads or generatesX-Request-Idheaders and echoes them in responses for end-to-end request correlation (PE-8977)
Changed
- HTTP 452 for Blocked Content: Blocked content now returns HTTP 452 with a descriptive message identifying the blocked ID and the node's content policy, instead of a generic 404 Not Found
Fixed
-
HTTP 499 Only for Actual Client Disconnects: Internal data retrieval timeouts (e.g., upstream gateway timeouts) were being misidentified as client disconnects. Now checks
req.signal.abortedto confirm the client actually disconnected before returning 499 -
/tx_anchorRoute Shadowing: Move/tx_anchorroute before/txin Envoy config to prevent prefix-match shadowing that caused/tx_anchorrequests to be handled by the/txroute -
Security Audit Vulnerabilities: Bump
simple-gitto fix critical RCE viablockUnsafeOperationsPluginbypass; addmulterresolution to fix high severity DoS vulnerabilities inexpress-openapi-validator
Docker Images
| Image | Tag |
|---|---|
ghcr.io/ar-io/ar-io-core
| 92defe82acc1e7d2337bdacde1f65300503768ae
|
ghcr.io/ar-io/ar-io-envoy
| bedcb761098a2729c49bcfb3f7546151f5a6b632
|
ghcr.io/ar-io/ar-io-clickhouse-auto-import
| 4512361f3d6bdc0d8a44dd83eb796fd88804a384
|
ghcr.io/ar-io/ar-io-litestream
| be121fc0ae24a9eb7cdb2b92d01f047039b5f5e8
|
ghcr.io/ar-io/ar-io-observer
| 9356a3d5cc2ed9ac406a62c3a01450ae80ddc6c3
|