コード例 #1
0
        /// <summary>
        /// Warmup connection to each node
        /// </summary>
        /// <param name="callback">called when all nodes have been contacted</param>
        public void Warmup(Action callback)
        {
            var aliveNodes  = _cluster.Nodes.Where(n => !n.IsDead).ToList();
            var answerToGet = aliveNodes.Count;

            Action <MemcacheResponseHeader> onResponse = r =>
            {
                if (Interlocked.Decrement(ref answerToGet) == 0)
                {
                    callback();
                }
            };

            foreach (var node in aliveNodes)
            {
                var request = new NoOpRequest
                {
                    Callback  = onResponse,
                    RequestId = NextRequestId
                };

                if (!node.TrySend(request, _configuration.QueueTimeout))
                {
                    onResponse(default(MemcacheResponseHeader));
                }
            }
        }
コード例 #2
0
        public void Ping(Action <EndPoint, Status> callback)
        {
            var executionContext = TryCaptureExecutionContext();

            foreach (var node in _cluster.Nodes)
            {
                if (node.IsDead)
                {
                    callback(node.EndPoint, Status.InternalError);
                }
                else
                {
                    var localNode = node;
                    var request   = new NoOpRequest
                    {
                        Callback  = r => ExecuteInContext(() => callback(localNode.EndPoint, r.Status), executionContext),
                        RequestId = NextRequestId
                    };

                    if (!node.TrySend(request, _configuration.QueueTimeout))
                    {
                        callback(node.EndPoint, Status.InternalError);
                    }
                }
            }
        }
コード例 #3
0
 public NoOpResponse NoOpRequest(NoOpRequest request)
 {
     try
     {
         return(base.Channel.NoOpRequest(request));
     }
     catch (Exception ex)
     {
         string message = ex.Message;
         return(null);
     }
 }
コード例 #4
0
        public void NoOpRequestFailTest()
        {
            Status status  = Status.UnknownCommand;
            var    request = new NoOpRequest
            {
                Callback = (h) => status = h.Status,
            };

            var queryBuffer = request.GetQueryBuffer();

            var header = new MemcacheResponseHeader {
                Opcode = Opcode.NoOp, Status = Status.NoError
            };

            Assert.DoesNotThrow(request.Fail);
            Assert.AreEqual(Status.InternalError, status);
        }
コード例 #5
0
        public void NoOpRequestOkTest()
        {
            Status status  = Status.UnknownCommand;
            var    request = new NoOpRequest
            {
                Callback = (h) => status = h.Status,
            };

            var queryBuffer = request.GetQueryBuffer();

            Assert.IsNotNull(queryBuffer);
            CollectionAssert.AreEqual(NOOP_QUERY, queryBuffer, "The noop query buffer is different of the expected one");

            var header = new MemcacheResponseHeader {
                Opcode = Opcode.NoOp, Status = Status.NoError
            };

            Assert.DoesNotThrow(() => request.HandleResponse(header, null, null, null));
            Assert.AreEqual(Status.NoError, status);
        }