< Summary

Information
Class: Elsa.Workflows.Runtime.Distributed.DistributedWorkflowDefinitionsReloader
Assembly: Elsa.Workflows.Runtime.Distributed
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime.Distributed/Services/DistributedWorkflowDefinitionsReloader.cs
Line coverage
84%
Covered lines: 11
Uncovered lines: 2
Coverable lines: 13
Total lines: 36
Line coverage: 84.6%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ReloadWorkflowDefinitionsAsync()50%2277.77%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime.Distributed/Services/DistributedWorkflowDefinitionsReloader.cs

#LineLine coverage
 1using JetBrains.Annotations;
 2using Medallion.Threading;
 3using Microsoft.Extensions.Logging;
 4
 5namespace Elsa.Workflows.Runtime.Distributed;
 6
 7/// <summary>
 8/// Decorator class that adds distributed locking to the Workflow Definitions Reloader.
 9/// </summary>
 10[UsedImplicitly]
 711public class DistributedWorkflowDefinitionsReloader(
 712    IWorkflowDefinitionsReloader inner,
 713    IDistributedLockProvider distributedLockProvider,
 714    ILogger<DistributedWorkflowDefinitionsReloader> logger) : IWorkflowDefinitionsReloader
 15{
 16    private const string LockKey = "WorkflowDefinitionsReloader";
 17
 18    /// <summary>
 19    /// This ensures that only one instance of the application can reload workflow definitions at a time, preventing pot
 20    /// </summary>
 21    public async Task ReloadWorkflowDefinitionsAsync(CancellationToken cancellationToken = default)
 22    {
 623        await using var distributedLock = await distributedLockProvider.TryAcquireLockAsync(
 624            LockKey,
 625            TimeSpan.Zero,
 626            cancellationToken);
 27
 628        if (distributedLock == null)
 29        {
 030            logger.LogInformation("Could not acquire lock for workflow definitions reload. Another instance is already r
 031            return;
 32        }
 33
 634        await inner.ReloadWorkflowDefinitionsAsync(cancellationToken);
 635    }
 36}