From 121de85a84b7683e6c209f0d6bef56b4660ddbc9 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 11 Oct 2023 19:37:52 -0500 Subject: [PATCH] Try wrapping slow queries in transaction --- src/controllers/api/timelines.ts | 7 +++++-- src/pipeline.ts | 24 ++++++++++++++---------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/controllers/api/timelines.ts b/src/controllers/api/timelines.ts index 712f7415..f9eca145 100644 --- a/src/controllers/api/timelines.ts +++ b/src/controllers/api/timelines.ts @@ -1,3 +1,4 @@ +import { db } from '@/db.ts'; import { z } from '@/deps.ts'; import { type DittoFilter } from '@/filter.ts'; import * as mixer from '@/mixer.ts'; @@ -40,8 +41,10 @@ async function renderStatuses(c: AppContext, filters: DittoFilter<1>[]) { return c.json([]); } - const statuses = await Promise.all(events.map((event) => renderStatus(event, c.get('pubkey')))); - return paginated(c, events, statuses); + return db.transaction().execute(async () => { + const statuses = await Promise.all(events.map((event) => renderStatus(event, c.get('pubkey')))); + return paginated(c, events, statuses); + }) } export { hashtagTimelineController, homeTimelineController, publicTimelineController }; diff --git a/src/pipeline.ts b/src/pipeline.ts index 5a80b00f..be8aa300 100644 --- a/src/pipeline.ts +++ b/src/pipeline.ts @@ -1,3 +1,4 @@ +import { db } from '@/db.ts'; import { Conf } from '@/config.ts'; import * as eventsDB from '@/db/events.ts'; import { addRelays } from '@/db/relays.ts'; @@ -21,17 +22,20 @@ import type { EventData } from '@/types.ts'; */ async function handleEvent(event: Event): Promise { if (encounterEvent(event)) return; - const data = await getEventData(event); - await Promise.all([ - storeEvent(event, data), - processDeletions(event), - trackRelays(event), - trackHashtags(event), - processMedia(event, data), - streamOut(event, data), - broadcast(event, data), - ]); + await db.transaction().execute(async () => { + const data = await getEventData(event); + + await Promise.all([ + storeEvent(event, data), + processDeletions(event), + trackRelays(event), + trackHashtags(event), + processMedia(event, data), + streamOut(event, data), + broadcast(event, data), + ]); + }) } /** Tracks encountered events to skip duplicates, improving idempotency and performance. */