From f8af3afdb433f19d1d3dce7645fc6878c655e5a6 Mon Sep 17 00:00:00 2001 From: Charles d'Avernas Date: Thu, 23 Jan 2025 13:44:43 +0100 Subject: [PATCH] fix(Runner): Fixed the `WorkflowDefinitionExtensions` and `DoTaskDefinitionExtensions` to rely on name to determine the next task, instead of relying of task record equality, which resulted in wrong resolution when the task had similar properties Fixes #485 Signed-off-by: Charles d'Avernas --- .../Synapse.Runner/Extensions/DoTaskDefinitionExtensions.cs | 3 +-- .../Synapse.Runner/Extensions/WorkflowDefinitionExtensions.cs | 3 +-- .../Services/ConnectedWorkflowExecutionContext.cs | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/runner/Synapse.Runner/Extensions/DoTaskDefinitionExtensions.cs b/src/runner/Synapse.Runner/Extensions/DoTaskDefinitionExtensions.cs index a92c32c93..fe87c950c 100644 --- a/src/runner/Synapse.Runner/Extensions/DoTaskDefinitionExtensions.cs +++ b/src/runner/Synapse.Runner/Extensions/DoTaskDefinitionExtensions.cs @@ -31,8 +31,7 @@ public static class DoTaskDefinitionExtensions switch (after.Next) { case FlowDirective.Continue: - var afterTask = doTask.Do[after.Name!]; - var afterIndex = doTask.Do.Select(t => t.Value).ToList().IndexOf(afterTask); + var afterIndex = doTask.Do.Select(t => t.Key).ToList().IndexOf(after.Name!); return doTask.Do.Skip(afterIndex + 1).FirstOrDefault(); case FlowDirective.End: case FlowDirective.Exit: return default; default: return new(after.Next!, doTask.Do[after.Next!]); diff --git a/src/runner/Synapse.Runner/Extensions/WorkflowDefinitionExtensions.cs b/src/runner/Synapse.Runner/Extensions/WorkflowDefinitionExtensions.cs index e296ba593..7d23b5de9 100644 --- a/src/runner/Synapse.Runner/Extensions/WorkflowDefinitionExtensions.cs +++ b/src/runner/Synapse.Runner/Extensions/WorkflowDefinitionExtensions.cs @@ -31,8 +31,7 @@ public static class WorkflowDefinitionExtensions switch (after.Status == TaskInstanceStatus.Skipped ? FlowDirective.Continue : after.Next) { case FlowDirective.Continue: - var afterTask = workflow.Do[after.Name!]; - var afterIndex = workflow.Do.Select(e => e.Value).ToList().IndexOf(afterTask); + var afterIndex = workflow.Do.Select(kvp => kvp.Key).ToList().IndexOf(after.Name!); return workflow.Do.Skip(afterIndex + 1).FirstOrDefault(); case FlowDirective.End: case FlowDirective.Exit: return default; default: return new(after.Next!, workflow.Do[after.Next!]); diff --git a/src/runner/Synapse.Runner/Services/ConnectedWorkflowExecutionContext.cs b/src/runner/Synapse.Runner/Services/ConnectedWorkflowExecutionContext.cs index adb47df53..cb4ccfb00 100644 --- a/src/runner/Synapse.Runner/Services/ConnectedWorkflowExecutionContext.cs +++ b/src/runner/Synapse.Runner/Services/ConnectedWorkflowExecutionContext.cs @@ -123,7 +123,7 @@ public virtual async Task CreateTaskAsync(TaskDefinition definitio } else { - var contextDocument = await this.Documents.CreateAsync($"{reference}/input", context, cancellationToken).ConfigureAwait(false); + var contextDocument = await this.Documents.CreateAsync($"{reference}/context", context, cancellationToken).ConfigureAwait(false); contextReference = contextDocument.Id; } var filteredInput = input;