Skip to content

Commit

Permalink
improve workflow scheduling
Browse files Browse the repository at this point in the history
  • Loading branch information
danielgerlag committed Jul 5, 2018
1 parent 29db20e commit 0877986
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 18 deletions.
31 changes: 16 additions & 15 deletions src/WorkflowCore/Services/WorkflowExecutor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ private void ProcessAfterExecutionIteration(WorkflowInstance workflow, WorkflowD

private void DetermineNextExecutionTime(WorkflowInstance workflow)
{
//TODO: move to own class
workflow.NextExecution = null;

if (workflow.Status == WorkflowStatus.Complete)
Expand All @@ -212,33 +213,33 @@ private void DetermineNextExecutionTime(WorkflowInstance workflow)
return;
}

long pointerSleep = pointer.SleepUntil.Value.ToUniversalTime().Ticks;
var pointerSleep = pointer.SleepUntil.Value.ToUniversalTime().Ticks;
workflow.NextExecution = Math.Min(pointerSleep, workflow.NextExecution ?? pointerSleep);
}

if (workflow.NextExecution == null)
{
foreach (var pointer in workflow.ExecutionPointers.Where(x => x.Active && (x.Children ?? new List<string>()).Count > 0))
{
if (workflow.ExecutionPointers.Where(x => pointer.Children.Contains(x.Id)).All(x => x.EndTime.HasValue))
if (!workflow.ExecutionPointers.Where(x => x.Scope.Contains(pointer.Id)).All(x => x.EndTime.HasValue))
continue;

if (!pointer.SleepUntil.HasValue)
{
if (!pointer.SleepUntil.HasValue)
{
workflow.NextExecution = 0;
return;
}

long pointerSleep = pointer.SleepUntil.Value.ToUniversalTime().Ticks;
workflow.NextExecution = Math.Min(pointerSleep, workflow.NextExecution ?? pointerSleep);
workflow.NextExecution = 0;
return;
}

var pointerSleep = pointer.SleepUntil.Value.ToUniversalTime().Ticks;
workflow.NextExecution = Math.Min(pointerSleep, workflow.NextExecution ?? pointerSleep);
}
}

if ((workflow.NextExecution == null) && (workflow.ExecutionPointers.All(x => x.EndTime != null)))
{
workflow.Status = WorkflowStatus.Complete;
workflow.CompleteTime = _datetimeProvider.Now.ToUniversalTime();
}
if ((workflow.NextExecution != null) || (workflow.ExecutionPointers.Any(x => x.EndTime == null)))
return;

workflow.Status = WorkflowStatus.Complete;
workflow.CompleteTime = _datetimeProvider.Now.ToUniversalTime();
}

}
Expand Down
6 changes: 3 additions & 3 deletions src/WorkflowCore/WorkflowCore.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<Description>Workflow Core is a light weight workflow engine targeting .NET Standard.</Description>
<Version>1.6.3</Version>
<AssemblyVersion>1.6.3.0</AssemblyVersion>
<FileVersion>1.6.3.0</FileVersion>
<Version>1.6.4</Version>
<AssemblyVersion>1.6.4.0</AssemblyVersion>
<FileVersion>1.6.4.0</FileVersion>
<PackageReleaseNotes></PackageReleaseNotes>
<PackageIconUrl>https://github.com/danielgerlag/workflow-core/raw/master/src/logo.png</PackageIconUrl>
</PropertyGroup>
Expand Down

0 comments on commit 0877986

Please sign in to comment.