From e41c0d8bf988bdfc562b8f451a8fd0fc8b6a0652 Mon Sep 17 00:00:00 2001 From: Jon Schewe Date: Wed, 8 Jul 2020 07:55:25 -0500 Subject: [PATCH 1/4] Catch compression errors and report them When the file list is over 4GB one needs to have the zip64 option enabled. This commit catches the exception and reports it as an error so that the user knows what the problem is. Fixes duplicati/duplicati#/4206 --- .../Main/Volumes/FilesetVolumeWriter.cs | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs b/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs index ab0f505dc..c302b78cb 100644 --- a/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs +++ b/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs @@ -8,6 +8,11 @@ namespace Duplicati.Library.Main.Volumes { public class FilesetVolumeWriter : VolumeWriterBase { + /// + /// The tag used for logging + /// + private static readonly string LOGTAG = Logging.Log.LogTagFromType(); + private readonly Library.Utility.TempFile m_tempFile; private readonly Stream m_tempStream; private StreamWriter m_streamwriter; @@ -159,11 +164,18 @@ namespace Duplicati.Library.Main.Volumes m_writer.Flush(); m_streamwriter.Flush(); - using (Stream sr = m_compression.CreateFile(FILELIST, CompressionHint.Compressible, DateTime.UtcNow)) + try { - m_tempStream.Seek(0, SeekOrigin.Begin); - m_tempStream.CopyTo(sr); - sr.Flush(); + using (Stream sr = m_compression.CreateFile(FILELIST, CompressionHint.Compressible, DateTime.UtcNow)) + { + m_tempStream.Seek(0, SeekOrigin.Begin); + m_tempStream.CopyTo(sr); + sr.Flush(); + } + } + catch (System.NotSupportedException e) + { + Logging.Log.WriteErrorMessage(LOGTAG, "CompressionError", e, "Compression Error: {0}", e.Message); } } From 36336ac6f12524a794f4725995e1f6ee84c501d3 Mon Sep 17 00:00:00 2001 From: Jon Schewe Date: Fri, 10 Jul 2020 06:55:41 -0500 Subject: [PATCH 2/4] Rethrow exception after logging This ensures that the backup properly fails. --- Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs b/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs index c302b78cb..40d55f92b 100644 --- a/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs +++ b/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs @@ -140,9 +140,6 @@ namespace Duplicati.Library.Main.Volumes if (m_streamwriter != null) { this.AddFilelistFile(); - m_writer.Close(); - m_streamwriter.Dispose(); - m_streamwriter = null; } if (m_tempStream != null) @@ -176,6 +173,13 @@ namespace Duplicati.Library.Main.Volumes catch (System.NotSupportedException e) { Logging.Log.WriteErrorMessage(LOGTAG, "CompressionError", e, "Compression Error: {0}", e.Message); + throw e; + } + finally + { + m_writer.Close(); + m_streamwriter.Dispose(); + m_streamwriter = null; } } From 2747f78c40e11c72e6f247ff75d147067f72c827 Mon Sep 17 00:00:00 2001 From: Jon Schewe Date: Sat, 11 Jul 2020 17:33:38 -0500 Subject: [PATCH 3/4] Remove unneeded catch statement Using the finally block to close out the writer allows the exception to show up in the log. --- Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs b/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs index 40d55f92b..57065e74e 100644 --- a/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs +++ b/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs @@ -170,11 +170,6 @@ namespace Duplicati.Library.Main.Volumes sr.Flush(); } } - catch (System.NotSupportedException e) - { - Logging.Log.WriteErrorMessage(LOGTAG, "CompressionError", e, "Compression Error: {0}", e.Message); - throw e; - } finally { m_writer.Close(); From e5f57e8f662d18a5aa7c8b79f02e036d739c53e8 Mon Sep 17 00:00:00 2001 From: Jon Schewe Date: Sat, 11 Jul 2020 18:12:59 -0500 Subject: [PATCH 4/4] Remove unused LOGTAG field --- Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs b/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs index 57065e74e..df57b4ebd 100644 --- a/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs +++ b/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs @@ -8,11 +8,6 @@ namespace Duplicati.Library.Main.Volumes { public class FilesetVolumeWriter : VolumeWriterBase { - /// - /// The tag used for logging - /// - private static readonly string LOGTAG = Logging.Log.LogTagFromType(); - private readonly Library.Utility.TempFile m_tempFile; private readonly Stream m_tempStream; private StreamWriter m_streamwriter;