diff --git a/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/RuleRunnerGrain.cs b/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/RuleRunnerGrain.cs index 5c4d1e79f..105f02b87 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/RuleRunnerGrain.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/RuleRunnerGrain.cs @@ -17,6 +17,7 @@ using Squidex.Infrastructure; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.Log; using Squidex.Infrastructure.Orleans; +using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.States; using Squidex.Infrastructure.Tasks; @@ -155,13 +156,16 @@ namespace Squidex.Domain.Apps.Entities.Rules.Runner { try { - var @event = eventDataFormatter.Parse(storedEvent.Data); + var @event = ParseKnownEvent(storedEvent); - var jobs = await ruleService.CreateJobsAsync(rule.RuleDef, rule.Id, @event, false); - - foreach (var (job, _) in jobs) + if (@event != null) { - await ruleEventRepository.EnqueueAsync(job, job.Created, ct); + var jobs = await ruleService.CreateJobsAsync(rule.RuleDef, rule.Id, @event, false); + + foreach (var (job, _) in jobs) + { + await ruleEventRepository.EnqueueAsync(job, job.Created, ct); + } } } catch (Exception ex) @@ -211,6 +215,23 @@ namespace Squidex.Domain.Apps.Entities.Rules.Runner } } + private Envelope? ParseKnownEvent(StoredEvent storedEvent) + { + try + { + var @event = eventDataFormatter.Parse(storedEvent.Data); + + @event.SetEventPosition(storedEvent.EventPosition); + @event.SetEventStreamNumber(storedEvent.EventStreamNumber); + + return @event; + } + catch (TypeNameNotFoundException) + { + return null; + } + } + public Task ReceiveReminder(string reminderName, TickStatus status) { EnsureIsRunning(); diff --git a/backend/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs b/backend/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs index 0587e9976..eb5b7d2d6 100644 --- a/backend/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs +++ b/backend/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs @@ -280,20 +280,20 @@ namespace Squidex.Infrastructure.EventSourcing.Grains } } - private Envelope? ParseKnownEvent(StoredEvent message) + private Envelope? ParseKnownEvent(StoredEvent storedEvent) { try { - var @event = eventDataFormatter.Parse(message.Data); + var @event = eventDataFormatter.Parse(storedEvent.Data); - @event.SetEventPosition(message.EventPosition); - @event.SetEventStreamNumber(message.EventStreamNumber); + @event.SetEventPosition(storedEvent.EventPosition); + @event.SetEventStreamNumber(storedEvent.EventStreamNumber); return @event; } catch (TypeNameNotFoundException) { - log.LogDebug(w => w.WriteProperty("oldEventFound", message.Data.Type)); + log.LogDebug(w => w.WriteProperty("oldEventFound", storedEvent.Data.Type)); return null; }