Skip to content

grpc-js: Fix bugs in pick first LB policy and channel subchannel wrapper#2369

Merged
murgatroid99 merged 1 commit intogrpc:@grpc/grpc-js@1.8.xfrom
murgatroid99:grpc-js_pick_first_fix
Feb 22, 2023
Merged

grpc-js: Fix bugs in pick first LB policy and channel subchannel wrapper#2369
murgatroid99 merged 1 commit intogrpc:@grpc/grpc-js@1.8.xfrom
murgatroid99:grpc-js_pick_first_fix

Conversation

@murgatroid99
Copy link
Copy Markdown
Member

This fixes #2368. The change in #2363 caused the pick first LB policy to own SubchannelWrapper objects as opposed to Subchannel objects for a first time. This triggered a bug that existed since the introduction of subchannel wrappers, where the LB policy would perform an equality test between two subchannel interface objects without handling the case where one is a wrapper. The calls to getRealSubchannel fix that. This bug was not previously triggered because the only previous SubchannelWrapper implementation was for the outlier detection LB policy, and it makes no sense to use that LB policy with pick first.

In addition, testing this also revealed an older bug that has existed since the introduction of SubchannelAddress objects. The LB policy currently performs a naive equality check between two of them, which is always false.

Finally, the ChannelSubchannelWrapper class's subchannel connectivity state listener was written as though calls to addConnectivityStateListener and removeConnectivityStateListener would be intercepted, but they are not, so I removed that code and added code to remove that listener when the wrapper is discarded.

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.

3 participants