Changing how cleanup works - the cleanup is now part of the DB deletion, making sure it cannot be missed.
This commit is contained in:
parent
673211dfbb
commit
aa51db20ee
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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}`)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue