示例#1
0
        private long SendAdminQuery(AdminQueryType queryType, long deadlineNs)
        {
            long correlationId = _aeron.NextCorrelationId();
            int  length        = MessageHeaderEncoder.ENCODED_LENGTH + AdminQueryEncoder.BLOCK_LENGTH;
            int  attempts      = SEND_ATTEMPTS;

            _idleStrategy.Reset();

            while (true)
            {
                long result = _publication.TryClaim(length, _bufferClaim);

                if (result > 0)
                {
                    _adminQueryEncoder
                    .WrapAndApplyHeader(_bufferClaim.Buffer, _bufferClaim.Offset, _messageHeaderEncoder)
                    .CorrelationId(correlationId)
                    .ClusterSessionId(_clusterSessionId)
                    .QueryType(queryType);

                    _bufferClaim.Commit();

                    break;
                }

                CheckResult(result);

                if (--attempts <= 0 || _nanoClock.NanoTime() > deadlineNs)
                {
                    throw new TimeoutException("Failed to send query");
                }

                _idleStrategy.Idle();
            }

            return(correlationId);
        }
示例#2
0
 public AdminQueryEncoder QueryType(AdminQueryType value)
 {
     _buffer.PutInt(_offset + 16, (int)value, ByteOrder.LittleEndian);
     return(this);
 }