summaryrefslogtreecommitdiff
path: root/table/format.cc
diff options
context:
space:
mode:
Diffstat (limited to 'table/format.cc')
-rw-r--r--table/format.cc21
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";