[mapguide-commits] r10156 - in branches/4.0/MgDev/Server/RepositoryAdmin/app: . Commands

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Fri Jul 18 03:53:18 PDT 2025


Author: jng
Date: 2025-07-18 03:53:16 -0700 (Fri, 18 Jul 2025)
New Revision: 10156

Modified:
   branches/4.0/MgDev/Server/RepositoryAdmin/app/Commands/App.cs
   branches/4.0/MgDev/Server/RepositoryAdmin/app/Commands/BackupCommand.cs
   branches/4.0/MgDev/Server/RepositoryAdmin/app/Strings.Designer.cs
   branches/4.0/MgDev/Server/RepositoryAdmin/app/Strings.resx
Log:
#2879: Implement full snapshot determination for online backup and ensure target directory exists for offline backup

Modified: branches/4.0/MgDev/Server/RepositoryAdmin/app/Commands/App.cs
===================================================================
--- branches/4.0/MgDev/Server/RepositoryAdmin/app/Commands/App.cs	2025-06-16 12:14:03 UTC (rev 10155)
+++ branches/4.0/MgDev/Server/RepositoryAdmin/app/Commands/App.cs	2025-07-18 10:53:16 UTC (rev 10156)
@@ -191,6 +191,10 @@
             bkDir = new DirectoryInfo(Path.Combine(cmd.OutputPath.FullName, "LastColdBackup"));
             bkDir.Create();
         }
+        else
+        {
+            bkDir.Create();
+        }
 
         var outDir = bkDir;
         TransferDatabaseFiles(outDir);
@@ -199,13 +203,46 @@
         return 0;
     }
 
-    internal int BackupOnlineRepositories()
+    internal int BackupOnlineRepositories(BackupCommand bkCmd)
     {
         stdout.WriteLine(Strings.IDS_PROGRESS_BACKING_UP_ONLINE_REPOSITORY);
 
         bool fullSnapshot = true;
-        // TODO: fullSnapshot flag determination logic 
+        var bkDir = new DirectoryInfo(Path.Combine(cmd.OutputPath.FullName, "LastHotBackup"));
+        if (bkDir.Exists)
+        {
+            var dbFiles = this.GetDatabaseFiles(bkDir.FullName).ToList();
+            var logFiles = this.GetLogFiles(bkDir.FullName, false).ToList();
 
+            stdout.WriteLine(Strings.BackupOnlineFileCount, dbFiles.Count, logFiles.Count);
+
+            if ((dbFiles.Count == 0 && logFiles.Count != 0) || (dbFiles.Count != 0 && logFiles.Count == 0))
+            {
+                // Rename current LastHotBackup to BAD_BK_yyyy-mm-dd-hh-mm-ss
+                var localNow = DateTime.Now;
+                var newName = $"BAD_BK_{localNow.Year}-{localNow.Month:00}-{localNow.Day:00}-{localNow.Hour:00}-{localNow.Minute:00}-{localNow.Second:00}";
+                bkDir.MoveTo(newName);
+            }
+            else
+            {
+                var unusedFiles = this.GetLogFiles(bkDir.FullName, true).ToList();
+                var numActiveFiles = logFiles.Count - unusedFiles.Count;
+
+                stdout.WriteLine(Strings.BackupOnlineUnusedCount, unusedFiles.Count, numActiveFiles);
+
+                if (numActiveFiles > bkCmd.Level)
+                {
+                    var localNow = bkDir.LastWriteTime;
+                    var newName = $"HOT_BK_{localNow.Year}-{localNow.Month:00}-{localNow.Day:00}-{localNow.Hour:00}-{localNow.Minute:00}-{localNow.Second:00}";
+                    bkDir.MoveTo(newName);
+                }
+                else
+                {
+                    fullSnapshot = false;
+                }
+            }
+        }
+
         var outDir = cmd.OutputPath.CreateSubdirectory("LastHotBackup");
         if (fullSnapshot)
         {

Modified: branches/4.0/MgDev/Server/RepositoryAdmin/app/Commands/BackupCommand.cs
===================================================================
--- branches/4.0/MgDev/Server/RepositoryAdmin/app/Commands/BackupCommand.cs	2025-06-16 12:14:03 UTC (rev 10155)
+++ branches/4.0/MgDev/Server/RepositoryAdmin/app/Commands/BackupCommand.cs	2025-07-18 10:53:16 UTC (rev 10156)
@@ -49,7 +49,7 @@
         }
         else
         {
-            return app.BackupOnlineRepositories();
+            return app.BackupOnlineRepositories(this);
         }
     }
 }
\ No newline at end of file

Modified: branches/4.0/MgDev/Server/RepositoryAdmin/app/Strings.Designer.cs
===================================================================
--- branches/4.0/MgDev/Server/RepositoryAdmin/app/Strings.Designer.cs	2025-06-16 12:14:03 UTC (rev 10155)
+++ branches/4.0/MgDev/Server/RepositoryAdmin/app/Strings.Designer.cs	2025-07-18 10:53:16 UTC (rev 10156)
@@ -120,6 +120,24 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to # db files: {0} # log files: {1}.
+        /// </summary>
+        public static string BackupOnlineFileCount {
+            get {
+                return ResourceManager.GetString("BackupOnlineFileCount", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to # unused files: {0} # active files: {1}.
+        /// </summary>
+        public static string BackupOnlineUnusedCount {
+            get {
+                return ResourceManager.GetString("BackupOnlineUnusedCount", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Argument out of range: {0}.
         /// </summary>
         public static string IDS_ERR_ARGUMENT_OUT_OF_RANGE {

Modified: branches/4.0/MgDev/Server/RepositoryAdmin/app/Strings.resx
===================================================================
--- branches/4.0/MgDev/Server/RepositoryAdmin/app/Strings.resx	2025-06-16 12:14:03 UTC (rev 10155)
+++ branches/4.0/MgDev/Server/RepositoryAdmin/app/Strings.resx	2025-07-18 10:53:16 UTC (rev 10156)
@@ -140,6 +140,12 @@
   <data name="ArgHelp_Restore_OutputPath" xml:space="preserve">
     <value>Path to the destination location to where the repository is restored</value>
   </data>
+  <data name="BackupOnlineFileCount" xml:space="preserve">
+    <value># db files: {0} # log files: {1}</value>
+  </data>
+  <data name="BackupOnlineUnusedCount" xml:space="preserve">
+    <value># unused files: {0} # active files: {1}</value>
+  </data>
   <data name="IDS_ERR_ARGUMENT_OUT_OF_RANGE" xml:space="preserve">
     <value>Argument out of range: {0}</value>
   </data>



More information about the mapguide-commits mailing list