mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-11 12:17:44 +02:00
qfix: backups using pipeline (#9396)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
@@ -20,26 +20,13 @@ import core, {
|
||||
type Client as CoreClient,
|
||||
type Doc,
|
||||
DOMAIN_TX,
|
||||
type MeasureContext,
|
||||
type Ref,
|
||||
type Tx,
|
||||
type WorkspaceDataId,
|
||||
type WorkspaceIds,
|
||||
type WorkspaceInfoWithStatus,
|
||||
type WorkspaceUuid
|
||||
} from '@hcengineering/core'
|
||||
import { getMongoClient, getWorkspaceMongoDB } from '@hcengineering/mongo'
|
||||
import { createStorageBackupStorage, restore } from '@hcengineering/server-backup'
|
||||
import {
|
||||
createDummyStorageAdapter,
|
||||
type PipelineFactory,
|
||||
type StorageAdapter,
|
||||
wrapPipeline
|
||||
} from '@hcengineering/server-core'
|
||||
import { createStorageFromConfig, storageConfigFromEnv } from '@hcengineering/server-storage'
|
||||
import { connect } from '@hcengineering/server-tool'
|
||||
import { generateModelDiff, printDiff } from './mdiff'
|
||||
import { createEmptyBroadcastOps } from '@hcengineering/server-pipeline'
|
||||
|
||||
export async function diffWorkspace (mongoUrl: string, dbName: string, rawTxes: Tx[]): Promise<void> {
|
||||
const client = getMongoClient(mongoUrl)
|
||||
@@ -117,60 +104,3 @@ export async function updateField (
|
||||
await connection.close()
|
||||
}
|
||||
}
|
||||
|
||||
export async function backupRestore (
|
||||
ctx: MeasureContext,
|
||||
dbURL: string,
|
||||
bucketName: string,
|
||||
workspace: WorkspaceInfoWithStatus,
|
||||
pipelineFactoryFactory: (mongoUrl: string, storage: StorageAdapter) => PipelineFactory,
|
||||
skipDomains: string[]
|
||||
): Promise<boolean> {
|
||||
const storageEnv = process.env.STORAGE
|
||||
if (storageEnv === undefined) {
|
||||
console.error('please provide STORAGE env')
|
||||
process.exit(1)
|
||||
}
|
||||
if (bucketName.trim() === '') {
|
||||
console.error('please provide butket name env')
|
||||
process.exit(1)
|
||||
}
|
||||
const backupStorageConfig = storageConfigFromEnv(storageEnv)
|
||||
|
||||
const storageAdapter = createStorageFromConfig(backupStorageConfig.storages[0])
|
||||
|
||||
const workspaceStorage = createDummyStorageAdapter()
|
||||
const pipelineFactory = pipelineFactoryFactory(dbURL, workspaceStorage)
|
||||
|
||||
try {
|
||||
const storage = await createStorageBackupStorage(
|
||||
ctx,
|
||||
storageAdapter,
|
||||
{
|
||||
uuid: 'backup' as WorkspaceUuid,
|
||||
url: bucketName,
|
||||
dataId: bucketName as WorkspaceDataId
|
||||
},
|
||||
workspace.dataId ?? workspace.uuid
|
||||
)
|
||||
const wsUrl: WorkspaceIds = {
|
||||
uuid: workspace.uuid,
|
||||
dataId: workspace.dataId,
|
||||
url: workspace.url
|
||||
}
|
||||
const result: boolean = await ctx.with('restore', {}, (ctx) =>
|
||||
restore(ctx, '', wsUrl, storage, {
|
||||
date: -1,
|
||||
skip: new Set(skipDomains),
|
||||
recheck: false,
|
||||
storageAdapter: workspaceStorage,
|
||||
getConnection: async () => {
|
||||
return wrapPipeline(ctx, await pipelineFactory(ctx, wsUrl, createEmptyBroadcastOps(), null), wsUrl)
|
||||
}
|
||||
})
|
||||
)
|
||||
return result
|
||||
} finally {
|
||||
await storageAdapter.close()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user