예제 #1
0
        /// <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));
        }
예제 #2
0
        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);
        }