Fixing workflow reload logic (#7324)

* Made two changes:

1. TriggerScheduler was returning a null for a payload, which would cause NullReferenceException, and this would break the populator which prevented other workflow definitions from being imported/published correctly.

2. The reloader was only executing a part of the actual loading logic, meaning that workflow definitions used as activities were not correcly resolved to the expected versions

* Update src/modules/Elsa.Scheduling/Services/DefaultTriggerScheduler.cs

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: j03y-nxxbz <joey.barten@nexxbiz.io>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
This commit is contained in:
lukhipolito-nexxbiz 2026-02-25 19:14:08 +01:00 committed by GitHub
parent a7e064abb0
commit 5816f6e3be
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 9 additions and 10 deletions

View file

@ -64,6 +64,12 @@ public class DefaultTriggerScheduler(IWorkflowScheduler workflowScheduler, ISyst
foreach (var trigger in cronTriggers)
{
var payload = trigger.GetPayload<CronTriggerPayload>();
if(payload is null)
{
logger.LogWarning("Cron expression payload is empty. TriggerId: {TriggerId}. Skipping scheduling of this trigger", trigger.Id);
continue;
}
var cronExpression = payload.CronExpression;
if (string.IsNullOrWhiteSpace(cronExpression))

View file

@ -1,18 +1,11 @@
using Elsa.Mediator.Contracts;
using Elsa.Workflows.Runtime.Models;
using Elsa.Workflows.Runtime.Notifications;
namespace Elsa.Workflows.Runtime;
namespace Elsa.Workflows.Runtime;
/// <inheritdoc />
public class WorkflowDefinitionsReloader(IWorkflowDefinitionStorePopulator workflowDefinitionStorePopulator, INotificationSender notificationSender) : IWorkflowDefinitionsReloader
public class WorkflowDefinitionsReloader(IRegistriesPopulator registriesPopulator) : IWorkflowDefinitionsReloader
{
/// <inheritdoc />
public async Task ReloadWorkflowDefinitionsAsync(CancellationToken cancellationToken)
{
var workflowDefinitions = await workflowDefinitionStorePopulator.PopulateStoreAsync(true, cancellationToken);
var reloadedWorkflowDefinitions = workflowDefinitions.Select(ReloadedWorkflowDefinition.FromDefinition).ToList();
var notification = new WorkflowDefinitionsReloaded(reloadedWorkflowDefinitions);
await notificationSender.SendAsync(notification, cancellationToken);
await registriesPopulator.PopulateAsync(cancellationToken);
}
}