Real fix for the problem with duplicate fileset timestamp on really short backups

This commit is contained in:
Kenneth Skovhede
2016-03-20 12:38:36 +01:00
parent 9d0a21a23e
commit bf07813ca8
3 changed files with 13 additions and 3 deletions
@@ -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);
@@ -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)
-2
View File
@@ -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))