// ----------------------------------------------------------------------------- // 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; } }