Skip to content

feat(rs-dapi-client): ban a node per (address, method) instead of for every method #5567

Open

Description

@shumkov

Problem

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

  1. added this to the v5.1.0 milestone on Oct 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions