From 97956e376e624d3276e418f89577d8229ff5a280 Mon Sep 17 00:00:00 2001 From: Martin Dimitrov Date: Sat, 11 Oct 2025 15:16:49 -0700 Subject: [PATCH] add polling lock, and reduce inner handler timeout --- packages/doorman-api/src/common/DoormanHandler.ts | 2 +- .../doorman-client/src/functions/buzzer-activated.ts | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/doorman-api/src/common/DoormanHandler.ts b/packages/doorman-api/src/common/DoormanHandler.ts index 7190b29..ab6bf7c 100644 --- a/packages/doorman-api/src/common/DoormanHandler.ts +++ b/packages/doorman-api/src/common/DoormanHandler.ts @@ -64,7 +64,7 @@ const FALLBACK_CALLBACK: CallbackResult = [null, REJECT_RESPONSE]; const MINIMUM_MS_TO_SEND_RESPONSE: number = 250; const FUNCTION_MAXIMUM_DURATION_MS: number = 10_000; -const INNER_HANDLER_MAXIMUM_DURATION_MS: number = 9_000; +const INNER_HANDLER_MAXIMUM_DURATION_MS: number = 8_750; /** * A decorator for twilio handlers. It provides a metrics registry and diff --git a/packages/doorman-client/src/functions/buzzer-activated.ts b/packages/doorman-client/src/functions/buzzer-activated.ts index 5c10752..85277e6 100644 --- a/packages/doorman-client/src/functions/buzzer-activated.ts +++ b/packages/doorman-client/src/functions/buzzer-activated.ts @@ -78,6 +78,8 @@ export const handler: ServerlessFunctionSignature((resolve, reject) => { intervals.push(setInterval(() => { getMetricFromRegistry(metricsRegistry, BuzzerActivatedMetrics.POLL_ATTEMPTS) @@ -86,12 +88,20 @@ export const handler: ServerlessFunctionSignature(metricsRegistry, BuzzerActivatedMetrics.POLL_LATENCY) .startTimer({ door: config.door }); + + // prevent multiple polling at once + if (pollLock) { + return; + } + + pollLock = true; fetch(context.DOORMAN_URL + `/api/door/status?door=${config.door}`) .then(res => res.json()) .then(async (rawBody) => { let body = rawBody as StatusResponse; recordPollLatency(); if (body?.status === DoorStatus.OPEN) { + pollLock = false; clearInterval(intervals[0]); const twiml = doorOpenTwiml(config); @@ -112,7 +122,7 @@ export const handler: ServerlessFunctionSignature console.log(invokeId + err)); - }, 1250)); + }, 400)); }); const gracefulFallbackPromise = new Promise((resolve, reject) => {