grpc-js: pick first: remove reference and go idle after disconnect

This commit is contained in:
murgatroid99 2019-10-07 13:44:08 -07:00
parent 2be82c7770
commit e480a0a686
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();
}