From dd72ba3f14a5dcdc7c44ac22bf298513112b0f8e Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Fri, 8 Jan 2021 22:09:52 +0100 Subject: [PATCH] Fix StartAt issue --- .../Activities/StartAt/StartAt.cs | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/activities/Elsa.Activities.Timers/Activities/StartAt/StartAt.cs b/src/activities/Elsa.Activities.Timers/Activities/StartAt/StartAt.cs index 23b2eeda7..1e588fa29 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/StartAt/StartAt.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/StartAt/StartAt.cs @@ -1,10 +1,12 @@ using System.Threading.Tasks; +using Elsa.Activities.Timers.ActivityResults; using Elsa.Activities.Timers.Services; using Elsa.ActivityResults; using Elsa.Attributes; using Elsa.Persistence; using Elsa.Services; using Elsa.Services.Models; +using Microsoft.Extensions.Logging; using NodaTime; // ReSharper disable once CheckNamespace @@ -19,15 +21,13 @@ namespace Elsa.Activities.Timers )] public class StartAt : Activity { - private readonly IWorkflowInstanceStore _workflowInstanceStore; - private readonly IWorkflowScheduler _workflowScheduler; private readonly IClock _clock; + private readonly ILogger _logger; - public StartAt(IWorkflowInstanceStore workflowInstanceStore, IWorkflowScheduler workflowScheduler, IClock clock) + public StartAt(IClock clock, ILogger logger) { - _workflowInstanceStore = workflowInstanceStore; - _workflowScheduler = workflowScheduler; _clock = clock; + _logger = logger; } [ActivityProperty(Hint = "An instant in the future at which this activity should execute.")] @@ -44,20 +44,18 @@ namespace Elsa.Activities.Timers if (context.WorkflowExecutionContext.IsFirstPass) return Done(); - var cancellationToken = context.CancellationToken; - var workflowBlueprint = context.WorkflowExecutionContext.WorkflowBlueprint; - var workflowInstance = context.WorkflowExecutionContext.WorkflowInstance; + var now = _clock.GetCurrentInstant(); var executeAt = Instant; ExecuteAt = executeAt; - if (executeAt <= _clock.GetCurrentInstant()) + if (executeAt <= now) + { + _logger.LogDebug("Scheduled trigger time lies in the past ('{Delta}'). Skipping scheduling.", now - ExecuteAt); return Done(); + } - await _workflowInstanceStore.SaveAsync(context.WorkflowExecutionContext.WorkflowInstance, cancellationToken); - await _workflowScheduler.ScheduleWorkflowAsync(workflowBlueprint, workflowInstance.Id, Id, executeAt, cancellationToken); - - return Suspend(); + return Combine(Suspend(), new ScheduleWorkflowResult(executeAt)); } protected override IActivityExecutionResult OnResume() => Done();