From b958be77b637b6ff1697c17623295501528eb72e Mon Sep 17 00:00:00 2001 From: Johann150 Date: Wed, 16 Nov 2022 20:36:22 +0100 Subject: [PATCH] fixup server: refactor meta caching fix: setting meta does not keep cache synced. fix: handle initially empty meta table. --- packages/backend/src/misc/fetch-meta.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/misc/fetch-meta.ts b/packages/backend/src/misc/fetch-meta.ts index b7fd105a9..4938cd3ec 100644 --- a/packages/backend/src/misc/fetch-meta.ts +++ b/packages/backend/src/misc/fetch-meta.ts @@ -15,22 +15,36 @@ export async function setMeta(meta: Meta): Promise { db.manager.clear(Meta); db.manager.insert(Meta, meta); + cache = meta; + unlock(); } /** * Performs the primitive database operation to fetch server configuration. + * If there is no entry yet, inserts a new one. * Writes to `cache` instead of returning. */ async function getMeta(): Promise { const unlock = await getFetchInstanceMetadataLock('localhost'); // new IDs are prioritised because multiple records may have been created due to past bugs - cache = db.manager.findOne(Meta, { + let metas = await db.manager.find(Meta, { order: { id: 'DESC', }, }); + if (metas.length === 0) { + db.manager.insert(Meta, { + id: 'x', + }); + metas = await db.manager.find(Meta, { + order: { + id: 'DESC', + }, + }); + } + cache = metas[0]; unlock(); }