diff --git a/Duplicati/Library/Main/Operation/BackupHandler.cs b/Duplicati/Library/Main/Operation/BackupHandler.cs index 4b2dc8049..c5b0e982d 100644 --- a/Duplicati/Library/Main/Operation/BackupHandler.cs +++ b/Duplicati/Library/Main/Operation/BackupHandler.cs @@ -700,7 +700,14 @@ namespace Duplicati.Library.Main.Operation m_database.BuildLookupTable(m_options); m_transaction = m_database.BeginTransaction(); + + var repcnt = 0; + while(repcnt < 100 && m_database.GetRemoteVolumeID(filesetvolume.RemoteFilename) >= 0) + filesetvolume.ResetRemoteFilename(m_options, m_database.OperationTimestamp.AddSeconds(repcnt)); + if (m_database.GetRemoteVolumeID(filesetvolume.RemoteFilename) >= 0) + throw new Exception("Unable to generate a unique fileset name"); + m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_ProcessingFiles); var filesetvolumeid = m_database.RegisterRemoteVolume(filesetvolume.RemoteFilename, RemoteVolumeType.Files, RemoteVolumeState.Temporary, m_transaction); m_database.CreateFileset(filesetvolumeid, VolumeBase.ParseFilename(filesetvolume.RemoteFilename).Time, m_transaction); diff --git a/Duplicati/Library/Main/Volumes/VolumeWriterBase.cs b/Duplicati/Library/Main/Volumes/VolumeWriterBase.cs index c4893e0f8..957784e5e 100644 --- a/Duplicati/Library/Main/Volumes/VolumeWriterBase.cs +++ b/Duplicati/Library/Main/Volumes/VolumeWriterBase.cs @@ -40,12 +40,17 @@ namespace Duplicati.Library.Main.Volumes } + public void ResetRemoteFilename(Options options, DateTime timestamp) + { + m_volumename = GenerateFilename(this.FileType, options.Prefix, GenerateGuid(options), timestamp, options.CompressionModule, options.NoEncryption ? null : options.EncryptionModule); + } + public VolumeWriterBase(Options options, DateTime timestamp) : base(options) { m_localfile = new Library.Utility.TempFile(); - m_volumename = GenerateFilename(this.FileType, options.Prefix, GenerateGuid(options), timestamp, options.CompressionModule, options.NoEncryption ? null : options.EncryptionModule); + ResetRemoteFilename(options, timestamp); m_compression = DynamicLoader.CompressionLoader.GetModule(options.CompressionModule, m_localfile, options.RawOptions); if(m_compression == null) diff --git a/Duplicati/UnitTest/Issue1410.cs b/Duplicati/UnitTest/Issue1410.cs index 285dbe4ed..13f8f38ee 100644 --- a/Duplicati/UnitTest/Issue1410.cs +++ b/Duplicati/UnitTest/Issue1410.cs @@ -51,8 +51,6 @@ namespace Duplicati.UnitTest Console.WriteLine(string.Join(Environment.NewLine, r.Files.Select(x => x.Path))); } - System.Threading.Thread.Sleep(2000); - new Random().NextBytes(data); File.WriteAllBytes(Path.Combine(DATAFOLDER, "b"), data); using(var c = new Library.Main.Controller("file://" + TARGETFOLDER, TestOptions, null))