From a23f739e5f3ef51912976d8a6deceb5f2c949434 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 2 Oct 2019 15:18:40 -0700 Subject: [PATCH] grpc-js: exitIdle asynchronously in QueuePicker, only act in exitIdle if IDLE --- packages/grpc-js/package.json | 2 +- packages/grpc-js/src/picker.ts | 4 +++- packages/grpc-js/src/resolving-load-balancer.ts | 12 +++++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/grpc-js/package.json b/packages/grpc-js/package.json index ab6ff30d..fac20634 100644 --- a/packages/grpc-js/package.json +++ b/packages/grpc-js/package.json @@ -1,6 +1,6 @@ { "name": "@grpc/grpc-js", - "version": "0.6.3", + "version": "0.6.4", "description": "gRPC Library for Node - pure JS implementation", "homepage": "https://grpc.io/", "repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js", diff --git a/packages/grpc-js/src/picker.ts b/packages/grpc-js/src/picker.ts index 94b8fbe2..d908f026 100644 --- a/packages/grpc-js/src/picker.ts +++ b/packages/grpc-js/src/picker.ts @@ -113,7 +113,9 @@ export class QueuePicker { pick(pickArgs: PickArgs): QueuePickResult { if (!this.calledExitIdle) { - this.loadBalancer.exitIdle(); + process.nextTick(() => { + this.loadBalancer.exitIdle(); + }); this.calledExitIdle = true; } return { diff --git a/packages/grpc-js/src/resolving-load-balancer.ts b/packages/grpc-js/src/resolving-load-balancer.ts index 12f1b3b7..16d72539 100644 --- a/packages/grpc-js/src/resolving-load-balancer.ts +++ b/packages/grpc-js/src/resolving-load-balancer.ts @@ -331,14 +331,16 @@ export class ResolvingLoadBalancer implements LoadBalancer { } exitIdle() { - this.innerResolver.updateResolution(); if (this.innerLoadBalancer !== null) { this.innerLoadBalancer.exitIdle(); } - this.channelControlHelper.updateState( - ConnectivityState.CONNECTING, - new QueuePicker(this) - ); + if (this.currentState === ConnectivityState.IDLE) { + this.innerResolver.updateResolution(); + this.updateState( + ConnectivityState.CONNECTING, + new QueuePicker(this) + ); + } } updateAddressList(