Add an initial confidence-building TestAddObject() for prim counts.
parent
be878795aa
commit
b34743e5fe
|
@ -306,6 +306,9 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
/// <returns>The parcel created.</returns>
|
/// <returns>The parcel created.</returns>
|
||||||
protected ILandObject CreateDefaultParcel()
|
protected ILandObject CreateDefaultParcel()
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[LAND MANAGEMENT MODULE]: Creating default parcel for region {0}", m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene);
|
ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene);
|
||||||
fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize));
|
fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize));
|
||||||
fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
|
fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
|
||||||
|
@ -579,7 +582,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[LAND]: Invalid local land ID {0}", landLocalID);
|
m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Invalid local land ID {0}", landLocalID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -630,7 +633,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
if (m_landIDList[x, y] == local_id)
|
if (m_landIDList[x, y] == local_id)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[LAND]: Not removing land object {0}; still being used at {1}, {2}",
|
m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Not removing land object {0}; still being used at {1}, {2}",
|
||||||
local_id, x, y);
|
local_id, x, y);
|
||||||
return;
|
return;
|
||||||
//throw new Exception("Could not remove land object. Still being used at " + x + ", " + y);
|
//throw new Exception("Could not remove land object. Still being used at " + x + ", " + y);
|
||||||
|
@ -1198,7 +1201,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[PARCEL]: Invalid land object {0} passed for parcel object owner request", local_id);
|
m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Invalid land object {0} passed for parcel object owner request", local_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1426,7 +1429,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
IClientAPI client;
|
IClientAPI client;
|
||||||
if (! m_scene.TryGetClient(agentID, out client)) {
|
if (! m_scene.TryGetClient(agentID, out client)) {
|
||||||
m_log.WarnFormat("[LAND] unable to retrieve IClientAPI for {0}", agentID.ToString());
|
m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Unable to retrieve IClientAPI for {0}", agentID);
|
||||||
return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty());
|
return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1475,7 +1478,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[LAND] unable to find parcelID {0}", parcelID);
|
m_log.WarnFormat("[LAND MANAGEMENT MODULE]: Unable to find parcelID {0}", parcelID);
|
||||||
}
|
}
|
||||||
return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty());
|
return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty());
|
||||||
}
|
}
|
||||||
|
@ -1533,17 +1536,17 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
}
|
}
|
||||||
catch (LLSD.LLSDParseException e)
|
catch (LLSD.LLSDParseException e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[LAND] Fetch error: {0}", e.Message);
|
m_log.ErrorFormat("[LAND MANAGEMENT MODULE]: Fetch error: {0}", e.Message);
|
||||||
m_log.ErrorFormat("[LAND] ... in request {0}", request);
|
m_log.ErrorFormat("[LAND MANAGEMENT MODULE]: ... in request {0}", request);
|
||||||
}
|
}
|
||||||
catch(InvalidCastException)
|
catch (InvalidCastException)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[LAND] Wrong type in request {0}", request);
|
m_log.ErrorFormat("[LAND MANAGEMENT MODULE]: Wrong type in request {0}", request);
|
||||||
}
|
}
|
||||||
|
|
||||||
LLSDRemoteParcelResponse response = new LLSDRemoteParcelResponse();
|
LLSDRemoteParcelResponse response = new LLSDRemoteParcelResponse();
|
||||||
response.parcel_id = parcelID;
|
response.parcel_id = parcelID;
|
||||||
m_log.DebugFormat("[LAND] got parcelID {0}", parcelID);
|
m_log.DebugFormat("[LAND MANAGEMENT MODULE]: Got parcelID {0}", parcelID);
|
||||||
|
|
||||||
return LLSDHelpers.SerialiseLLSDReply(response);
|
return LLSDHelpers.SerialiseLLSDReply(response);
|
||||||
}
|
}
|
||||||
|
@ -1564,7 +1567,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
ExtendedLandData extLandData = new ExtendedLandData();
|
ExtendedLandData extLandData = new ExtendedLandData();
|
||||||
Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle,
|
Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle,
|
||||||
out extLandData.X, out extLandData.Y);
|
out extLandData.X, out extLandData.Y);
|
||||||
m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}",
|
m_log.DebugFormat("[LAND MANAGEMENT MODULE]: Got parcelinfo request for regionHandle {0}, x/y {1}/{2}",
|
||||||
extLandData.RegionHandle, extLandData.X, extLandData.Y);
|
extLandData.RegionHandle, extLandData.X, extLandData.Y);
|
||||||
|
|
||||||
// for this region or for somewhere else?
|
// for this region or for somewhere else?
|
||||||
|
@ -1605,7 +1608,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
info = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, (int)x, (int)y);
|
info = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, (int)x, (int)y);
|
||||||
}
|
}
|
||||||
// we need to transfer the fake parcelID, not the one in landData, so the viewer can match it to the landmark.
|
// we need to transfer the fake parcelID, not the one in landData, so the viewer can match it to the landmark.
|
||||||
m_log.DebugFormat("[LAND] got parcelinfo for parcel {0} in region {1}; sending...",
|
m_log.DebugFormat("[LAND MANAGEMENT MODULE]: got parcelinfo for parcel {0} in region {1}; sending...",
|
||||||
data.LandData.Name, data.RegionHandle);
|
data.LandData.Name, data.RegionHandle);
|
||||||
// HACK for now
|
// HACK for now
|
||||||
RegionInfo r = new RegionInfo();
|
RegionInfo r = new RegionInfo();
|
||||||
|
@ -1616,7 +1619,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
remoteClient.SendParcelInfo(r, data.LandData, parcelID, data.X, data.Y);
|
remoteClient.SendParcelInfo(r, data.LandData, parcelID, data.X, data.Y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_log.Debug("[LAND] got no parcelinfo; not sending");
|
m_log.Debug("[LAND MANAGEMENT MODULE]: got no parcelinfo; not sending");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParcelOtherCleanTime(IClientAPI remoteClient, int localID, int otherCleanTime)
|
public void setParcelOtherCleanTime(IClientAPI remoteClient, int localID, int otherCleanTime)
|
||||||
|
|
|
@ -51,8 +51,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
public class PrimCountModule : IPrimCountModule, INonSharedRegionModule
|
public class PrimCountModule : IPrimCountModule, INonSharedRegionModule
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log =
|
// private static readonly ILog m_log =
|
||||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private Scene m_Scene;
|
private Scene m_Scene;
|
||||||
private Dictionary<UUID, PrimCounts> m_PrimCounts =
|
private Dictionary<UUID, PrimCounts> m_PrimCounts =
|
||||||
|
@ -64,10 +64,16 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
private Dictionary<UUID, ParcelCounts> m_ParcelCounts =
|
private Dictionary<UUID, ParcelCounts> m_ParcelCounts =
|
||||||
new Dictionary<UUID, ParcelCounts>();
|
new Dictionary<UUID, ParcelCounts>();
|
||||||
|
|
||||||
// For now, a simple simwide taint to get this up. Later parcel based
|
|
||||||
// taint to allow recounting a parcel if only ownership has changed
|
/// <value>
|
||||||
// without recounting the whole sim.
|
/// For now, a simple simwide taint to get this up. Later parcel based
|
||||||
|
/// taint to allow recounting a parcel if only ownership has changed
|
||||||
|
/// without recounting the whole sim.
|
||||||
|
///
|
||||||
|
/// We start out tainted so that the first get call resets the various prim counts.
|
||||||
|
/// <value>
|
||||||
private bool m_Tainted = true;
|
private bool m_Tainted = true;
|
||||||
|
|
||||||
private Object m_TaintLock = new Object();
|
private Object m_TaintLock = new Object();
|
||||||
|
|
||||||
public Type ReplaceableInterface
|
public Type ReplaceableInterface
|
||||||
|
@ -156,6 +162,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
// NOTE: Call under Taint Lock
|
// NOTE: Call under Taint Lock
|
||||||
private void AddObject(SceneObjectGroup obj)
|
private void AddObject(SceneObjectGroup obj)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding object {0} to prim count", obj.Name);
|
||||||
|
|
||||||
if (obj.IsAttachment)
|
if (obj.IsAttachment)
|
||||||
return;
|
return;
|
||||||
if (((obj.RootPart.Flags & PrimFlags.TemporaryOnRez) != 0))
|
if (((obj.RootPart.Flags & PrimFlags.TemporaryOnRez) != 0))
|
||||||
|
@ -299,6 +307,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
// NOTE: This method MUST be called while holding the taint lock!
|
// NOTE: This method MUST be called while holding the taint lock!
|
||||||
private void Recount()
|
private void Recount()
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[PRIM COUNT MODULE]: Recounting prims on {0}", m_Scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
m_OwnerMap.Clear();
|
m_OwnerMap.Clear();
|
||||||
m_SimwideCounts.Clear();
|
m_SimwideCounts.Clear();
|
||||||
m_ParcelCounts.Clear();
|
m_ParcelCounts.Clear();
|
||||||
|
@ -311,6 +321,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
m_OwnerMap[landData.GlobalID] = landData.OwnerID;
|
m_OwnerMap[landData.GlobalID] = landData.OwnerID;
|
||||||
m_SimwideCounts[landData.OwnerID] = 0;
|
m_SimwideCounts[landData.OwnerID] = 0;
|
||||||
|
// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding parcel count for {0}", landData.GlobalID);
|
||||||
m_ParcelCounts[landData.GlobalID] = new ParcelCounts();
|
m_ParcelCounts[landData.GlobalID] = new ParcelCounts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
|
using log4net.Config;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.Assets;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
using OpenSim.Tests.Common;
|
||||||
|
using OpenSim.Tests.Common.Mock;
|
||||||
|
using OpenSim.Tests.Common.Setup;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.CoreModules.World.Land.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class PrimCountModuleTests
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void TestAddObject()
|
||||||
|
{
|
||||||
|
TestHelper.InMethod();
|
||||||
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
PrimCountModule pcm = new PrimCountModule();
|
||||||
|
LandManagementModule lmm = new LandManagementModule();
|
||||||
|
Scene scene = SceneSetupHelpers.SetupScene();
|
||||||
|
SceneSetupHelpers.SetupSceneModules(scene, lmm, pcm);
|
||||||
|
|
||||||
|
ILandObject lo = new LandObject(UUID.Zero, false, scene);
|
||||||
|
lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize));
|
||||||
|
lmm.AddLandObject(lo);
|
||||||
|
//scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID);
|
||||||
|
|
||||||
|
string objName = "obj1";
|
||||||
|
UUID objUuid = new UUID("00000000-0000-0000-0000-000000000001");
|
||||||
|
|
||||||
|
SceneObjectPart part
|
||||||
|
= new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero)
|
||||||
|
{ Name = objName, UUID = objUuid };
|
||||||
|
|
||||||
|
scene.AddNewSceneObject(new SceneObjectGroup(part), false);
|
||||||
|
|
||||||
|
Assert.That(pcm.GetOwnerCount(lo.LandData.GlobalID), Is.EqualTo(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -627,7 +627,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (!Entities.Remove(agentID))
|
if (!Entities.Remove(agentID))
|
||||||
{
|
{
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[SCENE]: Tried to remove non-existent scene presence with agent ID {0} from scene Entities list",
|
"[SCENEGRAPH]: Tried to remove non-existent scene presence with agent ID {0} from scene Entities list",
|
||||||
agentID);
|
agentID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -650,7 +650,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[SCENE]: Tried to remove non-existent scene presence with agent ID {0} from scene ScenePresences list", agentID);
|
m_log.WarnFormat("[SCENEGRAPH]: Tried to remove non-existent scene presence with agent ID {0} from scene ScenePresences list", agentID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1079,7 +1079,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
// Catch it and move on. This includes situations where splist has inconsistent info
|
// Catch it and move on. This includes situations where splist has inconsistent info
|
||||||
m_log.WarnFormat("[SCENE]: Problem processing action in ForEachSOG: ", e.ToString());
|
m_log.WarnFormat(
|
||||||
|
"[SCENEGRAPH]: Problem processing action in ForEachSOG: {0} {1}", e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1103,8 +1104,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Info("[BUG] in " + m_parentScene.RegionInfo.RegionName + ": " + e.ToString());
|
m_log.Info("[SCENEGRAPH]: Error in " + m_parentScene.RegionInfo.RegionName + ": " + e.ToString());
|
||||||
m_log.Info("[BUG] Stack Trace: " + e.StackTrace);
|
m_log.Info("[SCENEGRAPH]: Stack Trace: " + e.StackTrace);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Parallel.ForEach<ScenePresence>(GetScenePresences(), protectedAction);
|
Parallel.ForEach<ScenePresence>(GetScenePresences(), protectedAction);
|
||||||
|
@ -1119,7 +1120,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Info("[BUG] in " + m_parentScene.RegionInfo.RegionName + ": " + e.ToString());
|
m_log.Error("[SCENEGRAPH]: Error in " + m_parentScene.RegionInfo.RegionName + ": " + e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2927,6 +2927,7 @@
|
||||||
<Match path="Avatar/Inventory/Archiver/Tests" pattern="*.cs" recurse="true"/>
|
<Match path="Avatar/Inventory/Archiver/Tests" pattern="*.cs" recurse="true"/>
|
||||||
<Match path="World/Archiver/Tests" pattern="*.cs" recurse="true"/>
|
<Match path="World/Archiver/Tests" pattern="*.cs" recurse="true"/>
|
||||||
<Match buildAction="EmbeddedResource" path="World/Archiver/Tests/Resources" pattern="*"/>
|
<Match buildAction="EmbeddedResource" path="World/Archiver/Tests/Resources" pattern="*"/>
|
||||||
|
<Match path="World/Land/Tests" pattern="*.cs" recurse="true"/>
|
||||||
<Match path="World/Media/Moap/Tests" pattern="*.cs" recurse="true"/>
|
<Match path="World/Media/Moap/Tests" pattern="*.cs" recurse="true"/>
|
||||||
<Match path="World/Serialiser/Tests" pattern="*.cs" recurse="true"/>
|
<Match path="World/Serialiser/Tests" pattern="*.cs" recurse="true"/>
|
||||||
<Match path="World/Terrain/Tests" pattern="*.cs" recurse="true"/>
|
<Match path="World/Terrain/Tests" pattern="*.cs" recurse="true"/>
|
||||||
|
|
Loading…
Reference in New Issue