From e86dce30e322b2d3c6cdbd5221027dfe526fc4ee Mon Sep 17 00:00:00 2001 From: Dean Date: Wed, 25 May 2022 15:10:37 +0100 Subject: [PATCH 1/3] Explicitly passing requested appId when calling updateAppPackage --- packages/backend-core/src/context/index.js | 4 ++++ packages/server/src/api/controllers/application.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/backend-core/src/context/index.js b/packages/backend-core/src/context/index.js index 3abbc84596..0555556157 100644 --- a/packages/backend-core/src/context/index.js +++ b/packages/backend-core/src/context/index.js @@ -297,6 +297,10 @@ function getContextDB(key, opts) { toUseAppId = getDevelopmentAppID(appId) break } + + //If the appId is specified, override context + toUseAppId = opts?.appId ? opts?.appId : toUseAppId + db = dangerousGetDB(toUseAppId, opts) try { cls.setOnContext(key, db) diff --git a/packages/server/src/api/controllers/application.ts b/packages/server/src/api/controllers/application.ts index 2ca3c230c7..9e55964fa9 100644 --- a/packages/server/src/api/controllers/application.ts +++ b/packages/server/src/api/controllers/application.ts @@ -502,7 +502,7 @@ export const sync = async (ctx: any, next: any) => { } const updateAppPackage = async (appPackage: any, appId: any) => { - const db = getAppDB() + const db = getAppDB({ appId }) const application = await db.get(DocumentTypes.APP_METADATA) const newAppPackage = { ...application, ...appPackage } From e9554562bb1c17d879ba916dac3de18bc2c5f9c8 Mon Sep 17 00:00:00 2001 From: Dean Date: Thu, 26 May 2022 10:03:29 +0100 Subject: [PATCH 2/3] Refactored approach to ensure the request context is set appropriately --- packages/backend-core/src/context/index.js | 3 -- .../server/src/api/controllers/application.ts | 30 +++++++++++-------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/backend-core/src/context/index.js b/packages/backend-core/src/context/index.js index 0555556157..1c596e74e5 100644 --- a/packages/backend-core/src/context/index.js +++ b/packages/backend-core/src/context/index.js @@ -298,9 +298,6 @@ function getContextDB(key, opts) { break } - //If the appId is specified, override context - toUseAppId = opts?.appId ? opts?.appId : toUseAppId - db = dangerousGetDB(toUseAppId, opts) try { cls.setOnContext(key, db) diff --git a/packages/server/src/api/controllers/application.ts b/packages/server/src/api/controllers/application.ts index 9e55964fa9..b5a3217171 100644 --- a/packages/server/src/api/controllers/application.ts +++ b/packages/server/src/api/controllers/application.ts @@ -49,6 +49,7 @@ const { getAppDB, getProdAppDB, updateAppId, + doInAppContext, } = require("@budibase/backend-core/context") import { getUniqueRows } from "../../utilities/usageQuota/rows" import { quotas } from "@budibase/pro" @@ -340,6 +341,7 @@ export const update = async (ctx: any) => { const data = await updateAppPackage(ctx.request.body, ctx.params.appId) ctx.status = 200 ctx.body = data + console.log(JSON.stringify(data)) } export const updateClient = async (ctx: any) => { @@ -502,22 +504,24 @@ export const sync = async (ctx: any, next: any) => { } const updateAppPackage = async (appPackage: any, appId: any) => { - const db = getAppDB({ appId }) - const application = await db.get(DocumentTypes.APP_METADATA) + return doInAppContext(appId, async () => { + const db = getAppDB() + const application = await db.get(DocumentTypes.APP_METADATA) - const newAppPackage = { ...application, ...appPackage } - if (appPackage._rev !== application._rev) { - newAppPackage._rev = application._rev - } + const newAppPackage = { ...application, ...appPackage } + if (appPackage._rev !== application._rev) { + newAppPackage._rev = application._rev + } - // the locked by property is attached by server but generated from - // Redis, shouldn't ever store it - delete newAppPackage.lockedBy + // the locked by property is attached by server but generated from + // Redis, shouldn't ever store it + delete newAppPackage.lockedBy - const response = await db.put(newAppPackage) - // remove any cached metadata, so that it will be updated - await appCache.invalidateAppMetadata(appId) - return response + const response = await db.put(newAppPackage) + // remove any cached metadata, so that it will be updated + await appCache.invalidateAppMetadata(appId) + return response + }) } const createEmptyAppPackage = async (ctx: any, app: any) => { From 03e032e835a8fd80f59ca40a69121f16e4ebcefc Mon Sep 17 00:00:00 2001 From: Dean Date: Thu, 26 May 2022 10:14:01 +0100 Subject: [PATCH 3/3] Removed debug logging --- packages/server/src/api/controllers/application.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/server/src/api/controllers/application.ts b/packages/server/src/api/controllers/application.ts index b5a3217171..a7414a6435 100644 --- a/packages/server/src/api/controllers/application.ts +++ b/packages/server/src/api/controllers/application.ts @@ -341,7 +341,6 @@ export const update = async (ctx: any) => { const data = await updateAppPackage(ctx.request.body, ctx.params.appId) ctx.status = 200 ctx.body = data - console.log(JSON.stringify(data)) } export const updateClient = async (ctx: any) => {