From faebd8781e47a173a9280908ebfac9e7a30e5d99 Mon Sep 17 00:00:00 2001 From: Martin Raiber Date: Mon, 31 May 2021 14:44:25 +0200 Subject: [PATCH] Add zstd-7 compression level (cherry picked from commit 1013f19919c59c5b203d6b858a4897df573be4b0) # Conflicts: # clouddrive/CompressEncrypt.cpp --- clouddrive/CompressEncrypt.cpp | 103 +++++++++++++++++---------------- clouddrive/ICompressEncrypt.h | 1 + 2 files changed, 55 insertions(+), 49 deletions(-) diff --git a/clouddrive/CompressEncrypt.cpp b/clouddrive/CompressEncrypt.cpp index 79bc21c7..86edbf11 100644 --- a/clouddrive/CompressEncrypt.cpp +++ b/clouddrive/CompressEncrypt.cpp @@ -50,6 +50,8 @@ unsigned int CompressionMethodFromString(const std::string & str) return CompressionZstd9; else if (str == "none") return CompressionNone; + else if (str == "zstd_7") + return CompressionZstd7; else return CompressionZstd3; } @@ -87,51 +89,54 @@ bool read_generation( IFile* file, int64 offset, int64& generation) return true; } - -ICompressAndEncrypt* CompressEncryptFactory::createCompressAndEncrypt(const std::string& encryption_key, IFile* file, IOnlineKvStore* online_kv_store, unsigned int compression_id) -{ - ICompressor* compressor; - switch (compression_id) - { - case CompressionLzma5: -#ifdef WITH_LZMA - compressor = new LzmaCompressor; -#else - compressor = new CdZstdCompressor(17, CompressionZstd3); -#endif - break; - - case CompressionZlib5: - compressor = new CdZlibCompressor(5, compression_id); - break; - case CompressionZstd3: - case CompressionZstd19: - case CompressionZstd9: - { - int level = 3; - switch (compression_id) - { - case CompressionZstd19: - level = 19; - case CompressionZstd9: - level = 9; - } - compressor = new CdZstdCompressor(level, CompressionZstd3); - } break; - case CompressionNone: - compressor = nullptr; - break; - default: - return nullptr; - } - return new CompressAndEncrypt(encryption_key, file, online_kv_store, compressor); -} - -IDecryptAndDecompress* CompressEncryptFactory::createDecryptAndDecompress(const std::string& encryption_key, IFile* output_file) -{ - return new DecryptAndDecompress(encryption_key, output_file); -} - + +ICompressAndEncrypt* CompressEncryptFactory::createCompressAndEncrypt(const std::string& encryption_key, IFile* file, IOnlineKvStore* online_kv_store, unsigned int compression_id) +{ + ICompressor* compressor; + switch (compression_id) + { + case CompressionLzma5: +#ifdef WITH_LZMA + compressor = new LzmaCompressor; +#else + compressor = new CdZstdCompressor(17, CompressionZstd3); +#endif + break; + + case CompressionZlib5: + compressor = new CdZlibCompressor(5, compression_id); + break; + case CompressionZstd3: + case CompressionZstd19: + case CompressionZstd9: + case CompressionZstd7: + { + int level = 3; + switch (compression_id) + { + case CompressionZstd19: + level = 19; + case CompressionZstd9: + level = 9; + case CompressionZstd7: + level = 7; + } + compressor = new CdZstdCompressor(level, CompressionZstd3); + } break; + case CompressionNone: + compressor = nullptr; + break; + default: + return nullptr; + } + return new CompressAndEncrypt(encryption_key, file, online_kv_store, compressor); +} + +IDecryptAndDecompress* CompressEncryptFactory::createDecryptAndDecompress(const std::string& encryption_key, IFile* output_file) +{ + return new DecryptAndDecompress(encryption_key, output_file); +} + CompressAndEncrypt::CompressAndEncrypt( const std::string& encryption_key, IFile* file, IOnlineKvStore* online_kv_store, ICompressor* compressor) @@ -250,8 +255,8 @@ size_t CompressAndEncrypt::read( char* buffer, size_t buffer_size ) + file->getFilename() + " at position " + convert(file_pos) + " len " + convert(buffer_size) + " for compression and encryption. " + os_last_error_str(); Server->Log(msg, LL_ERROR); - addSystemEvent("cache_err", - "Error reading from file on cache", + addSystemEvent("cache_err", + "Error reading from file on cache", msg, LL_ERROR); return std::string::npos; } @@ -271,8 +276,8 @@ size_t CompressAndEncrypt::read( char* buffer, size_t buffer_size ) std::string msg = "Read only " + convert(file_pos) + " of total " + convert(input_file_size) + " from " + file->getFilename(); Server->Log(msg, LL_ERROR); - addSystemEvent("cache_err", - "Error reading from file on cache", + addSystemEvent("cache_err", + "Error reading from file on cache", msg, LL_ERROR); return std::string::npos; } diff --git a/clouddrive/ICompressEncrypt.h b/clouddrive/ICompressEncrypt.h index 3dfa8cba..9921b07c 100644 --- a/clouddrive/ICompressEncrypt.h +++ b/clouddrive/ICompressEncrypt.h @@ -33,6 +33,7 @@ namespace const unsigned int CompressionZstd19 = 3; const unsigned int CompressionZstd9 = 4; const unsigned int CompressionNone = 5; + const unsigned int CompressionZstd7 = 6; } unsigned int CompressionMethodFromString(const std::string& str);