* Updates RESTInterregionComms and LocalInterregionComms to the new region module interface. This fixes an issue where region references were being added but weren't being deleted,
causing those "unnotified circuit" messages. * Also fixes tests accordingly - Fixes Mantis #3452 - Fixes Mantis #3388 - Fixes Mantis #3871 - Related to Mantis #3493trunk
parent
a133e83f3a
commit
7bf59c551e
|
@ -30,6 +30,8 @@
|
||||||
<RegionModule id="RemoteNeighbourServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour.RemoteNeighbourServicesConnector" />
|
<RegionModule id="RemoteNeighbourServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour.RemoteNeighbourServicesConnector" />
|
||||||
<RegionModule id="LocalLandServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Land.LocalLandServicesConnector" />
|
<RegionModule id="LocalLandServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Land.LocalLandServicesConnector" />
|
||||||
<RegionModule id="RemoteLandServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Land.RemoteLandServicesConnector" />
|
<RegionModule id="RemoteLandServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Land.RemoteLandServicesConnector" />
|
||||||
|
<RegionModule id="LocalInterregionComms" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion.LocalInterregionComms" />
|
||||||
|
<RegionModule id="RESTInterregionComms" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion.RESTInterregionComms" />
|
||||||
<!-- Service connectors IN modules -->
|
<!-- Service connectors IN modules -->
|
||||||
<RegionModule id="AssetServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Asset.AssetServiceInConnectorModule" />
|
<RegionModule id="AssetServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Asset.AssetServiceInConnectorModule" />
|
||||||
<RegionModule id="InventoryServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Inventory.InventoryServiceInConnectorModule" />
|
<RegionModule id="InventoryServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Inventory.InventoryServiceInConnectorModule" />
|
||||||
|
|
|
@ -36,7 +36,7 @@ using OpenSim.Region.Framework.Scenes;
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
{
|
{
|
||||||
public class LocalInterregionComms : IRegionModule, IInterregionCommsOut, IInterregionCommsIn
|
public class LocalInterregionComms : ISharedRegionModule, IInterregionCommsOut, IInterregionCommsIn
|
||||||
{
|
{
|
||||||
private bool m_enabled = false;
|
private bool m_enabled = false;
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
|
|
||||||
#region IRegionModule
|
#region IRegionModule
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
public void Initialise(IConfigSource config)
|
||||||
{
|
{
|
||||||
if (m_sceneList.Count == 0)
|
if (m_sceneList.Count == 0)
|
||||||
{
|
{
|
||||||
|
@ -62,30 +62,61 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
m_enabled = true;
|
m_enabled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Init(scene);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostInitialise()
|
public void PostInitialise()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddRegion(Scene scene)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveRegion(Scene scene)
|
||||||
|
{
|
||||||
|
if (m_enabled)
|
||||||
|
{
|
||||||
|
RemoveScene(scene);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegionLoaded(Scene scene)
|
||||||
|
{
|
||||||
|
if (m_enabled)
|
||||||
|
{
|
||||||
|
Init(scene);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Close()
|
public void Close()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Type ReplacableInterface
|
||||||
|
{
|
||||||
|
get { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
public string Name
|
public string Name
|
||||||
{
|
{
|
||||||
get { return "LocalInterregionCommsModule"; }
|
get { return "LocalInterregionCommsModule"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsSharedModule
|
/// <summary>
|
||||||
|
/// Can be called from other modules.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
public void RemoveScene(Scene scene)
|
||||||
{
|
{
|
||||||
get { return true; }
|
lock (m_sceneList)
|
||||||
|
{
|
||||||
|
if (m_sceneList.Contains(scene))
|
||||||
|
{
|
||||||
|
m_sceneList.Remove(scene);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Can be called from other modules.
|
/// Can be called from other modules.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -110,21 +141,21 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
#region IInterregionComms
|
#region IInterregionComms
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Agent-related communications
|
* Agent-related communications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit, out string reason)
|
public bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit, out string reason)
|
||||||
{
|
{
|
||||||
|
|
||||||
foreach (Scene s in m_sceneList)
|
foreach (Scene s in m_sceneList)
|
||||||
{
|
{
|
||||||
if (s.RegionInfo.RegionHandle == regionHandle)
|
if (s.RegionInfo.RegionHandle == regionHandle)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[LOCAL COMMS]: Found region {0} to send SendCreateChildAgent", regionHandle);
|
// m_log.DebugFormat("[LOCAL COMMS]: Found region {0} to send SendCreateChildAgent", regionHandle);
|
||||||
return s.NewUserConnection(aCircuit, out reason);
|
return s.NewUserConnection(aCircuit, out reason);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// m_log.DebugFormat("[LOCAL COMMS]: Did not find region {0} for SendCreateChildAgent", regionHandle);
|
// m_log.DebugFormat("[LOCAL COMMS]: Did not find region {0} for SendCreateChildAgent", regionHandle);
|
||||||
reason = "Did not find region.";
|
reason = "Did not find region.";
|
||||||
return false;
|
return false;
|
||||||
|
@ -137,14 +168,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
if (s.RegionInfo.RegionHandle == regionHandle)
|
if (s.RegionInfo.RegionHandle == regionHandle)
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat(
|
//m_log.DebugFormat(
|
||||||
// "[LOCAL COMMS]: Found region {0} {1} to send ChildAgentUpdate",
|
// "[LOCAL COMMS]: Found region {0} {1} to send ChildAgentUpdate",
|
||||||
// s.RegionInfo.RegionName, regionHandle);
|
// s.RegionInfo.RegionName, regionHandle);
|
||||||
|
|
||||||
s.IncomingChildAgentDataUpdate(cAgentData);
|
s.IncomingChildAgentDataUpdate(cAgentData);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// m_log.DebugFormat("[LOCAL COMMS]: Did not find region {0} for ChildAgentUpdate", regionHandle);
|
// m_log.DebugFormat("[LOCAL COMMS]: Did not find region {0} for ChildAgentUpdate", regionHandle);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -218,7 +249,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object-related communications
|
* Object-related communications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public bool SendCreateObject(ulong regionHandle, SceneObjectGroup sog, bool isLocalCall)
|
public bool SendCreateObject(ulong regionHandle, SceneObjectGroup sog, bool isLocalCall)
|
||||||
|
|
|
@ -45,7 +45,7 @@ using OpenSim.Region.Framework.Scenes.Serialization;
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
{
|
{
|
||||||
public class RESTInterregionComms : IRegionModule, IInterregionCommsOut
|
public class RESTInterregionComms : ISharedRegionModule, IInterregionCommsOut
|
||||||
{
|
{
|
||||||
private bool initialized = false;
|
private bool initialized = false;
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
@ -64,53 +64,65 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
|
|
||||||
#region IRegionModule
|
#region IRegionModule
|
||||||
|
|
||||||
public virtual void Initialise(Scene scene, IConfigSource config)
|
public virtual void Initialise(IConfigSource config)
|
||||||
{
|
{
|
||||||
if (!initialized)
|
IConfig startupConfig = config.Configs["Communications"];
|
||||||
|
|
||||||
|
if ((startupConfig == null) || ((startupConfig != null)
|
||||||
|
&& (startupConfig.GetString("InterregionComms", "RESTComms") == "RESTComms")))
|
||||||
{
|
{
|
||||||
initialized = true;
|
m_log.Info("[REST COMMS]: Enabling InterregionComms RESTComms module");
|
||||||
IConfig startupConfig = config.Configs["Communications"];
|
m_enabled = true;
|
||||||
|
if (config.Configs["Hypergrid"] != null)
|
||||||
if ((startupConfig == null)
|
m_safemode = config.Configs["Hypergrid"].GetBoolean("safemode", false);
|
||||||
|| (startupConfig != null)
|
|
||||||
&& (startupConfig.GetString("InterregionComms", "RESTComms") == "RESTComms"))
|
|
||||||
{
|
|
||||||
m_log.Info("[REST COMMS]: Enabling InterregionComms RESTComms module");
|
|
||||||
m_enabled = true;
|
|
||||||
if (config.Configs["Hypergrid"] != null)
|
|
||||||
m_safemode = config.Configs["Hypergrid"].GetBoolean("safemode", false);
|
|
||||||
|
|
||||||
InitOnce(scene);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
InitEach(scene);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void PostInitialise()
|
public virtual void PostInitialise()
|
||||||
{
|
{
|
||||||
if (m_enabled)
|
|
||||||
AddHTTPHandlers();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Close()
|
public virtual void Close()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddRegion(Scene scene)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveRegion(Scene scene)
|
||||||
|
{
|
||||||
|
if (m_enabled)
|
||||||
|
{
|
||||||
|
m_localBackend.RemoveScene(scene);
|
||||||
|
scene.UnregisterModuleInterface<IInterregionCommsOut>(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegionLoaded(Scene scene)
|
||||||
|
{
|
||||||
|
if (m_enabled)
|
||||||
|
{
|
||||||
|
if (!initialized)
|
||||||
|
{
|
||||||
|
InitOnce(scene);
|
||||||
|
initialized = true;
|
||||||
|
AddHTTPHandlers();
|
||||||
|
}
|
||||||
|
InitEach(scene);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Type ReplacableInterface
|
||||||
|
{
|
||||||
|
get { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
public virtual string Name
|
public virtual string Name
|
||||||
{
|
{
|
||||||
get { return "RESTInterregionCommsModule"; }
|
get { return "RESTInterregionCommsModule"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool IsSharedModule
|
|
||||||
{
|
|
||||||
get { return true; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void InitEach(Scene scene)
|
protected virtual void InitEach(Scene scene)
|
||||||
{
|
{
|
||||||
m_localBackend.Init(scene);
|
m_localBackend.Init(scene);
|
||||||
|
@ -137,7 +149,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
#region IInterregionComms
|
#region IInterregionComms
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Agent-related communications
|
* Agent-related communications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit, out string reason)
|
public bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit, out string reason)
|
||||||
|
@ -257,7 +269,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object-related communications
|
* Object-related communications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public bool SendCreateObject(ulong regionHandle, SceneObjectGroup sog, bool isLocalCall)
|
public bool SendCreateObject(ulong regionHandle, SceneObjectGroup sog, bool isLocalCall)
|
||||||
|
@ -527,7 +539,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
protected virtual void DoAgentDelete(Hashtable request, Hashtable responsedata, UUID id, string action, ulong regionHandle)
|
protected virtual void DoAgentDelete(Hashtable request, Hashtable responsedata, UUID id, string action, ulong regionHandle)
|
||||||
{
|
{
|
||||||
//m_log.Debug(" >>> DoDelete action:" + action + "; regionHandle:" + regionHandle);
|
//m_log.Debug(" >>> DoDelete action:" + action + "; regionHandle:" + regionHandle);
|
||||||
|
|
||||||
if (action.Equals("release"))
|
if (action.Equals("release"))
|
||||||
m_localBackend.SendReleaseAgent(regionHandle, id, "");
|
m_localBackend.SendReleaseAgent(regionHandle, id, "");
|
||||||
else
|
else
|
||||||
|
@ -613,7 +625,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
extraStr = args["extra"].AsString();
|
extraStr = args["extra"].AsString();
|
||||||
|
|
||||||
UUID regionID = m_localBackend.GetRegionID(regionhandle);
|
UUID regionID = m_localBackend.GetRegionID(regionhandle);
|
||||||
SceneObjectGroup sog = null;
|
SceneObjectGroup sog = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
sog = SceneObjectSerializer.FromXml2Format(sogXmlStr);
|
sog = SceneObjectSerializer.FromXml2Format(sogXmlStr);
|
||||||
|
@ -675,7 +687,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
responsedata["str_response_string"] = result.ToString();
|
responsedata["str_response_string"] = result.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Misc
|
#region Misc
|
||||||
|
|
||||||
|
@ -707,7 +719,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
UInt64.TryParse(parts[2], out regionHandle);
|
UInt64.TryParse(parts[2], out regionHandle);
|
||||||
if (parts.Length >= 4)
|
if (parts.Length >= 4)
|
||||||
action = parts[3];
|
action = parts[3];
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -759,7 +771,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion Misc
|
#endregion Misc
|
||||||
|
|
||||||
protected class RegionToRegionClient : RegionClient
|
protected class RegionToRegionClient : RegionClient
|
||||||
{
|
{
|
||||||
|
|
|
@ -71,10 +71,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
scene2 = SceneSetupHelpers.SetupScene("Neighbour x+1", UUID.Random(), 1001, 1000, cm);
|
scene2 = SceneSetupHelpers.SetupScene("Neighbour x+1", UUID.Random(), 1001, 1000, cm);
|
||||||
scene3 = SceneSetupHelpers.SetupScene("Neighbour x-1", UUID.Random(), 999, 1000, cm);
|
scene3 = SceneSetupHelpers.SetupScene("Neighbour x-1", UUID.Random(), 999, 1000, cm);
|
||||||
|
|
||||||
IRegionModule interregionComms = new RESTInterregionComms();
|
ISharedRegionModule interregionComms = new RESTInterregionComms();
|
||||||
interregionComms.Initialise(scene, new IniConfigSource());
|
interregionComms.Initialise(new IniConfigSource());
|
||||||
interregionComms.Initialise(scene2, new IniConfigSource());
|
|
||||||
interregionComms.Initialise(scene3, new IniConfigSource());
|
|
||||||
interregionComms.PostInitialise();
|
interregionComms.PostInitialise();
|
||||||
SceneSetupHelpers.SetupSceneModules(scene, new IniConfigSource(), interregionComms);
|
SceneSetupHelpers.SetupSceneModules(scene, new IniConfigSource(), interregionComms);
|
||||||
SceneSetupHelpers.SetupSceneModules(scene2, new IniConfigSource(), interregionComms);
|
SceneSetupHelpers.SetupSceneModules(scene2, new IniConfigSource(), interregionComms);
|
||||||
|
|
|
@ -65,7 +65,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
TestCommunicationsManager cm = new TestCommunicationsManager();
|
TestCommunicationsManager cm = new TestCommunicationsManager();
|
||||||
|
|
||||||
// shared module
|
// shared module
|
||||||
IRegionModule interregionComms = new RESTInterregionComms();
|
ISharedRegionModule interregionComms = new RESTInterregionComms();
|
||||||
|
|
||||||
Scene sceneA = SceneSetupHelpers.SetupScene("sceneA", sceneAId, 1000, 1000, cm);
|
Scene sceneA = SceneSetupHelpers.SetupScene("sceneA", sceneAId, 1000, 1000, cm);
|
||||||
SceneSetupHelpers.SetupSceneModules(sceneA, new IniConfigSource(), interregionComms);
|
SceneSetupHelpers.SetupSceneModules(sceneA, new IniConfigSource(), interregionComms);
|
||||||
|
|
|
@ -214,6 +214,7 @@ namespace OpenSim.Tests.Common.Setup
|
||||||
foreach (IRegionModuleBase module in newModules)
|
foreach (IRegionModuleBase module in newModules)
|
||||||
{
|
{
|
||||||
module.AddRegion(scene);
|
module.AddRegion(scene);
|
||||||
|
module.RegionLoaded(scene);
|
||||||
scene.AddRegionModule(module.Name, module);
|
scene.AddRegionModule(module.Name, module);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue