From svn_mapguide at osgeo.org Fri Jul 18 03:53:18 2025 From: svn_mapguide at osgeo.org (svn_mapguide at osgeo.org) Date: Fri, 18 Jul 2025 03:53:18 -0700 Subject: [mapguide-commits] r10156 - in branches/4.0/MgDev/Server/RepositoryAdmin/app: . Commands Message-ID: <20250718105318.F285216D1B3@trac.osgeo.org> 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 @@ } /// + /// Looks up a localized string similar to # db files: {0} # log files: {1}. + /// + public static string BackupOnlineFileCount { + get { + return ResourceManager.GetString("BackupOnlineFileCount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to # unused files: {0} # active files: {1}. + /// + public static string BackupOnlineUnusedCount { + get { + return ResourceManager.GetString("BackupOnlineUnusedCount", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Argument out of range: {0}. /// 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 @@ Path to the destination location to where the repository is restored + + # db files: {0} # log files: {1} + + + # unused files: {0} # active files: {1} + Argument out of range: {0}