From 5ddb8b535e33ea6fbe668bad76c25f501f154bae Mon Sep 17 00:00:00 2001 From: Jonathan Freedman Date: Sat, 23 Oct 2010 00:18:19 -0400 Subject: [PATCH 01/55] * a bit of additional debugging: --- OpenSim/Services/HypergridService/UserAgentService.cs | 7 +++---- OpenSim/Services/LLLoginService/LLLoginService.cs | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs index eb19fe2fdc..32b4249e20 100644 --- a/OpenSim/Services/HypergridService/UserAgentService.cs +++ b/OpenSim/Services/HypergridService/UserAgentService.cs @@ -135,8 +135,6 @@ namespace OpenSim.Services.HypergridService { m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}", agentCircuit.firstname, agentCircuit.lastname, ((clientIP == null) ? "stored IP" : clientIP.Address.ToString()), gatekeeper.ServerURI); - - m_log.Debug("LATG final server uri -> " + finalDestination.ServerURI ); // Take the IP address + port of the gatekeeper (reg) plus the info of finalDestination GridRegion region = new GridRegion(gatekeeper); region.ServerURI = gatekeeper.ServerURI; @@ -150,12 +148,13 @@ namespace OpenSim.Services.HypergridService // Generate a new service session agentCircuit.ServiceSessionID = region.ServerURI + ";" + UUID.Random(); TravelingAgentInfo old = UpdateTravelInfo(agentCircuit, region); - - m_log.Debug("region ServerURI -> " + region.ServerURI); bool success = false; string myExternalIP = string.Empty; string gridName = gatekeeper.ServerURI; + + m_log.Debug("m_grid - " + m_GridName + ", gn - " + gridName); + if (m_GridName == gridName) success = m_GatekeeperService.LoginAgent(agentCircuit, finalDestination, out reason); else diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 127c4b2c5c..b0b51c48b8 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs @@ -566,6 +566,7 @@ namespace OpenSim.Services.LLLoginService private GridRegion FindForeignRegion(string domainName, uint port, string regionName, out GridRegion gatekeeper) { + m_log.Debug("attempting to findforeignregion " + domainName + ":" + port.ToString() + ":" + regionName); gatekeeper = new GridRegion(); gatekeeper.ExternalHostName = domainName; gatekeeper.HttpPort = port; @@ -631,11 +632,9 @@ namespace OpenSim.Services.LLLoginService gatekeeper = new GridRegion(destination); gatekeeper.ExternalHostName = hostName; gatekeeper.HttpPort = (uint)port; - - } - else // login to foreign grid - { + gatekeeper.ServerURI = m_GatekeeperURL; } + m_log.Debug("no gatekeeper detected..... using " + m_GatekeeperURL); } bool success = false; From 3fe8fc3d517d1b6cd3bcf4ce5dce1bed1f5c100c Mon Sep 17 00:00:00 2001 From: Jonathan Freedman Date: Sun, 24 Oct 2010 13:32:34 -0400 Subject: [PATCH 02/55] * throw debug message when no HomeURI is set --- .../Framework/EntityTransfer/HGEntityTransferModule.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index 9a275ae215..7796a08360 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs @@ -238,6 +238,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer string url = aCircuit.ServiceURLs["HomeURI"].ToString(); IUserAgentService security = new UserAgentServiceConnector(url); return security.VerifyClient(aCircuit.SessionID, token); + } else { + m_log.Debug("this gent does not have a HomeURI OH NO"); } return false; From 0a56cfbfd53e4e5515ecba65466042e0f1b50341 Mon Sep 17 00:00:00 2001 From: Jonathan Freedman Date: Sat, 30 Oct 2010 22:51:52 -0400 Subject: [PATCH 03/55] * better semantics for link-region command * actually parse name for new link-region command --- .../Services/GridService/HypergridLinker.cs | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/OpenSim/Services/GridService/HypergridLinker.cs b/OpenSim/Services/GridService/HypergridLinker.cs index 50da1bd729..eed3207637 100644 --- a/OpenSim/Services/GridService/HypergridLinker.cs +++ b/OpenSim/Services/GridService/HypergridLinker.cs @@ -128,8 +128,8 @@ namespace OpenSim.Services.GridService if (MainConsole.Instance != null) { MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region", "link-region []", "Link a HyperGrid Region", RunCommand); - MainConsole.Instance.Commands.AddCommand("hypergrid", false, "legacy-link-region", - "legacy-link-region []", + MainConsole.Instance.Commands.AddCommand("hypergrid", false, "link-region", + "link-region []", "Link a hypergrid region (deprecated)", RunCommand); MainConsole.Instance.Commands.AddCommand("hypergrid", false, "unlink-region", "unlink-region ", @@ -206,14 +206,14 @@ namespace OpenSim.Services.GridService return null; } - public bool TryCreateLink(UUID scopeID, int xloc, int yloc, string externalRegionName, uint externalPort, string externalHostName, UUID ownerID, out GridRegion regInfo, out string reason) + public bool TryCreateLink(UUID scopeID, int xloc, int yloc, string remoteRegionName, uint externalPort, string externalHostName, UUID ownerID, out GridRegion regInfo, out string reason) { - return TryCreateLink(scopeID, xloc, yloc, externalRegionName, externalPort, externalHostName, null, ownerID, out regInfo, out reason); + return TryCreateLink(scopeID, xloc, yloc, remoteRegionName, externalPort, externalHostName, null, ownerID, out regInfo, out reason); } - public bool TryCreateLink(UUID scopeID, int xloc, int yloc, string externalRegionName, uint externalPort, string externalHostName, string serverURI, UUID ownerID, out GridRegion regInfo, out string reason) + public bool TryCreateLink(UUID scopeID, int xloc, int yloc, string remoteRegionName, uint externalPort, string externalHostName, string serverURI, UUID ownerID, out GridRegion regInfo, out string reason) { - m_log.DebugFormat("[HYPERGRID LINKER]: Link to {0}:{1}:{2}, in {3}-{4}", externalHostName, externalPort, externalRegionName, xloc, yloc); + m_log.DebugFormat("[HYPERGRID LINKER]: Link to {0}:{1}:{2}, in {3}-{4}", externalHostName, externalPort, remoteRegionName, xloc, yloc); reason = string.Empty; regInfo = new GridRegion(); @@ -227,6 +227,9 @@ namespace OpenSim.Services.GridService regInfo.ExternalHostName = "0.0.0.0"; if ( serverURI != null) regInfo.ServerURI = serverURI; + + if ( remoteRegionName != string.Empty ) + regInfo.RegionName = remoteRegionName; regInfo.RegionLocX = xloc; regInfo.RegionLocY = yloc; @@ -326,13 +329,6 @@ namespace OpenSim.Services.GridService } } - //foreach (GridRegion r in m_HyperlinkRegions.Values) - //{ - // m_log.DebugFormat("XXX Comparing {0}:{1} with {2}:{3}", host, port, r.ExternalHostName, r.HttpPort); - // if (host.Equals(r.ExternalHostName) && (port == r.HttpPort)) - // regInfo = r; - //} - if (regInfo != null) { RemoveHyperlinkRegion(regInfo.RegionID); @@ -500,7 +496,7 @@ namespace OpenSim.Services.GridService } return; } - else if (command.Equals("legacy-link-region")) + else if (command.Equals("link-region")) { if (cmdparams.Length < 3) { @@ -515,7 +511,11 @@ namespace OpenSim.Services.GridService return; } - if (cmdparams[2].Contains(":")) + //this should be the prefererred way of setting up hg links now + if ( cmdparams[2].StartsWith("http") && ( cmdparams.Length >= 3 && cmdparams.Length <= 5 )) { + RunLinkRegionCommand(cmdparams); + } + else if (cmdparams[2].Contains(":")) { // New format int xloc, yloc; @@ -578,7 +578,7 @@ namespace OpenSim.Services.GridService xloc = xloc * (int)Constants.RegionSize; yloc = yloc * (int)Constants.RegionSize; string reason = string.Empty; - if (TryCreateLink(UUID.Zero, xloc, yloc, "", externalPort, externalHostName, UUID.Zero, out regInfo, out reason)) + if (TryCreateLink(UUID.Zero, xloc, yloc, string.Empty, externalPort, externalHostName, UUID.Zero, out regInfo, out reason)) { if (cmdparams.Length >= 5) { @@ -592,7 +592,7 @@ namespace OpenSim.Services.GridService } else if (command.Equals("unlink-region")) { - if (cmdparams.Length < 1) + if (cmdparams.Length < 1 || cmdparams.Length > 1) { UnlinkRegionCmdUsage(); return; @@ -680,7 +680,7 @@ namespace OpenSim.Services.GridService xloc = xloc * (int)Constants.RegionSize; yloc = yloc * (int)Constants.RegionSize; string reason = string.Empty; - if (TryCreateLink(UUID.Zero, xloc, yloc, "", externalPort, externalHostName, UUID.Zero, out regInfo, out reason)) + if (TryCreateLink(UUID.Zero, xloc, yloc, string.Empty, externalPort, externalHostName, UUID.Zero, out regInfo, out reason)) { regInfo.RegionName = config.GetString("localName", ""); } @@ -692,14 +692,14 @@ namespace OpenSim.Services.GridService private void LinkRegionCmdUsage() { - MainConsole.Instance.Output("Usage: link-region :[:]"); - MainConsole.Instance.Output("Usage: link-region []"); + MainConsole.Instance.Output("Usage: link-region []"); + MainConsole.Instance.Output("Usage (deprecated): link-region :[:]"); + MainConsole.Instance.Output("Usage (deprecated): link-region []"); MainConsole.Instance.Output("Usage: link-region []"); } private void UnlinkRegionCmdUsage() { - MainConsole.Instance.Output("Usage: unlink-region :"); MainConsole.Instance.Output("Usage: unlink-region "); } From e14f449cc2a59cb84c195b9479bcd43c16cafc48 Mon Sep 17 00:00:00 2001 From: Melanie Date: Wed, 24 Nov 2010 22:14:53 +0000 Subject: [PATCH 04/55] Adding the skeleton for the restart module --- .../CoreModules/World/Region/RestartModule.cs | 93 +++++++++++++++++++ .../Framework/Interfaces/IRestartModule.cs | 39 ++++++++ 2 files changed, 132 insertions(+) create mode 100644 OpenSim/Region/CoreModules/World/Region/RestartModule.cs create mode 100644 OpenSim/Region/Framework/Interfaces/IRestartModule.cs diff --git a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs new file mode 100644 index 0000000000..a92a28dd8c --- /dev/null +++ b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs @@ -0,0 +1,93 @@ +/* + * 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.Reflection; +using System.Timers; +using System.Threading; +using log4net; +using Nini.Config; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using Timer=System.Timers.Timer; + +namespace OpenSim.Region.CoreModules.World.Region +{ + public class RestartModule : INonSharedRegionModule, IRestartModule + { + private static readonly ILog m_log = + LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + protected Scene m_Scene; + protected Timer m_CountdownTimer = null; + + public void Initialise(IConfigSource config) + { + } + + public void AddRegion(Scene scene) + { + m_Scene = scene; + } + + public void RegionLoaded(Scene scene) + { + } + + public void RemoveRegion(Scene scene) + { + } + + public void Close() + { + } + + public string Name + { + get { return "RestartModule"; } + } + + public Type ReplaceableInterface + { + get { return typeof(IRestartModule); } + } + + public TimeSpan TimeUntilRestart + { + get { return TimeSpan.FromSeconds(0); } + } + public void ScheduleRestart(UUID initiator, string message, int seconds, int[] alerts, bool notice) + { + } + + public void AbortRestart(string message) + { + } + } +} diff --git a/OpenSim/Region/Framework/Interfaces/IRestartModule.cs b/OpenSim/Region/Framework/Interfaces/IRestartModule.cs new file mode 100644 index 0000000000..d8cac7b66b --- /dev/null +++ b/OpenSim/Region/Framework/Interfaces/IRestartModule.cs @@ -0,0 +1,39 @@ +/* + * 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 OpenMetaverse; + +namespace OpenSim.Region.Framework.Interfaces +{ + public interface IRestartModule + { + TimeSpan TimeUntilRestart { get; } + void ScheduleRestart(UUID initiator, string message, int seconds, int[] alerts, bool notice); + void AbortRestart(string message); + } +} From 6734c9f83ae00b762873c3d99293435552b9a0c2 Mon Sep 17 00:00:00 2001 From: Melanie Date: Thu, 25 Nov 2010 01:22:05 +0000 Subject: [PATCH 05/55] Implement the restart module --- .../CoreModules/World/Region/RestartModule.cs | 115 +++++++++++++++++- .../Framework/Interfaces/IRestartModule.cs | 2 +- 2 files changed, 114 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs index a92a28dd8c..1c26c38daa 100644 --- a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs +++ b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs @@ -29,6 +29,7 @@ using System; using System.Reflection; using System.Timers; using System.Threading; +using System.Collections.Generic; using log4net; using Nini.Config; using OpenMetaverse; @@ -46,6 +47,12 @@ namespace OpenSim.Region.CoreModules.World.Region protected Scene m_Scene; protected Timer m_CountdownTimer = null; + protected DateTime m_RestartBegin; + protected List m_Alerts; + protected string m_Message; + protected UUID m_Initiator; + protected bool m_Notice = false; + protected IDialogModule m_DialogModule = null; public void Initialise(IConfigSource config) { @@ -54,6 +61,7 @@ namespace OpenSim.Region.CoreModules.World.Region public void AddRegion(Scene scene) { m_Scene = scene; + m_DialogModule = m_Scene.RequestModuleInterface(); } public void RegionLoaded(Scene scene) @@ -80,14 +88,117 @@ namespace OpenSim.Region.CoreModules.World.Region public TimeSpan TimeUntilRestart { - get { return TimeSpan.FromSeconds(0); } + get { return DateTime.Now - m_RestartBegin; } } - public void ScheduleRestart(UUID initiator, string message, int seconds, int[] alerts, bool notice) + + public void ScheduleRestart(UUID initiator, string message, int[] alerts, bool notice) { + if (m_CountdownTimer != null) + return; + + if (alerts == null) + { + m_Scene.RestartNow(); + return; + } + + m_Message = message; + m_Initiator = initiator; + m_Notice = notice; + m_Alerts = new List(alerts); + m_Alerts.Sort(); + m_Alerts.Reverse(); + + if (m_Alerts[0] == 0) + { + m_Scene.RestartNow(); + return; + } + + int nextInterval = DoOneNotice(); + + SetTimer(nextInterval); + } + + public int DoOneNotice() + { + if (m_Alerts.Count == 0 || m_Alerts[0] == 0) + { + m_Scene.RestartNow(); + return 0; + } + + int nextAlert = 0; + while (m_Alerts.Count > 1) + { + if (m_Alerts[1] == m_Alerts[0]) + { + m_Alerts.RemoveAt(0); + continue; + } + nextAlert = m_Alerts[1]; + } + + int currentAlert = m_Alerts[0]; + + m_Alerts.RemoveAt(0); + + int minutes = currentAlert / 60; + string currentAlertString = ""; + if (minutes > 0) + { + if (minutes == 1) + currentAlertString += "1 minute"; + else + currentAlertString += String.Format("{0} minutes", minutes); + if ((currentAlert % 60) != 0) + currentAlertString += " and "; + } + if ((currentAlert % 60) != 0) + { + int seconds = currentAlert % 60; + if (seconds == 1) + currentAlertString += "1 second"; + else + currentAlertString += String.Format("{0} seconds", seconds); + } + + string msg = String.Format(m_Message, currentAlertString); + + if (m_DialogModule != null) + { + if (m_Notice) + m_DialogModule.SendGeneralAlert(msg); + else + m_DialogModule.SendNotificationToUsersInRegion(m_Initiator, "System", msg); + } + + return currentAlert - nextAlert; + } + + public void SetTimer(int intervalSeconds) + { + m_CountdownTimer = new Timer(); + m_CountdownTimer.AutoReset = false; + m_CountdownTimer.Interval = intervalSeconds * 1000; + m_CountdownTimer.Elapsed += OnTimer; + m_CountdownTimer.Start(); + } + + private void OnTimer(object source, ElapsedEventArgs e) + { + int nextInterval = DoOneNotice(); + + SetTimer(nextInterval); } public void AbortRestart(string message) { + if (m_CountdownTimer != null) + { + m_CountdownTimer.Stop(); + m_CountdownTimer = null; + } } } } diff --git a/OpenSim/Region/Framework/Interfaces/IRestartModule.cs b/OpenSim/Region/Framework/Interfaces/IRestartModule.cs index d8cac7b66b..c68550f393 100644 --- a/OpenSim/Region/Framework/Interfaces/IRestartModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IRestartModule.cs @@ -33,7 +33,7 @@ namespace OpenSim.Region.Framework.Interfaces public interface IRestartModule { TimeSpan TimeUntilRestart { get; } - void ScheduleRestart(UUID initiator, string message, int seconds, int[] alerts, bool notice); + void ScheduleRestart(UUID initiator, string message, int[] alerts, bool notice); void AbortRestart(string message); } } From fb97fe8307b79648819848c4357042ca6105fc52 Mon Sep 17 00:00:00 2001 From: Melanie Date: Thu, 25 Nov 2010 02:37:50 +0100 Subject: [PATCH 06/55] Finish the RestartModule and fix some bugs. Add new console commands: region restart bluebox