Commit 0ff83549 authored by Hans Kuder's avatar Hans Kuder Committed by Nick Craver

Improve error messaging in unreachable-after-moved situation (#980)

* Improve error messaging in unreachable-after-moved situation
parent 80ec6355
...@@ -183,6 +183,7 @@ public virtual bool SetResult(PhysicalConnection connection, Message message, in ...@@ -183,6 +183,7 @@ public virtual bool SetResult(PhysicalConnection connection, Message message, in
var server = bridge.ServerEndPoint; var server = bridge.ServerEndPoint;
bool log = !message.IsInternalCall; bool log = !message.IsInternalCall;
bool isMoved = result.StartsWith(CommonReplies.MOVED); bool isMoved = result.StartsWith(CommonReplies.MOVED);
bool wasNoRedirect = ( message.Flags & CommandFlags.NoRedirect ) != 0;
string err = string.Empty; string err = string.Empty;
bool unableToConnectError = false; bool unableToConnectError = false;
if (isMoved || result.StartsWith(CommonReplies.ASK)) if (isMoved || result.StartsWith(CommonReplies.ASK))
...@@ -207,9 +208,9 @@ public virtual bool SetResult(PhysicalConnection connection, Message message, in ...@@ -207,9 +208,9 @@ public virtual bool SetResult(PhysicalConnection connection, Message message, in
} }
else else
{ {
if (isMoved && (message.Flags & CommandFlags.NoRedirect) != 0) if (isMoved && wasNoRedirect)
{ {
err = $"Key has MOVED from Endpoint {endpoint} and hashslot {hashSlot} but CommandFlags.NoRedirect was specified - redirect not followed for {message.CommandAndKey}. "; err = $"Key has MOVED to Endpoint {endpoint} and hashslot {hashSlot} but CommandFlags.NoRedirect was specified - redirect not followed for {message.CommandAndKey}. ";
} }
else else
{ {
......
...@@ -196,7 +196,7 @@ string StringGet(IServer server, RedisKey key, CommandFlags flags = CommandFlags ...@@ -196,7 +196,7 @@ string StringGet(IServer server, RedisKey key, CommandFlags flags = CommandFlags
Assert.Equal(value, b); // wrong master, allow redirect Assert.Equal(value, b); // wrong master, allow redirect
var ex = Assert.Throws<RedisServerException>(() => StringGet(conn.GetServer(node.EndPoint), key, CommandFlags.NoRedirect)); var ex = Assert.Throws<RedisServerException>(() => StringGet(conn.GetServer(node.EndPoint), key, CommandFlags.NoRedirect));
Assert.StartsWith($"Key has MOVED from Endpoint {rightMasterNode.EndPoint} and hashslot {slot}", ex.Message); Assert.StartsWith($"Key has MOVED to Endpoint {rightMasterNode.EndPoint} and hashslot {slot}", ex.Message);
} }
node = config.Nodes.FirstOrDefault(x => x.IsSlave && x.ParentNodeId == rightMasterNode.NodeId); node = config.Nodes.FirstOrDefault(x => x.IsSlave && x.ParentNodeId == rightMasterNode.NodeId);
...@@ -215,7 +215,7 @@ string StringGet(IServer server, RedisKey key, CommandFlags flags = CommandFlags ...@@ -215,7 +215,7 @@ string StringGet(IServer server, RedisKey key, CommandFlags flags = CommandFlags
Assert.Equal(value, e); // wrong slave, allow redirect Assert.Equal(value, e); // wrong slave, allow redirect
var ex = Assert.Throws<RedisServerException>(() => StringGet(conn.GetServer(node.EndPoint), key, CommandFlags.NoRedirect)); var ex = Assert.Throws<RedisServerException>(() => StringGet(conn.GetServer(node.EndPoint), key, CommandFlags.NoRedirect));
Assert.StartsWith($"Key has MOVED from Endpoint {rightMasterNode.EndPoint} and hashslot {slot}", ex.Message); Assert.StartsWith($"Key has MOVED to Endpoint {rightMasterNode.EndPoint} and hashslot {slot}", ex.Message);
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment