mirror of
https://github.com/opensim/opensim.git
synced 2026-08-06 17:32:42 +08:00
Add test for PCM taint. This currently fails due to unexpected behaviour of SceneGraph.ForEachSOG(). This will be corrected soon.
Also adds lots of temproarily debug logging
This commit is contained in:
@@ -51,8 +51,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
|
||||
public class PrimCountModule : IPrimCountModule, INonSharedRegionModule
|
||||
{
|
||||
// private static readonly ILog m_log =
|
||||
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private Scene m_Scene;
|
||||
private Dictionary<UUID, PrimCounts> m_PrimCounts =
|
||||
@@ -123,6 +122,11 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
{
|
||||
if (!m_Tainted)
|
||||
AddObject(obj);
|
||||
else
|
||||
m_log.DebugFormat(
|
||||
"[PRIM COUNT MODULE]: Ignoring OnParcelPrimCountAdd() for {0} on {1} since count is tainted",
|
||||
obj.Name, m_Scene.RegionInfo.RegionName);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,11 +137,18 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
{
|
||||
if (!m_Tainted)
|
||||
RemoveObject(obj);
|
||||
else
|
||||
m_log.DebugFormat(
|
||||
"[PRIM COUNT MODULE]: Ignoring OnObjectBeingRemovedFromScene() for {0} on {1} since count is tainted",
|
||||
obj.Name, m_Scene.RegionInfo.RegionName);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnParcelPrimCountTainted()
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[PRIM COUNT MODULE]: OnParcelPrimCountTainted() called on {0}", m_Scene.RegionInfo.RegionName);
|
||||
|
||||
lock (m_TaintLock)
|
||||
m_Tainted = true;
|
||||
}
|
||||
@@ -163,7 +174,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
// NOTE: Call under Taint Lock
|
||||
private void AddObject(SceneObjectGroup obj)
|
||||
{
|
||||
// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding object {0} to prim count", obj.Name);
|
||||
m_log.DebugFormat("[PRIM COUNT MODULE]: Adding object {0} {1} to prim count", obj.Name, obj.UUID);
|
||||
|
||||
if (obj.IsAttachment)
|
||||
return;
|
||||
@@ -214,10 +225,14 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
// NOTE: Call under Taint Lock
|
||||
private void RemoveObject(SceneObjectGroup obj)
|
||||
{
|
||||
m_log.DebugFormat("[PRIM COUNT MODULE]: Removing object {0} {1} from prim count", obj.Name, obj.UUID);
|
||||
}
|
||||
|
||||
public IPrimCounts GetPrimCounts(UUID parcelID)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[PRIM COUNT MODULE]: GetPrimCounts for parcel {0} in {1}", parcelID, m_Scene.RegionInfo.RegionName);
|
||||
|
||||
PrimCounts primCounts;
|
||||
|
||||
lock (m_PrimCounts)
|
||||
@@ -239,7 +254,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
/// <returns></returns>
|
||||
public int GetOwnerCount(UUID parcelID)
|
||||
{
|
||||
// m_log.DebugFormat("[PRIM COUNT MODULE]: GetOwnerCount for {0}", parcelID);
|
||||
int count = 0;
|
||||
|
||||
lock (m_TaintLock)
|
||||
{
|
||||
@@ -248,9 +263,14 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
|
||||
ParcelCounts counts;
|
||||
if (m_ParcelCounts.TryGetValue(parcelID, out counts))
|
||||
return counts.Owner;
|
||||
count = counts.Owner;
|
||||
}
|
||||
return 0;
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[PRIM COUNT MODULE]: GetOwnerCount for parcel {0} in {1} returning {2}",
|
||||
parcelID, m_Scene.RegionInfo.RegionName, count);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -260,6 +280,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
/// <returns></returns>
|
||||
public int GetGroupCount(UUID parcelID)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
lock (m_TaintLock)
|
||||
{
|
||||
if (m_Tainted)
|
||||
@@ -267,9 +289,14 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
|
||||
ParcelCounts counts;
|
||||
if (m_ParcelCounts.TryGetValue(parcelID, out counts))
|
||||
return counts.Group;
|
||||
count = counts.Group;
|
||||
}
|
||||
return 0;
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[PRIM COUNT MODULE]: GetGroupCount for parcel {0} in {1} returning {2}",
|
||||
parcelID, m_Scene.RegionInfo.RegionName, count);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -279,6 +306,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
/// <returns></returns>
|
||||
public int GetOthersCount(UUID parcelID)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
lock (m_TaintLock)
|
||||
{
|
||||
if (m_Tainted)
|
||||
@@ -286,9 +315,14 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
|
||||
ParcelCounts counts;
|
||||
if (m_ParcelCounts.TryGetValue(parcelID, out counts))
|
||||
return counts.Others;
|
||||
count = counts.Others;
|
||||
}
|
||||
return 0;
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[PRIM COUNT MODULE]: GetOthersCount for parcel {0} in {1} returning {2}",
|
||||
parcelID, m_Scene.RegionInfo.RegionName, count);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -298,6 +332,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
/// <returns></returns>
|
||||
public int GetSimulatorCount(UUID parcelID)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
lock (m_TaintLock)
|
||||
{
|
||||
if (m_Tainted)
|
||||
@@ -308,10 +344,15 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
{
|
||||
int val;
|
||||
if (m_SimwideCounts.TryGetValue(owner, out val))
|
||||
return val;
|
||||
count = val;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[PRIM COUNT MODULE]: GetOthersCount for parcel {0} in {1} returning {2}",
|
||||
parcelID, m_Scene.RegionInfo.RegionName, count);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -322,6 +363,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
/// <returns></returns>
|
||||
public int GetUserCount(UUID parcelID, UUID userID)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
lock (m_TaintLock)
|
||||
{
|
||||
if (m_Tainted)
|
||||
@@ -332,16 +375,21 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
{
|
||||
int val;
|
||||
if (counts.Users.TryGetValue(userID, out val))
|
||||
return val;
|
||||
count = val;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[PRIM COUNT MODULE]: GetUserCount for user {0} in parcel {1} in region {2} returning {3}",
|
||||
userID, parcelID, m_Scene.RegionInfo.RegionName, count);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
// NOTE: This method MUST be called while holding the taint lock!
|
||||
private void Recount()
|
||||
{
|
||||
// m_log.DebugFormat("[PRIM COUNT MODULE]: Recounting prims on {0}", m_Scene.RegionInfo.RegionName);
|
||||
m_log.DebugFormat("[PRIM COUNT MODULE]: Recounting prims on {0}", m_Scene.RegionInfo.RegionName);
|
||||
|
||||
m_OwnerMap.Clear();
|
||||
m_SimwideCounts.Clear();
|
||||
@@ -367,6 +415,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||
if (!m_OwnerMap.ContainsKey(k))
|
||||
m_PrimCounts.Remove(k);
|
||||
}
|
||||
|
||||
m_Tainted = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,6 +126,28 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
|
||||
Assert.That(pc.Users[m_userId], Is.EqualTo(1));
|
||||
Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0));
|
||||
Assert.That(pc.Simulator, Is.EqualTo(1));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test the count is correct after is has been tainted.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestTaint()
|
||||
{
|
||||
TestHelper.InMethod();
|
||||
IPrimCounts pc = m_lo.PrimCounts;
|
||||
|
||||
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01);
|
||||
m_scene.AddNewSceneObject(sog, false);
|
||||
|
||||
m_pcm.TaintPrimCount();
|
||||
|
||||
Assert.That(pc.Owner, Is.EqualTo(3));
|
||||
Assert.That(pc.Group, Is.EqualTo(0));
|
||||
Assert.That(pc.Others, Is.EqualTo(0));
|
||||
Assert.That(pc.Users[m_userId], Is.EqualTo(3));
|
||||
Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0));
|
||||
Assert.That(pc.Simulator, Is.EqualTo(3));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user