Merge pull request #1068 from murgatroid99/grpc-js_pick_first_state_change

grpc-js: pick first: remove reference and go idle after disconnect
This commit is contained in:
Michael Lumish 2019-10-07 15:08:26 -07:00 committed by GitHub
commit af5589be5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 3 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@grpc/grpc-js",
"version": "0.6.5",
"version": "0.6.6",
"description": "gRPC Library for Node - pure JS implementation",
"homepage": "https://grpc.io/",
"repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js",

View File

@ -184,6 +184,7 @@ export class PickFirstLoadBalancer implements LoadBalancer {
newState: ConnectivityState
) => {
if (newState !== ConnectivityState.READY) {
this.currentPick = null;
subchannel.unref();
subchannel.removeConnectivityStateListener(
this.pickedSubchannelStateListener
@ -203,8 +204,11 @@ export class PickFirstLoadBalancer implements LoadBalancer {
this.updateState(newLBState, new QueuePicker(this));
}
} else {
this.connectToAddressList();
this.channelControlHelper.requestReresolution();
/* We don't need to backoff here because this only happens if a
* subchannel successfully connects then disconnects, so it will not
* create a loop of attempting to connect to an unreachable backend
*/
this.updateState(ConnectivityState.IDLE, new QueuePicker(this));
}
}
};
@ -348,6 +352,7 @@ export class PickFirstLoadBalancer implements LoadBalancer {
subchannel.startConnecting();
}
if (this.currentState === ConnectivityState.IDLE) {
this.channelControlHelper.requestReresolution();
if (this.latestAddressList.length > 0) {
this.connectToAddressList();
}