Files
ScadaBridge/src/ZB.MOM.WW.ScadaBridge.DeploymentManager/StaleInstanceProbe.cs
T

28 lines
1.3 KiB
C#

using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Transport;
namespace ZB.MOM.WW.ScadaBridge.DeploymentManager;
/// <summary>Recomputes deployment revisions from authoritative configuration on every probe.
/// Process-local watermarks cannot prove freshness after another central changes the shared store,
/// so nothing is memoised across calls.</summary>
public sealed class StaleInstanceProbe : IStaleInstanceProbe
{
private readonly IFlatteningPipeline _flatteningPipeline;
/// <summary>Initializes the authoritative probe.</summary>
/// <param name="flatteningPipeline">The pipeline used to flatten instances for staleness comparison.</param>
public StaleInstanceProbe(IFlatteningPipeline flatteningPipeline)
{
_flatteningPipeline = flatteningPipeline ?? throw new ArgumentNullException(nameof(flatteningPipeline));
}
/// <inheritdoc />
public async Task<string?> GetCurrentRevisionHashAsync(int instanceId, CancellationToken cancellationToken = default)
{
// Hash only: staleness never reads the validation result.
var result = await _flatteningPipeline.ComputeRevisionHashAsync(
instanceId, _flatteningPipeline.CreateSession(), cancellationToken).ConfigureAwait(false);
return result.IsSuccess ? result.Value : null;
}
}