28 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|