Fix build after merge

This commit is contained in:
Sipke Schoorstra 2020-12-23 12:50:34 +01:00
parent 4274996dd9
commit b24ff99354
18 changed files with 42 additions and 42 deletions

View file

@ -33,8 +33,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "activities", "activities",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Email", "src\activities\Elsa.Activities.Email\Elsa.Activities.Email.csproj", "{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Timers", "src\activities\Elsa.Activities.Timers\Elsa.Activities.Timers.csproj", "{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.MassTransit", "src\activities\Elsa.Activities.MassTransit\Elsa.Activities.MassTransit.csproj", "{C4939482-9447-47D1-B6AF-E9F8C6323841}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{5E5E1E84-DDBC-40D6-B891-0D563A15A44A}"
@ -174,6 +172,7 @@ EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Timers.Hangfire", "src\activities\Elsa.Activities.Timers.Hangfire\Elsa.Activities.Timers.Hangfire.csproj", "{34FB968B-A147-4811-823D-D206FD0027AD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Timers.Hangfire", "src\samples\worker\Elsa.Samples.Timers.Hangfire\Elsa.Samples.Timers.Hangfire.csproj", "{7BDF193D-CD69-4D47-B7BF-A8A1D93EBCB9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Entity", "src\activities\Elsa.Activities.Entity\Elsa.Activities.Entity.csproj", "{A0A8431F-3A2F-433A-BB0D-EB9627DFA739}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.EntityChanged", "src\samples\console\Elsa.Samples.EntityChanged\Elsa.Samples.EntityChanged.csproj", "{A3149FE4-FD39-4DC2-AA9F-208C7216BC03}"
@ -184,6 +183,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.DistributedLocking.Red
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.DistributedLocking.SqlServer", "src\locking\Elsa.DistributedLocking.SqlServer\Elsa.DistributedLocking.SqlServer.csproj", "{78F2A9DC-3092-4371-ABFE-87C5DA4DE351}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Timers", "src\activities\Elsa.Activities.Timers\Elsa.Activities.Timers.csproj", "{74E83393-50AF-41E3-A1C8-97202673CD85}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -210,10 +211,6 @@ Global
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Release|Any CPU.Build.0 = Release|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Release|Any CPU.Build.0 = Release|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -442,6 +439,10 @@ Global
{78F2A9DC-3092-4371-ABFE-87C5DA4DE351}.Debug|Any CPU.Build.0 = Debug|Any CPU
{78F2A9DC-3092-4371-ABFE-87C5DA4DE351}.Release|Any CPU.ActiveCfg = Release|Any CPU
{78F2A9DC-3092-4371-ABFE-87C5DA4DE351}.Release|Any CPU.Build.0 = Release|Any CPU
{74E83393-50AF-41E3-A1C8-97202673CD85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{74E83393-50AF-41E3-A1C8-97202673CD85}.Debug|Any CPU.Build.0 = Debug|Any CPU
{74E83393-50AF-41E3-A1C8-97202673CD85}.Release|Any CPU.ActiveCfg = Release|Any CPU
{74E83393-50AF-41E3-A1C8-97202673CD85}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -454,7 +455,6 @@ Global
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{B43B546E-23F3-46E8-ACB7-D04F05CDA180} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D} = {37D2E628-5CC1-4C8E-8C02-3B0A29E2ACAA}
{C4939482-9447-47D1-B6AF-E9F8C6323841} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{5E5E1E84-DDBC-40D6-B891-0D563A15A44A} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{823F80B6-E241-43F7-83BD-29FBB58A77F9} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
@ -528,6 +528,7 @@ Global
{C3842132-35BC-4F6D-85CC-7098887F4307} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{C90CD39C-8CDD-4BCB-AB6A-CF981D468DD2} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{78F2A9DC-3092-4371-ABFE-87C5DA4DE351} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{74E83393-50AF-41E3-A1C8-97202673CD85} = {37D2E628-5CC1-4C8E-8C02-3B0A29E2ACAA}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158}

View file

@ -7,7 +7,7 @@
<TargetFramework>netstandard2.0</TargetFramework>
<Description>
Elsa is a set of workflow libraries and tools that enable lean and mean workflowing capabilities in any .NET Core application.
This package provides Hangfire timer provider.
This package provides a Hangfire timer provider.
</Description>
<PackageTags>elsa, workflows, timers, background tasks</PackageTags>

View file

@ -5,6 +5,7 @@ using Elsa.Activities.Timers.Hangfire.Models;
using Elsa.Activities.Timers.Services;
using Elsa.Models;
using Elsa.Persistence;
using Elsa.Persistence.Specifications;
using Elsa.Services;
using Hangfire;
@ -42,7 +43,7 @@ namespace Elsa.Activities.Timers.Hangfire.Jobs
if (data.WorkflowInstanceId == null)
{
if (workflowBlueprint.IsSingleton == false || await _workflowInstanceManager.GetWorkflowIsAlreadyExecutingAsync(data.TenantId, data.WorkflowDefinitionId) == false)
if (workflowBlueprint.IsSingleton == false || await GetWorkflowIsAlreadyExecutingAsync(data.TenantId, data.WorkflowDefinitionId) == false)
{
await _workflowRunner.RunWorkflowAsync(workflowBlueprint, data.ActivityId);
}
@ -63,7 +64,7 @@ namespace Elsa.Activities.Timers.Hangfire.Jobs
}
// If it is a RecurringJob and the instance is null, the timer activity is a start trigger.
if (data.IsRecurringJob && (workflowInstance == null || workflowInstance.Status is not (WorkflowStatus.Finished or WorkflowStatus.Cancelled)))
if (data.IsRecurringJob && (workflowInstance == null || workflowInstance.WorkflowStatus is not (WorkflowStatus.Finished or WorkflowStatus.Cancelled)))
{
var backgroundJobClient = _serviceProvider.GetRequiredService<IBackgroundJobClient>();
var crontabParer = _serviceProvider.GetRequiredService<ICrontabParser>();
@ -71,6 +72,13 @@ namespace Elsa.Activities.Timers.Hangfire.Jobs
backgroundJobClient.ScheduleWorkflow(data, crontabParer.GetNextOccurrence(data.CronExpression!).ToDateTimeOffset());
}
}
private async Task<bool> GetWorkflowIsAlreadyExecutingAsync(string? tenantId, string workflowDefinitionId)
{
var specification = new TenantSpecification<WorkflowInstance>(tenantId).WithWorkflowDefinition(workflowDefinitionId).And(new WorkflowIsAlreadyExecutingSpecification());
var count = await _workflowInstanceManager.CountAsync(specification);
return count > 0;
}
private async Task<WorkflowInstance?> GetWorkflowInstanceAsync(string workflowInstanceId)
{
@ -78,7 +86,7 @@ namespace Elsa.Activities.Timers.Hangfire.Jobs
for (var i = 0; i < TimerConsts.MaxRetrayGetWorkflow && workflowInstance == null; i++)
{
workflowInstance = await _workflowInstanceManager.GetByIdAsync(workflowInstanceId);
workflowInstance = await _workflowInstanceManager.FindByIdAsync(workflowInstanceId);
if (workflowInstance == null)
{

View file

@ -65,7 +65,7 @@ namespace Elsa.Activities.Timers.Hangfire.Services
_backgroundJobClient.UnscheduleJobWhenAlreadyExists(
CreateData(workflowExecutionContext.WorkflowBlueprint,
activityId: activityId,
workflowInstanceId: workflowExecutionContext.WorkflowInstance.WorkflowInstanceId)
workflowInstanceId: workflowExecutionContext.WorkflowInstance.Id)
);
return Task.CompletedTask;

View file

@ -7,7 +7,7 @@
<TargetFramework>netstandard2.0</TargetFramework>
<Description>
Elsa is a set of workflow libraries and tools that enable lean and mean workflowing capabilities in any .NET Core application.
This package provides Quartz timer provider.
This package provides a Quartz timer provider.
</Description>
</PropertyGroup>

View file

@ -14,14 +14,14 @@ namespace Elsa.Activities.Timers.Quartz.Jobs
{
private readonly IWorkflowRunner _workflowRunner;
private readonly IWorkflowRegistry _workflowRegistry;
private readonly IWorkflowInstanceStore _workflowInstanceManager;
private readonly IWorkflowInstanceStore _workflowInstanceStore;
private readonly ILogger _logger;
public RunQuartzWorkflowJob(IWorkflowRunner workflowRunner, IWorkflowRegistry workflowRegistry, IWorkflowInstanceStore workflowInstanceStore, ILogger<RunQuartzWorkflowJob> logger)
{
_workflowRunner = workflowRunner;
_workflowRegistry = workflowRegistry;
_workflowInstanceManager = workflowInstanceStore;
_workflowInstanceStore = workflowInstanceStore;
_logger = logger;
}
@ -39,7 +39,7 @@ namespace Elsa.Activities.Timers.Quartz.Jobs
{
if (workflowBlueprint.IsSingleton)
{
var hasExecutingWorkflow = (await _workflowInstanceManager.FindAsync(new WorkflowIsAlreadyExecutingSpecification().WithTenant(tenantId).WithWorkflowDefinition(workflowDefinitionId), cancellationToken)) != null;
var hasExecutingWorkflow = (await _workflowInstanceStore.FindAsync(new WorkflowIsAlreadyExecutingSpecification().WithTenant(tenantId).WithWorkflowDefinition(workflowDefinitionId), cancellationToken)) != null;
if (hasExecutingWorkflow)
return;
@ -49,11 +49,11 @@ namespace Elsa.Activities.Timers.Quartz.Jobs
}
else
{
var workflowInstance = await _workflowInstanceManager.FindByIdAsync(workflowInstanceId, cancellationToken);
var workflowInstance = await _workflowInstanceStore.FindByIdAsync(workflowInstanceId, cancellationToken);
if (workflowInstance == null)
{
_logger.LogError("Could not run Workflow instance with ID {WorkflowInstanceId} because it is not in the database", data.WorkflowInstanceId);
_logger.LogError("Could not run Workflow instance with ID {WorkflowInstanceId} because it is not in the database", workflowInstanceId);
return;
}
@ -67,7 +67,7 @@ namespace Elsa.Activities.Timers.Quartz.Jobs
for (var i = 0; i < TimerConsts.MaxRetrayGetWorkflow && workflowInstance == null; i++)
{
workflowInstance = await _workflowInstanceManager.GetByIdAsync(workflowInstanceId, cancellationToken);
workflowInstance = await _workflowInstanceStore.FindByIdAsync(workflowInstanceId, cancellationToken);
if (workflowInstance == null)
{

View file

@ -58,7 +58,7 @@ namespace Elsa.Activities.Timers.Quartz.Services
var scheduler = await _schedulerFactory.GetScheduler(cancellationToken);
var trigger = CreateTriggerKey(tenantId: workflowExecutionContext.WorkflowBlueprint.TenantId,
workflowDefinitionId: workflowExecutionContext.WorkflowBlueprint.Id,
workflowInstanceId: workflowExecutionContext.WorkflowInstance.WorkflowInstanceId,
workflowInstanceId: workflowExecutionContext.WorkflowInstance.Id,
activityId: activityId);
var existingTrigger = await scheduler.GetTrigger(trigger, cancellationToken);

View file

@ -24,7 +24,7 @@ namespace Elsa.Activities.Timers
private readonly IWorkflowScheduler _workflowScheduler;
private readonly ICrontabParser _crontabParser;
public Cron(IWorkflowInstanceStore workflowInstanceStore, IWorkflowScheduler workflowScheduler, IClock clock)
public Cron(IWorkflowInstanceStore workflowInstanceStore, IWorkflowScheduler workflowScheduler, ICrontabParser crontabParser, IClock clock)
{
_clock = clock;
_workflowInstanceStore = workflowInstanceStore;

View file

@ -7,11 +7,6 @@
<TargetFramework>netstandard2.0</TargetFramework>
<Description>
Elsa is a set of workflow libraries and tools that enable lean and mean workflowing capabilities in any .NET Core application.
</Description>
<Copyright>2020</Copyright>
<PackageProjectUrl>https://github.com/elsa-workflows/elsa-core</PackageProjectUrl>
<RepositoryUrl>https://github.com/elsa-workflows/elsa-core</RepositoryUrl>
<RepositoryType>GitHub</RepositoryType>
This package provides the following Timer activities:
* CronEvent

View file

@ -12,7 +12,7 @@ namespace Elsa.Persistence
Task DeleteAsync(T entity, CancellationToken cancellationToken = default);
Task<int> DeleteManyAsync(ISpecification<T> specification, CancellationToken cancellationToken = default);
Task<IEnumerable<T>> FindManyAsync(ISpecification<T> specification, IOrderBy<T>? orderBy = default, IPaging? paging = default, CancellationToken cancellationToken = default);
Task<int> CountAsync(ISpecification<T> specification, IOrderBy<T>? orderBy = default, CancellationToken cancellationToken = default);
Task<int> CountAsync(ISpecification<T> specification, CancellationToken cancellationToken = default);
Task<T?> FindAsync(ISpecification<T> specification, CancellationToken cancellationToken = default);
}
}

View file

@ -45,8 +45,7 @@ namespace Elsa.Persistence.Decorators
public Task<IEnumerable<WorkflowInstance>> FindManyAsync(ISpecification<WorkflowInstance> specification, IOrderBy<WorkflowInstance>? orderBy = default, IPaging? paging = default, CancellationToken cancellationToken = default) =>
_store.FindManyAsync(specification, orderBy, paging, cancellationToken);
public Task<int> CountAsync(ISpecification<WorkflowInstance> specification, IOrderBy<WorkflowInstance>? orderBy = default, CancellationToken cancellationToken = default) =>
_store.CountAsync(specification, orderBy, cancellationToken);
public Task<int> CountAsync(ISpecification<WorkflowInstance> specification, CancellationToken cancellationToken = default) => _store.CountAsync(specification, cancellationToken);
public Task<WorkflowInstance?> FindAsync(ISpecification<WorkflowInstance> specification, CancellationToken cancellationToken = default) => _store.FindAsync(specification, cancellationToken);
}

View file

@ -34,8 +34,7 @@ namespace Elsa.Persistence.Decorators
CancellationToken cancellationToken) =>
_store.FindManyAsync(specification, orderBy, paging, cancellationToken);
public Task<int> CountAsync(ISpecification<WorkflowDefinition> specification, IOrderBy<WorkflowDefinition>? orderBy, CancellationToken cancellationToken) =>
_store.CountAsync(specification, orderBy, cancellationToken);
public Task<int> CountAsync(ISpecification<WorkflowDefinition> specification, CancellationToken cancellationToken) => _store.CountAsync(specification, cancellationToken);
public Task<WorkflowDefinition?> FindAsync(ISpecification<WorkflowDefinition> specification, CancellationToken cancellationToken) => _store.FindAsync(specification, cancellationToken);

View file

@ -53,9 +53,9 @@ namespace Elsa.Persistence.InMemory
return Task.FromResult<IEnumerable<T>>(query.ToList());
}
public Task<int> CountAsync(ISpecification<T> specification, IOrderBy<T>? orderBy = default, CancellationToken cancellationToken = default)
public Task<int> CountAsync(ISpecification<T> specification, CancellationToken cancellationToken = default)
{
var query = Entities.Values.AsQueryable().Apply(specification).Apply(orderBy);
var query = Entities.Values.AsQueryable().Apply(specification);
return Task.FromResult(query.Count());
}

View file

@ -46,8 +46,8 @@ namespace Elsa.Persistence.MongoDb.Stores
public async Task<IEnumerable<T>> FindManyAsync(ISpecification<T> specification, IOrderBy<T>? orderBy = default, IPaging? paging = default, CancellationToken cancellationToken = default) =>
await Collection.AsQueryable().Apply(specification).Apply(orderBy).Apply(paging).ToListAsync(cancellationToken);
public async Task<int> CountAsync(ISpecification<T> specification, IOrderBy<T>? orderBy = default, CancellationToken cancellationToken = default) =>
await Collection.AsQueryable().Apply(specification).Apply(orderBy).CountAsync(cancellationToken);
public async Task<int> CountAsync(ISpecification<T> specification, CancellationToken cancellationToken = default) =>
await Collection.AsQueryable().Apply(specification).CountAsync(cancellationToken);
public async Task<T?> FindAsync(ISpecification<T> specification, CancellationToken cancellationToken = default) => await Collection.AsQueryable().Where(specification.ToExpression()).FirstOrDefaultAsync(cancellationToken);

View file

@ -66,7 +66,7 @@ namespace Elsa.Persistence.YesSql.Stores
return documents.Count;
}
public async Task<int> CountAsync(ISpecification<T> specification, IOrderBy<T>? orderBy = default, CancellationToken cancellationToken = default) => await Query(specification, orderBy).CountAsync();
public async Task<int> CountAsync(ISpecification<T> specification, CancellationToken cancellationToken = default) => await Query(specification).CountAsync();
public async Task<T?> FindAsync(ISpecification<T> specification, CancellationToken cancellationToken = default)
{

View file

@ -38,9 +38,7 @@ namespace Elsa.Samples.HelloWorldConsole
OrderBySpecification.OrderByDescending<WorkflowInstance>(x => x.CreatedAt),
Paging.Page(1, 2));
var count = await store.CountAsync(
new WorkflowInstanceDefinitionIdSpecification(nameof(HelloWorld)),
OrderBySpecification.OrderByDescending<WorkflowInstance>(x => x.CreatedAt));
var count = await store.CountAsync(new WorkflowInstanceDefinitionIdSpecification(nameof(HelloWorld)));
Console.WriteLine(count);

View file

@ -19,9 +19,9 @@ namespace Elsa.Samples.Timers
workflow
.AsSingleton()
.Timer(Duration.FromSeconds(30))
.WriteLine(context => $"{context.WorkflowExecutionContext.WorkflowInstance.WorkflowInstanceId} triggered by timer at {_clock.GetCurrentInstant()}.")
.WriteLine(context => $"{context.WorkflowExecutionContext.WorkflowInstance.Id} triggered by timer at {_clock.GetCurrentInstant()}.")
.Timer(Duration.FromSeconds(30))
.WriteLine(context => $"{context.WorkflowExecutionContext.WorkflowInstance.WorkflowInstanceId} resumed by timer at {_clock.GetCurrentInstant()}.");
.WriteLine(context => $"{context.WorkflowExecutionContext.WorkflowInstance.Id} resumed by timer at {_clock.GetCurrentInstant()}.");
}
}
}

View file

@ -1,8 +1,8 @@
using Elsa.Activities.Timers;
using Elsa.Samples.WhileLoopWorker.Services;
using Elsa.Samples.WhileLoopWorker.Workflows;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Elsa.Persistence.InMemory;
using Elsa.Persistence.YesSql.Extensions;
using Elsa.Samples.WhileLoopWorker.Activities;