From dd3183d6f095c96fd62433e3bc7a0c13b1c7f418 Mon Sep 17 00:00:00 2001 From: Howard Chung Date: Fri, 7 Feb 2025 09:00:47 +0000 Subject: [PATCH] add saverooms logging --- server/server.ts | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/server/server.ts b/server/server.ts index c359e0983..5328492da 100644 --- a/server/server.ts +++ b/server/server.ts @@ -630,27 +630,39 @@ app.use('/*splat', (_req, res) => { ); }); -function saveRooms() { +async function saveRooms() { // Unload rooms that are empty and idle // Frees up some JS memory space when process is long-running // On reconnect, we'll attempt to reload the room - rooms.forEach(async (room, key) => { - if ( - room.roster.length === 0 && - !room.vBrowser && - Number(room.lastUpdateTime) < Date.now() - 24 * 60 * 60 * 1000 - ) { - console.log('freeing room %s from memory on shard %s', key, config.SHARD); - await room.saveRoom(); - room.destroy(); - rooms.delete(key); - // Unregister the namespace to avoid dupes on reload - io._nsps.delete(key); - } else if (room.roster.length) { - room.lastUpdateTime = new Date(); - await room.saveRoom(); - } - }); + let saveCount = 0; + const start = Date.now(); + await Promise.all( + Array.from(rooms.entries()).map(async ([key, room]) => { + if ( + room.roster.length === 0 && + !room.vBrowser && + Number(room.lastUpdateTime) < Date.now() - 24 * 60 * 60 * 1000 + ) { + console.log( + 'freeing room %s from memory on shard %s', + key, + config.SHARD, + ); + await room.saveRoom(); + room.destroy(); + rooms.delete(key); + saveCount += 1; + // Unregister the namespace to avoid dupes on reload + io._nsps.delete(key); + } else if (room.roster.length) { + room.lastUpdateTime = new Date(); + await room.saveRoom(); + saveCount += 1; + } + }), + ); + const end = Date.now(); + console.log('[SAVEROOMS] %s saved in %sms', saveCount, end - start); } async function release() {