diff options
Diffstat (limited to 'table/format.cc')
-rw-r--r-- | table/format.cc | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/table/format.cc b/table/format.cc index e5a3c0c28..628e08af1 100644 --- a/table/format.cc +++ b/table/format.cc @@ -296,7 +296,8 @@ Status ReadBlock(RandomAccessFileReader* file, const Footer& footer, Status ReadBlockContents(RandomAccessFileReader* file, const Footer& footer, const ReadOptions& options, const BlockHandle& handle, BlockContents* contents, Env* env, - bool decompression_requested) { + bool decompression_requested, + const Slice& compression_dict) { Status status; Slice slice; size_t n = static_cast<size_t>(handle.size()); @@ -326,7 +327,8 @@ Status ReadBlockContents(RandomAccessFileReader* file, const Footer& footer, compression_type = static_cast<rocksdb::CompressionType>(slice.data()[n]); if (decompression_requested && compression_type != kNoCompression) { - return UncompressBlockContents(slice.data(), n, contents, footer.version()); + return UncompressBlockContents(slice.data(), n, contents, footer.version(), + compression_dict); } if (slice.data() != used_buf) { @@ -351,8 +353,8 @@ Status ReadBlockContents(RandomAccessFileReader* file, const Footer& footer, // free this buffer. // format_version is the block format as defined in include/rocksdb/table.h Status UncompressBlockContents(const char* data, size_t n, - BlockContents* contents, - uint32_t format_version) { + BlockContents* contents, uint32_t format_version, + const Slice& compression_dict) { std::unique_ptr<char[]> ubuf; int decompress_size = 0; assert(data[n] != kNoCompression); @@ -374,7 +376,8 @@ Status UncompressBlockContents(const char* data, size_t n, case kZlibCompression: ubuf.reset(Zlib_Uncompress( data, n, &decompress_size, - GetCompressFormatForVersion(kZlibCompression, format_version))); + GetCompressFormatForVersion(kZlibCompression, format_version), + compression_dict)); if (!ubuf) { static char zlib_corrupt_msg[] = "Zlib not supported or corrupted Zlib compressed block contents"; @@ -398,7 +401,8 @@ Status UncompressBlockContents(const char* data, size_t n, case kLZ4Compression: ubuf.reset(LZ4_Uncompress( data, n, &decompress_size, - GetCompressFormatForVersion(kLZ4Compression, format_version))); + GetCompressFormatForVersion(kLZ4Compression, format_version), + compression_dict)); if (!ubuf) { static char lz4_corrupt_msg[] = "LZ4 not supported or corrupted LZ4 compressed block contents"; @@ -410,7 +414,8 @@ Status UncompressBlockContents(const char* data, size_t n, case kLZ4HCCompression: ubuf.reset(LZ4_Uncompress( data, n, &decompress_size, - GetCompressFormatForVersion(kLZ4HCCompression, format_version))); + GetCompressFormatForVersion(kLZ4HCCompression, format_version), + compression_dict)); if (!ubuf) { static char lz4hc_corrupt_msg[] = "LZ4HC not supported or corrupted LZ4HC compressed block contents"; @@ -430,7 +435,7 @@ Status UncompressBlockContents(const char* data, size_t n, BlockContents(std::move(ubuf), decompress_size, true, kNoCompression); break; case kZSTDNotFinalCompression: - ubuf.reset(ZSTD_Uncompress(data, n, &decompress_size)); + ubuf.reset(ZSTD_Uncompress(data, n, &decompress_size, compression_dict)); if (!ubuf) { static char zstd_corrupt_msg[] = "ZSTD not supported or corrupted ZSTD compressed block contents"; |