Skip to content

Commit 61ccea7

Browse files
authored
Merge pull request danielgerlag#475 from cocytus/utc-now
Add UtcNow to IDateTimeProvider, and use that throughout.
2 parents fe78b6b + e740447 commit 61ccea7

File tree

12 files changed

+27
-23
lines changed

12 files changed

+27
-23
lines changed

src/WorkflowCore/Interface/IDateTimeProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ namespace WorkflowCore.Interface
55
public interface IDateTimeProvider
66
{
77
DateTime Now { get; }
8+
DateTime UtcNow { get; }
89
}
910
}

src/WorkflowCore/Services/BackgroundTasks/EventConsumer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ protected override async Task ProcessItem(string itemId, CancellationToken cance
3737
{
3838
cancellationToken.ThrowIfCancellationRequested();
3939
var evt = await _persistenceStore.GetEvent(itemId);
40-
if (evt.EventTime <= _datetimeProvider.Now.ToUniversalTime())
40+
if (evt.EventTime <= _datetimeProvider.UtcNow)
4141
{
4242
var subs = await _persistenceStore.GetSubcriptions(evt.EventName, evt.EventKey, evt.EventTime);
4343
var toQueue = new List<string>();

src/WorkflowCore/Services/BackgroundTasks/WorkflowConsumer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ protected override async Task ProcessItem(string itemId, CancellationToken cance
7171

7272
await persistenceStore.PersistErrors(result.Errors);
7373

74-
var readAheadTicks = _datetimeProvider.Now.Add(Options.PollInterval).ToUniversalTime().Ticks;
74+
var readAheadTicks = _datetimeProvider.UtcNow.Add(Options.PollInterval).Ticks;
7575

7676
if ((workflow.Status == WorkflowStatus.Runnable) && workflow.NextExecution.HasValue && workflow.NextExecution.Value < readAheadTicks)
7777
{
@@ -109,7 +109,7 @@ private async void FutureQueue(WorkflowInstance workflow, CancellationToken canc
109109
return;
110110
}
111111

112-
var target = (workflow.NextExecution.Value - _datetimeProvider.Now.ToUniversalTime().Ticks);
112+
var target = (workflow.NextExecution.Value - _datetimeProvider.UtcNow.Ticks);
113113
if (target > 0)
114114
{
115115
await Task.Delay(TimeSpan.FromTicks(target), cancellationToken);

src/WorkflowCore/Services/DateTimeProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ namespace WorkflowCore.Services
66
public class DateTimeProvider : IDateTimeProvider
77
{
88
public DateTime Now => DateTime.Now;
9+
public DateTime UtcNow => DateTime.UtcNow;
910
}
1011
}

src/WorkflowCore/Services/ErrorHandlers/CompensateHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public void Handle(WorkflowInstance workflow, WorkflowDefinition def, ExecutionP
6060
}
6161

6262
scopePointer.Active = false;
63-
scopePointer.EndTime = _datetimeProvider.Now.ToUniversalTime();
63+
scopePointer.EndTime = _datetimeProvider.UtcNow;
6464
scopePointer.Status = PointerStatus.Failed;
6565

6666
if (scopeStep.CompensationStepId.HasValue)

src/WorkflowCore/Services/ErrorHandlers/RetryHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public RetryHandler(IDateTimeProvider datetimeProvider, WorkflowOptions options)
2222
public void Handle(WorkflowInstance workflow, WorkflowDefinition def, ExecutionPointer pointer, WorkflowStep step, Exception exception, Queue<ExecutionPointer> bubbleUpQueue)
2323
{
2424
pointer.RetryCount++;
25-
pointer.SleepUntil = _datetimeProvider.Now.ToUniversalTime().Add(step.RetryInterval ?? def.DefaultErrorRetryInterval ?? _options.ErrorRetryInterval);
25+
pointer.SleepUntil = _datetimeProvider.UtcNow.Add(step.RetryInterval ?? def.DefaultErrorRetryInterval ?? _options.ErrorRetryInterval);
2626
step.PrimeForRetry(pointer);
2727
}
2828
}

src/WorkflowCore/Services/ErrorHandlers/SuspendHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public void Handle(WorkflowInstance workflow, WorkflowDefinition def, ExecutionP
2424
workflow.Status = WorkflowStatus.Suspended;
2525
_eventPublisher.PublishNotification(new WorkflowSuspended()
2626
{
27-
EventTimeUtc = _datetimeProvider.Now,
27+
EventTimeUtc = _datetimeProvider.UtcNow,
2828
Reference = workflow.Reference,
2929
WorkflowInstanceId = workflow.Id,
3030
WorkflowDefinitionId = workflow.WorkflowDefinitionId,

src/WorkflowCore/Services/ErrorHandlers/TerminateHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public void Handle(WorkflowInstance workflow, WorkflowDefinition def, ExecutionP
2424
workflow.Status = WorkflowStatus.Terminated;
2525
_eventPublisher.PublishNotification(new WorkflowTerminated()
2626
{
27-
EventTimeUtc = _datetimeProvider.Now,
27+
EventTimeUtc = _datetimeProvider.UtcNow,
2828
Reference = workflow.Reference,
2929
WorkflowInstanceId = workflow.Id,
3030
WorkflowDefinitionId = workflow.WorkflowDefinitionId,

src/WorkflowCore/Services/ExecutionResultProcessor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public void ProcessExecutionResult(WorkflowInstance workflow, WorkflowDefinition
3333
pointer.Outcome = result.OutcomeValue;
3434
if (result.SleepFor.HasValue)
3535
{
36-
pointer.SleepUntil = _datetimeProvider.Now.ToUniversalTime().Add(result.SleepFor.Value);
36+
pointer.SleepUntil = _datetimeProvider.UtcNow.Add(result.SleepFor.Value);
3737
pointer.Status = PointerStatus.Sleeping;
3838
}
3939

@@ -57,7 +57,7 @@ public void ProcessExecutionResult(WorkflowInstance workflow, WorkflowDefinition
5757
if (result.Proceed)
5858
{
5959
pointer.Active = false;
60-
pointer.EndTime = _datetimeProvider.Now.ToUniversalTime();
60+
pointer.EndTime = _datetimeProvider.UtcNow;
6161
pointer.Status = PointerStatus.Complete;
6262

6363
foreach (var outcomeTarget in step.Outcomes.Where(x => object.Equals(x.GetValue(workflow.Data), result.OutcomeValue) || x.GetValue(workflow.Data) == null))
@@ -67,7 +67,7 @@ public void ProcessExecutionResult(WorkflowInstance workflow, WorkflowDefinition
6767

6868
_eventPublisher.PublishNotification(new StepCompleted()
6969
{
70-
EventTimeUtc = _datetimeProvider.Now,
70+
EventTimeUtc = _datetimeProvider.UtcNow,
7171
Reference = workflow.Reference,
7272
ExecutionPointerId = pointer.Id,
7373
StepId = step.Id,
@@ -92,7 +92,7 @@ public void HandleStepException(WorkflowInstance workflow, WorkflowDefinition de
9292
{
9393
_eventPublisher.PublishNotification(new WorkflowError()
9494
{
95-
EventTimeUtc = _datetimeProvider.Now,
95+
EventTimeUtc = _datetimeProvider.UtcNow,
9696
Reference = workflow.Reference,
9797
WorkflowInstanceId = workflow.Id,
9898
WorkflowDefinitionId = workflow.WorkflowDefinitionId,

src/WorkflowCore/Services/WorkflowExecutor.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public async Task<WorkflowExecutorResult> Execute(WorkflowInstance workflow)
4141
{
4242
var wfResult = new WorkflowExecutorResult();
4343

44-
var exePointers = new List<ExecutionPointer>(workflow.ExecutionPointers.Where(x => x.Active && (!x.SleepUntil.HasValue || x.SleepUntil < _datetimeProvider.Now.ToUniversalTime())));
44+
var exePointers = new List<ExecutionPointer>(workflow.ExecutionPointers.Where(x => x.Active && (!x.SleepUntil.HasValue || x.SleepUntil < _datetimeProvider.UtcNow)));
4545
var def = _registry.GetDefinition(workflow.WorkflowDefinitionId, workflow.Version);
4646
if (def == null)
4747
{
@@ -60,12 +60,12 @@ public async Task<WorkflowExecutorResult> Execute(WorkflowInstance workflow)
6060
if (step == null)
6161
{
6262
_logger.LogError("Unable to find step {0} in workflow definition", pointer.StepId);
63-
pointer.SleepUntil = _datetimeProvider.Now.ToUniversalTime().Add(_options.ErrorRetryInterval);
63+
pointer.SleepUntil = _datetimeProvider.UtcNow.Add(_options.ErrorRetryInterval);
6464
wfResult.Errors.Add(new ExecutionError()
6565
{
6666
WorkflowId = workflow.Id,
6767
ExecutionPointerId = pointer.Id,
68-
ErrorTime = _datetimeProvider.Now.ToUniversalTime(),
68+
ErrorTime = _datetimeProvider.UtcNow,
6969
Message = $"Unable to find step {pointer.StepId} in workflow definition"
7070
});
7171
continue;
@@ -85,7 +85,7 @@ public async Task<WorkflowExecutorResult> Execute(WorkflowInstance workflow)
8585
{
8686
WorkflowId = workflow.Id,
8787
ExecutionPointerId = pointer.Id,
88-
ErrorTime = _datetimeProvider.Now.ToUniversalTime(),
88+
ErrorTime = _datetimeProvider.UtcNow,
8989
Message = ex.Message
9090
});
9191

@@ -108,7 +108,7 @@ private bool InitializeStep(WorkflowInstance workflow, WorkflowStep step, Workfl
108108
return false;
109109
case ExecutionPipelineDirective.EndWorkflow:
110110
workflow.Status = WorkflowStatus.Complete;
111-
workflow.CompleteTime = _datetimeProvider.Now.ToUniversalTime();
111+
workflow.CompleteTime = _datetimeProvider.UtcNow;
112112
return false;
113113
}
114114

@@ -117,7 +117,7 @@ private bool InitializeStep(WorkflowInstance workflow, WorkflowStep step, Workfl
117117
pointer.Status = PointerStatus.Running;
118118
_publisher.PublishNotification(new StepStarted()
119119
{
120-
EventTimeUtc = _datetimeProvider.Now,
120+
EventTimeUtc = _datetimeProvider.UtcNow,
121121
Reference = workflow.Reference,
122122
ExecutionPointerId = pointer.Id,
123123
StepId = step.Id,
@@ -129,7 +129,7 @@ private bool InitializeStep(WorkflowInstance workflow, WorkflowStep step, Workfl
129129

130130
if (!pointer.StartTime.HasValue)
131131
{
132-
pointer.StartTime = _datetimeProvider.Now.ToUniversalTime();
132+
pointer.StartTime = _datetimeProvider.UtcNow;
133133
}
134134

135135
return true;
@@ -146,12 +146,12 @@ private async Task ExecuteStep(WorkflowInstance workflow, WorkflowStep step, Exe
146146
if (body == null)
147147
{
148148
_logger.LogError("Unable to construct step body {0}", step.BodyType.ToString());
149-
pointer.SleepUntil = _datetimeProvider.Now.ToUniversalTime().Add(_options.ErrorRetryInterval);
149+
pointer.SleepUntil = _datetimeProvider.UtcNow.Add(_options.ErrorRetryInterval);
150150
wfResult.Errors.Add(new ExecutionError()
151151
{
152152
WorkflowId = workflow.Id,
153153
ExecutionPointerId = pointer.Id,
154-
ErrorTime = _datetimeProvider.Now.ToUniversalTime(),
154+
ErrorTime = _datetimeProvider.UtcNow,
155155
Message = $"Unable to construct step body {step.BodyType.ToString()}"
156156
});
157157
return;
@@ -175,7 +175,7 @@ private async Task ExecuteStep(WorkflowInstance workflow, WorkflowStep step, Exe
175175
return;
176176
case ExecutionPipelineDirective.EndWorkflow:
177177
workflow.Status = WorkflowStatus.Complete;
178-
workflow.CompleteTime = _datetimeProvider.Now.ToUniversalTime();
178+
workflow.CompleteTime = _datetimeProvider.UtcNow;
179179
return;
180180
}
181181

@@ -245,10 +245,10 @@ private void DetermineNextExecutionTime(WorkflowInstance workflow)
245245
return;
246246

247247
workflow.Status = WorkflowStatus.Complete;
248-
workflow.CompleteTime = _datetimeProvider.Now.ToUniversalTime();
248+
workflow.CompleteTime = _datetimeProvider.UtcNow;
249249
_publisher.PublishNotification(new WorkflowCompleted()
250250
{
251-
EventTimeUtc = _datetimeProvider.Now,
251+
EventTimeUtc = _datetimeProvider.UtcNow,
252252
Reference = workflow.Reference,
253253
WorkflowInstanceId = workflow.Id,
254254
WorkflowDefinitionId = workflow.WorkflowDefinitionId,

0 commit comments

Comments
 (0)