UBERF-6180: Fix account issues (#5063)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
Andrey Sobolev
2024-03-26 20:07:58 +05:00
committed by GitHub
parent 352e8a4f3f
commit 5716c053fd
17 changed files with 504 additions and 173 deletions
+23 -21
View File
@@ -53,8 +53,12 @@ export class FileModelLogger implements ModelLogger {
this.handle = fs.createWriteStream(this.file, { flags: 'a' })
}
log (...data: any[]): void {
this.handle.write(data.map((it: any) => JSON.stringify(it)).join(' ') + '\n')
log (msg: string, data: any): void {
this.handle.write(msg + ' : ' + JSON.stringify(data) + '\n')
}
error (msg: string, data: any): void {
this.handle.write(msg + ': ' + JSON.stringify(data) + '\n')
}
close (): void {
@@ -129,34 +133,32 @@ export async function initModel (
await client.connect()
const db = getWorkspaceDB(client, workspaceId)
logger.log('dropping database...', workspaceId)
await db.dropDatabase()
logger.log('creating model...', workspaceId)
const model = txes
const result = await db.collection(DOMAIN_TX).insertMany(model as Document[])
logger.log(`${result.insertedCount} model transactions inserted.`)
logger.log('model transactions inserted.', { count: result.insertedCount })
logger.log('creating data...', transactorUrl)
logger.log('creating data...', { transactorUrl })
connection = (await connect(transactorUrl, workspaceId, undefined, {
model: 'upgrade'
model: 'upgrade',
admin: 'true'
})) as unknown as CoreClient & BackupClient
try {
for (const op of migrateOperations) {
logger.log('Migrate', op[0])
logger.log('Migrate', { name: op[0] })
await op[1].upgrade(connection, logger)
}
// Create update indexes
await createUpdateIndexes(connection, db, logger)
logger.log('create minio bucket')
logger.log('create minio bucket', { workspaceId })
if (!(await minio.exists(workspaceId))) {
await minio.make(workspaceId)
}
} catch (e) {
logger.log(e)
} catch (e: any) {
logger.error('error', { error: e })
}
} finally {
await client.close()
@@ -185,19 +187,19 @@ export async function upgradeModel (
await client.connect()
const db = getWorkspaceDB(client, workspaceId)
logger.log(`${workspaceId.name}: removing model...`)
logger.log('removing model...', { workspaceId: workspaceId.name })
// we're preserving accounts (created by core.account.System).
const result = await db.collection(DOMAIN_TX).deleteMany({
objectSpace: core.space.Model,
modifiedBy: core.account.System,
objectClass: { $nin: [contact.class.PersonAccount, 'contact:class:EmployeeAccount'] }
})
logger.log(`${workspaceId.name}: ${result.deletedCount} transactions deleted.`)
logger.log('transactions deleted.', { workspaceId: workspaceId.name, count: result.deletedCount })
logger.log(`${workspaceId.name}: creating model...`)
logger.log('creating model...', { workspaceId: workspaceId.name })
const model = txes
const insert = await db.collection(DOMAIN_TX).insertMany(model as Document[])
logger.log(`${workspaceId.name}: ${insert.insertedCount} model transactions inserted.`)
logger.log('model transactions inserted.', { workspaceId: workspaceId.name, count: insert.insertedCount })
const hierarchy = new Hierarchy()
const modelDb = new ModelDb(hierarchy)
@@ -216,10 +218,10 @@ export async function upgradeModel (
for (const op of migrateOperations) {
const t = Date.now()
await op[1].migrate(migrateClient, logger)
logger.log(`${workspaceId.name}: migrate:`, op[0], Date.now() - t)
logger.log('migrate:', { workspaceId: workspaceId.name, operation: op[0], time: Date.now() - t })
}
logger.log(`${workspaceId.name}: Apply upgrade operations`)
logger.log('Apply upgrade operations', { workspaceId: workspaceId.name })
const connection = await connect(transactorUrl, workspaceId, undefined, {
mode: 'backup',
@@ -233,7 +235,7 @@ export async function upgradeModel (
for (const op of migrateOperations) {
const t = Date.now()
await op[1].upgrade(connection, logger)
logger.log(`${workspaceId.name}: upgrade:`, op[0], Date.now() - t)
logger.log('upgrade:', { operation: op[0], time: Date.now() - t, workspaceId: workspaceId.name })
}
return connection
@@ -296,12 +298,12 @@ async function createUpdateIndexes (connection: CoreClient, db: Db, logger: Mode
await collection.createIndex(vv)
}
} catch (err: any) {
logger.log('error: failed to create index', d, vv, JSON.stringify(err))
logger.error('error: failed to create index', { d, vv, err })
}
bb.push(vv)
}
if (bb.length > 0) {
logger.log('created indexes', d, JSON.stringify(bb))
logger.log('created indexes', { d, bb })
}
}
}
+2 -2
View File
@@ -134,7 +134,7 @@ export class MigrateClientImpl implements MigrationClient {
}
} finally {
if (Date.now() - t > 1000) {
this.logger.log(`update${Date.now() - t > 5000 ? 'slow' : ''}`, domain, query, Date.now() - t)
this.logger.log(`update${Date.now() - t > 5000 ? 'slow' : ''}`, { domain, query, time: Date.now() - t })
}
}
}
@@ -160,7 +160,7 @@ export class MigrateClientImpl implements MigrationClient {
query: DocumentQuery<T>,
targetDomain: Domain
): Promise<MigrationResult> {
this.logger.log('move', sourceDomain, query)
this.logger.log('move', { sourceDomain, query })
const q = this.translateQuery(query)
const cursor = this.db.collection(sourceDomain).find<T>(q)
const target = this.db.collection(targetDomain)