Add zstd-7 compression level

(cherry picked from commit 1013f19919c59c5b203d6b858a4897df573be4b0)

# Conflicts:
#	clouddrive/CompressEncrypt.cpp
This commit is contained in:
Martin Raiber 2021-05-31 14:44:25 +02:00 committed by Martin
parent fee7accafa
commit faebd8781e
2 changed files with 55 additions and 49 deletions

View File

@ -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;
}

View File

@ -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);