You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat(rs-dapi-client): ban a node per (address, method) instead of for every method #5567
rs-dapi-client bans a node by address, for every method. Since #3875 an UNIMPLEMENTED answer bans the node and retries elsewhere. But UNIMPLEMENTED is also returned on purpose for endpoints a healthy node does not serve: Drive's broadcast_state_transition, wait_for_state_transition_result and get_consensus_params, any rs-dapi MethodNotFound, and, during a rolling upgrade, a new RPC on nodes still running the previous release. One such call bans an otherwise healthy node for all methods for the whole ban window.
Where
packages/rs-dapi-client/src/transport/grpc.rs: the Unimplemented arm of the ban decision (TODO(per-method-ban)).
packages/rs-dapi-client/src/address_list.rs and dapi_client.rs: ban state, live-address selection and ban_info.
Suggested fix
Keep ban windows per (address, method): per-method windows in AddressStatus, get_live_address(method), and the sticky active set filtered by method. Bans that mean the node is unhealthy (transport failures) stay address-wide. This changes the public ban_info shape. Rough size: 300–500 lines plus tests.
Related: #3695 (ban policy per error class), #5561 (the SDK stops sending requests the network cannot serve yet, which removes the rollout case but not the deliberate UNIMPLEMENTED endpoints).
Source: the protocol version 14 feature-gating work for 5.0.0-rc.9, where per-method bans were deferred to 5.1.
Activity