Merge branch 'master' into careminster

avinationmerge
Melanie 2012-02-19 14:57:51 +00:00
commit 488ec59408
4 changed files with 45 additions and 6 deletions

View File

@ -65,13 +65,26 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
} }
} }
internal struct ScopedRegionPosition
{
public UUID m_scopeID;
public ulong m_regionHandle;
public ScopedRegionPosition(UUID scopeID, ulong handle)
{
m_scopeID = scopeID;
m_regionHandle = handle;
}
}
private ExpiringCache<ScopedRegionUUID, GridRegion> m_UUIDCache; private ExpiringCache<ScopedRegionUUID, GridRegion> m_UUIDCache;
private ExpiringCache<ScopedRegionName, ScopedRegionUUID> m_NameCache; private ExpiringCache<ScopedRegionName, ScopedRegionUUID> m_NameCache;
private ExpiringCache<ScopedRegionPosition, GridRegion> m_PositionCache;
public RegionInfoCache() public RegionInfoCache()
{ {
m_UUIDCache = new ExpiringCache<ScopedRegionUUID, GridRegion>(); m_UUIDCache = new ExpiringCache<ScopedRegionUUID, GridRegion>();
m_NameCache = new ExpiringCache<ScopedRegionName, ScopedRegionUUID>(); m_NameCache = new ExpiringCache<ScopedRegionName, ScopedRegionUUID>();
m_PositionCache = new ExpiringCache<ScopedRegionPosition, GridRegion>();
} }
public void Cache(GridRegion rinfo) public void Cache(GridRegion rinfo)
@ -96,6 +109,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
{ {
ScopedRegionName name = new ScopedRegionName(scopeID,rinfo.RegionName); ScopedRegionName name = new ScopedRegionName(scopeID,rinfo.RegionName);
m_NameCache.AddOrUpdate(name, id, CACHE_EXPIRATION_SECONDS); m_NameCache.AddOrUpdate(name, id, CACHE_EXPIRATION_SECONDS);
ScopedRegionPosition pos = new ScopedRegionPosition(scopeID, rinfo.RegionHandle);
m_PositionCache.AddOrUpdate(pos, rinfo, CACHE_EXPIRATION_SECONDS);
} }
} }
@ -114,6 +130,22 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
return null; return null;
} }
public GridRegion Get(UUID scopeID, ulong handle, out bool inCache)
{
inCache = false;
GridRegion rinfo = null;
ScopedRegionPosition pos = new ScopedRegionPosition(scopeID, handle);
if (m_PositionCache.TryGetValue(pos, out rinfo))
{
inCache = true;
return rinfo;
}
return null;
}
public GridRegion Get(UUID scopeID, string name, out bool inCache) public GridRegion Get(UUID scopeID, string name, out bool inCache)
{ {
inCache = false; inCache = false;

View File

@ -186,10 +186,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
public GridRegion GetRegionByPosition(UUID scopeID, int x, int y) public GridRegion GetRegionByPosition(UUID scopeID, int x, int y)
{ {
GridRegion rinfo = m_LocalGridService.GetRegionByPosition(scopeID, x, y); bool inCache = false;
GridRegion rinfo = m_RegionInfoCache.Get(scopeID, Util.UIntsToLong((uint)x, (uint)y), out inCache);
if (inCache)
return rinfo;
rinfo = m_LocalGridService.GetRegionByPosition(scopeID, x, y);
if (rinfo == null) if (rinfo == null)
rinfo = m_RemoteGridService.GetRegionByPosition(scopeID, x, y); rinfo = m_RemoteGridService.GetRegionByPosition(scopeID, x, y);
m_RegionInfoCache.Cache(rinfo);
return rinfo; return rinfo;
} }

View File

@ -290,7 +290,8 @@ namespace OpenSim.Region.CoreModules.World.Land
ParcelFlags.AllowGroupScripts | ParcelFlags.AllowGroupScripts |
ParcelFlags.CreateGroupObjects | ParcelFlags.CreateGroupObjects |
ParcelFlags.AllowAPrimitiveEntry | ParcelFlags.AllowAPrimitiveEntry |
ParcelFlags.AllowGroupObjectEntry); ParcelFlags.AllowGroupObjectEntry |
ParcelFlags.AllowFly);
} }
if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId, this, GroupPowers.LandSetSale)) if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId, this, GroupPowers.LandSetSale))

View File

@ -1604,9 +1604,9 @@ namespace OpenSim.Region.Framework.Scenes
dupe.GroupPosition = GroupPosition; dupe.GroupPosition = GroupPosition;
dupe.OffsetPosition = OffsetPosition; dupe.OffsetPosition = OffsetPosition;
dupe.RotationOffset = RotationOffset; dupe.RotationOffset = RotationOffset;
dupe.Velocity = new Vector3(0, 0, 0); dupe.Velocity = Velocity;
dupe.Acceleration = new Vector3(0, 0, 0); dupe.Acceleration = Acceleration;
dupe.AngularVelocity = new Vector3(0, 0, 0); dupe.AngularVelocity = AngularVelocity;
dupe.Flags = Flags; dupe.Flags = Flags;
dupe.OwnershipCost = OwnershipCost; dupe.OwnershipCost = OwnershipCost;