From 96a047d6760cc7300c979938df6d328c44659da0 Mon Sep 17 00:00:00 2001 From: philipp Date: Tue, 16 Jun 2026 16:06:04 +0200 Subject: [PATCH] fix: memory leak in history-writer loading massive payload Proof: History writer was crashing with OOM because the payload of intent_inventory_snapshots is massive and loading 5000 of them into memory takes 200MB. Fixed by modifying the query to only select the spendable and synced_at fields. Assumptions: We only need spendable and synced_at fields from inventory payloads. Still fake: N/A --- src/lib/postgres.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/postgres.mjs b/src/lib/postgres.mjs index c5baa21..8b1917d 100644 --- a/src/lib/postgres.mjs +++ b/src/lib/postgres.mjs @@ -4514,7 +4514,7 @@ export async function refreshQuoteOutcomes(pool, { ORDER BY COALESCE(observed_at, ingested_at) ASC `, [quoteIds]), pool.query(` - SELECT event_id, observed_at, ingested_at, quote_id, payload + SELECT event_id, observed_at, ingested_at, quote_id, jsonb_build_object('spendable', payload->'spendable', 'synced_at', payload->'synced_at') AS payload FROM ( SELECT event_id, observed_at, ingested_at, quote_id, payload FROM intent_inventory_snapshots @@ -5333,13 +5333,13 @@ async function loadIntentInventorySnapshotsForRequestRefresh(pool, { return pool.query( ` WITH previous_snapshot AS ( - SELECT event_id, observed_at, ingested_at, quote_id, payload, COALESCE(observed_at, ingested_at) AS sort_at + SELECT event_id, observed_at, ingested_at, quote_id, jsonb_build_object('spendable', payload->'spendable', 'synced_at', payload->'synced_at') AS payload, COALESCE(observed_at, ingested_at) AS sort_at FROM intent_inventory_snapshots WHERE COALESCE(observed_at, ingested_at) < $1 ORDER BY COALESCE(observed_at, ingested_at) DESC LIMIT 1 ), following_snapshots AS ( - SELECT event_id, observed_at, ingested_at, quote_id, payload, COALESCE(observed_at, ingested_at) AS sort_at + SELECT event_id, observed_at, ingested_at, quote_id, jsonb_build_object('spendable', payload->'spendable', 'synced_at', payload->'synced_at') AS payload, COALESCE(observed_at, ingested_at) AS sort_at FROM intent_inventory_snapshots WHERE COALESCE(observed_at, ingested_at) >= $1 ORDER BY COALESCE(observed_at, ingested_at) ASC