// -----------------------------------------------------------------------------
// HlcClockSkewException.cs
// Sprint: SPRINT_20260105_002_001_LB_hlc_core_library
// Task: HLC-003 - Clock skew exception
// -----------------------------------------------------------------------------
namespace StellaOps.HybridLogicalClock;
///
/// Exception thrown when clock skew between nodes exceeds the configured threshold.
///
///
/// Clock skew indicates that two nodes have significantly different wall-clock times,
/// which could indicate NTP misconfiguration or network partitioning issues.
///
public sealed class HlcClockSkewException : Exception
{
///
/// The actual skew detected between clocks.
///
public TimeSpan ActualSkew { get; }
///
/// The maximum skew threshold that was configured.
///
public TimeSpan MaxAllowedSkew { get; }
///
/// Creates a new clock skew exception.
///
/// The actual skew detected
/// The configured maximum skew
public HlcClockSkewException(TimeSpan actualSkew, TimeSpan maxAllowedSkew)
: base($"Clock skew of {actualSkew.TotalSeconds:F1}s exceeds maximum allowed skew of {maxAllowedSkew.TotalSeconds:F1}s")
{
ActualSkew = actualSkew;
MaxAllowedSkew = maxAllowedSkew;
}
///
/// Creates a new clock skew exception with inner exception.
///
public HlcClockSkewException(TimeSpan actualSkew, TimeSpan maxAllowedSkew, Exception innerException)
: base($"Clock skew of {actualSkew.TotalSeconds:F1}s exceeds maximum allowed skew of {maxAllowedSkew.TotalSeconds:F1}s", innerException)
{
ActualSkew = actualSkew;
MaxAllowedSkew = maxAllowedSkew;
}
}