/// <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)); } } }
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); } } } }
public NoOpResponse NoOpRequest(NoOpRequest request) { try { return(base.Channel.NoOpRequest(request)); } catch (Exception ex) { string message = ex.Message; return(null); } }
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); }
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); }