From 8265a88c4a4b1c18f1bc0accfde250fe47b08c50 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Thu, 4 Jul 2013 14:51:18 -0700
Subject: Throttle the viewer's requests for region handles. Apparently Kokua
is requesting this for all landmarks in inventory. Not sure why. But this
seems to be the root cause of the login freeze mentioned before. This commit
adds a blocking queue / process thread pattern.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 18 ------------------
1 file changed, 18 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index aa14529..355e0ee 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3103,7 +3103,6 @@ namespace OpenSim.Region.Framework.Scenes
{
//client.OnNameFromUUIDRequest += HandleUUIDNameRequest;
client.OnMoneyTransferRequest += ProcessMoneyTransferRequest;
- client.OnRegionHandleRequest += RegionHandleRequest;
}
public virtual void SubscribeToClientNetworkEvents(IClientAPI client)
@@ -3227,7 +3226,6 @@ namespace OpenSim.Region.Framework.Scenes
{
//client.OnNameFromUUIDRequest -= HandleUUIDNameRequest;
client.OnMoneyTransferRequest -= ProcessMoneyTransferRequest;
- client.OnRegionHandleRequest -= RegionHandleRequest;
}
public virtual void UnSubscribeToClientNetworkEvents(IClientAPI client)
@@ -4887,22 +4885,6 @@ namespace OpenSim.Region.Framework.Scenes
#endregion
- public void RegionHandleRequest(IClientAPI client, UUID regionID)
- {
- m_log.DebugFormat("[SCENE]: RegionHandleRequest {0}", regionID);
- ulong handle = 0;
- if (regionID == RegionInfo.RegionID)
- handle = RegionInfo.RegionHandle;
- else
- {
- GridRegion r = GridService.GetRegionByUUID(UUID.Zero, regionID);
- if (r != null)
- handle = r.RegionHandle;
- }
-
- if (handle != 0)
- client.SendRegionHandle(regionID, handle);
- }
// Commented pending deletion since this method no longer appears to do anything at all
// public bool NeedSceneCacheClear(UUID agentID)
--
cgit v1.1
From 67e500383eb024fe4dd2681d0c5d902f289b65d8 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Tue, 9 Jul 2013 14:12:52 -0700
Subject: Put guards on a bunch of exception-inducing code, as seen in logs
from load test.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 355e0ee..54956ee 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3687,7 +3687,9 @@ namespace OpenSim.Region.Framework.Scenes
"[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting. Removing existing presence.",
sp.Name, sp.UUID, RegionInfo.RegionName);
- sp.ControllingClient.Close(true);
+ if (sp.ControllingClient != null)
+ sp.ControllingClient.Close(true);
+
sp = null;
}
--
cgit v1.1
From b4f1b9acf65f9e782d56602e60c58be6145c5cca Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sat, 13 Jul 2013 21:28:46 -0700
Subject: Guard against unauthorized agent deletes.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 54956ee..becea1f 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3452,7 +3452,7 @@ namespace OpenSim.Region.Framework.Scenes
regions.Remove(RegionInfo.RegionHandle);
// This ends up being done asynchronously so that a logout isn't held up where there are many present but unresponsive neighbours.
- m_sceneGridService.SendCloseChildAgentConnections(agentID, regions);
+ m_sceneGridService.SendCloseChildAgentConnections(agentID, Util.Md5Hash(acd.Id0), regions);
}
m_eventManager.TriggerClientClosed(agentID, this);
@@ -4277,6 +4277,25 @@ namespace OpenSim.Region.Framework.Scenes
return false;
}
+ ///
+ /// Authenticated close (via network)
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool IncomingCloseAgent(UUID agentID, bool force, string auth_token)
+ {
+ //m_log.DebugFormat("[SCENE]: Processing incoming close agent {0} in region {1} with auth_token {2}", agentID, RegionInfo.RegionName, auth_token);
+
+ // Check that the auth_token is valid
+ AgentCircuitData acd = AuthenticateHandler.GetAgentCircuitData(agentID);
+ if (acd != null && Util.Md5Hash(acd.Id0) == auth_token)
+ return IncomingCloseAgent(agentID, force);
+ else
+ m_log.ErrorFormat("[SCENE]: Request to close agent {0} with invalid authorization token {1}", agentID, auth_token);
+ return false;
+ }
///
/// Tell a single agent to disconnect from the region.
@@ -4292,12 +4311,9 @@ namespace OpenSim.Region.Framework.Scenes
ScenePresence presence = m_sceneGraph.GetScenePresence(agentID);
if (presence != null)
- {
presence.ControllingClient.Close(force);
- return true;
- }
- // Agent not here
+ // Agent not here
return false;
}
--
cgit v1.1
From a2ee887c6d4cc0756b808353ad0183b1e7e29b74 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sat, 13 Jul 2013 22:32:52 -0700
Subject: Deleted a line too many
---
OpenSim/Region/Framework/Scenes/Scene.cs | 3 +++
1 file changed, 3 insertions(+)
(limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index becea1f..264aaa8 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -4311,7 +4311,10 @@ namespace OpenSim.Region.Framework.Scenes
ScenePresence presence = m_sceneGraph.GetScenePresence(agentID);
if (presence != null)
+ {
presence.ControllingClient.Close(force);
+ return true;
+ }
// Agent not here
return false;
--
cgit v1.1
From e4f741f0062dfe948e071a88f643f96931140f67 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sat, 13 Jul 2013 22:52:51 -0700
Subject: This should fix the failing test.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 264aaa8..155054a 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3452,7 +3452,7 @@ namespace OpenSim.Region.Framework.Scenes
regions.Remove(RegionInfo.RegionHandle);
// This ends up being done asynchronously so that a logout isn't held up where there are many present but unresponsive neighbours.
- m_sceneGridService.SendCloseChildAgentConnections(agentID, Util.Md5Hash(acd.Id0), regions);
+ m_sceneGridService.SendCloseChildAgentConnections(agentID, acd.Id0 != null ? Util.Md5Hash(acd.Id0) : string.Empty, regions);
}
m_eventManager.TriggerClientClosed(agentID, this);
@@ -4308,7 +4308,6 @@ namespace OpenSim.Region.Framework.Scenes
public bool IncomingCloseAgent(UUID agentID, bool force)
{
//m_log.DebugFormat("[SCENE]: Processing incoming close agent for {0}", agentID);
-
ScenePresence presence = m_sceneGraph.GetScenePresence(agentID);
if (presence != null)
{
--
cgit v1.1
From f3b3e21dea98b4ea974ae7649a63d00b69e6dfed Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sun, 14 Jul 2013 07:28:40 -0700
Subject: Change the auth token to be the user's sessionid.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 155054a..ea7081c 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3452,7 +3452,7 @@ namespace OpenSim.Region.Framework.Scenes
regions.Remove(RegionInfo.RegionHandle);
// This ends up being done asynchronously so that a logout isn't held up where there are many present but unresponsive neighbours.
- m_sceneGridService.SendCloseChildAgentConnections(agentID, acd.Id0 != null ? Util.Md5Hash(acd.Id0) : string.Empty, regions);
+ m_sceneGridService.SendCloseChildAgentConnections(agentID, acd.SessionID.ToString(), regions);
}
m_eventManager.TriggerClientClosed(agentID, this);
@@ -4290,7 +4290,7 @@ namespace OpenSim.Region.Framework.Scenes
// Check that the auth_token is valid
AgentCircuitData acd = AuthenticateHandler.GetAgentCircuitData(agentID);
- if (acd != null && Util.Md5Hash(acd.Id0) == auth_token)
+ if (acd != null && acd.SessionID.ToString() == auth_token)
return IncomingCloseAgent(agentID, force);
else
m_log.ErrorFormat("[SCENE]: Request to close agent {0} with invalid authorization token {1}", agentID, auth_token);
--
cgit v1.1
From c61ff917ef99a00d4062f264ed10c2a662585e8a Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sun, 14 Jul 2013 09:21:28 -0700
Subject: Authenticate ChildAgentUpdate too.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 42 ++++++++++++++++++++------------
1 file changed, 27 insertions(+), 15 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index ea7081c..b07faa2 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -4202,10 +4202,18 @@ namespace OpenSim.Region.Framework.Scenes
if (childAgentUpdate != null)
{
- childAgentUpdate.ChildAgentDataUpdate(cAgentData);
- return true;
+ if (cAgentData.SessionID == childAgentUpdate.ControllingClient.SessionId)
+ {
+ childAgentUpdate.ChildAgentDataUpdate(cAgentData);
+ return true;
+ }
+ else
+ {
+ m_log.WarnFormat("[SCENE]: Attempt to update agent {0} with invalid session id {1}", childAgentUpdate.UUID, cAgentData.SessionID);
+ Console.WriteLine(String.Format("[SCENE]: Attempt to update agent {0} ({1}) with invalid session id {2}",
+ childAgentUpdate.UUID, childAgentUpdate.ControllingClient.SessionId, cAgentData.SessionID));
+ }
}
-
return false;
}
@@ -4221,20 +4229,24 @@ namespace OpenSim.Region.Framework.Scenes
ScenePresence childAgentUpdate = GetScenePresence(cAgentData.AgentID);
if (childAgentUpdate != null)
{
- // I can't imagine *yet* why we would get an update if the agent is a root agent..
- // however to avoid a race condition crossing borders..
- if (childAgentUpdate.IsChildAgent)
+ if (childAgentUpdate.ControllingClient.SessionId == cAgentData.SessionID)
{
- uint rRegionX = (uint)(cAgentData.RegionHandle >> 40);
- uint rRegionY = (((uint)(cAgentData.RegionHandle)) >> 8);
- uint tRegionX = RegionInfo.RegionLocX;
- uint tRegionY = RegionInfo.RegionLocY;
- //Send Data to ScenePresence
- childAgentUpdate.ChildAgentDataUpdate(cAgentData, tRegionX, tRegionY, rRegionX, rRegionY);
- // Not Implemented:
- //TODO: Do we need to pass the message on to one of our neighbors?
+ // I can't imagine *yet* why we would get an update if the agent is a root agent..
+ // however to avoid a race condition crossing borders..
+ if (childAgentUpdate.IsChildAgent)
+ {
+ uint rRegionX = (uint)(cAgentData.RegionHandle >> 40);
+ uint rRegionY = (((uint)(cAgentData.RegionHandle)) >> 8);
+ uint tRegionX = RegionInfo.RegionLocX;
+ uint tRegionY = RegionInfo.RegionLocY;
+ //Send Data to ScenePresence
+ childAgentUpdate.ChildAgentDataUpdate(cAgentData, tRegionX, tRegionY, rRegionX, rRegionY);
+ // Not Implemented:
+ //TODO: Do we need to pass the message on to one of our neighbors?
+ }
}
-
+ else
+ m_log.WarnFormat("[SCENE]: Attempt at updating position of agent {0} with invalid session id {1}", childAgentUpdate.UUID, cAgentData.SessionID);
return true;
}
--
cgit v1.1
From c8dcb8474d0b0698168863328e61a6929bb0770f Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sun, 14 Jul 2013 10:26:05 -0700
Subject: Let's go easy on authenticating ChildAgentUpdates, otherwise this
will be chaotic while ppl are using different versions of opensim. Warning
only, but no enforcement.
---
OpenSim/Region/Framework/Scenes/Scene.cs | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
(limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index b07faa2..9cfe869 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -4202,17 +4202,15 @@ namespace OpenSim.Region.Framework.Scenes
if (childAgentUpdate != null)
{
- if (cAgentData.SessionID == childAgentUpdate.ControllingClient.SessionId)
+ if (cAgentData.SessionID != childAgentUpdate.ControllingClient.SessionId)
{
- childAgentUpdate.ChildAgentDataUpdate(cAgentData);
- return true;
- }
- else
- {
- m_log.WarnFormat("[SCENE]: Attempt to update agent {0} with invalid session id {1}", childAgentUpdate.UUID, cAgentData.SessionID);
+ m_log.WarnFormat("[SCENE]: Attempt to update agent {0} with invalid session id {1} (possibly from simulator in older version; tell them to update).", childAgentUpdate.UUID, cAgentData.SessionID);
Console.WriteLine(String.Format("[SCENE]: Attempt to update agent {0} ({1}) with invalid session id {2}",
childAgentUpdate.UUID, childAgentUpdate.ControllingClient.SessionId, cAgentData.SessionID));
}
+
+ childAgentUpdate.ChildAgentDataUpdate(cAgentData);
+ return true;
}
return false;
}
--
cgit v1.1