From 71bee556f6ff47fb800a9119ab8baceca1c3a519 Mon Sep 17 00:00:00 2001 From: Nariman Jelveh Date: Sat, 3 Jan 2026 19:28:40 -0800 Subject: [PATCH] Remove debug logs and improve query coalescing timeout (#2241) Removed unnecessary console.log statements from PuterFSProvider.js and WebServerService.js. Increased PENDING_QUERY_TTL to 3 seconds and added a timeout mechanism for coalesced queries in get_app to prevent indefinite waiting. --- extensions/puterfs/PuterFSProvider.js | 2 -- src/backend/src/helpers.js | 23 ++++++++++++++----- .../src/modules/web/WebServerService.js | 1 - 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/extensions/puterfs/PuterFSProvider.js b/extensions/puterfs/PuterFSProvider.js index 2e2526b13..c16d8da08 100644 --- a/extensions/puterfs/PuterFSProvider.js +++ b/extensions/puterfs/PuterFSProvider.js @@ -345,7 +345,6 @@ export default class PuterFSProvider { } : {}), }; - console.log('raw fsentry', raw_fsentry); const entryOp = await this.fsEntryController.insert(raw_fsentry); await entryOp.awaitDone(); @@ -668,7 +667,6 @@ export default class PuterFSProvider { * @returns {Promise} */ async write_new ({ context, parent, name, file }) { - console.log('calling write new'); const { tmp, fsentry_tmp, message, actor: inputActor, app_id, } = context.values; diff --git a/src/backend/src/helpers.js b/src/backend/src/helpers.js index 36ef53644..28cd1bc80 100644 --- a/src/backend/src/helpers.js +++ b/src/backend/src/helpers.js @@ -36,7 +36,14 @@ const tmp_provide_services = async ss => { }; // TTL for pending get_app queries (request coalescing) -const PENDING_QUERY_TTL = 2; // seconds +const PENDING_QUERY_TTL = 3; // seconds +const QUERY_TIMEOUT = 2000; // max ms to wait for a coalesced query + +// Wait for a promise, but give up after timeout +const withTimeout = (promise, ms) => Promise.race([ + promise, + new Promise((_, reject) => setTimeout(() => reject(new Error('Query timeout')), ms)) +]); async function is_empty (dir_uuid) { /** @type BaseDatabaseAccessService */ @@ -352,11 +359,15 @@ async function get_app (options) { const pendingKey = `pending_app:${queryKey}`; const pending = kv.get(pendingKey); if ( pending ) { - // Reuse the existing pending query - log.info(`coalescing query for ${queryKey}`); - const result = await pending; - // shallow clone the result - return result ? { ...result } : null; + // Wait for existing query, but don't block forever + try { + log.info(`coalescing query for ${queryKey}`); + const result = await withTimeout(pending, QUERY_TIMEOUT); + return result ? { ...result } : null; + } catch (err) { + // Timeout or error - fall through and execute query directly + log.warn(`coalesced query failed for ${queryKey}, executing direct query`); + } } // Create a new pending query diff --git a/src/backend/src/modules/web/WebServerService.js b/src/backend/src/modules/web/WebServerService.js index 502a096a1..a495c5740 100644 --- a/src/backend/src/modules/web/WebServerService.js +++ b/src/backend/src/modules/web/WebServerService.js @@ -110,7 +110,6 @@ class WebServerService extends BaseService { const services = this.services; await services.emit('start.webserver'); await services.emit('ready.webserver'); - console.log('in case you care, ready.webserver hooks are done'); } /**