From b90fdec05b211c6526006e8944126bfb8cf7eca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Ferna=CC=81ndez=20Haro?= Date: Thu, 1 Apr 2021 19:25:21 +0200 Subject: [PATCH] Fix some self-review notes --- .../event_based_telemetry_service.test.ts | 2 +- .../event_based_telemetry_service.ts | 2 +- .../server/event_based_telemetry/leaky_bucket.ts | 12 +++++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/plugins/telemetry/server/event_based_telemetry/event_based_telemetry_service.test.ts b/src/plugins/telemetry/server/event_based_telemetry/event_based_telemetry_service.test.ts index 4e652586aafe06..cd8f014bf129f2 100644 --- a/src/plugins/telemetry/server/event_based_telemetry/event_based_telemetry_service.test.ts +++ b/src/plugins/telemetry/server/event_based_telemetry/event_based_telemetry_service.test.ts @@ -123,7 +123,7 @@ describe('EventBasedTelemetryService', () => { test: { type: 'keyword', _meta: { description: 'Always OK because tests never fail' } }, }, }) - ).toThrowError('Channels can only be lifecycle step.'); + ).toThrowError('Channels can only be registered during the setup lifecycle step.'); // Checking the validator is registered for the channel expect( diff --git a/src/plugins/telemetry/server/event_based_telemetry/event_based_telemetry_service.ts b/src/plugins/telemetry/server/event_based_telemetry/event_based_telemetry_service.ts index 2e44dc6050c6b4..932d394d479397 100644 --- a/src/plugins/telemetry/server/event_based_telemetry/event_based_telemetry_service.ts +++ b/src/plugins/telemetry/server/event_based_telemetry/event_based_telemetry_service.ts @@ -59,7 +59,7 @@ export class EventBasedTelemetryService { public registerChannel(pluginName: string, channelOptions: EventChannelOptions) { if (this.started) { - throw new Error(`Channels can only be lifecycle step.`); + throw new Error(`Channels can only be registered during the setup lifecycle step.`); } const { name: channelName, schema, quotaPercentage } = channelOptions; this.logger.debug(`Registering channel "${channelName}" from plugin "${pluginName}"`); diff --git a/src/plugins/telemetry/server/event_based_telemetry/leaky_bucket.ts b/src/plugins/telemetry/server/event_based_telemetry/leaky_bucket.ts index 1e039097870455..2d21e5fd200ec1 100644 --- a/src/plugins/telemetry/server/event_based_telemetry/leaky_bucket.ts +++ b/src/plugins/telemetry/server/event_based_telemetry/leaky_bucket.ts @@ -76,14 +76,20 @@ export class LeakyBucket { private async sendIfFull(sender: HTTPSender) { if (this.isFullQueue()) { - // To don't go over our "threshold bytes per second", we need to wait 1s before consuming from queues again. - // Doing a Promise.all because we don't want to add the sending time to the max_frequency_of_requests wait. - await Promise.all([ + // To don't go over our "threshold bytes per second", we need to wait + // {max_frequency_of_requests} before consuming from queues again. + // Using Promise.allSettled because we don't want to add the sending + // time to the {max_frequency_of_requests} wait, but we still want to wait if we fail to send. + const [sendResults] = await Promise.allSettled([ this.send(sender), new Promise((resolve) => setTimeout(resolve, this.config.max_frequency_of_requests.asMilliseconds()) ), ]); + + if (sendResults.status === 'rejected') { + throw sendResults.reason; + } } }