Re-enable re-queueing of messages for locked workflows and update timer activities to not execute if scheduled time lies in future

This commit is contained in:
Sipke Schoorstra 2021-02-09 21:31:09 +01:00
parent 3e12cd59ce
commit de6fce52d4
4 changed files with 23 additions and 3 deletions

View file

@ -38,6 +38,13 @@ namespace Elsa.Activities.Timers
get => GetState<Instant?>();
set => SetState(value);
}
protected override bool OnCanExecute(ActivityExecutionContext context)
{
var now = _clock.GetCurrentInstant();
var executeAt = ExecuteAt;
return executeAt == null || executeAt <= now;
}
protected override async ValueTask<IActivityExecutionResult> OnExecuteAsync(ActivityExecutionContext context)
{

View file

@ -36,6 +36,13 @@ namespace Elsa.Activities.Timers
set => SetState(value);
}
protected override bool OnCanExecute(ActivityExecutionContext context)
{
var executeAt = ExecuteAt;
var now = _clock.GetCurrentInstant();
return executeAt == null || executeAt <= now;
}
protected override IActivityExecutionResult OnExecute(ActivityExecutionContext context)
{
if (context.WorkflowExecutionContext.IsFirstPass)

View file

@ -29,6 +29,13 @@ namespace Elsa.Activities.Timers
get => GetState<Instant?>();
set => SetState(value);
}
protected override bool OnCanExecute(ActivityExecutionContext context)
{
var now = _clock.GetCurrentInstant();
var executeAt = ExecuteAt;
return executeAt == null || executeAt <= now;
}
protected override IActivityExecutionResult OnExecute(ActivityExecutionContext context)
{

View file

@ -46,9 +46,8 @@ namespace Elsa.Consumers
if (!await _distributedLockProvider.AcquireLockAsync(lockKey))
{
// TODO: Reschedule message if it's not a redelivery.
// var currentContext = MessageContext.Current;
_logger.LogDebug("Failed to acquire lock on workflow instance {WorkflowInstanceId}", workflowInstanceId);
_logger.LogDebug("Failed to acquire lock on workflow instance {WorkflowInstanceId}. Re-queueing message", workflowInstanceId);
await _commandSender.SendAsync(message);
return;
}