diff --git a/.github/workflows/test-workflows.yml b/.github/workflows/test-workflows.yml index 8ba22b590..2bb91dd06 100644 --- a/.github/workflows/test-workflows.yml +++ b/.github/workflows/test-workflows.yml @@ -73,6 +73,7 @@ jobs: env: N8N_ENCRYPTION_KEY: ${{secrets.ENCRYPTION_KEY}} SKIP_STATISTICS_EVENTS: true + DB_SQLITE_POOL_SIZE: 4 # - # name: Export credentials # if: always() diff --git a/packages/cli/src/databases/repositories/execution.repository.ts b/packages/cli/src/databases/repositories/execution.repository.ts index a8605147a..5b4e515af 100644 --- a/packages/cli/src/databases/repositories/execution.repository.ts +++ b/packages/cli/src/databases/repositories/execution.repository.ts @@ -274,23 +274,16 @@ export class ExecutionRepository extends Repository { * Insert a new execution and its execution data using a transaction. */ async createNewExecution(execution: ExecutionPayload): Promise { - return await this.manager.transaction(async (transactionManager) => { - const { data, workflowData, ...rest } = execution; - const insertResult = await transactionManager.insert(ExecutionEntity, rest); - const { id: executionId } = insertResult.identifiers[0] as { id: string }; - - const { connections, nodes, name, settings } = workflowData ?? {}; - await this.executionDataRepository.createExecutionDataForExecution( - { - executionId, - workflowData: { connections, nodes, name, settings, id: workflowData.id }, - data: stringify(data), - }, - transactionManager, - ); - - return String(executionId); + const { data, workflowData, ...rest } = execution; + const { identifiers: inserted } = await this.insert(rest); + const { id: executionId } = inserted[0] as { id: string }; + const { connections, nodes, name, settings } = workflowData ?? {}; + await this.executionDataRepository.insert({ + executionId, + workflowData: { connections, nodes, name, settings, id: workflowData.id }, + data: stringify(data), }); + return String(executionId); } async markAsCrashed(executionIds: string | string[]) { diff --git a/packages/cli/src/databases/repositories/executionData.repository.ts b/packages/cli/src/databases/repositories/executionData.repository.ts index 013453d99..5872f9888 100644 --- a/packages/cli/src/databases/repositories/executionData.repository.ts +++ b/packages/cli/src/databases/repositories/executionData.repository.ts @@ -1,32 +1,13 @@ import { Service } from 'typedi'; -import type { EntityManager } from '@n8n/typeorm'; -import type { IWorkflowBase } from 'n8n-workflow'; import { DataSource, In, Repository } from '@n8n/typeorm'; import { ExecutionData } from '../entities/ExecutionData'; -export interface CreateExecutionDataOpts extends Pick { - workflowData: Pick; -} - @Service() export class ExecutionDataRepository extends Repository { constructor(dataSource: DataSource) { super(ExecutionData, dataSource.manager); } - async createExecutionDataForExecution( - executionData: CreateExecutionDataOpts, - transactionManager: EntityManager, - ) { - const { data, executionId, workflowData } = executionData; - - return await transactionManager.insert(ExecutionData, { - executionId, - data, - workflowData, - }); - } - async findByExecutionIds(executionIds: string[]) { return await this.find({ select: ['workflowData'], diff --git a/packages/cli/test/integration/database/repositories/execution.repository.test.ts b/packages/cli/test/integration/database/repositories/execution.repository.test.ts index e777f6242..cfb897d62 100644 --- a/packages/cli/test/integration/database/repositories/execution.repository.test.ts +++ b/packages/cli/test/integration/database/repositories/execution.repository.test.ts @@ -52,34 +52,5 @@ describe('ExecutionRepository', () => { }); expect(executionData?.data).toEqual('[{"resultData":"1"},{}]'); }); - - it('should not create execution if execution data insert fails', async () => { - const executionRepo = Container.get(ExecutionRepository); - const executionDataRepo = Container.get(ExecutionDataRepository); - - const workflow = await createWorkflow({ settings: { executionOrder: 'v1' } }); - jest - .spyOn(executionDataRepo, 'createExecutionDataForExecution') - .mockRejectedValueOnce(new Error()); - - await expect( - async () => - await executionRepo.createNewExecution({ - workflowId: workflow.id, - data: { - //@ts-expect-error This is not needed for tests - resultData: {}, - }, - workflowData: workflow, - mode: 'manual', - startedAt: new Date(), - status: 'new', - finished: false, - }), - ).rejects.toThrow(); - - const executionEntities = await executionRepo.find(); - expect(executionEntities).toBeEmptyArray(); - }); }); });