Real fix for the problem with duplicate fileset timestamp on really short backups
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user