diff options
author | Tom Grimshaw | 2010-05-29 01:03:59 -0700 |
---|---|---|
committer | Tom Grimshaw | 2010-05-29 01:03:59 -0700 |
commit | 2f409116db570be77fc75df188a4044250dce226 (patch) | |
tree | 424980e50591e1d4b7d89fe88960e457b19c457d /OpenSim/Services | |
parent | Merge branch 'careminster-presence-refactor' of www.3dhosting.de:/var/git/car... (diff) | |
download | opensim-SC-2f409116db570be77fc75df188a4044250dce226.zip opensim-SC-2f409116db570be77fc75df188a4044250dce226.tar.gz opensim-SC-2f409116db570be77fc75df188a4044250dce226.tar.bz2 opensim-SC-2f409116db570be77fc75df188a4044250dce226.tar.xz |
Stop IGridService from throwing a fatal exception when an IPEndPoint cannot be resolved, and add some handlers to deal with this cleanly; a condition was observed on OSGrid where a neighbouring region with an invalid (unresolveable) hostname would prevent a region from starting. This is bad.
Diffstat (limited to 'OpenSim/Services')
7 files changed, 33 insertions, 8 deletions
diff --git a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs index c426bba..6f159a0 100644 --- a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs +++ b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs | |||
@@ -87,7 +87,12 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
87 | paramList.Add(hash); | 87 | paramList.Add(hash); |
88 | 88 | ||
89 | XmlRpcRequest request = new XmlRpcRequest("link_region", paramList); | 89 | XmlRpcRequest request = new XmlRpcRequest("link_region", paramList); |
90 | string uri = "http://" + info.ExternalEndPoint.Address + ":" + info.HttpPort + "/"; | 90 | IPEndPoint ext = info.ExternalEndPoint; |
91 | string uri = ""; | ||
92 | if (ext != null) | ||
93 | { | ||
94 | uri = "http://" + ext.Address + ":" + info.HttpPort + "/"; | ||
95 | } | ||
91 | //m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: Linking to " + uri); | 96 | //m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: Linking to " + uri); |
92 | XmlRpcResponse response = null; | 97 | XmlRpcResponse response = null; |
93 | try | 98 | try |
@@ -189,7 +194,12 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
189 | paramList.Add(hash); | 194 | paramList.Add(hash); |
190 | 195 | ||
191 | XmlRpcRequest request = new XmlRpcRequest("get_region", paramList); | 196 | XmlRpcRequest request = new XmlRpcRequest("get_region", paramList); |
192 | string uri = "http://" + gatekeeper.ExternalEndPoint.Address + ":" + gatekeeper.HttpPort + "/"; | 197 | IPEndPoint ext = gatekeeper.ExternalEndPoint; |
198 | string uri = ""; | ||
199 | if (ext != null) | ||
200 | { | ||
201 | uri = "http://" + ext.Address + ":" + gatekeeper.HttpPort + "/"; | ||
202 | } | ||
193 | m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: contacting " + uri); | 203 | m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: contacting " + uri); |
194 | XmlRpcResponse response = null; | 204 | XmlRpcResponse response = null; |
195 | try | 205 | try |
diff --git a/OpenSim/Services/Connectors/Land/LandServiceConnector.cs b/OpenSim/Services/Connectors/Land/LandServiceConnector.cs index 06bc11c..0223a77 100644 --- a/OpenSim/Services/Connectors/Land/LandServiceConnector.cs +++ b/OpenSim/Services/Connectors/Land/LandServiceConnector.cs | |||
@@ -83,6 +83,8 @@ namespace OpenSim.Services.Connectors | |||
83 | if (info != null) // just to be sure | 83 | if (info != null) // just to be sure |
84 | { | 84 | { |
85 | XmlRpcRequest request = new XmlRpcRequest("land_data", paramList); | 85 | XmlRpcRequest request = new XmlRpcRequest("land_data", paramList); |
86 | |||
87 | //Possible nullref from info.externalendpoint will be caught here | ||
86 | string uri = "http://" + info.ExternalEndPoint.Address + ":" + info.HttpPort + "/"; | 88 | string uri = "http://" + info.ExternalEndPoint.Address + ":" + info.HttpPort + "/"; |
87 | XmlRpcResponse response = request.Send(uri, 10000); | 89 | XmlRpcResponse response = request.Send(uri, 10000); |
88 | if (response.IsFault) | 90 | if (response.IsFault) |
diff --git a/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs b/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs index 0a982f8..daf0439 100644 --- a/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs +++ b/OpenSim/Services/Connectors/Neighbour/NeighbourServiceConnector.cs | |||
@@ -87,7 +87,9 @@ namespace OpenSim.Services.Connectors | |||
87 | 87 | ||
88 | public bool DoHelloNeighbourCall(GridRegion region, RegionInfo thisRegion) | 88 | public bool DoHelloNeighbourCall(GridRegion region, RegionInfo thisRegion) |
89 | { | 89 | { |
90 | string uri = "http://" + region.ExternalEndPoint.Address + ":" + region.HttpPort + "/region/" + thisRegion.RegionID + "/"; | 90 | IPEndPoint ext = region.ExternalEndPoint; |
91 | if (ext == null) return false; | ||
92 | string uri = "http://" + ext.Address + ":" + region.HttpPort + "/region/" + thisRegion.RegionID + "/"; | ||
91 | //m_log.Debug(" >>> DoHelloNeighbourCall <<< " + uri); | 93 | //m_log.Debug(" >>> DoHelloNeighbourCall <<< " + uri); |
92 | 94 | ||
93 | WebRequest HelloNeighbourRequest = WebRequest.Create(uri); | 95 | WebRequest HelloNeighbourRequest = WebRequest.Create(uri); |
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs index 3a61226..57924b7 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs | |||
@@ -104,6 +104,8 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
104 | 104 | ||
105 | public string RegisterRegion(UUID scopeID, GridRegion regionInfo) | 105 | public string RegisterRegion(UUID scopeID, GridRegion regionInfo) |
106 | { | 106 | { |
107 | IPEndPoint ext = regionInfo.ExternalEndPoint; | ||
108 | if (ext == null) return "Region registration for " + regionInfo.RegionName + " failed: Could not resolve EndPoint"; | ||
107 | Vector3d minPosition = new Vector3d(regionInfo.RegionLocX, regionInfo.RegionLocY, 0.0); | 109 | Vector3d minPosition = new Vector3d(regionInfo.RegionLocX, regionInfo.RegionLocY, 0.0); |
108 | Vector3d maxPosition = minPosition + new Vector3d(Constants.RegionSize, Constants.RegionSize, 4096.0); | 110 | Vector3d maxPosition = minPosition + new Vector3d(Constants.RegionSize, Constants.RegionSize, 4096.0); |
109 | 111 | ||
@@ -114,7 +116,7 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
114 | { "ServerURI", OSD.FromString(regionInfo.ServerURI) }, | 116 | { "ServerURI", OSD.FromString(regionInfo.ServerURI) }, |
115 | { "InternalAddress", OSD.FromString(regionInfo.InternalEndPoint.Address.ToString()) }, | 117 | { "InternalAddress", OSD.FromString(regionInfo.InternalEndPoint.Address.ToString()) }, |
116 | { "InternalPort", OSD.FromInteger(regionInfo.InternalEndPoint.Port) }, | 118 | { "InternalPort", OSD.FromInteger(regionInfo.InternalEndPoint.Port) }, |
117 | { "ExternalAddress", OSD.FromString(regionInfo.ExternalEndPoint.Address.ToString()) }, | 119 | { "ExternalAddress", OSD.FromString(ext.Address.ToString()) }, |
118 | { "ExternalPort", OSD.FromInteger(regionInfo.ExternalEndPoint.Port) }, | 120 | { "ExternalPort", OSD.FromInteger(regionInfo.ExternalEndPoint.Port) }, |
119 | { "MapTexture", OSD.FromUUID(regionInfo.TerrainImage) }, | 121 | { "MapTexture", OSD.FromUUID(regionInfo.TerrainImage) }, |
120 | { "Access", OSD.FromInteger(regionInfo.Access) }, | 122 | { "Access", OSD.FromInteger(regionInfo.Access) }, |
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs index 8e0063b..748faef 100644 --- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs +++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs | |||
@@ -348,9 +348,11 @@ namespace OpenSim.Services.Connectors.Simulation | |||
348 | 348 | ||
349 | public bool RetrieveAgent(GridRegion destination, UUID id, out IAgentData agent) | 349 | public bool RetrieveAgent(GridRegion destination, UUID id, out IAgentData agent) |
350 | { | 350 | { |
351 | IPEndPoint ext = destination.ExternalEndPoint; | ||
351 | agent = null; | 352 | agent = null; |
353 | if (ext == null) return false; | ||
352 | // Eventually, we want to use a caps url instead of the agentID | 354 | // Eventually, we want to use a caps url instead of the agentID |
353 | string uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + AgentPath() + id + "/" + destination.RegionID.ToString() + "/"; | 355 | string uri = "http://" + ext.Address + ":" + destination.HttpPort + AgentPath() + id + "/" + destination.RegionID.ToString() + "/"; |
354 | //Console.WriteLine(" >>> DoRetrieveRootAgentCall <<< " + uri); | 356 | //Console.WriteLine(" >>> DoRetrieveRootAgentCall <<< " + uri); |
355 | 357 | ||
356 | HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); | 358 | HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); |
@@ -514,8 +516,10 @@ namespace OpenSim.Services.Connectors.Simulation | |||
514 | 516 | ||
515 | public bool CreateObject(GridRegion destination, ISceneObject sog, bool isLocalCall) | 517 | public bool CreateObject(GridRegion destination, ISceneObject sog, bool isLocalCall) |
516 | { | 518 | { |
519 | IPEndPoint ext = destination.ExternalEndPoint; | ||
520 | if (ext == null) return false; | ||
517 | string uri | 521 | string uri |
518 | = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + ObjectPath() + sog.UUID + "/"; | 522 | = "http://" + ext.Address + ":" + destination.HttpPort + ObjectPath() + sog.UUID + "/"; |
519 | //m_log.Debug(" >>> DoCreateObjectCall <<< " + uri); | 523 | //m_log.Debug(" >>> DoCreateObjectCall <<< " + uri); |
520 | 524 | ||
521 | WebRequest ObjectCreateRequest = WebRequest.Create(uri); | 525 | WebRequest ObjectCreateRequest = WebRequest.Create(uri); |
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs index e55b633..94cee57 100644 --- a/OpenSim/Services/Interfaces/IGridService.cs +++ b/OpenSim/Services/Interfaces/IGridService.cs | |||
@@ -259,9 +259,13 @@ namespace OpenSim.Services.Interfaces | |||
259 | } | 259 | } |
260 | catch (SocketException e) | 260 | catch (SocketException e) |
261 | { | 261 | { |
262 | throw new Exception( | 262 | /*throw new Exception( |
263 | "Unable to resolve local hostname " + m_externalHostName + " innerException of type '" + | 263 | "Unable to resolve local hostname " + m_externalHostName + " innerException of type '" + |
264 | e + "' attached to this exception", e); | 264 | e + "' attached to this exception", e);*/ |
265 | // Don't throw a fatal exception here, instead, return Null and handle it in the caller. | ||
266 | // Reason is, on systems such as OSgrid it has occured that known hostnames stop | ||
267 | // resolving and thus make surrounding regions crash out with this exception. | ||
268 | return null; | ||
265 | } | 269 | } |
266 | 270 | ||
267 | return new IPEndPoint(ia, m_internalEndPoint.Port); | 271 | return new IPEndPoint(ia, m_internalEndPoint.Port); |
diff --git a/OpenSim/Services/LLLoginService/LLLoginResponse.cs b/OpenSim/Services/LLLoginService/LLLoginResponse.cs index edf41bc..6a2cbeb 100644 --- a/OpenSim/Services/LLLoginService/LLLoginResponse.cs +++ b/OpenSim/Services/LLLoginService/LLLoginResponse.cs | |||
@@ -327,6 +327,7 @@ namespace OpenSim.Services.LLLoginService | |||
327 | private void FillOutRegionData(GridRegion destination) | 327 | private void FillOutRegionData(GridRegion destination) |
328 | { | 328 | { |
329 | IPEndPoint endPoint = destination.ExternalEndPoint; | 329 | IPEndPoint endPoint = destination.ExternalEndPoint; |
330 | if (endPoint == null) return; | ||
330 | SimAddress = endPoint.Address.ToString(); | 331 | SimAddress = endPoint.Address.ToString(); |
331 | SimPort = (uint)endPoint.Port; | 332 | SimPort = (uint)endPoint.Port; |
332 | RegionX = (uint)destination.RegionLocX; | 333 | RegionX = (uint)destination.RegionLocX; |