From d510a4d3e8a76a67f4b6ef1a1287c1a308ee3c38 Mon Sep 17 00:00:00 2001 From: douglaseel Date: Fri, 22 Jul 2022 16:54:10 -0300 Subject: [PATCH] Avoiding unnecessary peer connection renegotiation in consumer resume/pause methods (#212) Avoid calling handler methods if there is no need --- src/Consumer.ts | 14 ++++++++++++++ src/Transport.ts | 50 ++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/src/Consumer.ts b/src/Consumer.ts index 74f0a305..03ee32dd 100644 --- a/src/Consumer.ts +++ b/src/Consumer.ts @@ -260,6 +260,13 @@ export class Consumer extends EnhancedEventEmitter return; } + if (this._paused) + { + logger.debug('pause() | Consumer is already paused'); + + return; + } + this._paused = true; this._track.enabled = false; @@ -283,6 +290,13 @@ export class Consumer extends EnhancedEventEmitter return; } + if (!this._paused) + { + logger.debug('resume() | Consumer is already resumed'); + + return; + } + this._paused = false; this._track.enabled = true; diff --git a/src/Transport.ts b/src/Transport.ts index f2392156..f0220f91 100644 --- a/src/Transport.ts +++ b/src/Transport.ts @@ -830,6 +830,13 @@ export class Transport extends EnhancedEventEmitter this._awaitQueue.push( async () => { + if (this._pendingConsumerTasks.length === 0) + { + logger.debug('_createPendingConsumers() | there is no Consumer to be created'); + + return; + } + const pendingConsumerTasks = [ ...this._pendingConsumerTasks ]; // Clear pending Consumer tasks. @@ -923,12 +930,12 @@ export class Transport extends EnhancedEventEmitter error); } } - - this._consumerCreationInProgress = false; }, 'transport._createPendingConsumers()') .then(() => { + this._consumerCreationInProgress = false; + // There are pending Consumer tasks, enqueue their creation. if (this._pendingConsumerTasks.length > 0) { @@ -946,6 +953,13 @@ export class Transport extends EnhancedEventEmitter this._awaitQueue.push( async () => { + if (this._pendingPauseConsumers.size === 0) + { + logger.debug('_pausePendingConsumers() | there is no Consumer to be paused'); + + return; + } + const pendingPauseConsumers = Array.from(this._pendingPauseConsumers.values()); // Clear pending pause Consumer map. @@ -953,20 +967,21 @@ export class Transport extends EnhancedEventEmitter try { - await this._handler.pauseReceiving( - pendingPauseConsumers.map((consumer) => consumer.localId) - ); + const localIds = pendingPauseConsumers + .map((consumer) => consumer.localId); + + await this._handler.pauseReceiving(localIds); } catch (error) { logger.error('_pausePendingConsumers() | failed to pause Consumers:', error); } - - this._consumerPauseInProgress = false; }, 'transport._pausePendingConsumers') .then(() => { + this._consumerPauseInProgress = false; + // There are pending Consumers to be paused, do it. if (this._pendingPauseConsumers.size > 0) { @@ -984,6 +999,13 @@ export class Transport extends EnhancedEventEmitter this._awaitQueue.push( async () => { + if (this._pendingResumeConsumers.size === 0) + { + logger.debug('_resumePendingConsumers() | there is no Consumer to be resumed'); + + return; + } + const pendingResumeConsumers = Array.from(this._pendingResumeConsumers.values()); // Clear pending resume Consumer map. @@ -991,9 +1013,10 @@ export class Transport extends EnhancedEventEmitter try { - await this._handler.resumeReceiving( - pendingResumeConsumers.map((consumer) => consumer.localId) - ); + const localIds = pendingResumeConsumers + .map((consumer) => consumer.localId); + + await this._handler.resumeReceiving(localIds); } catch (error) { @@ -1022,6 +1045,13 @@ export class Transport extends EnhancedEventEmitter this._awaitQueue.push( async () => { + if (this._pendingCloseConsumers.size === 0) + { + logger.debug('_closePendingConsumers() | there is no Consumer to be closed'); + + return; + } + const pendingCloseConsumers = Array.from(this._pendingCloseConsumers.values()); // Clear pending close Consumer map.