@grpc/grpc-js
Advanced tools
Comparing version 0.6.8 to 0.6.9
@@ -109,2 +109,8 @@ "use strict"; | ||
else { | ||
if (this.triedAllSubchannels && this.subchannelStateCounts[channel_1.ConnectivityState.IDLE] === this.subchannels.length) { | ||
/* If all of the subchannels are IDLE we should go back to a | ||
* basic IDLE state where there is no subchannel list to avoid | ||
* holding unused resources */ | ||
this.resetSubchannelList(); | ||
} | ||
if (this.currentPick === null) { | ||
@@ -143,18 +149,23 @@ if (this.triedAllSubchannels) { | ||
if (this.subchannels.length > 0) { | ||
let newLBState; | ||
if (this.subchannelStateCounts[channel_1.ConnectivityState.CONNECTING] > 0) { | ||
newLBState = channel_1.ConnectivityState.CONNECTING; | ||
if (this.triedAllSubchannels) { | ||
let newLBState; | ||
if (this.subchannelStateCounts[channel_1.ConnectivityState.CONNECTING] > 0) { | ||
newLBState = channel_1.ConnectivityState.CONNECTING; | ||
} | ||
else if (this.subchannelStateCounts[channel_1.ConnectivityState.TRANSIENT_FAILURE] > 0) { | ||
newLBState = channel_1.ConnectivityState.TRANSIENT_FAILURE; | ||
} | ||
else { | ||
newLBState = channel_1.ConnectivityState.IDLE; | ||
} | ||
if (newLBState === channel_1.ConnectivityState.TRANSIENT_FAILURE) { | ||
this.updateState(newLBState, new picker_1.UnavailablePicker()); | ||
} | ||
else { | ||
this.updateState(newLBState, new picker_1.QueuePicker(this)); | ||
} | ||
} | ||
else if (this.subchannelStateCounts[channel_1.ConnectivityState.TRANSIENT_FAILURE] > 0) { | ||
newLBState = channel_1.ConnectivityState.TRANSIENT_FAILURE; | ||
} | ||
else { | ||
newLBState = channel_1.ConnectivityState.IDLE; | ||
this.updateState(channel_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this)); | ||
} | ||
if (newLBState === channel_1.ConnectivityState.TRANSIENT_FAILURE) { | ||
this.updateState(newLBState, new picker_1.UnavailablePicker()); | ||
} | ||
else { | ||
this.updateState(newLBState, new picker_1.QueuePicker(this)); | ||
} | ||
} | ||
@@ -161,0 +172,0 @@ else { |
@@ -40,2 +40,3 @@ import { ChannelControlHelper, LoadBalancer } from './load-balancer'; | ||
private innerBalancerState; | ||
private innerBalancerPicker; | ||
/** | ||
@@ -66,2 +67,7 @@ * The most recent reported state of the pendingReplacementLoadBalancer. | ||
/** | ||
* Indicates whether we should attempt to resolve again after the backoff | ||
* timer runs out. | ||
*/ | ||
private continueResolving; | ||
/** | ||
* Wrapper class that behaves like a `LoadBalancer` and also handles name | ||
@@ -79,2 +85,3 @@ * resolution internally. | ||
constructor(target: string, channelControlHelper: ChannelControlHelper, defaultServiceConfig: ServiceConfig | null); | ||
private updateResolution; | ||
private updateState; | ||
@@ -81,0 +88,0 @@ /** |
@@ -78,2 +78,3 @@ "use strict"; | ||
this.innerBalancerState = channel_1.ConnectivityState.IDLE; | ||
this.innerBalancerPicker = new picker_1.UnavailablePicker(); | ||
/** | ||
@@ -91,2 +92,7 @@ * The most recent reported state of the pendingReplacementLoadBalancer. | ||
this.replacementBalancerPicker = new picker_1.UnavailablePicker(); | ||
/** | ||
* Indicates whether we should attempt to resolve again after the backoff | ||
* timer runs out. | ||
*/ | ||
this.continueResolving = false; | ||
this.updateState(channel_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this)); | ||
@@ -192,2 +198,6 @@ this.innerResolver = resolver_1.createResolver(target, { | ||
this.innerBalancerState = connectivityState; | ||
if (connectivityState === channel_1.ConnectivityState.IDLE) { | ||
picker = new picker_1.QueuePicker(this); | ||
} | ||
this.innerBalancerPicker = picker; | ||
if (connectivityState !== channel_1.ConnectivityState.READY && | ||
@@ -198,2 +208,8 @@ this.pendingReplacementLoadBalancer !== null) { | ||
else { | ||
if (connectivityState === channel_1.ConnectivityState.IDLE) { | ||
if (this.innerLoadBalancer) { | ||
this.innerLoadBalancer.destroy(); | ||
this.innerLoadBalancer = null; | ||
} | ||
} | ||
this.updateState(connectivityState, picker); | ||
@@ -208,5 +224,8 @@ } | ||
* updateResolution */ | ||
if (!this.backoffTimeout.isRunning()) { | ||
this.innerResolver.updateResolution(); | ||
if (this.backoffTimeout.isRunning()) { | ||
this.continueResolving = true; | ||
} | ||
else { | ||
this.updateResolution(); | ||
} | ||
} | ||
@@ -220,2 +239,5 @@ }, | ||
updateState: (connectivityState, picker) => { | ||
if (connectivityState === channel_1.ConnectivityState.IDLE) { | ||
picker = new picker_1.QueuePicker(this); | ||
} | ||
this.replacementBalancerState = connectivityState; | ||
@@ -226,22 +248,43 @@ this.replacementBalancerPicker = picker; | ||
} | ||
else if (connectivityState === channel_1.ConnectivityState.IDLE) { | ||
if (this.pendingReplacementLoadBalancer) { | ||
this.pendingReplacementLoadBalancer.destroy(); | ||
this.pendingReplacementLoadBalancer = null; | ||
} | ||
} | ||
}, | ||
requestReresolution: () => { | ||
if (!this.backoffTimeout.isRunning()) { | ||
/* If the backoffTimeout is running, we're still backing off from | ||
* making resolve requests, so we shouldn't make another one here. | ||
* In that case, the backoff timer callback will call | ||
* updateResolution */ | ||
this.innerResolver.updateResolution(); | ||
/* If the backoffTimeout is running, we're still backing off from | ||
* making resolve requests, so we shouldn't make another one here. | ||
* In that case, the backoff timer callback will call | ||
* updateResolution */ | ||
if (this.backoffTimeout.isRunning()) { | ||
this.continueResolving = true; | ||
} | ||
else { | ||
this.updateResolution(); | ||
} | ||
}, | ||
}; | ||
this.backoffTimeout = new backoff_timeout_1.BackoffTimeout(() => { | ||
if (this.innerLoadBalancer === null) { | ||
this.updateState(channel_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this)); | ||
if (this.continueResolving) { | ||
this.updateResolution(); | ||
this.continueResolving = false; | ||
} | ||
else { | ||
this.innerResolver.updateResolution(); | ||
if (this.innerLoadBalancer === null) { | ||
this.updateState(channel_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this)); | ||
} | ||
else { | ||
this.updateState(this.innerBalancerState, this.innerBalancerPicker); | ||
} | ||
} | ||
}); | ||
} | ||
updateResolution() { | ||
this.innerResolver.updateResolution(); | ||
if (this.innerLoadBalancer === null || this.innerBalancerState === channel_1.ConnectivityState.IDLE) { | ||
this.updateState(channel_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this)); | ||
} | ||
} | ||
updateState(connectivitystate, picker) { | ||
@@ -263,6 +306,7 @@ trace(this.target + ' ' + channel_1.ConnectivityState[this.currentState] + ' -> ' + channel_1.ConnectivityState[connectivitystate]); | ||
this.innerBalancerState = this.replacementBalancerState; | ||
this.innerBalancerPicker = this.replacementBalancerPicker; | ||
this.updateState(this.replacementBalancerState, this.replacementBalancerPicker); | ||
} | ||
handleResolutionFailure(error) { | ||
if (this.innerLoadBalancer === null) { | ||
if (this.innerLoadBalancer === null || this.innerBalancerState === channel_1.ConnectivityState.IDLE) { | ||
this.updateState(channel_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker(error)); | ||
@@ -277,3 +321,8 @@ } | ||
if (this.currentState === channel_1.ConnectivityState.IDLE) { | ||
this.innerResolver.updateResolution(); | ||
if (this.backoffTimeout.isRunning()) { | ||
this.continueResolving = true; | ||
} | ||
else { | ||
this.updateResolution(); | ||
} | ||
this.updateState(channel_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this)); | ||
@@ -280,0 +329,0 @@ } |
{ | ||
"name": "@grpc/grpc-js", | ||
"version": "0.6.8", | ||
"version": "0.6.9", | ||
"description": "gRPC Library for Node - pure JS implementation", | ||
@@ -5,0 +5,0 @@ "homepage": "https://grpc.io/", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
308649
7402