Commit c4e368f6 authored by Marc Gravell's avatar Marc Gravell

More ManagerState states; track last error relative time

parent a4e9a582
......@@ -1876,6 +1876,8 @@ internal T ExecuteSyncImpl<T>(Message message, ResultProcessor<T> processor, Ser
string iocp, worker;
#if !__MonoCS__
var mgrState = socketManager.State;
var lastError = socketManager.LastErrorTimeRelative();
#endif
var sb = new StringBuilder("Timeout performing ").Append(message.CommandAndKey);
data = new List<Tuple<string, string>> {Tuple.Create("Message", message.CommandAndKey)};
......@@ -1890,6 +1892,7 @@ internal T ExecuteSyncImpl<T>(Message message, ResultProcessor<T> processor, Ser
add("Instantaneous", "inst", inst.ToString());
#if !__MonoCS__
add("Manager-State", "mgr", mgrState.ToString());
add("Last-Error", "err", lastError);
#endif
add("Queue-Length", "queue", queue.ToString());
add("Queue-Outstanding", "qu", qu.ToString());
......
......@@ -218,7 +218,9 @@ public void RecordConnectionFailed(ConnectionFailureType failureType, Exception
add("Last-Multiplexer-Heartbeat", "last-mbeat", multiplexer.LastHeartbeatSecondsAgo + "s ago");
add("Last-Global-Heartbeat", "global", ConnectionMultiplexer.LastGlobalHeartbeatSecondsAgo + "s ago");
#if !__MonoCS__
add("SocketManager-State", "mgr", bridge.Multiplexer.SocketManager.State.ToString());
var mgr = bridge.Multiplexer.SocketManager;
add("SocketManager-State", "mgr", mgr.State.ToString());
add("Last-Error", "err", mgr.LastErrorTimeRelative());
#endif
var ex = innerException == null
......
......@@ -162,6 +162,8 @@ internal enum ManagerState
GrowingSocketArray,
CopyingPointersForSelect,
ExecuteSelect,
ExecuteSelectComplete,
CheckForStaleConnections,
EnqueueRead,
EnqueueError,
RequestAssistance,
......@@ -174,7 +176,13 @@ internal ManagerState State
get { return managerState; }
}
private volatile ManagerState managerState;
private volatile int lastErrorTicks;
internal string LastErrorTimeRelative()
{
var tmp = lastErrorTicks;
if (tmp == 0) return "never";
return unchecked(Environment.TickCount - tmp) + "ms ago";
}
private void ReadImpl()
{
List<IntPtr> dead = null, active = new List<IntPtr>();
......@@ -268,15 +276,21 @@ private void ReadImpl()
var timeout = new TimeValue(1000);
managerState = ManagerState.ExecuteSelect;
ready = select(0, readSockets, null, errorSockets, ref timeout);
managerState = ManagerState.ExecuteSelectComplete;
if (ready <= 0)
{
if (ready == 0)
{
managerState = ManagerState.CheckForStaleConnections;
foreach (var s in activeCallbacks)
{
s.CheckForStaleConnection();
}
}
else
{
lastErrorTicks = Environment.TickCount;
}
continue; // -ve typically means a socket was disposed just before; just retry
}
......
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