diff --git a/src/Marten/Events/Daemon/Coordination/ProjectionCoordinator.cs b/src/Marten/Events/Daemon/Coordination/ProjectionCoordinator.cs index 6381542f28..e00257a54f 100644 --- a/src/Marten/Events/Daemon/Coordination/ProjectionCoordinator.cs +++ b/src/Marten/Events/Daemon/Coordination/ProjectionCoordinator.cs @@ -202,13 +202,25 @@ private async Task executeAsync(CancellationToken stoppingToken) // check if it's still running await startAgentsIfNecessaryAsync(set, daemon, stoppingToken).ConfigureAwait(false); + + continue; } - else if (await Distributor.TryAttainLockAsync(set, stoppingToken).ConfigureAwait(false)) + + try { - var daemon = resolveDaemon(set); + if (await Distributor.TryAttainLockAsync(set, stoppingToken).ConfigureAwait(false)) + { + var daemon = resolveDaemon(set); - // check if it's still running - await startAgentsIfNecessaryAsync(set, daemon, stoppingToken).ConfigureAwait(false); + // check if it's still running + await startAgentsIfNecessaryAsync(set, daemon, stoppingToken).ConfigureAwait(false); + } + } + catch (Exception e) + { + _logger.LogError(e, "Error trying to attain a lock for set {Name} and lock id {LockId}. Will retry later", set.Names.Select(x => x.Identity).Join(", "), set.LockId); + await Task.Delay(_options.Projections.LeadershipPollingTime.Milliseconds(), stoppingToken) + .ConfigureAwait(false); } } }