From 2fbbc13c71052e66269035031e894b736e2ead5d Mon Sep 17 00:00:00 2001
From: Melanie
Date: Mon, 5 Apr 2010 19:42:15 +0100
Subject: Fix some overlooked merge conflicts that got committed
---
OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 5951a92..0785f7f 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -2203,13 +2203,7 @@ namespace OpenSim.Region.Framework.Scenes
///
public void ScheduleGroupForTerseUpdate()
{
-<<<<<<< HEAD:OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
lockPartsForRead(true);
-=======
-// m_log.DebugFormat("[SOG]: Scheduling terse update for {0} {1}", Name, UUID);
-
- lock (m_parts)
->>>>>>> 0.6.9-post-fixes:OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
{
foreach (SceneObjectPart part in m_parts.Values)
{
@@ -3765,15 +3759,11 @@ namespace OpenSim.Region.Framework.Scenes
HasGroupChanged = true;
}
-<<<<<<< HEAD:OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
lockPartsForRead(false);
- ScheduleGroupForFullUpdate();
-=======
// Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled
// for the same object with very different properties. The caller must schedule the update.
//ScheduleGroupForFullUpdate();
->>>>>>> 0.6.9-post-fixes:OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
}
public void TriggerScriptChangedEvent(Changed val)
--
cgit v1.1
From f34cc6b46949033803c79235b9d82da9bf9634dd Mon Sep 17 00:00:00 2001
From: Thomas Grimshaw
Date: Mon, 5 Apr 2010 22:08:34 +0200
Subject: Add a much cheaper agent count retrieval method. This is obsoleted
by 0.7 so it can be reverted then.
---
OpenSim/ApplicationPlugins/Rest/Regions/GETHandler.cs | 2 +-
.../ApplicationPlugins/Rest/Regions/GETRegionInfoHandler.cs | 2 +-
OpenSim/Region/Framework/Scenes/Scene.cs | 10 +++++++++-
.../Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 2 +-
4 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/OpenSim/ApplicationPlugins/Rest/Regions/GETHandler.cs b/OpenSim/ApplicationPlugins/Rest/Regions/GETHandler.cs
index ed18207..dea166d 100644
--- a/OpenSim/ApplicationPlugins/Rest/Regions/GETHandler.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Regions/GETHandler.cs
@@ -192,7 +192,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions
protected string RegionStats(OSHttpResponse httpResponse, Scene scene)
{
- int users = scene.GetAvatars().Count;
+ int users = scene.GetRootAgentCount();
int objects = scene.Entities.Count - users;
RestXmlWriter rxw = new RestXmlWriter(new StringWriter());
diff --git a/OpenSim/ApplicationPlugins/Rest/Regions/GETRegionInfoHandler.cs b/OpenSim/ApplicationPlugins/Rest/Regions/GETRegionInfoHandler.cs
index 5798286..82e9d9b 100644
--- a/OpenSim/ApplicationPlugins/Rest/Regions/GETRegionInfoHandler.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Regions/GETRegionInfoHandler.cs
@@ -125,7 +125,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions
rxw.WriteString(s.RegionInfo.InternalEndPoint.ToString());
rxw.WriteEndAttribute();
- int users = s.GetAvatars().Count;
+ int users = s.GetRootAgentCount();
rxw.WriteStartAttribute(String.Empty, "avatars", String.Empty);
rxw.WriteValue(users);
rxw.WriteEndAttribute();
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index ab0d397..e5e6fc9 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1523,7 +1523,7 @@ namespace OpenSim.Region.Framework.Scenes
public void SaveTerrain()
{
m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID);
- }
+ }
public void StoreWindlightProfile(RegionMeta7WindlightData wl)
{
@@ -4339,6 +4339,14 @@ namespace OpenSim.Region.Framework.Scenes
}
///
+ /// Cheaply return the number of avatars in a region (without fetching a list object)
+ ///
+ public int GetRootAgentCount()
+ {
+ return m_sceneGraph.GetRootAgentCount();
+ }
+
+ ///
/// Return a list of all ScenePresences in this region. This returns child agents as well as root agents.
/// This list is a new object, so it can be iterated over without locking.
///
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 10ebf67..a76f386 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -5266,7 +5266,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public LSL_Integer llGetRegionAgentCount()
{
m_host.AddScriptLPS(1);
- return new LSL_Integer(World.GetAvatars().Count);
+ return new LSL_Integer(World.GetRootAgentCount());
}
public LSL_Vector llGetRegionCorner()
--
cgit v1.1
From 7a3bb266ebc057a1af589fc642bfeca08de72c98 Mon Sep 17 00:00:00 2001
From: Thomas Grimshaw
Date: Mon, 5 Apr 2010 22:11:05 +0200
Subject: This commit adds some randomness to object persistence. It's a Work
In Progress, I am working on improving this to a tiered approach.
---
.../Region/Framework/Scenes/SceneObjectGroup.cs | 46 ++++++++++++++++++++--
1 file changed, 42 insertions(+), 4 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 5443c28..9a205e0 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -104,8 +104,12 @@ namespace OpenSim.Region.Framework.Scenes
/// since the group's last persistent backup
///
private bool m_hasGroupChanged = false;
- private long timeFirstChanged;
- private long timeLastChanged;
+ private long timeFirstChanged = 0;
+ private long timeLastChanged = 0;
+ long m_maxPersistTime = 0;
+ long m_minPersistTime = 0;
+ Random m_rand;
+
private System.Threading.ReaderWriterLockSlim m_partsLock = new System.Threading.ReaderWriterLockSlim();
public void lockPartsForRead(bool locked)
@@ -182,6 +186,28 @@ namespace OpenSim.Region.Framework.Scenes
timeLastChanged = DateTime.Now.Ticks;
if (!m_hasGroupChanged)
timeFirstChanged = DateTime.Now.Ticks;
+ if (m_rand == null)
+ {
+ byte[] val = new byte[16];
+ m_rootPart.UUID.ToBytes(val, 0);
+ m_rand = new Random(BitConverter.ToInt32(val, 0));
+ }
+ if (Scene.GetRootAgentCount() == 0)
+ {
+ //If the region is empty, this change has been made by an automated process
+ //and thus we delay the persist time by a random amount between 1.5 and 2.5.
+
+ float factor = 1.5f + (float)(m_rand.NextDouble());
+ m_maxPersistTime = (long)((float)Scene.m_persistAfter * factor);
+ m_minPersistTime = (long)((float)Scene.m_dontPersistBefore * factor);
+ }
+ else
+ {
+ //If the region is not empty, we want to obey the minimum and maximum persist times
+ //but add a random factor so we stagger the object persistance a little
+ m_maxPersistTime = (long)((float)Scene.m_persistAfter * (1.0d - (m_rand.NextDouble() / 5.0d))); //Multiply by 1.0-1.5
+ m_minPersistTime = (long)((float)Scene.m_dontPersistBefore * (1.0d + (m_rand.NextDouble() / 2.0d))); //Multiply by 0.8-1.0
+ }
}
m_hasGroupChanged = value;
}
@@ -197,8 +223,19 @@ namespace OpenSim.Region.Framework.Scenes
return false;
if (m_scene.ShuttingDown)
return true;
+
+ if (m_minPersistTime == 0 || m_maxPersistTime == 0)
+ {
+ m_maxPersistTime = m_scene.m_persistAfter;
+ m_minPersistTime = m_scene.m_dontPersistBefore;
+ }
+
long currentTime = DateTime.Now.Ticks;
- if (currentTime - timeLastChanged > m_scene.m_dontPersistBefore || currentTime - timeFirstChanged > m_scene.m_persistAfter)
+
+ if (timeLastChanged == 0) timeLastChanged = currentTime;
+ if (timeFirstChanged == 0) timeFirstChanged = currentTime;
+
+ if (currentTime - timeLastChanged > m_minPersistTime || currentTime - timeFirstChanged > m_maxPersistTime)
return true;
return false;
}
@@ -529,6 +566,7 @@ namespace OpenSim.Region.Framework.Scenes
///
public SceneObjectGroup()
{
+
}
///
@@ -545,7 +583,7 @@ namespace OpenSim.Region.Framework.Scenes
/// Constructor. This object is added to the scene later via AttachToScene()
///
public SceneObjectGroup(UUID ownerID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape)
- {
+ {
SetRootPart(new SceneObjectPart(ownerID, shape, pos, rot, Vector3.Zero));
}
--
cgit v1.1