public FailureDetection(ISwimProtocolProvider swimProtocolProvider, IConfiguration configuration, ILogger <FailureDetection> logger) { _stateMachine = new StateMachine <SwimFailureDetectionState, SwimFailureDetectionTrigger>(SwimFailureDetectionState.Idle); _swimProtocolProvider = swimProtocolProvider; _configuration = configuration; _logger = logger; _nodeRepository = new NodeRepository(swimProtocolProvider.Node.Hostname); _protocolTimer = new System.Timers.Timer(7000); _pingTimer = new System.Timers.Timer(3500); _protocolTimer.AutoReset = false; _pingTimer.AutoReset = false; _protocolTimer.Elapsed += _protocolTimer_Elapsed; _pingTimer.Elapsed += _pingTimer_Elapsed; _stateMachine.Configure(SwimFailureDetectionState.Idle) .Permit(SwimFailureDetectionTrigger.Ping, SwimFailureDetectionState.Pinged) .Ignore(SwimFailureDetectionTrigger.Reset) .OnEntry((entryAction) => { Start(); }); _stateMachine.Configure(SwimFailureDetectionState.Pinged) .Permit(SwimFailureDetectionTrigger.PingExpireLive, SwimFailureDetectionState.Alive) .Permit(SwimFailureDetectionTrigger.PingExpireNoResponse, SwimFailureDetectionState.PrePingReq) .Permit(SwimFailureDetectionTrigger.ProtocolExpireDead, SwimFailureDetectionState.Expired); _stateMachine.Configure(SwimFailureDetectionState.Alive) .Permit(SwimFailureDetectionTrigger.ProtocolExpireLive, SwimFailureDetectionState.Expired); _stateMachine.Configure(SwimFailureDetectionState.PrePingReq) .Permit(SwimFailureDetectionTrigger.PingReq, SwimFailureDetectionState.PingReqed) .OnEntry(entryAction => { _stateMachine.Fire(SwimFailureDetectionTrigger.PingReq); BroadcastPingReq(); }); _stateMachine.Configure(SwimFailureDetectionState.PingReqed) .Permit(SwimFailureDetectionTrigger.ProtocolExpireDead, SwimFailureDetectionState.Expired) .Permit(SwimFailureDetectionTrigger.ProtocolExpireLive, SwimFailureDetectionState.Expired); _stateMachine.Configure(SwimFailureDetectionState.Expired) .Permit(SwimFailureDetectionTrigger.Reset, SwimFailureDetectionState.Idle) .OnEntryFrom(SwimFailureDetectionTrigger.ProtocolExpireDead, entryAction => { HandleSuspectNode(); }) .OnEntryFrom(SwimFailureDetectionTrigger.ProtocolExpireLive, entryAction => { HandleAliveNode(); }); _swimProtocolProvider.ReceivedMessage += _swimProtocolProvider_ReceivedMessage; RestoreKnownNodes(); AddBootstrapNodes(); }
public SwimClient(ISwimProtocolProvider protocolProvider, ILogger logger) { ProtocolProvider = protocolProvider; Logger = logger; ProtocolProvider.ReceivedMessage += ProtocolProvider_ReceivedMessage; ProtocolTimer = new Timer(ProtocolPeriod.TotalMilliseconds); PingTimer = new Timer(MedianRTT.TotalMilliseconds * 2); PingCorrelationId = null; ProtocolTimer.Elapsed += ProtocolTimer_Elapsed; PingTimer.Elapsed += PingTimer_Elapsed; }
public SwimController(IHttpContext context, ISwimProtocolProvider swimProtocolProvider, ITestOutputHelper output) : base(context) { _swimProtocolProvider = swimProtocolProvider; _context = context; _output = output; }
public MembershipController(ISwimProtocolProvider swimProtocolProvider, ISwimProtocol swimProtocol, ILogger <MembershipController> logger) { _swimProtocolProvider = swimProtocolProvider; _swimProtocol = swimProtocol; _logger = logger; }