From f35779f0ef146d3a87889e2b501dd1bb5406a7da Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Thu, 18 Dec 2025 00:40:23 +0500 Subject: [PATCH] Cleanup rollback (#10304) Signed-off-by: Denis Bykhov --- common/scripts/version.txt | 2 +- models/process/src/index.ts | 2 +- models/process/src/migration.ts | 25 +++++++++++++++++++++++-- services/process/src/main.ts | 3 ++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/common/scripts/version.txt b/common/scripts/version.txt index 865098066d..94d2e3c334 100644 --- a/common/scripts/version.txt +++ b/common/scripts/version.txt @@ -1 +1 @@ -"0.7.312" +"0.7.320" diff --git a/models/process/src/index.ts b/models/process/src/index.ts index 61a2f5b4c2..b575769d4e 100644 --- a/models/process/src/index.ts +++ b/models/process/src/index.ts @@ -79,7 +79,7 @@ import { definePermissions } from './permission' import process from './plugin' import { defineTriggers } from './triggers' -const DOMAIN_PROCESS = 'process' as Domain +export const DOMAIN_PROCESS = 'process' as Domain const DOMAIN_PROCESS_LOG = 'process-log' as Domain @Model(process.class.Process, core.class.Doc, DOMAIN_MODEL) diff --git a/models/process/src/migration.ts b/models/process/src/migration.ts index 492f9a8ce5..8378e5c45b 100644 --- a/models/process/src/migration.ts +++ b/models/process/src/migration.ts @@ -18,14 +18,23 @@ import { type MigrateOperation, type MigrationClient, type MigrationUpgradeClient, + tryMigrate, tryUpgrade } from '@hcengineering/model' import process, { type State, type Step } from '@hcengineering/process' import { makeRank } from '@hcengineering/rank' -import { processId } from '.' +import { DOMAIN_PROCESS, processId } from '.' export const processOperation: MigrateOperation = { - async migrate (client: MigrationClient, mode): Promise {}, + async migrate (client: MigrationClient, mode): Promise { + await tryMigrate(mode, client, processId, [ + { + state: 'cleanup-rollback', + mode: 'upgrade', + func: cleanupRollback + } + ]) + }, async upgrade (state: Map>, client: () => Promise, mode): Promise { await tryUpgrade(mode, state, client, processId, [ { @@ -108,3 +117,15 @@ async function migrateActionsFromStates (client: Client): Promise { } } } + +async function cleanupRollback (client: MigrationClient): Promise { + await client.update( + DOMAIN_PROCESS, + { + _class: process.class.Execution + }, + { + rollback: [] + } + ) +} diff --git a/services/process/src/main.ts b/services/process/src/main.ts index 3199fd56b1..5c8e0fe82b 100644 --- a/services/process/src/main.ts +++ b/services/process/src/main.ts @@ -342,6 +342,7 @@ async function executeTransition ( control: ProcessControl ): Promise { let nested = false + let disableRollback = false let transition: Transition | undefined = _transition while (transition !== undefined) { let deep = control.cache.get(execution._id + 'transition') ?? 0 @@ -359,7 +360,7 @@ async function executeTransition ( if (trigger === undefined) return const rollback: Tx[] = [] const triggerImpl = control.client.getHierarchy().as(trigger, serverProcess.mixin.TriggerImpl) - const disableRollback = triggerImpl?.preventRollback ?? false + disableRollback = disableRollback || (triggerImpl?.preventRollback ?? false) const triggerRollback = await getTriggerRollback(triggerImpl, control) if (triggerRollback !== undefined) { rollback.push(triggerRollback)