From 8cf42ddb8434b4df953217ba0fe0ebe1cbef7828 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Mon, 21 Apr 2008 04:11:56 +0000 Subject: [PATCH] * Added support for periodic autosaves - added to SvnBackupModule. Will cause a SVN revision to be saved every X minutes. (Default = 15) * Added 'Autosave' options to OpenSim.ini.Example * Added 'ImportOnStartup' option to OpenSim.ini.example --- .../Modules/SvnSerialiser/SvnBackupModule.cs | 38 +++++++++++++++---- bin/OpenSim.ini.example | 3 ++ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs b/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs index f6a98ac075..aaa7acf933 100644 --- a/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs +++ b/OpenSim/Region/Modules/SvnSerialiser/SvnBackupModule.cs @@ -23,11 +23,20 @@ namespace OpenSim.Region.Modules.SvnSerialiser private string m_svnuser = "username"; private string m_svnpass = "password"; private string m_svndir = "SVNmodule\\repo"; + + private TimeSpan m_svnperiod = new TimeSpan(0, 0, 15, 0, 0); + private bool m_svnAutoSave = false; + private System.Timers.Timer m_timer = new System.Timers.Timer(); + private IRegionSerialiser m_serialiser; private List m_scenes = new List(); #region SvnModule Core + /// + /// Exports a specified scene to the SVN repo directory, then commits. + /// + /// The scene to export public void SaveRegion(Scene scene) { List svnfilenames = CreateAndAddExport(scene); @@ -36,6 +45,9 @@ namespace OpenSim.Region.Modules.SvnSerialiser m_log.Info("[SVNBACKUP]: Region backup successful (" + scene.RegionInfo.RegionName + ")."); } + /// + /// Saves all registered scenes to the SVN repo, then commits. + /// public void SaveAllRegions() { List svnfilenames = new List(); @@ -158,6 +170,8 @@ namespace OpenSim.Region.Modules.SvnSerialiser m_svnuser = source.Configs["SVN"].GetString("Username", m_svnuser); m_svnpass = source.Configs["SVN"].GetString("Password", m_svnpass); m_installBackupOnLoad = source.Configs["SVN"].GetBoolean("ImportOnStartup", m_installBackupOnLoad); + m_svnAutoSave = source.Configs["SVN"].GetBoolean("Autosave", m_svnAutoSave); + m_svnperiod = new TimeSpan(0, source.Configs["SVN"].GetInt("AutosavePeriod", (int)m_svnperiod.TotalMinutes), 0); } catch(Exception) { } lock (m_scenes) @@ -172,7 +186,7 @@ namespace OpenSim.Region.Modules.SvnSerialiser { if (args[0] == "svn" && args[1] == "save") { - SaveAllScenes(); + SaveAllRegions(); } if (args.Length == 2) { @@ -234,7 +248,7 @@ namespace OpenSim.Region.Modules.SvnSerialiser m_log.Warn("[SVNBACKUP]: No region loaded - unable to find matching name."); } - private void LoadAllScenes() + public void LoadAllScenes() { CheckoutSvn(); @@ -245,7 +259,7 @@ namespace OpenSim.Region.Modules.SvnSerialiser } - private void LoadAllScenes(int revision) + public void LoadAllScenes(int revision) { CheckoutSvn(new SvnRevision(revision)); @@ -255,16 +269,19 @@ namespace OpenSim.Region.Modules.SvnSerialiser } } - private void SaveAllScenes() - { - SaveAllRegions(); - } - public void PostInitialise() { if (m_enabled == false) return; + if (m_svnAutoSave == true) + { + m_timer.Interval = m_svnperiod.TotalMilliseconds; + m_timer.Elapsed += new System.Timers.ElapsedEventHandler(m_timer_Elapsed); + m_timer.AutoReset = true; + m_timer.Start(); + } + m_log.Info("[SVNBACKUP]: Connecting to SVN server " + m_svnurl + " ..."); SetupSvnProvider(); @@ -283,6 +300,11 @@ namespace OpenSim.Region.Modules.SvnSerialiser } } + void m_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + SaveAllRegions(); + } + private void SetupSerialiser() { if (m_scenes.Count > 0) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 92fdae0ac1..ab7dfe4cd3 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -388,3 +388,6 @@ Directory = SVNmodule\repo URL = "svn://your.repo.here/" Username = "user" Password = "password" +ImportOnStartup = false +Autosave = false +AutoSavePeriod = 15 ; Number of minutes between autosave backups