Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/duplicati/duplicati.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Skovhede <kenneth@hexad.dk>2015-08-24 12:50:47 +0300
committerKenneth Skovhede <kenneth@hexad.dk>2015-08-24 12:50:47 +0300
commitab9da38ef1ef8b3b0f41293d31375760cce815ad (patch)
tree32615d6216b511bb5720a27b2cb224300eb93049
parenta24615a1b68992d14801e150cbd36a0a245bf884 (diff)
Fixed an issue with restores that do not touch all remote volumes.
This fixes #1429.
-rw-r--r--Duplicati/Library/Main/Database/LocalDatabase.cs22
-rw-r--r--Duplicati/Library/Main/Operation/RecreateDatabaseHandler.cs2
-rw-r--r--Duplicati/Library/Main/Operation/RepairHandler.cs2
3 files changed, 16 insertions, 10 deletions
diff --git a/Duplicati/Library/Main/Database/LocalDatabase.cs b/Duplicati/Library/Main/Database/LocalDatabase.cs
index 61adec25b..d81e7670f 100644
--- a/Duplicati/Library/Main/Database/LocalDatabase.cs
+++ b/Duplicati/Library/Main/Database/LocalDatabase.cs
@@ -118,8 +118,8 @@ namespace Duplicati.Library.Main.Database
m_selectremotevolumeIdCommand.CommandText = @"SELECT ""ID"" FROM ""Remotevolume"" WHERE ""Name"" = ?";
- m_createremotevolumeCommand.CommandText = @"INSERT INTO ""Remotevolume"" (""OperationID"", ""Name"", ""Type"", ""State"", ""VerificationCount"", ""DeleteGraceTime"") VALUES (?, ?, ?, ?, ?, ?); SELECT last_insert_rowid();";
- m_createremotevolumeCommand.AddParameters(6);
+ m_createremotevolumeCommand.CommandText = @"INSERT INTO ""Remotevolume"" (""OperationID"", ""Name"", ""Type"", ""State"", ""Size"", ""VerificationCount"", ""DeleteGraceTime"") VALUES (?, ?, ?, ?, ?, ?, ?); SELECT last_insert_rowid();";
+ m_createremotevolumeCommand.AddParameters(7);
m_insertIndexBlockLink.CommandText = @"INSERT INTO ""IndexBlockLink"" (""IndexVolumeID"", ""BlockVolumeID"") VALUES (?, ?)";
m_insertIndexBlockLink.AddParameters(2);
@@ -352,17 +352,22 @@ namespace Duplicati.Library.Main.Database
cmd.ExecuteNonQuery("VACUUM");
}
- public long RegisterRemoteVolume(string name, RemoteVolumeType type, RemoteVolumeState state)
+ public long RegisterRemoteVolume(string name, RemoteVolumeType type, long size, RemoteVolumeState state)
{
- return RegisterRemoteVolume(name, type, state, new TimeSpan(0), null);
+ return RegisterRemoteVolume(name, type, state, size, new TimeSpan(0), null);
}
public long RegisterRemoteVolume(string name, RemoteVolumeType type, RemoteVolumeState state, System.Data.IDbTransaction transaction)
{
return RegisterRemoteVolume(name, type, state, new TimeSpan(0), transaction);
}
-
+
public long RegisterRemoteVolume(string name, RemoteVolumeType type, RemoteVolumeState state, TimeSpan deleteGraceTime, System.Data.IDbTransaction transaction)
+ {
+ return RegisterRemoteVolume(name, type, state, -1, deleteGraceTime, transaction);
+ }
+
+ public long RegisterRemoteVolume(string name, RemoteVolumeType type, RemoteVolumeState state, long size, TimeSpan deleteGraceTime, System.Data.IDbTransaction transaction)
{
using(var tr = new TemporaryTransactionWrapper(m_connection, transaction))
{
@@ -370,12 +375,13 @@ namespace Duplicati.Library.Main.Database
m_createremotevolumeCommand.SetParameterValue(1, name);
m_createremotevolumeCommand.SetParameterValue(2, type.ToString());
m_createremotevolumeCommand.SetParameterValue(3, state.ToString());
- m_createremotevolumeCommand.SetParameterValue(4, 0);
+ m_createremotevolumeCommand.SetParameterValue(4, size);
+ m_createremotevolumeCommand.SetParameterValue(5, 0);
if (deleteGraceTime.Ticks <= 0)
- m_createremotevolumeCommand.SetParameterValue(5, 0);
+ m_createremotevolumeCommand.SetParameterValue(6, 0);
else
- m_createremotevolumeCommand.SetParameterValue(5, (DateTime.UtcNow + deleteGraceTime).Ticks);
+ m_createremotevolumeCommand.SetParameterValue(6, (DateTime.UtcNow + deleteGraceTime).Ticks);
m_createremotevolumeCommand.Transaction = tr.Parent;
var r = m_createremotevolumeCommand.ExecuteScalarInt64();
diff --git a/Duplicati/Library/Main/Operation/RecreateDatabaseHandler.cs b/Duplicati/Library/Main/Operation/RecreateDatabaseHandler.cs
index f3f727581..356def2bc 100644
--- a/Duplicati/Library/Main/Operation/RecreateDatabaseHandler.cs
+++ b/Duplicati/Library/Main/Operation/RecreateDatabaseHandler.cs
@@ -134,7 +134,7 @@ namespace Duplicati.Library.Main.Operation
// If we are updating, all files should be accounted for
foreach(var fl in remotefiles)
- volumeIds[fl.File.Name] = updating ? restoredb.GetRemoteVolumeID(fl.File.Name) : restoredb.RegisterRemoteVolume(fl.File.Name, fl.FileType, RemoteVolumeState.Uploaded);
+ volumeIds[fl.File.Name] = updating ? restoredb.GetRemoteVolumeID(fl.File.Name) : restoredb.RegisterRemoteVolume(fl.File.Name, fl.FileType, fl.File.Size, RemoteVolumeState.Uploaded);
var hasUpdatedOptions = false;
diff --git a/Duplicati/Library/Main/Operation/RepairHandler.cs b/Duplicati/Library/Main/Operation/RepairHandler.cs
index e7a64e8d2..235792f2a 100644
--- a/Duplicati/Library/Main/Operation/RepairHandler.cs
+++ b/Duplicati/Library/Main/Operation/RepairHandler.cs
@@ -188,7 +188,7 @@ namespace Duplicati.Library.Main.Operation
if (!m_options.Dryrun)
{
- db.RegisterRemoteVolume(n.File.Name, n.FileType, RemoteVolumeState.Deleting);
+ db.RegisterRemoteVolume(n.File.Name, n.FileType, n.File.Size, RemoteVolumeState.Deleting);
backend.Delete(n.File.Name, n.File.Size);
}
else