Skip to content

Reset configSelector on realChannel while entering IDLE state#12832

Open
kkalin68 wants to merge 2 commits into
grpc:masterfrom
kkalin68:xds-fix-channel-idle-limbo
Open

Reset configSelector on realChannel while entering IDLE state#12832
kkalin68 wants to merge 2 commits into
grpc:masterfrom
kkalin68:xds-fix-channel-idle-limbo

Conversation

@kkalin68
Copy link
Copy Markdown

@kkalin68 kkalin68 commented May 27, 2026

ManagedChannel will stuck in IDLE state when xDS control plane doesn't have a resource anymore.
The scenario is following:

  1. Channel is open for a xds resource.
  2. XdsNameResolver subscribes to the resource on xDS control plane.
  3. The resource is removed from xDS control plane for extended period of time (unhealthy for more than the idle timeout on Channel)
  4. Channel enters into TRANSIENT_FAILURE
  5. The Idle timeout triggers and Channel shutdowns XdsNameResolver and other resources. xDS watchers are removed.
  6. The resource comes back online on xDS control plane.
  7. A new GRPC call is executed targeting the channel.
  8. The channel stays in IDLE state and reports: "io.grpc.StatusRuntimeException: UNAVAILABLE: LDS resource xxxx does not exist nodeID: yyyy" because realChannel.configSelector still points to old state.
public <ReqT, RespT> ClientCall<ReqT, RespT> newCall(
        MethodDescriptor<ReqT, RespT> method, CallOptions callOptions) {
      if (configSelector.get() != INITIAL_PENDING_SELECTOR) {
        return newClientCall(method, callOptions);
      }
...

@linux-foundation-easycla
Copy link
Copy Markdown

linux-foundation-easycla Bot commented May 27, 2026

CLA Signed
The committers listed above are authorized under a signed CLA.

  • ✅ login: kkalin68 / name: Konstantin Kalin (f09b7d9)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant