// true if ready to be completed (i.e. false if re-issued to another server) public virtual bool SetResult(PhysicalConnection connection, Message message, RawResult result) { if (result.IsError) { var bridge = connection.Bridge; var server = bridge.ServerEndPoint; bool log = !message.IsInternalCall; bool isMoved = result.AssertStarts(MOVED); if (isMoved || result.AssertStarts(ASK)) { log = false; string[] parts = result.GetString().Split(StringSplits.Space, 3); int hashSlot; EndPoint endpoint; if (Format.TryParseInt32(parts[1], out hashSlot) && (endpoint = Format.TryParseEndPoint(parts[2])) != null) { // no point sending back to same server, and no point sending to a dead server if (!Equals(server.EndPoint, endpoint)) { if (bridge.Multiplexer.TryResend(hashSlot, message, endpoint, isMoved)) { connection.Multiplexer.Trace(message.Command + " re-issued to " + endpoint, isMoved ? "MOVED" : "ASK"); return(false); } } } } string err = result.GetString(); if (log) { bridge.Multiplexer.OnErrorMessage(server.EndPoint, err); } connection.Multiplexer.Trace("Completed with error: " + err + " (" + GetType().Name + ")", ToString()); ServerFail(message, err); } else { bool coreResult = SetResultCore(connection, message, result); if (coreResult) { connection.Multiplexer.Trace("Completed with success: " + result.ToString() + " (" + GetType().Name + ")", ToString()); } else { UnexpectedResponse(message, result); } } return(true); }
protected override bool SetResultCore(PhysicalConnection connection, Message message, RawResult result) { connection?.BridgeCouldBeNull?.Multiplexer?.OnTransactionLog($"condition '{message.CommandAndKey}' got '{result.ToString()}'"); var msg = message as ConditionMessage; var condition = msg?.Condition; if (condition != null && condition.TryValidate(result, out bool final)) { SetResult(message, final); return(true); } return(false); }
private void UnexpectedResponse(Message message, RawResult result) { ConnectionMultiplexer.TraceWithoutContext("From " + GetType().Name, "Unexpected Response"); ConnectionFail(message, ConnectionFailureType.ProtocolFailure, "Unexpected response to " + (message == null ? "n/a" : message.Command.ToString()) + ": " + result.ToString()); }