mirror of https://github.com/grpc/grpc-node.git
Merge pull request #2784 from murgatroid99/grpc-js_pick_first_reconnection_fix
grpc-js: Fix pick_first reconnecting without active calls
This commit is contained in:
commit
f8338c55c2
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@grpc/grpc-js",
|
||||
"version": "1.10.10",
|
||||
"version": "1.10.11",
|
||||
"description": "gRPC Library for Node - pure JS implementation",
|
||||
"homepage": "https://grpc.io/",
|
||||
"repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js",
|
||||
|
|
|
@ -32,7 +32,7 @@ import {
|
|||
PickResultType,
|
||||
UnavailablePicker,
|
||||
} from './picker';
|
||||
import { Endpoint, SubchannelAddress } from './subchannel-address';
|
||||
import { Endpoint, SubchannelAddress, subchannelAddressToString } from './subchannel-address';
|
||||
import * as logging from './logging';
|
||||
import { LogVerbosity } from './constants';
|
||||
import {
|
||||
|
@ -348,7 +348,6 @@ export class PickFirstLoadBalancer implements LoadBalancer {
|
|||
if (newState !== ConnectivityState.READY) {
|
||||
this.removeCurrentPick();
|
||||
this.calculateAndReportNewState();
|
||||
this.requestReresolution();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -483,6 +482,15 @@ export class PickFirstLoadBalancer implements LoadBalancer {
|
|||
subchannel: this.channelControlHelper.createSubchannel(address, {}),
|
||||
hasReportedTransientFailure: false,
|
||||
}));
|
||||
trace('connectToAddressList([' + addressList.map(address => subchannelAddressToString(address)) + '])');
|
||||
for (const { subchannel } of newChildrenList) {
|
||||
if (subchannel.getConnectivityState() === ConnectivityState.READY) {
|
||||
this.channelControlHelper.addChannelzChild(subchannel.getChannelzRef());
|
||||
subchannel.addConnectivityStateListener(this.subchannelStateListener);
|
||||
this.pickSubchannel(subchannel);
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* Ref each subchannel before resetting the list, to ensure that
|
||||
* subchannels shared between the list don't drop to 0 refs during the
|
||||
* transition. */
|
||||
|
@ -494,10 +502,6 @@ export class PickFirstLoadBalancer implements LoadBalancer {
|
|||
this.children = newChildrenList;
|
||||
for (const { subchannel } of this.children) {
|
||||
subchannel.addConnectivityStateListener(this.subchannelStateListener);
|
||||
if (subchannel.getConnectivityState() === ConnectivityState.READY) {
|
||||
this.pickSubchannel(subchannel);
|
||||
return;
|
||||
}
|
||||
}
|
||||
for (const child of this.children) {
|
||||
if (
|
||||
|
@ -527,6 +531,7 @@ export class PickFirstLoadBalancer implements LoadBalancer {
|
|||
const rawAddressList = ([] as SubchannelAddress[]).concat(
|
||||
...endpointList.map(endpoint => endpoint.addresses)
|
||||
);
|
||||
trace('updateAddressList([' + rawAddressList.map(address => subchannelAddressToString(address)) + '])');
|
||||
if (rawAddressList.length === 0) {
|
||||
throw new Error('No addresses in endpoint list passed to pick_first');
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue