diff --git a/packages/server/src/utilities/fileSystem/index.js b/packages/server/src/utilities/fileSystem/index.js index 8a02afc5b3..e2a76c49a1 100644 --- a/packages/server/src/utilities/fileSystem/index.js +++ b/packages/server/src/utilities/fileSystem/index.js @@ -2,7 +2,11 @@ const { budibaseTempDir } = require("../budibaseDir") const fs = require("fs") const { join } = require("path") const uuid = require("uuid/v4") -const { doWithDB } = require("@budibase/backend-core/db") +const { + doWithDB, + dangerousGetDB, + closeDB, +} = require("@budibase/backend-core/db") const { ObjectStoreBuckets } = require("../../constants") const { upload, @@ -151,14 +155,18 @@ exports.streamBackup = async appId => { * @return {*} either a readable stream or a string */ exports.exportDB = async (dbName, { stream, filter, exportName } = {}) => { - return doWithDB(dbName, async db => { - // Stream the dump if required - if (stream) { - const memStream = new MemoryStream() - db.dump(memStream, { filter }) - return memStream - } + // streaming a DB dump is a bit more complicated, can't close DB + if (stream) { + const db = dangerousGetDB(dbName) + const memStream = new MemoryStream() + memStream.on("end", async () => { + await closeDB(db) + }) + db.dump(memStream, { filter }) + return memStream + } + return doWithDB(dbName, async db => { // Write the dump to file if required if (exportName) { const path = join(budibaseTempDir(), exportName)