Skip to content

Conversation

murgatroid99
Copy link
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