From f568df67670fa6d18fe62383a8280003513b3fe6 Mon Sep 17 00:00:00 2001 From: raymonddenhaan <155616759+raymonddenhaan@users.noreply.github.com> Date: Mon, 11 Mar 2024 13:57:17 +0100 Subject: [PATCH] Added check preventing duplicate workflow to update (#5060) --- .../DefaultWorkflowDefinitionStorePopulator.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowDefinitionStorePopulator.cs b/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowDefinitionStorePopulator.cs index cd9d0e3f1..ec463e4fd 100644 --- a/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowDefinitionStorePopulator.cs +++ b/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowDefinitionStorePopulator.cs @@ -7,6 +7,7 @@ using Elsa.Workflows.Management.Entities; using Elsa.Workflows.Management.Filters; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Models; +using Microsoft.Extensions.Logging; using Open.Linq.AsyncExtensions; namespace Elsa.Workflows.Runtime.Services; @@ -21,6 +22,7 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP private readonly IPayloadSerializer _payloadSerializer; private readonly ISystemClock _systemClock; private readonly IIdentityGraphService _identityGraphService; + private readonly ILogger _logger; private readonly SemaphoreSlim _semaphore = new(1, 1); /// @@ -33,7 +35,8 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP IActivitySerializer activitySerializer, IPayloadSerializer payloadSerializer, ISystemClock systemClock, - IIdentityGraphService identityGraphService) + IIdentityGraphService identityGraphService, + ILogger logger) { _workflowDefinitionProviders = workflowDefinitionProviders; _triggerIndexer = triggerIndexer; @@ -42,6 +45,7 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP _payloadSerializer = payloadSerializer; _systemClock = systemClock; _identityGraphService = identityGraphService; + _logger = logger; } /// @@ -176,10 +180,16 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP workflowDefinition.ProviderName = materializedWorkflow.ProviderName; workflowDefinition.MaterializerContext = materializerContextJson; workflowDefinition.MaterializerName = materializedWorkflow.MaterializerName; - - workflowDefinitionsToSave.Add(workflowDefinition); // Temporary measure to try and find the root cause of https://github.com/elsa-workflows/elsa-core/issues/5033 + if (existingDefinitionVersion is null + && workflowDefinitionsToSave.Any(w => w.Id == workflowDefinition.Id)) + _logger.LogError("Trying to create duplicate workflows with id {workflowId}", workflowDefinition.Id); + else + { + workflowDefinitionsToSave.Add(workflowDefinition); + } + var duplicates = workflowDefinitionsToSave.GroupBy(wd => wd.Id) .Where(g => g.Count() > 1) .Select(g => g.Key)