diff --git a/Duplicati/Library/Main/Database/LocalDatabase.cs b/Duplicati/Library/Main/Database/LocalDatabase.cs index 81a06fd79..9da44ee84 100644 --- a/Duplicati/Library/Main/Database/LocalDatabase.cs +++ b/Duplicati/Library/Main/Database/LocalDatabase.cs @@ -156,9 +156,16 @@ namespace Duplicati.Library.Main.Database } public void UpdateRemoteVolume(string name, RemoteVolumeState state, long size, string hash, System.Data.IDbTransaction transaction = null) - { UpdateRemoteVolume(name, state, size, hash, false, transaction); } + { + UpdateRemoteVolume(name, state, size, hash, false, transaction); + } - public void UpdateRemoteVolume(string name, RemoteVolumeState state, long size, string hash, bool suppressCleanup, System.Data.IDbTransaction transaction = null) + public void UpdateRemoteVolume(string name, RemoteVolumeState state, long size, string hash, bool suppressCleanup, System.Data.IDbTransaction transaction = null) + { + UpdateRemoteVolume(name, state, size, hash, suppressCleanup, new TimeSpan(0), transaction); + } + + public void UpdateRemoteVolume(string name, RemoteVolumeState state, long size, string hash, bool suppressCleanup, TimeSpan deleteGraceTime, System.Data.IDbTransaction transaction = null) { m_updateremotevolumeCommand.Transaction = transaction; m_updateremotevolumeCommand.SetParameterValue(0, m_operationid); @@ -170,6 +177,12 @@ namespace Duplicati.Library.Main.Database if (c != 1) throw new Exception(string.Format("Unexpected number of remote volumes detected: {0}!", c)); + if (deleteGraceTime.Ticks > 0) + using(var cmd = m_connection.CreateCommand(transaction)) + if ((c = cmd.ExecuteNonQuery(@"UPDATE ""RemoteVolume"" SET ""DeleteGraceTime"" = ? WHERE ""Name"" = ? ", (DateTime.UtcNow + deleteGraceTime).Ticks, name)) != 1) + throw new Exception(string.Format("Unexpected number of remote volumes detected: {0}!", c)); + + if (!suppressCleanup && state == RemoteVolumeState.Deleted) RemoveRemoteVolume(name, transaction); } diff --git a/Duplicati/Library/Main/Operation/FilelistProcessor.cs b/Duplicati/Library/Main/Operation/FilelistProcessor.cs index abc0400fe..1138e4a0e 100644 --- a/Duplicati/Library/Main/Operation/FilelistProcessor.cs +++ b/Duplicati/Library/Main/Operation/FilelistProcessor.cs @@ -282,8 +282,7 @@ namespace Duplicati.Library.Main.Operation { log.AddMessage(string.Format("scheduling missing file for deletion, currently listed as {0}: {1}", i.State, i.Name)); cleanupRemovedRemoteVolumes.Add(i.Name); - database.RegisterRemoteVolume(i.Name, i.Type, RemoteVolumeState.Deleting, TimeSpan.FromHours(2), null); - database.UpdateRemoteVolume(i.Name, RemoteVolumeState.Deleting, i.Size, i.Hash, null); + database.UpdateRemoteVolume(i.Name, RemoteVolumeState.Deleting, i.Size, i.Hash, false, TimeSpan.FromHours(2), null); } else {