From 8efe4bfc2ed7086e9fdf4812297e6525f955f6ac Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 29 Jul 2013 23:18:29 +0100
Subject: Make "abnormal thread terminations" into
"ClientLogoutsDueToNoReceives" and add this to the StatsManager
This reflects the actual use of this stat - it hasn't recorded general exceptions for some time.
Make the sim extra stats collector draw the data from the stats manager rather than maintaing this data itself.
---
.../Region/ClientStack/Linden/UDP/LLUDPServer.cs | 26 +++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Region/ClientStack/Linden/UDP')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 25e10be..9e6a401 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -69,9 +69,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
StatsManager.RegisterStat(
new Stat(
+ "ClientLogoutsDueToNoReceives",
+ "Number of times a client has been logged out because no packets were received before the timeout.",
+ "",
+ "",
+ "clientstack",
+ scene.Name,
+ StatType.Pull,
+ MeasuresOfInterest.None,
+ stat => stat.Value = m_udpServer.ClientLogoutsDueToNoReceives,
+ StatVerbosity.Debug));
+
+ StatsManager.RegisterStat(
+ new Stat(
"IncomingUDPReceivesCount",
"Number of UDP receives performed",
- "Number of UDP receives performed",
+ "",
"",
"clientstack",
scene.Name,
@@ -84,7 +97,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
new Stat(
"IncomingPacketsProcessedCount",
"Number of inbound LL protocol packets processed",
- "Number of inbound LL protocol packets processed",
+ "",
"",
"clientstack",
scene.Name,
@@ -97,7 +110,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
new Stat(
"OutgoingUDPSendsCount",
"Number of UDP sends performed",
- "Number of UDP sends performed",
+ "",
"",
"clientstack",
scene.Name,
@@ -149,6 +162,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// Maximum transmission unit, or UDP packet size, for the LLUDP protocol
public const int MTU = 1400;
+ /// Number of forced client logouts due to no receipt of packets before timeout.
+ public int ClientLogoutsDueToNoReceives { get; private set; }
+
///
/// Default packet debug level given to new clients
///
@@ -1037,7 +1053,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
timeoutTicks = m_pausedAckTimeout;
if (client.IsActive &&
- (Environment.TickCount & Int32.MaxValue) - udpClient.TickLastPacketReceived > timeoutTicks)
+ (Environment.TickCount & Int32.MaxValue) - udpClient.TickLastPacketReceived > -1)
{
// We must set IsActive synchronously so that we can stop the packet loop reinvoking this method, even
// though it's set later on by LLClientView.Close()
@@ -1778,7 +1794,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
"[LLUDPSERVER]: Ack timeout, disconnecting {0} agent for {1} in {2}",
client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, m_scene.RegionInfo.RegionName);
- StatsManager.SimExtraStats.AddAbnormalClientThreadTermination();
+ ClientLogoutsDueToNoReceives++;
if (!client.SceneAgent.IsChildAgent)
client.Kick("Simulator logged you out due to connection timeout");
--
cgit v1.1
From 8004e6f31cb03abc9b6170622099879ccaf5570b Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 29 Jul 2013 23:38:54 +0100
Subject: Fix issue just introduced in 8efe4bfc2ed7086e9fdf4812297e6525f955f6ac
where I accidentally left in a test line to force very quick client unack
---
OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'OpenSim/Region/ClientStack/Linden/UDP')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 9e6a401..bf50868 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -1053,7 +1053,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
timeoutTicks = m_pausedAckTimeout;
if (client.IsActive &&
- (Environment.TickCount & Int32.MaxValue) - udpClient.TickLastPacketReceived > -1)
+ (Environment.TickCount & Int32.MaxValue) - udpClient.TickLastPacketReceived > timeoutTicks)
{
// We must set IsActive synchronously so that we can stop the packet loop reinvoking this method, even
// though it's set later on by LLClientView.Close()
--
cgit v1.1
From 1416c909326d89566cbe785b6dacac228e31a5a0 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 29 Jul 2013 23:53:59 +0100
Subject: minor: Add timeout secs to connection timeout message. Change
message to reflect it is a timeout due to no data received rather than an ack
issue.
---
OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
(limited to 'OpenSim/Region/ClientStack/Linden/UDP')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index bf50868..85fe1a4 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -1062,7 +1062,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// Fire this out on a different thread so that we don't hold up outgoing packet processing for
// everybody else if this is being called due to an ack timeout.
// This is the same as processing as the async process of a logout request.
- Util.FireAndForget(o => DeactivateClientDueToTimeout(client));
+ Util.FireAndForget(o => DeactivateClientDueToTimeout(client, timeoutTicks));
return;
}
@@ -1786,18 +1786,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// regular client pings.
///
///
- private void DeactivateClientDueToTimeout(LLClientView client)
+ ///
+ private void DeactivateClientDueToTimeout(LLClientView client, int timeoutTicks)
{
lock (client.CloseSyncLock)
- {
- m_log.WarnFormat(
- "[LLUDPSERVER]: Ack timeout, disconnecting {0} agent for {1} in {2}",
- client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, m_scene.RegionInfo.RegionName);
-
+ {
ClientLogoutsDueToNoReceives++;
+
+ m_log.WarnFormat(
+ "[LLUDPSERVER]: No packets received from {0} agent of {1} for {2}ms in {3}. Disconnecting.",
+ client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, timeoutTicks, m_scene.Name);
if (!client.SceneAgent.IsChildAgent)
- client.Kick("Simulator logged you out due to connection timeout");
+ client.Kick("Simulator logged you out due to connection timeout.");
client.CloseWithoutChecks();
}
--
cgit v1.1