elsa-workflows / elsa-core

A .NET workflows library
https://v3.elsaworkflows.io/
MIT License
6.26k stars 1.15k forks source link

Unable to store Trigger, because one already exists with this identification. #4470

Closed xfoxfu closed 1 year ago

xfoxfu commented 1 year ago

I tried to reproduce the official Elsa.Samples.AspNet.QuartzIntegration sample with only changing Cron trigger to Timer, and got this exception.

Exception:

Quartz.ObjectAlreadyExistsException: Unable to store Trigger: 'DEFAULT.4e5786d42791436fa1703fc134eebae3', because one already exists with this identification.
   at Quartz.Simpl.RAMJobStore.StoreTriggerInternal(IOperableTrigger newTrigger, Boolean replaceExisting)
   at Quartz.Simpl.RAMJobStore.StoreTrigger(IOperableTrigger newTrigger, Boolean replaceExisting, CancellationToken cancellationToken)
   at Quartz.Core.QuartzScheduler.ScheduleJob(ITrigger trigger, CancellationToken cancellationToken)
   at Elsa.Quartz.Services.QuartzWorkflowScheduler.ScheduleRecurringAsync(String taskName, DispatchWorkflowDefinitionRequest request, DateTimeOffset startAt, TimeSpan interval, CancellationToken cancellationToken)
   at Elsa.Scheduling.Services.DefaultTriggerScheduler.ScheduleAsync(IEnumerable`1 triggers, CancellationToken cancellationToken)
   at Elsa.Scheduling.HostedServices.CreateSchedulesHostedService.ExecuteAsync(CancellationToken stoppingToken)
   at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
   at Program.<Main>$(String[] args) in ....../Elsa.Test/Program.cs:line 34

Program.cs:

using Elsa.Common.Contracts;
using Elsa.EntityFrameworkCore.Modules.Management;
using Elsa.EntityFrameworkCore.Modules.Runtime;
using Elsa.Extensions;
using Elsa.Workflows.Core;
using Elsa.Workflows.Core.Activities;
using Elsa.Workflows.Core.Contracts;
using Elsa.Workflows.Core.Models;
using Microsoft.AspNetCore.Builder;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddElsa(elsa =>
{
    elsa.UseWorkflowManagement(management => management.UseEntityFrameworkCore());
    elsa.UseWorkflowRuntime(runtime =>
    {
        runtime.UseEntityFrameworkCore();
    });

    elsa.UseQuartz();
    elsa.UseScheduling(scheduling => scheduling.UseQuartzScheduler());

    elsa.AddWorkflowsFrom<Program>();
});

var app = builder.Build();
app.Run();

public class HeartbeatWorkflow : WorkflowBase
{
    private readonly ISystemClock _systemClock;

    public HeartbeatWorkflow(ISystemClock systemClock)
    {
        _systemClock = systemClock;
    }

    protected override void Build(IWorkflowBuilder builder)
    {
        builder.Root = new Sequence
        {
            Activities =
            {
                new Elsa.Scheduling.Activities.Timer()
                {
                    Interval = new(TimeSpan.FromSeconds(1)),
                    CanStartWorkflow = true,
                },
                new WriteLine(new Input<string>($"Heartbeat workflow triggered at {_systemClock.UtcNow.LocalDateTime}"))
            }
        };
    }
}

csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Elsa" Version="3.0.0-preview.727" />
    <PackageReference Include="Elsa.EntityFrameworkCore" Version="3.0.0-preview.727" />
    <PackageReference Include="Elsa.EntityFrameworkCore.Sqlite" Version="3.0.0-preview.727" />
    <PackageReference Include="Elsa.Quartz" Version="3.0.0-preview.727" />
    <PackageReference Include="Elsa.Scheduling" Version="3.0.0-preview.727" />
  </ItemGroup>

</Project>
sfmskywalker commented 1 year ago

Great catch @xfoxfu , thanks for reporting!

I pushed a fix via 8ff7834ef8b1f405725981dd3037eef2d1b042b0