/// <summary> /// Checks equality of all fields. /// </summary> public bool Equals(GatewayEntry other) { if (other == null) { return(false); } return(SiloAddress.Equals(other.SiloAddress) && Status.Equals(other.Status) && HeartbeatTimestamp.Equals(other.HeartbeatTimestamp) && ClusterId.Equals(other.ClusterId)); }
private int CheckLiveness(long nowNs) { if ((_timeOfLastKeepAliveNs + _keepAliveIntervalNs) - nowNs < 0) { long lastKeepAliveMs = _driverProxy.TimeOfLastDriverKeepaliveMs(); var nowMs = _epochClock.Time(); if (nowMs > (lastKeepAliveMs + _driverTimeoutMs)) { _isTerminating = true; ForceCloseResources(); throw new DriverTimeoutException("MediaDriver keepalive age exceeded (ms): timeout= " + _driverTimeoutMs + ", actual=" + (nowMs - lastKeepAliveMs)); } if (null == _heartbeatTimestamp) { int counterId = HeartbeatTimestamp.FindCounterIdByRegistrationId(_countersReader, HeartbeatTimestamp.CLIENT_HEARTBEAT_TYPE_ID, _ctx.ClientId()); if (counterId != Agrona.Concurrent.Status.CountersReader.NULL_COUNTER_ID) { _heartbeatTimestamp = new AtomicCounter(_counterValuesBuffer, counterId); _heartbeatTimestamp.SetOrdered(nowMs); _timeOfLastKeepAliveNs = nowNs; } } else { int counterId = _heartbeatTimestamp.Id; if (!HeartbeatTimestamp.IsActive(_countersReader, counterId, HeartbeatTimestamp.CLIENT_HEARTBEAT_TYPE_ID, _ctx.ClientId())) { _isTerminating = true; ForceCloseResources(); throw new AeronException("unexpected close of heartbeat timestamp counter: " + counterId); } _heartbeatTimestamp.SetOrdered(nowMs); _timeOfLastKeepAliveNs = nowNs; } return(1); } return(0); }