From 5f47cd0aabcda49fdab6bae23ada08a611951323 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 22 Feb 2024 19:37:03 +0100 Subject: [PATCH] Implement distributed lock for registry population (#4983) * Implement distributed lock for registry population Added distributed lock in 'PopulateRegistriesHostedService' to prevent concurrent registry updates. Also implemented a semaphore in 'DefaultWorkflowDefinitionStorePopulator' to control access to shared resources during add or update operations. This change helps to ensure the integrity and consistency of the workflow registries. * Refactor dependency injection for IDistributedLockProvider * Refactor option classes to parameter classes in workflow runtime This refactoring enhances the clarity of the Elsa Workflow runtime by renaming "options" classes to "parameters" classes. The name "options" misrepresented the classes' role and created confusion, as they are used to parameterize method calls rather than to configure services. The change applies to various workflow methods and tests across the project. --- .../DynamicWorkflows/Post/Endpoint.cs | 3 +- .../ServiceProviderExtensions.cs | 5 +- .../Middleware/WorkflowsMiddleware.cs | 3 +- .../Services/HttpBookmarkProcessor.cs | 4 +- .../DispatchWorkflowRequestConsumer.cs | 5 +- .../Grains/WorkflowInstance.cs | 7 +-- .../Services/ProtoActorWorkflowRuntime.cs | 41 +++++++-------- .../WorkflowDefinitions/Execute/Endpoint.cs | 3 +- .../Contracts/IWorkflowHost.cs | 8 +-- .../Contracts/IWorkflowInbox.cs | 4 +- .../Contracts/IWorkflowRuntime.cs | 11 ++-- .../DispatchWorkflowRequestHandler.cs | 5 +- .../PopulateRegistriesHostedService.cs | 18 +++++-- .../WorkflowInboxMessageReceived.cs | 3 +- .../Options/DistributedLockingOptions.cs | 2 + .../ExecuteWorkflowParams.cs} | 4 +- .../ResumeWorkflowHostParams.cs} | 4 +- .../ResumeWorkflowRuntimeParams.cs} | 4 +- .../StartWorkflowHostParams.cs} | 4 +- .../StartWorkflowRuntimeParams.cs} | 4 +- .../WorkflowInboxMessageDeliveryParams.cs} | 4 +- ...DefaultWorkflowDefinitionStorePopulator.cs | 50 +++++++++++++------ .../Services/DefaultWorkflowInbox.cs | 7 +-- .../Services/DefaultWorkflowRuntime.cs | 43 ++++++++-------- .../Services/EventPublisher.cs | 3 +- .../Services/WorkflowHost.cs | 41 +++++++-------- test/Directory.Build.props | 1 + .../Scenarios/ServiceBus/ServiceBusTests.cs | 11 ++-- .../Break/Workflows/BreakForEachWorkflow.cs | 1 - .../Break/Workflows/BreakForWorkflow.cs | 1 - .../Break/Workflows/BreakWhileForkWorkflow.cs | 1 - .../Break/Workflows/BreakWhileWorkflow.cs | 1 - .../Activities/Finish/FinishForkedWorkflow.cs | 1 - .../Finish/FinishSequentialWorkflow.cs | 1 - .../Activities/Finish/FinishTests.cs | 1 - .../Activities/ForEach/ForEachWorkflow.cs | 1 - .../ForEach/NestedForEachWithBreakWorkflow.cs | 1 - .../Activities/Fork/BasicForkWorkflow.cs | 1 - .../Activities/Fork/JoinAnyForkWorkflow.cs | 1 - .../Activities/If/ComplexIfWorkflow.cs | 1 - .../Activities/If/IfThenWorkflow.cs | 1 - .../Sequence/NestedSequentialWorkflow.cs | 1 - .../Activities/Sequence/SequentialWorkflow.cs | 1 - .../Workflows.cs | 1 - .../Scenarios/ActivityOutputs/SumActivity.cs | 1 - .../Scenarios/ActivityOutputs/SumWorkflow.cs | 1 - .../Scenarios/Blocking/Workflows.cs | 1 - .../Workflows/BreakWhileFromForkWorkflow.cs | 1 - .../Workflows/WaitAllForkWorkflow.cs | 1 - .../Workflows/WaitAnyForkWorkflow.cs | 1 - .../CanExecute/Activities/CustomActivity.cs | 1 - .../CanExecute/Workflows/MagicWorkflow.cs | 1 - .../Scenarios/Composites/Workflows.cs | 1 - .../CompositesAndOutcomeWaitAnyTests.cs | 1 - .../CompositesPassingData/Workflows.cs | 1 - .../ExplicitJoins/ExplicitJoinWaitAnyTests.cs | 1 - .../Scenarios/FlowchartCompletion/Tests.cs | 1 - .../Activities/CustomActivity.cs | 1 - .../Workflows/FlowchartWorkflow.cs | 1 - .../ImplicitJoins/BraidedWorkflowTests.cs | 1 - .../ImplicitLoopWorkflowTests.cs | 1 - .../Workflows/BraidedWorkflow.cs | 1 - .../Workflows/ImplicitLoopWorkflow.cs | 1 - .../Incidents/IncidentStrategyTests.cs | 1 - .../Incidents/Workflows/FaultyWorkflow.cs | 1 - .../Activities/JsonObjectProducer.cs | 1 - .../Activities/ObjectProcessor.cs | 1 - .../Workflows/TestWorkflow.cs | 1 - .../Scenarios/ParentChildCompletion/Tests.cs | 1 - .../Scenarios/SetGetVariables/Workflows.cs | 1 - .../Activities/CreateVariableActivity.cs | 1 - .../Activities/ReadVariableActivity.cs | 1 - .../Workflows/SampleWorkflow.cs | 1 - .../DefaultRuntimeTests.cs | 15 ++++-- .../WorkflowCancellation/ProtoActorTests.cs | 15 +++--- .../Workflows/BulkSuspendedWorkflow.cs | 1 - .../Workflows/ResumeDispatchWorkflow.cs | 1 - .../Workflows/SimpleChildWorkflow.cs | 1 - .../Workflows/SimpleSuspendedWorkflow.cs | 1 - .../Workflows.cs | 1 - .../VariableExpressions/Tests.cs | 1 - .../Serialization/VariableTypes/Workflows.cs | 1 - 82 files changed, 193 insertions(+), 191 deletions(-) rename src/modules/Elsa.Workflows.Runtime/{Options/ExecuteWorkflowOptions.cs => Parameters/ExecuteWorkflowParams.cs} (78%) rename src/modules/Elsa.Workflows.Runtime/{Options/ResumeWorkflowHostOptions.cs => Parameters/ResumeWorkflowHostParams.cs} (93%) rename src/modules/Elsa.Workflows.Runtime/{Options/ResumeWorkflowRuntimeOptions.cs => Parameters/ResumeWorkflowRuntimeParams.cs} (86%) rename src/modules/Elsa.Workflows.Runtime/{Options/StartWorkflowHostOptions.cs => Parameters/StartWorkflowHostParams.cs} (93%) rename src/modules/Elsa.Workflows.Runtime/{Options/StartWorkflowRuntimeOptions.cs => Parameters/StartWorkflowRuntimeParams.cs} (86%) rename src/modules/Elsa.Workflows.Runtime/{Options/WorkflowInboxMessageDeliveryOptions.cs => Parameters/WorkflowInboxMessageDeliveryParams.cs} (74%) diff --git a/src/bundles/Elsa.Server.Web/Endpoints/DynamicWorkflows/Post/Endpoint.cs b/src/bundles/Elsa.Server.Web/Endpoints/DynamicWorkflows/Post/Endpoint.cs index 8e5f6b4fe..f72fb576e 100644 --- a/src/bundles/Elsa.Server.Web/Endpoints/DynamicWorkflows/Post/Endpoint.cs +++ b/src/bundles/Elsa.Server.Web/Endpoints/DynamicWorkflows/Post/Endpoint.cs @@ -3,6 +3,7 @@ using Elsa.Workflows.Activities; using Elsa.Workflows.Models; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; namespace Elsa.Server.Web.Endpoints.DynamicWorkflows.Post; @@ -31,6 +32,6 @@ public class Post(IWorkflowRegistry workflowRegistry, IWorkflowRuntime workflowR }; await workflowRegistry.RegisterAsync(workflow, ct); - await workflowRuntime.StartWorkflowAsync("DynamicWorkflow1", new StartWorkflowRuntimeOptions()); + await workflowRuntime.StartWorkflowAsync("DynamicWorkflow1", new StartWorkflowRuntimeParams()); } } \ No newline at end of file diff --git a/src/common/Elsa.Testing.Shared/ServiceProviderExtensions.cs b/src/common/Elsa.Testing.Shared/ServiceProviderExtensions.cs index 8e1bb3604..43f3aaee2 100644 --- a/src/common/Elsa.Testing.Shared/ServiceProviderExtensions.cs +++ b/src/common/Elsa.Testing.Shared/ServiceProviderExtensions.cs @@ -8,6 +8,7 @@ using Elsa.Workflows.Models; using Elsa.Workflows.Options; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.State; using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; @@ -66,7 +67,7 @@ public static class ServiceProviderExtensions IDictionary? input = default, VersionOptions? versionOptions = default) { - var startWorkflowOptions = new StartWorkflowRuntimeOptions + var startWorkflowOptions = new StartWorkflowRuntimeParams { Input = input, VersionOptions = versionOptions ?? VersionOptions.Published @@ -78,7 +79,7 @@ public static class ServiceProviderExtensions // Continue resuming the workflow for as long as there are bookmarks to resume and the workflow is not Finished. while (result.Status != WorkflowStatus.Finished && bookmarks.TryPop(out var bookmark)) { - var resumeOptions = new ResumeWorkflowRuntimeOptions { BookmarkId = bookmark.Id }; + var resumeOptions = new ResumeWorkflowRuntimeParams { BookmarkId = bookmark.Id }; var resumeResult = await workflowRuntime.ResumeWorkflowAsync(result.WorkflowInstanceId, resumeOptions); foreach (var newBookmark in resumeResult!.Bookmarks) diff --git a/src/modules/Elsa.Http/Middleware/WorkflowsMiddleware.cs b/src/modules/Elsa.Http/Middleware/WorkflowsMiddleware.cs index ee366476d..9d6c8e0b2 100644 --- a/src/modules/Elsa.Http/Middleware/WorkflowsMiddleware.cs +++ b/src/modules/Elsa.Http/Middleware/WorkflowsMiddleware.cs @@ -24,6 +24,7 @@ using Elsa.Workflows.Models; using Elsa.Workflows.Runtime.Filters; using Elsa.Workflows.Runtime.Matches; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Results; using Elsa.Workflows.State; @@ -155,7 +156,7 @@ public class WorkflowsMiddleware { var httpBookmarkProcessor = serviceProvider.GetRequiredService(); var systemCancellationToken = cancellationTokens.SystemCancellationToken; - var executionOptions = new ExecuteWorkflowOptions + var executionOptions = new ExecuteWorkflowParams { Input = input, CancellationTokens = cancellationTokens diff --git a/src/modules/Elsa.Http/Services/HttpBookmarkProcessor.cs b/src/modules/Elsa.Http/Services/HttpBookmarkProcessor.cs index 7ff99ddb3..d3031d60b 100644 --- a/src/modules/Elsa.Http/Services/HttpBookmarkProcessor.cs +++ b/src/modules/Elsa.Http/Services/HttpBookmarkProcessor.cs @@ -4,7 +4,7 @@ using Elsa.Workflows.Management.Contracts; using Elsa.Workflows.Management.Mappers; using Elsa.Workflows.Models; using Elsa.Workflows.Runtime.Contracts; -using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Results; using Elsa.Workflows.State; using Microsoft.AspNetCore.Http; @@ -96,7 +96,7 @@ public class HttpBookmarkProcessor : IHttpBookmarkProcessor systemCancellationToken); var workflowHost = await _workflowHostFactory.CreateAsync(workflow, workflowState, applicationCancellationToken); - var options = new ResumeWorkflowHostOptions + var options = new ResumeWorkflowHostParams { CorrelationId = correlationId, BookmarkId = result.BookmarkId, diff --git a/src/modules/Elsa.MassTransit/Consumers/DispatchWorkflowRequestConsumer.cs b/src/modules/Elsa.MassTransit/Consumers/DispatchWorkflowRequestConsumer.cs index 4912ba6a6..28e1f7447 100644 --- a/src/modules/Elsa.MassTransit/Consumers/DispatchWorkflowRequestConsumer.cs +++ b/src/modules/Elsa.MassTransit/Consumers/DispatchWorkflowRequestConsumer.cs @@ -1,6 +1,7 @@ using Elsa.MassTransit.Messages; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using JetBrains.Annotations; using MassTransit; @@ -31,7 +32,7 @@ public class DispatchWorkflowRequestConsumer : { var message = context.Message; var cancellationToken = context.CancellationToken; - var options = new StartWorkflowRuntimeOptions + var options = new StartWorkflowRuntimeParams { CorrelationId = message.CorrelationId, Input = message.Input, @@ -51,7 +52,7 @@ public class DispatchWorkflowRequestConsumer : var message = context.Message; var cancellationToken = context.CancellationToken; - var options = new ResumeWorkflowRuntimeOptions + var options = new ResumeWorkflowRuntimeParams { CorrelationId = message.CorrelationId, BookmarkId = message.BookmarkId, diff --git a/src/modules/Elsa.ProtoActor/Grains/WorkflowInstance.cs b/src/modules/Elsa.ProtoActor/Grains/WorkflowInstance.cs index 21f680608..650cf840c 100644 --- a/src/modules/Elsa.ProtoActor/Grains/WorkflowInstance.cs +++ b/src/modules/Elsa.ProtoActor/Grains/WorkflowInstance.cs @@ -10,6 +10,7 @@ using Elsa.Workflows.Management.Contracts; using Elsa.Workflows.Management.Mappers; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Requests; using Elsa.Workflows.State; using Microsoft.Extensions.DependencyInjection; @@ -110,7 +111,7 @@ internal class WorkflowInstance : WorkflowInstanceBase var properties = request.Properties?.Deserialize(); var versionOptions = VersionOptions.FromString(request.VersionOptions); var cancellationToken = Context.CancellationToken; - var startWorkflowOptions = new StartWorkflowHostOptions + var startWorkflowOptions = new StartWorkflowHostParams { InstanceId = instanceId, CorrelationId = correlationId, @@ -161,7 +162,7 @@ internal class WorkflowInstance : WorkflowInstanceBase _input = input; } - var startWorkflowOptions = new StartWorkflowHostOptions + var startWorkflowOptions = new StartWorkflowHostParams { InstanceId = instanceId, CorrelationId = correlationId, @@ -252,7 +253,7 @@ internal class WorkflowInstance : WorkflowInstanceBase _cancellationTokenSources.Add(cancellationTokenSource); cancellationToken = cancellationTokenSource.Token; - var resumeWorkflowHostOptions = new ResumeWorkflowHostOptions + var resumeWorkflowHostOptions = new ResumeWorkflowHostParams { CorrelationId = correlationId, BookmarkId = bookmarkId, diff --git a/src/modules/Elsa.ProtoActor/Services/ProtoActorWorkflowRuntime.cs b/src/modules/Elsa.ProtoActor/Services/ProtoActorWorkflowRuntime.cs index 5e5bfed17..df2189014 100644 --- a/src/modules/Elsa.ProtoActor/Services/ProtoActorWorkflowRuntime.cs +++ b/src/modules/Elsa.ProtoActor/Services/ProtoActorWorkflowRuntime.cs @@ -11,6 +11,7 @@ using Elsa.Workflows.Runtime.Entities; using Elsa.Workflows.Runtime.Filters; using Elsa.Workflows.Runtime.Matches; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Results; using Elsa.Workflows.State; using Proto.Cluster; @@ -67,7 +68,7 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime } /// - public async Task CanStartWorkflowAsync(string definitionId, StartWorkflowRuntimeOptions? options = default) + public async Task CanStartWorkflowAsync(string definitionId, StartWorkflowRuntimeParams? options = default) { var versionOptions = options?.VersionOptions; var correlationId = options?.CorrelationId; @@ -92,7 +93,7 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime } /// - public async Task TryStartWorkflowAsync(string definitionId, StartWorkflowRuntimeOptions? options = default) + public async Task TryStartWorkflowAsync(string definitionId, StartWorkflowRuntimeParams? options = default) { // Load the workflow definition. var versionOptions = options?.VersionOptions ?? VersionOptions.Published; @@ -105,7 +106,7 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime } /// - public async Task StartWorkflowAsync(string definitionId, StartWorkflowRuntimeOptions? options = default) + public async Task StartWorkflowAsync(string definitionId, StartWorkflowRuntimeParams? options = default) { var versionOptions = options?.VersionOptions; var correlationId = options?.CorrelationId; @@ -142,7 +143,7 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime { var definitionId = trigger.WorkflowDefinitionId; - var startOptions = new StartWorkflowRuntimeOptions + var startOptions = new StartWorkflowRuntimeParams { CorrelationId = options?.CorrelationId, Input = options?.Input, @@ -167,7 +168,7 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime } /// - public async Task ResumeWorkflowAsync(string workflowInstanceId, ResumeWorkflowRuntimeOptions? options = default) + public async Task ResumeWorkflowAsync(string workflowInstanceId, ResumeWorkflowRuntimeParams? options = default) { var request = new ResumeWorkflowRequest { @@ -196,7 +197,7 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime return await ResumeWorkflowsAsync( bookmarks, - new ResumeWorkflowRuntimeOptions + new ResumeWorkflowRuntimeParams { CorrelationId = correlationId, Input = options?.Input, @@ -217,11 +218,11 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime } /// - public async Task ExecuteWorkflowAsync(WorkflowMatch match, ExecuteWorkflowOptions? options = default) + public async Task ExecuteWorkflowAsync(WorkflowMatch match, ExecuteWorkflowParams? options = default) { if (match is StartableWorkflowMatch collectedStartableWorkflow) { - var startOptions = new StartWorkflowRuntimeOptions + var startOptions = new StartWorkflowRuntimeParams { CorrelationId = collectedStartableWorkflow.CorrelationId, Input = options?.Input, @@ -235,7 +236,7 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime } var collectedResumableWorkflow = (match as ResumableWorkflowMatch)!; - var runtimeOptions = new ResumeWorkflowRuntimeOptions + var runtimeOptions = new ResumeWorkflowRuntimeParams { CorrelationId = collectedResumableWorkflow.CorrelationId, Input = options?.Input, @@ -310,7 +311,7 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime return await _workflowInstanceStore.CountAsync(filter, cancellationToken); } - private async Task> ResumeWorkflowsAsync(IEnumerable bookmarks, ResumeWorkflowRuntimeOptions runtimeOptions) + private async Task> ResumeWorkflowsAsync(IEnumerable bookmarks, ResumeWorkflowRuntimeParams runtimeParams) { var resumedWorkflows = new List(); @@ -318,17 +319,17 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime { var workflowInstanceId = bookmark.WorkflowInstanceId; - var newRuntimeOptions = new ResumeWorkflowRuntimeOptions + var newRuntimeOptions = new ResumeWorkflowRuntimeParams { - CorrelationId = runtimeOptions.CorrelationId, - Input = runtimeOptions.Input, - Properties = runtimeOptions.Properties, + CorrelationId = runtimeParams.CorrelationId, + Input = runtimeParams.Input, + Properties = runtimeParams.Properties, BookmarkId = bookmark.BookmarkId, - ActivityId = runtimeOptions.ActivityId, - ActivityNodeId = runtimeOptions.ActivityNodeId, - ActivityInstanceId = runtimeOptions.ActivityInstanceId, - ActivityHash = runtimeOptions.ActivityHash, - CancellationTokens = runtimeOptions.CancellationTokens + ActivityId = runtimeParams.ActivityId, + ActivityNodeId = runtimeParams.ActivityNodeId, + ActivityInstanceId = runtimeParams.ActivityInstanceId, + ActivityHash = runtimeParams.ActivityHash, + CancellationTokens = runtimeParams.CancellationTokens }; var resumeResult = await ResumeWorkflowAsync(workflowInstanceId, newRuntimeOptions); @@ -349,7 +350,7 @@ internal class ProtoActorWorkflowRuntime : IWorkflowRuntime { var definitionId = trigger.WorkflowDefinitionId; - var startOptions = new StartWorkflowRuntimeOptions + var startOptions = new StartWorkflowRuntimeParams { CorrelationId = workflowsFilter.Options.CorrelationId, Input = workflowsFilter.Options.Input, diff --git a/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/Execute/Endpoint.cs b/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/Execute/Endpoint.cs index e948f36bf..78460bce6 100644 --- a/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/Execute/Endpoint.cs +++ b/src/modules/Elsa.Workflows.Api/Endpoints/WorkflowDefinitions/Execute/Endpoint.cs @@ -7,6 +7,7 @@ using Elsa.Workflows.Management.Contracts; using Elsa.Workflows.Management.Filters; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.State; using JetBrains.Annotations; using Microsoft.AspNetCore.Http; @@ -64,7 +65,7 @@ internal class Execute : ElsaEndpoint var correlationId = request.CorrelationId; var input = (IDictionary?)request.Input; var instanceId = _identityGenerator.GenerateId(); - var startWorkflowOptions = new StartWorkflowRuntimeOptions + var startWorkflowOptions = new StartWorkflowRuntimeParams { CorrelationId = correlationId, Input = input, diff --git a/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowHost.cs b/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowHost.cs index a5ed6005f..d3401cb1f 100644 --- a/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowHost.cs +++ b/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowHost.cs @@ -1,5 +1,5 @@ using Elsa.Workflows.Activities; -using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Results; using Elsa.Workflows.State; @@ -23,15 +23,15 @@ public interface IWorkflowHost /// /// Returns a value indicating whether or not the specified workflow can start a new instance or not. /// - Task CanStartWorkflowAsync(StartWorkflowHostOptions? options = default, CancellationToken cancellationToken = default); + Task CanStartWorkflowAsync(StartWorkflowHostParams? @params = default, CancellationToken cancellationToken = default); /// /// Start a new workflow instance and execute it. /// - Task StartWorkflowAsync(StartWorkflowHostOptions? options = default, CancellationToken cancellationToken = default); + Task StartWorkflowAsync(StartWorkflowHostParams? @params = default, CancellationToken cancellationToken = default); /// /// Resume an existing workflow instance. /// - Task ResumeWorkflowAsync(ResumeWorkflowHostOptions? options = default, CancellationToken cancellationToken = default); + Task ResumeWorkflowAsync(ResumeWorkflowHostParams? @params = default, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowInbox.cs b/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowInbox.cs index 52245a1fe..2f8f73d8b 100644 --- a/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowInbox.cs +++ b/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowInbox.cs @@ -1,7 +1,7 @@ using Elsa.Workflows.Runtime.Entities; using Elsa.Workflows.Runtime.Filters; using Elsa.Workflows.Runtime.Models; -using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Results; namespace Elsa.Workflows.Runtime.Contracts; @@ -24,7 +24,7 @@ public interface IWorkflowInbox /// The message to store. /// An optional set of delivery options. /// An optional cancellation token. - ValueTask SubmitAsync(NewWorkflowInboxMessage message, WorkflowInboxMessageDeliveryOptions options, CancellationToken cancellationToken = default); + ValueTask SubmitAsync(NewWorkflowInboxMessage message, WorkflowInboxMessageDeliveryParams options, CancellationToken cancellationToken = default); /// /// Delivers a message to a workflow instance. diff --git a/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowRuntime.cs b/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowRuntime.cs index 358b235ba..4e21268cd 100644 --- a/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowRuntime.cs +++ b/src/modules/Elsa.Workflows.Runtime/Contracts/IWorkflowRuntime.cs @@ -2,6 +2,7 @@ using Elsa.Workflows.Runtime.Entities; using Elsa.Workflows.Runtime.Filters; using Elsa.Workflows.Runtime.Matches; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Requests; using Elsa.Workflows.Runtime.Results; using Elsa.Workflows.State; @@ -16,14 +17,14 @@ public interface IWorkflowRuntime /// /// Returns a value whether or not the specified workflow definition can create a new instance. /// - Task CanStartWorkflowAsync(string definitionId, StartWorkflowRuntimeOptions? options = default); + Task CanStartWorkflowAsync(string definitionId, StartWorkflowRuntimeParams? options = default); /// /// Creates a new workflow instance of the specified definition ID and executes it. /// /// The workflow definition ID to run. /// Options for starting the workflow. - Task StartWorkflowAsync(string definitionId, StartWorkflowRuntimeOptions? options = default); + Task StartWorkflowAsync(string definitionId, StartWorkflowRuntimeParams? options = default); /// /// Starts all workflows with triggers matching the specified activity type and bookmark payload. @@ -34,14 +35,14 @@ public interface IWorkflowRuntime /// /// Tries to start a workflow and returns the result if successful. /// - Task TryStartWorkflowAsync(string definitionId, StartWorkflowRuntimeOptions? options = default); + Task TryStartWorkflowAsync(string definitionId, StartWorkflowRuntimeParams? options = default); /// /// Resumes an existing workflow instance. /// /// The ID of the workflow instance to resume. /// Options for resuming the workflow. - Task ResumeWorkflowAsync(string workflowInstanceId, ResumeWorkflowRuntimeOptions? options = default); + Task ResumeWorkflowAsync(string workflowInstanceId, ResumeWorkflowRuntimeParams? options = default); /// /// Resumes all workflows that are bookmarked on the specified activity type. @@ -58,7 +59,7 @@ public interface IWorkflowRuntime /// /// A workflow match to execute. /// Options for executing the workflow. - Task ExecuteWorkflowAsync(WorkflowMatch match, ExecuteWorkflowOptions? options = default); + Task ExecuteWorkflowAsync(WorkflowMatch match, ExecuteWorkflowParams? options = default); /// /// Cancels the execution of a workflow. diff --git a/src/modules/Elsa.Workflows.Runtime/Handlers/DispatchWorkflowRequestHandler.cs b/src/modules/Elsa.Workflows.Runtime/Handlers/DispatchWorkflowRequestHandler.cs index 69d1d1e8c..da1b7d571 100644 --- a/src/modules/Elsa.Workflows.Runtime/Handlers/DispatchWorkflowRequestHandler.cs +++ b/src/modules/Elsa.Workflows.Runtime/Handlers/DispatchWorkflowRequestHandler.cs @@ -3,6 +3,7 @@ using Elsa.Mediator.Models; using Elsa.Workflows.Runtime.Commands; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; namespace Elsa.Workflows.Runtime.Handlers; @@ -31,7 +32,7 @@ internal class DispatchWorkflowCommandHandler(IWorkflowRuntime workflowRuntime) public async Task HandleAsync(DispatchWorkflowDefinitionCommand command, CancellationToken cancellationToken) { - var options = new StartWorkflowRuntimeOptions + var options = new StartWorkflowRuntimeParams { CorrelationId = command.CorrelationId, Input = command.Input, @@ -49,7 +50,7 @@ internal class DispatchWorkflowCommandHandler(IWorkflowRuntime workflowRuntime) public async Task HandleAsync(DispatchWorkflowInstanceCommand command, CancellationToken cancellationToken) { - var options = new ResumeWorkflowRuntimeOptions + var options = new ResumeWorkflowRuntimeParams { CorrelationId = command.CorrelationId, BookmarkId = command.BookmarkId, diff --git a/src/modules/Elsa.Workflows.Runtime/HostedServices/PopulateRegistriesHostedService.cs b/src/modules/Elsa.Workflows.Runtime/HostedServices/PopulateRegistriesHostedService.cs index a67298d9f..718c0f50b 100644 --- a/src/modules/Elsa.Workflows.Runtime/HostedServices/PopulateRegistriesHostedService.cs +++ b/src/modules/Elsa.Workflows.Runtime/HostedServices/PopulateRegistriesHostedService.cs @@ -1,31 +1,43 @@ using Elsa.Workflows.Contracts; using Elsa.Workflows.Runtime.Contracts; +using Elsa.Workflows.Runtime.Options; +using JetBrains.Annotations; +using Medallion.Threading; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Options; namespace Elsa.Workflows.Runtime.HostedServices; /// /// Updates the workflow store from implementations, creates triggers and updates the . /// +[UsedImplicitly] public class PopulateRegistriesHostedService : IHostedService { private readonly IServiceScopeFactory _scopeFactory; + private readonly DistributedLockingOptions _options; /// /// Initializes a new instance of the class. /// - public PopulateRegistriesHostedService(IServiceScopeFactory scopeFactory) + public PopulateRegistriesHostedService(IServiceScopeFactory scopeFactory, IOptions options) { _scopeFactory = scopeFactory; + _options = options.Value; } /// public async Task StartAsync(CancellationToken cancellationToken) { using var scope = _scopeFactory.CreateScope(); - var registriesPopulator = scope.ServiceProvider.GetRequiredService(); - await registriesPopulator.PopulateAsync(cancellationToken); + var distributedLockProvider = scope.ServiceProvider.GetRequiredService(); + var lockAcquisitionTimeout = _options.LockAcquisitionTimeout; + await using (await distributedLockProvider.AcquireLockAsync("PopulateRegistries", lockAcquisitionTimeout, cancellationToken)) + { + var registriesPopulator = scope.ServiceProvider.GetRequiredService(); + await registriesPopulator.PopulateAsync(cancellationToken); + } } /// diff --git a/src/modules/Elsa.Workflows.Runtime/Notifications/WorkflowInboxMessageReceived.cs b/src/modules/Elsa.Workflows.Runtime/Notifications/WorkflowInboxMessageReceived.cs index 823fc7cd4..377d83aeb 100644 --- a/src/modules/Elsa.Workflows.Runtime/Notifications/WorkflowInboxMessageReceived.cs +++ b/src/modules/Elsa.Workflows.Runtime/Notifications/WorkflowInboxMessageReceived.cs @@ -1,6 +1,7 @@ using Elsa.Mediator.Contracts; using Elsa.Workflows.Runtime.Entities; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Results; namespace Elsa.Workflows.Runtime.Notifications; @@ -11,5 +12,5 @@ namespace Elsa.Workflows.Runtime.Notifications; /// The inbox message that was received. public record WorkflowInboxMessageReceived( WorkflowInboxMessage InboxMessage, - WorkflowInboxMessageDeliveryOptions Options, + WorkflowInboxMessageDeliveryParams Options, ICollection WorkflowExecutionResults) : INotification; \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Runtime/Options/DistributedLockingOptions.cs b/src/modules/Elsa.Workflows.Runtime/Options/DistributedLockingOptions.cs index defa3c00a..7e583a11b 100644 --- a/src/modules/Elsa.Workflows.Runtime/Options/DistributedLockingOptions.cs +++ b/src/modules/Elsa.Workflows.Runtime/Options/DistributedLockingOptions.cs @@ -1,10 +1,12 @@ using Elsa.Workflows.Runtime.Services; +using JetBrains.Annotations; namespace Elsa.Workflows.Runtime.Options; /// /// Provides options related to distributed locking, which is used by . /// +[UsedImplicitly] public class DistributedLockingOptions { /// diff --git a/src/modules/Elsa.Workflows.Runtime/Options/ExecuteWorkflowOptions.cs b/src/modules/Elsa.Workflows.Runtime/Parameters/ExecuteWorkflowParams.cs similarity index 78% rename from src/modules/Elsa.Workflows.Runtime/Options/ExecuteWorkflowOptions.cs rename to src/modules/Elsa.Workflows.Runtime/Parameters/ExecuteWorkflowParams.cs index f85a1c309..1333e93d8 100644 --- a/src/modules/Elsa.Workflows.Runtime/Options/ExecuteWorkflowOptions.cs +++ b/src/modules/Elsa.Workflows.Runtime/Parameters/ExecuteWorkflowParams.cs @@ -1,11 +1,11 @@ using Elsa.Workflows.Models; -namespace Elsa.Workflows.Runtime.Options; +namespace Elsa.Workflows.Runtime.Parameters; /// /// Options for executing workflows. /// -public class ExecuteWorkflowOptions +public class ExecuteWorkflowParams { public IDictionary? Input { get; set; } public IDictionary? Properties { get; set; } diff --git a/src/modules/Elsa.Workflows.Runtime/Options/ResumeWorkflowHostOptions.cs b/src/modules/Elsa.Workflows.Runtime/Parameters/ResumeWorkflowHostParams.cs similarity index 93% rename from src/modules/Elsa.Workflows.Runtime/Options/ResumeWorkflowHostOptions.cs rename to src/modules/Elsa.Workflows.Runtime/Parameters/ResumeWorkflowHostParams.cs index d9c35f72d..c1d7b28b1 100644 --- a/src/modules/Elsa.Workflows.Runtime/Options/ResumeWorkflowHostOptions.cs +++ b/src/modules/Elsa.Workflows.Runtime/Parameters/ResumeWorkflowHostParams.cs @@ -1,11 +1,11 @@ using Elsa.Workflows.Models; -namespace Elsa.Workflows.Runtime.Options; +namespace Elsa.Workflows.Runtime.Parameters; /// /// Represents options for resuming a workflow host. /// -public class ResumeWorkflowHostOptions +public class ResumeWorkflowHostParams { /// An optional correlation ID. public string? CorrelationId { get; set; } diff --git a/src/modules/Elsa.Workflows.Runtime/Options/ResumeWorkflowRuntimeOptions.cs b/src/modules/Elsa.Workflows.Runtime/Parameters/ResumeWorkflowRuntimeParams.cs similarity index 86% rename from src/modules/Elsa.Workflows.Runtime/Options/ResumeWorkflowRuntimeOptions.cs rename to src/modules/Elsa.Workflows.Runtime/Parameters/ResumeWorkflowRuntimeParams.cs index 8e1e70bc5..232554d2b 100644 --- a/src/modules/Elsa.Workflows.Runtime/Options/ResumeWorkflowRuntimeOptions.cs +++ b/src/modules/Elsa.Workflows.Runtime/Parameters/ResumeWorkflowRuntimeParams.cs @@ -1,11 +1,11 @@ using Elsa.Workflows.Models; -namespace Elsa.Workflows.Runtime.Options; +namespace Elsa.Workflows.Runtime.Parameters; /// /// Options for resuming workflows. /// -public class ResumeWorkflowRuntimeOptions +public class ResumeWorkflowRuntimeParams { public string? CorrelationId { get; set; } public string? BookmarkId { get; set; } diff --git a/src/modules/Elsa.Workflows.Runtime/Options/StartWorkflowHostOptions.cs b/src/modules/Elsa.Workflows.Runtime/Parameters/StartWorkflowHostParams.cs similarity index 93% rename from src/modules/Elsa.Workflows.Runtime/Options/StartWorkflowHostOptions.cs rename to src/modules/Elsa.Workflows.Runtime/Parameters/StartWorkflowHostParams.cs index 1a4697c81..43fb18e5f 100644 --- a/src/modules/Elsa.Workflows.Runtime/Options/StartWorkflowHostOptions.cs +++ b/src/modules/Elsa.Workflows.Runtime/Parameters/StartWorkflowHostParams.cs @@ -1,11 +1,11 @@ using Elsa.Workflows.Models; -namespace Elsa.Workflows.Runtime.Options; +namespace Elsa.Workflows.Runtime.Parameters; /// /// Represents options for starting a workflow host. /// -public class StartWorkflowHostOptions +public class StartWorkflowHostParams { /// An optional workflow instance ID. If not specified, a new ID will be generated. public string? InstanceId { get; set; } diff --git a/src/modules/Elsa.Workflows.Runtime/Options/StartWorkflowRuntimeOptions.cs b/src/modules/Elsa.Workflows.Runtime/Parameters/StartWorkflowRuntimeParams.cs similarity index 86% rename from src/modules/Elsa.Workflows.Runtime/Options/StartWorkflowRuntimeOptions.cs rename to src/modules/Elsa.Workflows.Runtime/Parameters/StartWorkflowRuntimeParams.cs index 78f9cb842..e04fe94b1 100644 --- a/src/modules/Elsa.Workflows.Runtime/Options/StartWorkflowRuntimeOptions.cs +++ b/src/modules/Elsa.Workflows.Runtime/Parameters/StartWorkflowRuntimeParams.cs @@ -1,12 +1,12 @@ using Elsa.Common.Models; using Elsa.Workflows.Models; -namespace Elsa.Workflows.Runtime.Options; +namespace Elsa.Workflows.Runtime.Parameters; /// /// Represents options for starting a workflow. /// -public class StartWorkflowRuntimeOptions +public class StartWorkflowRuntimeParams { public string? CorrelationId { get; set; } diff --git a/src/modules/Elsa.Workflows.Runtime/Options/WorkflowInboxMessageDeliveryOptions.cs b/src/modules/Elsa.Workflows.Runtime/Parameters/WorkflowInboxMessageDeliveryParams.cs similarity index 74% rename from src/modules/Elsa.Workflows.Runtime/Options/WorkflowInboxMessageDeliveryOptions.cs rename to src/modules/Elsa.Workflows.Runtime/Parameters/WorkflowInboxMessageDeliveryParams.cs index 4b874e210..f6edaa04b 100644 --- a/src/modules/Elsa.Workflows.Runtime/Options/WorkflowInboxMessageDeliveryOptions.cs +++ b/src/modules/Elsa.Workflows.Runtime/Parameters/WorkflowInboxMessageDeliveryParams.cs @@ -1,9 +1,9 @@ -namespace Elsa.Workflows.Runtime.Options; +namespace Elsa.Workflows.Runtime.Parameters; /// /// Options for delivering a workflow inbox message. /// -public class WorkflowInboxMessageDeliveryOptions +public class WorkflowInboxMessageDeliveryParams { /// /// Whether to dispatch the message to the workflow dispatcher or send immediately. diff --git a/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowDefinitionStorePopulator.cs b/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowDefinitionStorePopulator.cs index 7cb2ff9ac..8431af360 100644 --- a/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowDefinitionStorePopulator.cs +++ b/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowDefinitionStorePopulator.cs @@ -21,6 +21,7 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP private readonly IPayloadSerializer _payloadSerializer; private readonly ISystemClock _systemClock; private readonly IIdentityGraphService _identityGraphService; + private readonly SemaphoreSlim _semaphore = new(1, 1); /// /// Constructor. @@ -51,13 +52,10 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP { var results = await provider.GetWorkflowsAsync(cancellationToken).AsTask().ToList(); - foreach (var result in results) - { - await AddAsync(result, cancellationToken); - } + foreach (var result in results) await AddAsync(result, cancellationToken); } } - + /// public async Task AddAsync(MaterializedWorkflow materializedWorkflow, CancellationToken cancellationToken = default) { @@ -72,6 +70,20 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP } private async Task AddOrUpdateAsync(MaterializedWorkflow materializedWorkflow, CancellationToken cancellationToken = default) + { + await _semaphore.WaitAsync(cancellationToken); + + try + { + await AddOrUpdateCoreAsync(materializedWorkflow, cancellationToken); + } + finally + { + _semaphore.Release(); + } + } + + private async Task AddOrUpdateCoreAsync(MaterializedWorkflow materializedWorkflow, CancellationToken cancellationToken = default) { var workflow = materializedWorkflow.Workflow; var definitionId = workflow.Identity.DefinitionId; @@ -89,25 +101,29 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP DefinitionId = definitionId, VersionOptions = VersionOptions.SpecificVersion(workflow.Identity.Version) }; - + var existingDefinitionVersion = await _workflowDefinitionStore.FindAsync(specificVersionFilter, cancellationToken); // Setup a list to collect all workflow definitions to be persisted. var workflowDefinitionsToSave = new HashSet(); - - if(existingDefinitionVersion != null) + + if (existingDefinitionVersion != null) workflowDefinitionsToSave.Add(existingDefinitionVersion); - + // If the workflow being added is configured to be the latest version, then we need to reset the current latest version. if (workflow.Publication.IsLatest) { // Reset current latest definitions. - var filter = new WorkflowDefinitionFilter { DefinitionId = definitionId, VersionOptions = VersionOptions.Latest }; + var filter = new WorkflowDefinitionFilter + { + DefinitionId = definitionId, + VersionOptions = VersionOptions.Latest + }; var latestWorkflowDefinitions = (await _workflowDefinitionStore.FindManyAsync(filter, cancellationToken)).ToList(); // If the latest definitions contains definitions with the same ID then we need to replace them with the latest workflow definitions. SyncExistingCopies(latestWorkflowDefinitions, workflowDefinitionsToSave); - + foreach (var latestWorkflowDefinition in latestWorkflowDefinitions) { latestWorkflowDefinition.IsLatest = false; @@ -119,12 +135,16 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP if (workflow.Publication.IsPublished) { // Reset current published definitions. - var filter = new WorkflowDefinitionFilter { DefinitionId = definitionId, VersionOptions = VersionOptions.Published }; + var filter = new WorkflowDefinitionFilter + { + DefinitionId = definitionId, + VersionOptions = VersionOptions.Published + }; var publishedWorkflowDefinitions = (await _workflowDefinitionStore.FindManyAsync(filter, cancellationToken)).ToList(); // If the published workflow definitions contains definitions with the same ID as definitions in the latest workflow definitions, then we need to replace them with the latest workflow definitions. SyncExistingCopies(publishedWorkflowDefinitions, workflowDefinitionsToSave); - + foreach (var publishedWorkflowDefinition in publishedWorkflowDefinitions) { publishedWorkflowDefinition.IsPublished = false; @@ -138,7 +158,7 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP Id = workflow.Identity.Id, Version = workflow.Identity.Version }; - + workflowDefinition.Description = workflow.WorkflowMetadata.Description; workflowDefinition.Name = workflow.WorkflowMetadata.Name; workflowDefinition.ToolVersion = workflow.WorkflowMetadata.ToolVersion; @@ -171,6 +191,6 @@ public class DefaultWorkflowDefinitionStorePopulator : IWorkflowDefinitionStoreP var ids = secondary.Select(x => x.Id).Distinct().ToList(); var latestWorkflowDefinitions = primary.Where(x => ids.Contains(x.Id)).ToList(); primary.RemoveAll(x => latestWorkflowDefinitions.Contains(x)); - primary.AddRange(secondary.Where(x => ids.Contains(x.Id))); + primary.AddRange(secondary.Where(x => ids.Contains(x.Id))); } } \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowInbox.cs b/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowInbox.cs index af952d15d..fb1017356 100644 --- a/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowInbox.cs +++ b/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowInbox.cs @@ -8,6 +8,7 @@ using Elsa.Workflows.Runtime.Filters; using Elsa.Workflows.Runtime.Models; using Elsa.Workflows.Runtime.Notifications; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Requests; using Elsa.Workflows.Runtime.Results; @@ -48,12 +49,12 @@ public class DefaultWorkflowInbox : IWorkflowInbox /// public async ValueTask SubmitAsync(NewWorkflowInboxMessage message, CancellationToken cancellationToken = default) { - var defaultOptions = new WorkflowInboxMessageDeliveryOptions(); + var defaultOptions = new WorkflowInboxMessageDeliveryParams(); return await SubmitAsync(message, defaultOptions, cancellationToken); } /// - public async ValueTask SubmitAsync(NewWorkflowInboxMessage newMessage, WorkflowInboxMessageDeliveryOptions options, CancellationToken cancellationToken = default) + public async ValueTask SubmitAsync(NewWorkflowInboxMessage newMessage, WorkflowInboxMessageDeliveryParams @params, CancellationToken cancellationToken = default) { var now = _systemClock.UtcNow; @@ -77,7 +78,7 @@ public class DefaultWorkflowInbox : IWorkflowInbox // Send a notification. var workflowExecutionResults = new List(); - var notification = new WorkflowInboxMessageReceived(message, options, workflowExecutionResults); + var notification = new WorkflowInboxMessageReceived(message, @params, workflowExecutionResults); await _notificationSender.SendAsync(notification, NotificationStrategy.Sequential, cancellationToken); // Return the result. diff --git a/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowRuntime.cs b/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowRuntime.cs index 905050775..0a7b5bc79 100644 --- a/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowRuntime.cs +++ b/src/modules/Elsa.Workflows.Runtime/Services/DefaultWorkflowRuntime.cs @@ -10,6 +10,7 @@ using Elsa.Workflows.Runtime.Entities; using Elsa.Workflows.Runtime.Filters; using Elsa.Workflows.Runtime.Matches; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Requests; using Elsa.Workflows.Runtime.Results; using Elsa.Workflows.State; @@ -73,12 +74,12 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime } /// - public async Task CanStartWorkflowAsync(string definitionId, StartWorkflowRuntimeOptions? options = default) + public async Task CanStartWorkflowAsync(string definitionId, StartWorkflowRuntimeParams? options = default) { var input = options?.Input; var correlationId = options?.CorrelationId; var workflowHost = await CreateWorkflowHostAsync(definitionId, options, options?.CancellationTokens.SystemCancellationToken ?? default); - var startWorkflowOptions = new StartWorkflowHostOptions + var startWorkflowOptions = new StartWorkflowHostParams { CorrelationId = correlationId, Input = input, @@ -89,14 +90,14 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime } /// - public async Task StartWorkflowAsync(string definitionId, StartWorkflowRuntimeOptions? options = default) + public async Task StartWorkflowAsync(string definitionId, StartWorkflowRuntimeParams? options = default) { var workflowHost = await CreateWorkflowHostAsync(definitionId, options, options?.CancellationTokens.SystemCancellationToken ?? default); return await StartWorkflowAsync(workflowHost, options); } /// - public async Task TryStartWorkflowAsync(string definitionId, StartWorkflowRuntimeOptions? options = default) + public async Task TryStartWorkflowAsync(string definitionId, StartWorkflowRuntimeParams? options = default) { return await StartWorkflowAsync(definitionId, options); } @@ -184,7 +185,7 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime { var definitionId = trigger.WorkflowDefinitionId; - var startOptions = new StartWorkflowRuntimeOptions + var startOptions = new StartWorkflowRuntimeParams { CorrelationId = options.CorrelationId, Input = options.Input, @@ -213,7 +214,7 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime } /// - public async Task ResumeWorkflowAsync(string workflowInstanceId, ResumeWorkflowRuntimeOptions? options = default) + public async Task ResumeWorkflowAsync(string workflowInstanceId, ResumeWorkflowRuntimeParams? options = default) { var applicationCancellationToken = options?.CancellationTokens.ApplicationCancellationToken ?? default; var systemCancellationToken = options?.CancellationTokens.SystemCancellationToken ?? default; @@ -245,7 +246,7 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime var workflowState = _workflowStateMapper.Map(workflowInstance)!; var workflowHost = await _workflowHostFactory.CreateAsync(workflow, workflowState, systemCancellationToken); - var resumeWorkflowOptions = new ResumeWorkflowHostOptions + var resumeWorkflowOptions = new ResumeWorkflowHostParams { CorrelationId = options?.CorrelationId, BookmarkId = options?.BookmarkId, @@ -286,7 +287,7 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime return await ResumeWorkflowsAsync( bookmarks, - new ResumeWorkflowRuntimeOptions + new ResumeWorkflowRuntimeParams { CorrelationId = correlationId, Input = options.Input, @@ -304,11 +305,11 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime } /// - public async Task ExecuteWorkflowAsync(WorkflowMatch match, ExecuteWorkflowOptions? options = default) + public async Task ExecuteWorkflowAsync(WorkflowMatch match, ExecuteWorkflowParams? options = default) { if (match is StartableWorkflowMatch collectedStartableWorkflow) { - var startOptions = new StartWorkflowRuntimeOptions + var startOptions = new StartWorkflowRuntimeParams { CorrelationId = collectedStartableWorkflow.CorrelationId, Input = options?.Input, @@ -327,7 +328,7 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime } var collectedResumableWorkflow = (match as ResumableWorkflowMatch)!; - var runtimeOptions = new ResumeWorkflowRuntimeOptions + var runtimeOptions = new ResumeWorkflowRuntimeParams { CorrelationId = collectedResumableWorkflow.CorrelationId, BookmarkId = collectedResumableWorkflow.BookmarkId, @@ -381,7 +382,7 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime return await _workflowInstanceStore.CountAsync(filter, cancellationToken); } - private async Task StartWorkflowAsync(IWorkflowHost workflowHost, StartWorkflowRuntimeOptions? options = default) + private async Task StartWorkflowAsync(IWorkflowHost workflowHost, StartWorkflowRuntimeParams? options = default) { var workflowInstanceId = string.IsNullOrEmpty(options?.InstanceId) ? _identityGenerator.GenerateId() : options?.InstanceId; var cancellationTokens = options?.CancellationTokens ?? default; @@ -390,7 +391,7 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime { var input = options?.Input; var correlationId = options?.CorrelationId; - var startWorkflowOptions = new StartWorkflowHostOptions + var startWorkflowOptions = new StartWorkflowHostParams { InstanceId = workflowInstanceId, CorrelationId = correlationId, @@ -414,7 +415,7 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime } } - private async Task CreateWorkflowHostAsync(string definitionId, StartWorkflowRuntimeOptions? options, CancellationToken cancellationToken) + private async Task CreateWorkflowHostAsync(string definitionId, StartWorkflowRuntimeParams? options, CancellationToken cancellationToken) { var versionOptions = options?.VersionOptions; var host = await _workflowHostFactory.CreateAsync(definitionId, versionOptions ?? VersionOptions.Published, cancellationToken); @@ -425,7 +426,7 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime return host; } - private async Task> ResumeWorkflowsAsync(IEnumerable bookmarks, ResumeWorkflowRuntimeOptions runtimeOptions) + private async Task> ResumeWorkflowsAsync(IEnumerable bookmarks, ResumeWorkflowRuntimeParams runtimeParams) { var resumedWorkflows = new List(); @@ -435,12 +436,12 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime var resumeResult = await ResumeWorkflowAsync( workflowInstanceId, - new ResumeWorkflowRuntimeOptions + new ResumeWorkflowRuntimeParams { - CorrelationId = runtimeOptions.CorrelationId, - Input = runtimeOptions.Input, - Properties = runtimeOptions.Properties, - CancellationTokens = runtimeOptions.CancellationTokens, + CorrelationId = runtimeParams.CorrelationId, + Input = runtimeParams.Input, + Properties = runtimeParams.Properties, + CancellationTokens = runtimeParams.CancellationTokens, BookmarkId = bookmark.BookmarkId, ActivityInstanceId = bookmark.ActivityInstanceId }); @@ -475,7 +476,7 @@ public class DefaultWorkflowRuntime : IWorkflowRuntime foreach (var trigger in triggers) { var definitionId = trigger.WorkflowDefinitionId; - var startOptions = new StartWorkflowRuntimeOptions + var startOptions = new StartWorkflowRuntimeParams { CorrelationId = workflowsFilter.Options.CorrelationId, Input = workflowsFilter.Options.Input, diff --git a/src/modules/Elsa.Workflows.Runtime/Services/EventPublisher.cs b/src/modules/Elsa.Workflows.Runtime/Services/EventPublisher.cs index 44d5c4524..8aa2371db 100644 --- a/src/modules/Elsa.Workflows.Runtime/Services/EventPublisher.cs +++ b/src/modules/Elsa.Workflows.Runtime/Services/EventPublisher.cs @@ -5,6 +5,7 @@ using Elsa.Workflows.Runtime.Bookmarks; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Models; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Results; namespace Elsa.Workflows.Runtime.Services; @@ -61,7 +62,7 @@ public class EventPublisher : IEventPublisher [Event.EventPayloadWorkflowInputKey] = payload ?? new Dictionary() }; var message = NewWorkflowInboxMessage.For(eventBookmark, workflowInstanceId, correlationId, activityInstanceId, workflowInput); - var options = new WorkflowInboxMessageDeliveryOptions + var options = new WorkflowInboxMessageDeliveryParams { DispatchAsynchronously = dispatchAsynchronously }; diff --git a/src/modules/Elsa.Workflows.Runtime/Services/WorkflowHost.cs b/src/modules/Elsa.Workflows.Runtime/Services/WorkflowHost.cs index 07eb48939..2daa06e5e 100644 --- a/src/modules/Elsa.Workflows.Runtime/Services/WorkflowHost.cs +++ b/src/modules/Elsa.Workflows.Runtime/Services/WorkflowHost.cs @@ -5,6 +5,7 @@ using Elsa.Workflows.Models; using Elsa.Workflows.Options; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Elsa.Workflows.Runtime.Results; using Elsa.Workflows.State; using Microsoft.Extensions.DependencyInjection; @@ -45,7 +46,7 @@ public class WorkflowHost : IWorkflowHost public WorkflowState WorkflowState { get; set; } /// - public async Task CanStartWorkflowAsync(StartWorkflowHostOptions? options = default, CancellationToken cancellationToken = default) + public async Task CanStartWorkflowAsync(StartWorkflowHostParams? @params = default, CancellationToken cancellationToken = default) { var strategyType = Workflow.Options.ActivationStrategyType; @@ -59,19 +60,19 @@ public class WorkflowHost : IWorkflowHost if (strategy == null) return true; - var correlationId = options?.CorrelationId; + var correlationId = @params?.CorrelationId; var strategyContext = new WorkflowInstantiationStrategyContext(Workflow, correlationId, cancellationToken); return await strategy.GetAllowActivationAsync(strategyContext); } /// - public async Task StartWorkflowAsync(StartWorkflowHostOptions? options = default, CancellationToken cancellationToken = default) + public async Task StartWorkflowAsync(StartWorkflowHostParams? @params = default, CancellationToken cancellationToken = default) { - var correlationId = options?.CorrelationId; - var instanceId = options?.InstanceId ?? _identityGenerator.GenerateId(); + var correlationId = @params?.CorrelationId; + var instanceId = @params?.InstanceId ?? _identityGenerator.GenerateId(); var originalBookmarks = WorkflowState.Bookmarks.ToList(); - var input = options?.Input; - var properties = options?.Properties; + var input = @params?.Input; + var properties = @params?.Properties; var runOptions = new RunWorkflowOptions { @@ -79,9 +80,9 @@ public class WorkflowHost : IWorkflowHost CorrelationId = correlationId, Input = input, Properties = properties, - TriggerActivityId = options?.TriggerActivityId, - StatusUpdatedCallback = options?.StatusUpdatedCallback, - CancellationTokens = options?.CancellationTokens ?? cancellationToken + TriggerActivityId = @params?.TriggerActivityId, + StatusUpdatedCallback = @params?.StatusUpdatedCallback, + CancellationTokens = @params?.CancellationTokens ?? cancellationToken }; using var scope = _serviceScopeFactory.CreateScope(); @@ -99,7 +100,7 @@ public class WorkflowHost : IWorkflowHost /// /// Resumes the . /// - public async Task ResumeWorkflowAsync(ResumeWorkflowHostOptions? options = default, CancellationToken cancellationToken = default) + public async Task ResumeWorkflowAsync(ResumeWorkflowHostParams? @params = default, CancellationToken cancellationToken = default) { var originalBookmarks = WorkflowState.Bookmarks.ToList(); @@ -110,20 +111,20 @@ public class WorkflowHost : IWorkflowHost } var instanceId = WorkflowState.Id; - var input = options?.Input; + var input = @params?.Input; var runOptions = new RunWorkflowOptions { WorkflowInstanceId = instanceId, - CorrelationId = options?.CorrelationId, - BookmarkId = options?.BookmarkId, - ActivityId = options?.ActivityId, - ActivityNodeId = options?.ActivityNodeId, - ActivityInstanceId = options?.ActivityInstanceId, - ActivityHash = options?.ActivityHash, + CorrelationId = @params?.CorrelationId, + BookmarkId = @params?.BookmarkId, + ActivityId = @params?.ActivityId, + ActivityNodeId = @params?.ActivityNodeId, + ActivityInstanceId = @params?.ActivityInstanceId, + ActivityHash = @params?.ActivityHash, Input = input, - Properties = options?.Properties, - CancellationTokens = options?.CancellationTokens ?? cancellationToken + Properties = @params?.Properties, + CancellationTokens = @params?.CancellationTokens ?? cancellationToken }; using var scope = _serviceScopeFactory.CreateScope(); diff --git a/test/Directory.Build.props b/test/Directory.Build.props index 8c58a1118..77f7b464e 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -8,6 +8,7 @@ enable false true + false diff --git a/test/integration/Elsa.ServiceBus.IntegrationTests/Scenarios/ServiceBus/ServiceBusTests.cs b/test/integration/Elsa.ServiceBus.IntegrationTests/Scenarios/ServiceBus/ServiceBusTests.cs index 9d9cbd6ca..87b877ea6 100644 --- a/test/integration/Elsa.ServiceBus.IntegrationTests/Scenarios/ServiceBus/ServiceBusTests.cs +++ b/test/integration/Elsa.ServiceBus.IntegrationTests/Scenarios/ServiceBus/ServiceBusTests.cs @@ -12,6 +12,7 @@ using Elsa.ServiceBus.IntegrationTests.Scenarios.Workflows; using Elsa.Workflows; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Microsoft.Extensions.Options; using NSubstitute; using Xunit.Abstractions; @@ -83,7 +84,7 @@ public class ServiceBusTest : IDisposable // Start Workflow const string workflowDefinitionId = nameof(ReceiveMessageWorkflow); - var startWorkflowOptions = new StartWorkflowRuntimeOptions + var startWorkflowOptions = new StartWorkflowRuntimeParams { VersionOptions = Common.Models.VersionOptions.Published }; @@ -151,7 +152,7 @@ public class ServiceBusTest : IDisposable // Start Workflow const string workflowDefinitionId = nameof(ReceiveOneMessageWorkflow); - var startWorkflowOptions = new StartWorkflowRuntimeOptions { VersionOptions = Common.Models.VersionOptions.Published }; + var startWorkflowOptions = new StartWorkflowRuntimeParams { VersionOptions = Common.Models.VersionOptions.Published }; var workflowRuntime = _services.GetRequiredService(); var workflowState = await workflowRuntime.StartWorkflowAsync(workflowDefinitionId, startWorkflowOptions); @@ -222,7 +223,7 @@ public class ServiceBusTest : IDisposable // Start Workflow const string workflowDefinitionId = nameof(SendOneMessageWorkflow); - var startWorkflowOptions = new StartWorkflowRuntimeOptions { VersionOptions = Common.Models.VersionOptions.Published }; + var startWorkflowOptions = new StartWorkflowRuntimeParams { VersionOptions = Common.Models.VersionOptions.Published }; var workflowRuntime = _services.GetRequiredService(); var workflowState = await workflowRuntime.StartWorkflowAsync(workflowDefinitionId, startWorkflowOptions); @@ -287,7 +288,7 @@ public class ServiceBusTest : IDisposable //Start Workflow var workflowDefinitionId = nameof(SendOneMessageWithCorrelationIdWorkflow); - var startWorkflowOptions = new StartWorkflowRuntimeOptions { VersionOptions = Common.Models.VersionOptions.Published }; + var startWorkflowOptions = new StartWorkflowRuntimeParams { VersionOptions = Common.Models.VersionOptions.Published }; var workflowRuntime = _services.GetRequiredService(); var workflowState = await workflowRuntime.StartWorkflowAsync(workflowDefinitionId, startWorkflowOptions); @@ -333,7 +334,7 @@ public class ServiceBusTest : IDisposable // Start Workflow var workflowDefinitionId = nameof(ReceiveMessageWorkflow); - var startWorkflowOptions = new StartWorkflowRuntimeOptions { VersionOptions = Common.Models.VersionOptions.Published }; + var startWorkflowOptions = new StartWorkflowRuntimeParams { VersionOptions = Common.Models.VersionOptions.Published }; var workflowRuntime = _services.GetRequiredService(); var workflowState = await workflowRuntime.StartWorkflowAsync(workflowDefinitionId, startWorkflowOptions); diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakForEachWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakForEachWorkflow.cs index 0d8e74348..c1faa1927 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakForEachWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakForEachWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakForWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakForWorkflow.cs index 51cc27db9..9e5937b33 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakForWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakForWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakWhileForkWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakWhileForkWorkflow.cs index 407a7e99f..8560760c3 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakWhileForkWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakWhileForkWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakWhileWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakWhileWorkflow.cs index 8bad28e31..3a26ed474 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakWhileWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Break/Workflows/BreakWhileWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishForkedWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishForkedWorkflow.cs index b8fd4abed..4571c33ee 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishForkedWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishForkedWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Runtime.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishSequentialWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishSequentialWorkflow.cs index 40afb1f25..11cc17270 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishSequentialWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishSequentialWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishTests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishTests.cs index 9de8dae8a..07d266762 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishTests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Finish/FinishTests.cs @@ -1,5 +1,4 @@ using Elsa.Testing.Shared; -using Elsa.Workflows; using Elsa.Workflows.Contracts; using Microsoft.Extensions.DependencyInjection; using Xunit; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs index 98181a4c6..f92d02575 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/ForEach/ForEachWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs index b7a317c08..b65925b3c 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/ForEach/NestedForEachWithBreakWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs index dd34157a9..60e606fec 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Fork/BasicForkWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs index 9c251722a..125032557 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Fork/JoinAnyForkWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Runtime.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/If/ComplexIfWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/If/ComplexIfWorkflow.cs index 73938baeb..d11a2cf51 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/If/ComplexIfWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/If/ComplexIfWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/If/IfThenWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/If/IfThenWorkflow.cs index 4dfd94835..0fd9dc7dd 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/If/IfThenWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/If/IfThenWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs index 939f8e260..12b63d146 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Sequence/NestedSequentialWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs index 0d7a9b7cb..5d9ca1526 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Activities/Sequence/SequentialWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityNotificationsMiddleware/Workflows.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityNotificationsMiddleware/Workflows.cs index 72e6c791b..66b045757 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityNotificationsMiddleware/Workflows.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityNotificationsMiddleware/Workflows.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityOutputs/SumActivity.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityOutputs/SumActivity.cs index 90c0acb27..77cd86a26 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityOutputs/SumActivity.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityOutputs/SumActivity.cs @@ -1,5 +1,4 @@ using Elsa.Extensions; -using Elsa.Workflows; using Elsa.Workflows.Memory; using Elsa.Workflows.Models; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityOutputs/SumWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityOutputs/SumWorkflow.cs index d4fbe5243..05cb8d94a 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityOutputs/SumWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ActivityOutputs/SumWorkflow.cs @@ -1,5 +1,4 @@ using Elsa.Extensions; -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Blocking/Workflows.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Blocking/Workflows.cs index 562af8782..cbdd5704e 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Blocking/Workflows.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Blocking/Workflows.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Runtime.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/BreakWhileFromForkWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/BreakWhileFromForkWorkflow.cs index a093c2162..5765df16d 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/BreakWhileFromForkWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/BreakWhileFromForkWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/WaitAllForkWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/WaitAllForkWorkflow.cs index c4c435167..f5f34a4b6 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/WaitAllForkWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/WaitAllForkWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/WaitAnyForkWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/WaitAnyForkWorkflow.cs index 97c1ecf3d..10d4fa395 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/WaitAnyForkWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/BlockingAndBreaking/Workflows/WaitAnyForkWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CanExecute/Activities/CustomActivity.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CanExecute/Activities/CustomActivity.cs index 53451aef4..2da3f0e1a 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CanExecute/Activities/CustomActivity.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CanExecute/Activities/CustomActivity.cs @@ -1,6 +1,5 @@ using Elsa.Expressions.Models; using Elsa.Extensions; -using Elsa.Workflows; using Elsa.Workflows.Contracts; using Elsa.Workflows.Models; using Elsa.Workflows.Services; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CanExecute/Workflows/MagicWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CanExecute/Workflows/MagicWorkflow.cs index cca331747..07f8f0a9f 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CanExecute/Workflows/MagicWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CanExecute/Workflows/MagicWorkflow.cs @@ -1,5 +1,4 @@ using Elsa.Extensions; -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.IntegrationTests.Scenarios.CanExecute.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Composites/Workflows.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Composites/Workflows.cs index 8cc9ce4e8..99d04435a 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Composites/Workflows.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Composites/Workflows.cs @@ -1,6 +1,5 @@ using Elsa.Extensions; using Elsa.JavaScript.Activities; -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CompositesAndOutcomes/CompositesAndOutcomeWaitAnyTests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CompositesAndOutcomes/CompositesAndOutcomeWaitAnyTests.cs index 30d38e9b4..5a212a85e 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CompositesAndOutcomes/CompositesAndOutcomeWaitAnyTests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CompositesAndOutcomes/CompositesAndOutcomeWaitAnyTests.cs @@ -1,5 +1,4 @@ using Elsa.Testing.Shared; -using Elsa.Workflows; using Xunit; using Xunit.Abstractions; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CompositesPassingData/Workflows.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CompositesPassingData/Workflows.cs index afc11d369..b81d5cf43 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CompositesPassingData/Workflows.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/CompositesPassingData/Workflows.cs @@ -1,5 +1,4 @@ using Elsa.Extensions; -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Management.Activities.SetOutput; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ExplicitJoins/ExplicitJoinWaitAnyTests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ExplicitJoins/ExplicitJoinWaitAnyTests.cs index c9767aeaf..50ea7dd66 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ExplicitJoins/ExplicitJoinWaitAnyTests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ExplicitJoins/ExplicitJoinWaitAnyTests.cs @@ -1,5 +1,4 @@ using Elsa.Testing.Shared; -using Elsa.Workflows; using Xunit; using Xunit.Abstractions; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartCompletion/Tests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartCompletion/Tests.cs index 55b219f8b..ac5bf3aeb 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartCompletion/Tests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartCompletion/Tests.cs @@ -1,5 +1,4 @@ using Elsa.Testing.Shared; -using Elsa.Workflows; using Xunit; using Xunit.Abstractions; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartNextActivity/Activities/CustomActivity.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartNextActivity/Activities/CustomActivity.cs index 5e410a004..500db4b16 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartNextActivity/Activities/CustomActivity.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartNextActivity/Activities/CustomActivity.cs @@ -1,5 +1,4 @@ using Elsa.Extensions; -using Elsa.Workflows; namespace Elsa.Workflows.IntegrationTests.Scenarios.FlowchartNextActivity.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartNextActivity/Workflows/FlowchartWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartNextActivity/Workflows/FlowchartWorkflow.cs index b9c5102f9..34a089367 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartNextActivity/Workflows/FlowchartWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/FlowchartNextActivity/Workflows/FlowchartWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Activities.Flowchart.Activities; using Elsa.Workflows.Activities.Flowchart.Models; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/BraidedWorkflowTests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/BraidedWorkflowTests.cs index 842d78398..05edf21a1 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/BraidedWorkflowTests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/BraidedWorkflowTests.cs @@ -1,5 +1,4 @@ using Elsa.Testing.Shared; -using Elsa.Workflows; using Elsa.Workflows.Contracts; using Elsa.Workflows.IntegrationTests.Scenarios.ImplicitJoins.Workflows; using Microsoft.Extensions.DependencyInjection; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/ImplicitLoopWorkflowTests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/ImplicitLoopWorkflowTests.cs index ed5511d91..2e24cace0 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/ImplicitLoopWorkflowTests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/ImplicitLoopWorkflowTests.cs @@ -1,5 +1,4 @@ using Elsa.Testing.Shared; -using Elsa.Workflows; using Elsa.Workflows.Contracts; using Elsa.Workflows.IntegrationTests.Scenarios.ImplicitJoins.Workflows; using Microsoft.Extensions.DependencyInjection; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/Workflows/BraidedWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/Workflows/BraidedWorkflow.cs index 103c76f2e..a34fa9679 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/Workflows/BraidedWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/Workflows/BraidedWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Activities.Flowchart.Activities; using Elsa.Workflows.Activities.Flowchart.Models; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/Workflows/ImplicitLoopWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/Workflows/ImplicitLoopWorkflow.cs index 9b4f60488..647f9a44f 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/Workflows/ImplicitLoopWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ImplicitJoins/Workflows/ImplicitLoopWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Activities.Flowchart.Activities; using Elsa.Workflows.Activities.Flowchart.Models; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Incidents/IncidentStrategyTests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Incidents/IncidentStrategyTests.cs index fc1f09fa6..f02d8561f 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Incidents/IncidentStrategyTests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Incidents/IncidentStrategyTests.cs @@ -1,5 +1,4 @@ using Elsa.Testing.Shared; -using Elsa.Workflows; using Elsa.Workflows.IncidentStrategies; using Elsa.Workflows.IntegrationTests.Scenarios.Incidents.Statics; using Elsa.Workflows.IntegrationTests.Scenarios.Incidents.Workflows; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Incidents/Workflows/FaultyWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Incidents/Workflows/FaultyWorkflow.cs index c43bc08b1..ab175d157 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Incidents/Workflows/FaultyWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/Incidents/Workflows/FaultyWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Activities.Flowchart.Activities; using Elsa.Workflows.Activities.Flowchart.Models; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Activities/JsonObjectProducer.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Activities/JsonObjectProducer.cs index 260257514..8e6e502f0 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Activities/JsonObjectProducer.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Activities/JsonObjectProducer.cs @@ -1,6 +1,5 @@ using System.Text.Json.Nodes; using Elsa.Extensions; -using Elsa.Workflows; namespace Elsa.Workflows.IntegrationTests.Scenarios.JsonObjectToObjectRemainsJsonObject.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Activities/ObjectProcessor.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Activities/ObjectProcessor.cs index 72714c991..72e809694 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Activities/ObjectProcessor.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Activities/ObjectProcessor.cs @@ -1,5 +1,4 @@ using Elsa.Extensions; -using Elsa.Workflows; using Elsa.Workflows.Models; namespace Elsa.Workflows.IntegrationTests.Scenarios.JsonObjectToObjectRemainsJsonObject.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Workflows/TestWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Workflows/TestWorkflow.cs index eb06a247c..d07e8a6fa 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Workflows/TestWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/JsonObjectToObjectRemainsJsonObject/Workflows/TestWorkflow.cs @@ -1,7 +1,6 @@ using System.Text.Json.Nodes; using Elsa.Expressions.Models; using Elsa.JavaScript.Models; -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.IntegrationTests.Scenarios.JsonObjectToObjectRemainsJsonObject.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ParentChildCompletion/Tests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ParentChildCompletion/Tests.cs index 498500a33..f1ec4ac68 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ParentChildCompletion/Tests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/ParentChildCompletion/Tests.cs @@ -1,5 +1,4 @@ using Elsa.Testing.Shared; -using Elsa.Workflows; using Xunit; using Xunit.Abstractions; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariables/Workflows.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariables/Workflows.cs index 91df3d6d8..0ca40fd9f 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariables/Workflows.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariables/Workflows.cs @@ -1,5 +1,4 @@ using Elsa.Extensions; -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Activities/CreateVariableActivity.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Activities/CreateVariableActivity.cs index bb2570401..2647f05a1 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Activities/CreateVariableActivity.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Activities/CreateVariableActivity.cs @@ -1,5 +1,4 @@ using Elsa.Extensions; -using Elsa.Workflows; namespace Elsa.Workflows.IntegrationTests.Scenarios.SetGetVariablesFromActivities.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Activities/ReadVariableActivity.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Activities/ReadVariableActivity.cs index 476738204..5aa1319d9 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Activities/ReadVariableActivity.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Activities/ReadVariableActivity.cs @@ -1,5 +1,4 @@ using Elsa.Extensions; -using Elsa.Workflows; namespace Elsa.Workflows.IntegrationTests.Scenarios.SetGetVariablesFromActivities.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Workflows/SampleWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Workflows/SampleWorkflow.cs index 171f89f9f..a827a5e67 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Workflows/SampleWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/SetGetVariablesFromActivities/Workflows/SampleWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.IntegrationTests.Scenarios.SetGetVariablesFromActivities.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/DefaultRuntimeTests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/DefaultRuntimeTests.cs index 726fcacd2..7c5f4da6e 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/DefaultRuntimeTests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/DefaultRuntimeTests.cs @@ -1,11 +1,10 @@ using Elsa.Mediator.HostedServices; using Elsa.Mediator.Options; using Elsa.Testing.Shared; -using Elsa.Workflows; using Elsa.Workflows.IntegrationTests.Scenarios.WorkflowCancellation.Workflows; using Elsa.Workflows.Models; using Elsa.Workflows.Runtime.Contracts; -using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Xunit; @@ -13,6 +12,9 @@ using Xunit.Abstractions; namespace Elsa.Workflows.IntegrationTests.Scenarios.WorkflowCancellation; +/// +/// Represents a class containing unit tests for the DefaultRuntime class. +/// public class DefaultRuntimeTests { private readonly IServiceProvider _services; @@ -22,6 +24,9 @@ public class DefaultRuntimeTests private readonly BackgroundCommandSenderHostedService _backgroundCommandSenderHostedService; private readonly BackgroundEventPublisherHostedService _backgroundEventPublisherHostedService; + /// + /// Initializes a new instance of the class. + /// public DefaultRuntimeTests(ITestOutputHelper testOutputHelper) { _services = new TestApplicationBuilder(testOutputHelper) @@ -59,7 +64,7 @@ public class DefaultRuntimeTests await _services.PopulateRegistriesAsync(); const string workflowDefinitionId = nameof(SimpleSuspendedWorkflow); - var workflowState = await _workflowRuntime.StartWorkflowAsync(workflowDefinitionId, new StartWorkflowRuntimeOptions()); + var workflowState = await _workflowRuntime.StartWorkflowAsync(workflowDefinitionId, new StartWorkflowRuntimeParams()); Assert.Equal(WorkflowStatus.Running, workflowState.Status); Assert.Equal(WorkflowSubStatus.Suspended, workflowState.SubStatus); @@ -83,10 +88,10 @@ public class DefaultRuntimeTests await _services.PopulateRegistriesAsync(); const string workflowDefinitionId = nameof(BulkSuspendedWorkflow); - var workflowState = await _workflowRuntime.StartWorkflowAsync(workflowDefinitionId, new StartWorkflowRuntimeOptions()); + var workflowState = await _workflowRuntime.StartWorkflowAsync(workflowDefinitionId, new StartWorkflowRuntimeParams()); var bookmarks = new Stack(workflowState.Bookmarks); - var resumeOptions = new ResumeWorkflowRuntimeOptions + var resumeOptions = new ResumeWorkflowRuntimeParams { BookmarkId = bookmarks.Pop().Id }; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/ProtoActorTests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/ProtoActorTests.cs index 8338d7c00..9f26eb960 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/ProtoActorTests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/ProtoActorTests.cs @@ -6,15 +6,15 @@ using Elsa.Testing.Shared; using Elsa.Workflows.IntegrationTests.Scenarios.WorkflowCancellation.Workflows; using Elsa.Workflows.Models; using Elsa.Workflows.Runtime.Contracts; -using Elsa.Workflows.Runtime.Options; +using Elsa.Workflows.Runtime.Parameters; using Microsoft.Data.Sqlite; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Proto.Persistence.Sqlite; using Xunit; using Xunit.Abstractions; -using WorkflowStatus = Elsa.Workflows.WorkflowStatus; -using WorkflowSubStatus = Elsa.Workflows.WorkflowSubStatus; + +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member namespace Elsa.Workflows.IntegrationTests.Scenarios.WorkflowCancellation; @@ -77,7 +77,7 @@ public class ProtoActorTests await _workflowServerHost.StartAsync(default); const string workflowDefinitionId = nameof(SimpleSuspendedWorkflow); var workflowState = - await _workflowRuntime.StartWorkflowAsync(workflowDefinitionId, new StartWorkflowRuntimeOptions()); + await _workflowRuntime.StartWorkflowAsync(workflowDefinitionId, new StartWorkflowRuntimeParams()); Assert.Equal(WorkflowStatus.Running, workflowState.Status); Assert.Equal(WorkflowSubStatus.Suspended, workflowState.SubStatus); @@ -91,8 +91,7 @@ public class ProtoActorTests Assert.Empty(_capturingTextWriter.Lines); } - [Fact(DisplayName = "Cancelling a running workflow", - Skip = "Unpredictable result, need to create a dispatcher for tests that will run outside of the unit test")] + [Fact(DisplayName = "Cancelling a running workflow", Skip = "Unpredictable result, need to create a dispatcher for tests that will run outside of the unit test")] public async Task RunningCancelTest() { // Populate registries. @@ -103,10 +102,10 @@ public class ProtoActorTests const string workflowDefinitionId = nameof(BulkSuspendedWorkflow); var workflowState = - await _workflowRuntime.StartWorkflowAsync(workflowDefinitionId, new StartWorkflowRuntimeOptions()); + await _workflowRuntime.StartWorkflowAsync(workflowDefinitionId, new StartWorkflowRuntimeParams()); var bookmarks = new Stack(workflowState.Bookmarks); - var resumeOptions = new ResumeWorkflowRuntimeOptions + var resumeOptions = new ResumeWorkflowRuntimeParams { BookmarkId = bookmarks.Pop().Id }; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/BulkSuspendedWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/BulkSuspendedWorkflow.cs index f5888ee48..e494a0f94 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/BulkSuspendedWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/BulkSuspendedWorkflow.cs @@ -1,5 +1,4 @@ using Elsa.Scheduling.Activities; -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Runtime.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/ResumeDispatchWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/ResumeDispatchWorkflow.cs index c524fa10f..447e896fb 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/ResumeDispatchWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/ResumeDispatchWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Models; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/SimpleChildWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/SimpleChildWorkflow.cs index 50938a966..c4e4aee65 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/SimpleChildWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/SimpleChildWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/SimpleSuspendedWorkflow.cs b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/SimpleSuspendedWorkflow.cs index 466c07eb5..d1f040efb 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/SimpleSuspendedWorkflow.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Scenarios/WorkflowCancellation/Workflows/SimpleSuspendedWorkflow.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Runtime.Activities; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Serialization/ProgrammaticWorkflowsAndDelegates/Workflows.cs b/test/integration/Elsa.Workflows.IntegrationTests/Serialization/ProgrammaticWorkflowsAndDelegates/Workflows.cs index e708c97f3..cdfff28d8 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Serialization/ProgrammaticWorkflowsAndDelegates/Workflows.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Serialization/ProgrammaticWorkflowsAndDelegates/Workflows.cs @@ -1,5 +1,4 @@ using Elsa.Extensions; -using Elsa.Workflows; using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Serialization/VariableExpressions/Tests.cs b/test/integration/Elsa.Workflows.IntegrationTests/Serialization/VariableExpressions/Tests.cs index 71068a82e..0c4a97d0d 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Serialization/VariableExpressions/Tests.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Serialization/VariableExpressions/Tests.cs @@ -1,7 +1,6 @@ using Elsa.Extensions; using Elsa.Testing.Shared; using Elsa.Workflows.Activities; -using Elsa.Workflows.Activities.Flowchart.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Management.Contracts; using Elsa.Workflows.Memory; diff --git a/test/integration/Elsa.Workflows.IntegrationTests/Serialization/VariableTypes/Workflows.cs b/test/integration/Elsa.Workflows.IntegrationTests/Serialization/VariableTypes/Workflows.cs index f4eb579a2..dc19f8ccf 100644 --- a/test/integration/Elsa.Workflows.IntegrationTests/Serialization/VariableTypes/Workflows.cs +++ b/test/integration/Elsa.Workflows.IntegrationTests/Serialization/VariableTypes/Workflows.cs @@ -1,4 +1,3 @@ -using Elsa.Workflows; using Elsa.Workflows.Contracts; namespace Elsa.Workflows.IntegrationTests.Serialization.VariableTypes;