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