1
0
Fork 0
mirror of synced 2024-09-12 23:43:09 +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, isDocument,
RowResponse, RowResponse,
RowValue, RowValue,
SQLiteDefinition,
SqlQueryBinding, SqlQueryBinding,
} from "@budibase/types" } from "@budibase/types"
import { getCouchInfo } from "./connections" import { getCouchInfo } from "./connections"
@ -22,6 +23,7 @@ import { newid } from "../../docIds/newid"
import { SQLITE_DESIGN_DOC_ID } from "../../constants" import { SQLITE_DESIGN_DOC_ID } from "../../constants"
import { DDInstrumentedDatabase } from "../instrumentation" import { DDInstrumentedDatabase } from "../instrumentation"
import { checkSlashesInUrl } from "../../helpers" import { checkSlashesInUrl } from "../../helpers"
import env from "../../environment"
const DATABASE_NOT_FOUND = "Database does not exist." const DATABASE_NOT_FOUND = "Database does not exist."
@ -349,6 +351,17 @@ export class DatabaseImpl implements Database {
async destroy() { async destroy() {
try { 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) return await this.nano().db.destroy(this.name)
} catch (err: any) { } catch (err: any) {
// didn't exist, don't worry // didn't exist, don't worry

View file

@ -109,6 +109,7 @@ const environment = {
API_ENCRYPTION_KEY: getAPIEncryptionKey(), API_ENCRYPTION_KEY: getAPIEncryptionKey(),
COUCH_DB_URL: process.env.COUCH_DB_URL || "http://localhost:4005", COUCH_DB_URL: process.env.COUCH_DB_URL || "http://localhost:4005",
COUCH_DB_SQL_URL: process.env.COUCH_DB_SQL_URL || "http://localhost:4006", 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_USERNAME: process.env.COUCH_DB_USER,
COUCH_DB_PASSWORD: process.env.COUCH_DB_PASSWORD, COUCH_DB_PASSWORD: process.env.COUCH_DB_PASSWORD,
GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID, GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,

View file

@ -589,9 +589,6 @@ async function destroyApp(ctx: UserCtx) {
} }
async function preDestroyApp(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]) const { rows } = await getUniqueRows([ctx.params.appId])
ctx.rowCount = rows.length ctx.rowCount = rows.length
} }

View file

@ -1,8 +1,4 @@
import { import { context, SQLITE_DESIGN_DOC_ID } from "@budibase/backend-core"
context,
SQLITE_DESIGN_DOC_ID,
db as dbCore,
} from "@budibase/backend-core"
import { import {
FieldType, FieldType,
RelationshipFieldMetadata, 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}`)
}
}