This reduces DNS lookups in TPs by a factor of 4. Let's see if this fixes some of the crashes experienced by ppl in Europe connected to OSGrid. If DNS lookup does not resolve, they may experience a substantial increase in "Region not available", but they shouldn't crash.
parent
1e723f185a
commit
fcf61c4d0d
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Net;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
|
@ -148,6 +149,16 @@ namespace OpenSim.Region.Environment.Scenes.Hypergrid
|
||||||
destRegionUp = true;
|
destRegionUp = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Let's do DNS resolution only once in this process, please!
|
||||||
|
// This may be a costly operation. The reg.ExternalEndPoint field is not a passive field,
|
||||||
|
// it's actually doing a lot of work.
|
||||||
|
IPEndPoint endPoint = reg.ExternalEndPoint;
|
||||||
|
if (endPoint.Address == null)
|
||||||
|
{
|
||||||
|
// Couldn't resolve the name. Can't TP, because the viewer wants IP addresses.
|
||||||
|
destRegionUp = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (destRegionUp)
|
if (destRegionUp)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -206,15 +217,15 @@ namespace OpenSim.Region.Environment.Scenes.Hypergrid
|
||||||
|
|
||||||
if (eq != null)
|
if (eq != null)
|
||||||
{
|
{
|
||||||
OSD Item = EventQueueHelper.EnableSimulator(realHandle, reg.ExternalEndPoint);
|
OSD Item = EventQueueHelper.EnableSimulator(realHandle, endPoint);
|
||||||
eq.Enqueue(Item, avatar.UUID);
|
eq.Enqueue(Item, avatar.UUID);
|
||||||
|
|
||||||
Item = EventQueueHelper.EstablishAgentCommunication(avatar.UUID, reg.ExternalEndPoint.ToString(), capsPath);
|
Item = EventQueueHelper.EstablishAgentCommunication(avatar.UUID, endPoint.ToString(), capsPath);
|
||||||
eq.Enqueue(Item, avatar.UUID);
|
eq.Enqueue(Item, avatar.UUID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
avatar.ControllingClient.InformClientOfNeighbour(realHandle, reg.ExternalEndPoint);
|
avatar.ControllingClient.InformClientOfNeighbour(realHandle, endPoint);
|
||||||
// TODO: make Event Queue disablable!
|
// TODO: make Event Queue disablable!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -252,13 +263,13 @@ namespace OpenSim.Region.Environment.Scenes.Hypergrid
|
||||||
///
|
///
|
||||||
if (eq != null)
|
if (eq != null)
|
||||||
{
|
{
|
||||||
OSD Item = EventQueueHelper.TeleportFinishEvent(realHandle, 13, reg.ExternalEndPoint,
|
OSD Item = EventQueueHelper.TeleportFinishEvent(realHandle, 13, endPoint,
|
||||||
4, teleportFlags, capsPath, avatar.UUID);
|
4, teleportFlags, capsPath, avatar.UUID);
|
||||||
eq.Enqueue(Item, avatar.UUID);
|
eq.Enqueue(Item, avatar.UUID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
avatar.ControllingClient.SendRegionTeleport(realHandle, 13, reg.ExternalEndPoint, 4,
|
avatar.ControllingClient.SendRegionTeleport(realHandle, 13, endPoint, 4,
|
||||||
teleportFlags, capsPath);
|
teleportFlags, capsPath);
|
||||||
}
|
}
|
||||||
///
|
///
|
||||||
|
|
|
@ -2673,7 +2673,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_sceneGridService.OnRegionUp += OtherRegionUp;
|
m_sceneGridService.OnRegionUp += OtherRegionUp;
|
||||||
m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate;
|
m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate;
|
||||||
m_sceneGridService.OnExpectPrim += IncomingInterRegionPrimGroup;
|
m_sceneGridService.OnExpectPrim += IncomingInterRegionPrimGroup;
|
||||||
m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar;
|
//m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar;
|
||||||
m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid;
|
m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid;
|
||||||
m_sceneGridService.KiPrimitive += SendKillObject;
|
m_sceneGridService.KiPrimitive += SendKillObject;
|
||||||
m_sceneGridService.OnGetLandData += GetLandData;
|
m_sceneGridService.OnGetLandData += GetLandData;
|
||||||
|
@ -2686,7 +2686,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
m_sceneGridService.KiPrimitive -= SendKillObject;
|
m_sceneGridService.KiPrimitive -= SendKillObject;
|
||||||
m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid;
|
m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid;
|
||||||
m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar;
|
//m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar;
|
||||||
m_sceneGridService.OnExpectPrim -= IncomingInterRegionPrimGroup;
|
m_sceneGridService.OnExpectPrim -= IncomingInterRegionPrimGroup;
|
||||||
m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate;
|
m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate;
|
||||||
m_sceneGridService.OnRegionUp -= OtherRegionUp;
|
m_sceneGridService.OnRegionUp -= OtherRegionUp;
|
||||||
|
|
|
@ -60,7 +60,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public event PrimCrossing OnPrimCrossingIntoRegion;
|
public event PrimCrossing OnPrimCrossingIntoRegion;
|
||||||
public event RegionUp OnRegionUp;
|
public event RegionUp OnRegionUp;
|
||||||
public event ChildAgentUpdate OnChildAgentUpdate;
|
public event ChildAgentUpdate OnChildAgentUpdate;
|
||||||
public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar;
|
//public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar;
|
||||||
public event LogOffUser OnLogOffUser;
|
public event LogOffUser OnLogOffUser;
|
||||||
public event GetLandData OnGetLandData;
|
public event GetLandData OnGetLandData;
|
||||||
|
|
||||||
|
@ -729,6 +729,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
// region is remote. see if it is up
|
// region is remote. see if it is up
|
||||||
destRegionUp = m_commsProvider.InterRegion.CheckRegion(reg.RemotingAddress, reg.RemotingPort);
|
destRegionUp = m_commsProvider.InterRegion.CheckRegion(reg.RemotingAddress, reg.RemotingPort);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -736,6 +737,16 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
destRegionUp = true;
|
destRegionUp = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Let's do DNS resolution only once in this process, please!
|
||||||
|
// This may be a costly operation. The reg.ExternalEndPoint field is not a passive field,
|
||||||
|
// it's actually doing a lot of work.
|
||||||
|
IPEndPoint endPoint = reg.ExternalEndPoint;
|
||||||
|
if (endPoint.Address == null)
|
||||||
|
{
|
||||||
|
// Couldn't resolve the name. Can't TP, because the viewer wants IP addresses.
|
||||||
|
destRegionUp = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (destRegionUp)
|
if (destRegionUp)
|
||||||
{
|
{
|
||||||
uint newRegionX = (uint)(reg.RegionHandle >> 40);
|
uint newRegionX = (uint)(reg.RegionHandle >> 40);
|
||||||
|
@ -761,6 +772,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// once we reach here...
|
// once we reach here...
|
||||||
//avatar.Scene.RemoveCapsHandler(avatar.UUID);
|
//avatar.Scene.RemoveCapsHandler(avatar.UUID);
|
||||||
|
|
||||||
|
|
||||||
// Let's close some agents
|
// Let's close some agents
|
||||||
avatar.CloseChildAgents(newRegionX, newRegionY);
|
avatar.CloseChildAgents(newRegionX, newRegionY);
|
||||||
|
|
||||||
|
@ -791,15 +803,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
if (eq != null)
|
if (eq != null)
|
||||||
{
|
{
|
||||||
OSD Item = EventQueueHelper.EnableSimulator(reg.RegionHandle, reg.ExternalEndPoint);
|
OSD Item = EventQueueHelper.EnableSimulator(reg.RegionHandle, endPoint);
|
||||||
eq.Enqueue(Item, avatar.UUID);
|
eq.Enqueue(Item, avatar.UUID);
|
||||||
|
|
||||||
Item = EventQueueHelper.EstablishAgentCommunication(avatar.UUID, reg.ExternalEndPoint.ToString(), capsPath);
|
Item = EventQueueHelper.EstablishAgentCommunication(avatar.UUID, endPoint.ToString(), capsPath);
|
||||||
eq.Enqueue(Item, avatar.UUID);
|
eq.Enqueue(Item, avatar.UUID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
avatar.ControllingClient.InformClientOfNeighbour(reg.RegionHandle, reg.ExternalEndPoint);
|
avatar.ControllingClient.InformClientOfNeighbour(reg.RegionHandle, endPoint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -829,13 +841,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
if (eq != null)
|
if (eq != null)
|
||||||
{
|
{
|
||||||
OSD Item = EventQueueHelper.TeleportFinishEvent(reg.RegionHandle, 13, reg.ExternalEndPoint,
|
OSD Item = EventQueueHelper.TeleportFinishEvent(reg.RegionHandle, 13, endPoint,
|
||||||
4, teleportFlags, capsPath, avatar.UUID);
|
4, teleportFlags, capsPath, avatar.UUID);
|
||||||
eq.Enqueue(Item, avatar.UUID);
|
eq.Enqueue(Item, avatar.UUID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
avatar.ControllingClient.SendRegionTeleport(reg.RegionHandle, 13, reg.ExternalEndPoint, 4,
|
avatar.ControllingClient.SendRegionTeleport(reg.RegionHandle, 13, endPoint, 4,
|
||||||
teleportFlags, capsPath);
|
teleportFlags, capsPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue