1
0
Fork 0
mirror of synced 2024-08-23 05:51:29 +12:00

Changing how cleanup works - the cleanup is now part of the DB deletion, making sure it cannot be missed.

This commit is contained in:
mike12345567 2024-05-14 15:41:48 +01:00
parent 673211dfbb
commit aa51db20ee
4 changed files with 15 additions and 23 deletions

View file

@ -12,6 +12,7 @@ import {
isDocument,
RowResponse,
RowValue,
SQLiteDefinition,
SqlQueryBinding,
} from "@budibase/types"
import { getCouchInfo } from "./connections"
@ -22,6 +23,7 @@ import { newid } from "../../docIds/newid"
import { SQLITE_DESIGN_DOC_ID } from "../../constants"
import { DDInstrumentedDatabase } from "../instrumentation"
import { checkSlashesInUrl } from "../../helpers"
import env from "../../environment"
const DATABASE_NOT_FOUND = "Database does not exist."
@ -349,6 +351,17 @@ export class DatabaseImpl implements Database {
async destroy() {
try {
if (env.SQS_SEARCH_ENABLE) {
// delete the design document, then run the cleanup operation
try {
const definition = await this.get<SQLiteDefinition>(
SQLITE_DESIGN_DOC_ID
)
await this.remove(SQLITE_DESIGN_DOC_ID, definition._rev)
} finally {
await this.sqlCleanup()
}
}
return await this.nano().db.destroy(this.name)
} catch (err: any) {
// didn't exist, don't worry

View file

@ -109,6 +109,7 @@ const environment = {
API_ENCRYPTION_KEY: getAPIEncryptionKey(),
COUCH_DB_URL: process.env.COUCH_DB_URL || "http://localhost:4005",
COUCH_DB_SQL_URL: process.env.COUCH_DB_SQL_URL || "http://localhost:4006",
SQS_SEARCH_ENABLE: process.env.SQS_SEARCH_ENABLE,
COUCH_DB_USERNAME: process.env.COUCH_DB_USER,
COUCH_DB_PASSWORD: process.env.COUCH_DB_PASSWORD,
GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,

View file

@ -589,9 +589,6 @@ async function destroyApp(ctx: UserCtx) {
}
async function preDestroyApp(ctx: UserCtx) {
if (env.SQS_SEARCH_ENABLE) {
await sdk.tables.sqs.cleanupApp(ctx.params.appId)
}
const { rows } = await getUniqueRows([ctx.params.appId])
ctx.rowCount = rows.length
}

View file

@ -1,8 +1,4 @@
import {
context,
SQLITE_DESIGN_DOC_ID,
db as dbCore,
} from "@budibase/backend-core"
import { context, SQLITE_DESIGN_DOC_ID } from "@budibase/backend-core"
import {
FieldType,
RelationshipFieldMetadata,
@ -160,18 +156,3 @@ export async function removeTable(table: Table) {
}
}
}
export async function cleanupApp(appId: string) {
const db = dbCore.getDB(appId)
if (!(await db.exists())) {
throw new Error("Cleanup must be preformed before app deletion.")
}
try {
const definition = await db.get<SQLiteDefinition>(SQLITE_DESIGN_DOC_ID)
// delete the design document
await db.remove(SQLITE_DESIGN_DOC_ID, definition._rev)
await db.sqlCleanup()
} catch (err: any) {
throw new Error(`Unable to cleanup SQS files - ${err.message}`)
}
}