2016-02-09 23:12:00 +00:00
|
|
|
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
2017-07-15 23:03:42 +00:00
|
|
|
// This source code is licensed under both the GPLv2 (found in the
|
|
|
|
// COPYING file in the root directory) and Apache 2.0 License
|
|
|
|
// (found in the LICENSE.Apache file in the root directory).
|
2014-11-13 19:39:30 +00:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "rocksdb/status.h"
|
|
|
|
#include "rocksdb/iterator.h"
|
|
|
|
|
|
|
|
namespace rocksdb {
|
|
|
|
|
2015-10-12 22:06:38 +00:00
|
|
|
class InternalIterator;
|
2016-08-19 22:10:31 +00:00
|
|
|
class BlockHandle;
|
2015-10-12 22:06:38 +00:00
|
|
|
|
2014-11-13 19:39:30 +00:00
|
|
|
// Seek to the properties block.
|
|
|
|
// If it successfully seeks to the properties block, "is_found" will be
|
|
|
|
// set to true.
|
2015-10-12 22:06:38 +00:00
|
|
|
Status SeekToPropertiesBlock(InternalIterator* meta_iter, bool* is_found);
|
2014-11-13 19:39:30 +00:00
|
|
|
|
Shared dictionary compression using reference block
Summary:
This adds a new metablock containing a shared dictionary that is used
to compress all data blocks in the SST file. The size of the shared dictionary
is configurable in CompressionOptions and defaults to 0. It's currently only
used for zlib/lz4/lz4hc, but the block will be stored in the SST regardless of
the compression type if the user chooses a nonzero dictionary size.
During compaction, computes the dictionary by randomly sampling the first
output file in each subcompaction. It pre-computes the intervals to sample
by assuming the output file will have the maximum allowable length. In case
the file is smaller, some of the pre-computed sampling intervals can be beyond
end-of-file, in which case we skip over those samples and the dictionary will
be a bit smaller. After the dictionary is generated using the first file in a
subcompaction, it is loaded into the compression library before writing each
block in each subsequent file of that subcompaction.
On the read path, gets the dictionary from the metablock, if it exists. Then,
loads that dictionary into the compression library before reading each block.
Test Plan: new unit test
Reviewers: yhchiang, IslamAbdelRahman, cyan, sdong
Reviewed By: sdong
Subscribers: andrewkr, yoshinorim, kradhakrishnan, dhruba, leveldb
Differential Revision: https://reviews.facebook.net/D52287
2016-04-28 00:36:03 +00:00
|
|
|
// Seek to the compression dictionary block.
|
|
|
|
// If it successfully seeks to the properties block, "is_found" will be
|
|
|
|
// set to true.
|
|
|
|
Status SeekToCompressionDictBlock(InternalIterator* meta_iter, bool* is_found);
|
|
|
|
|
2016-08-19 22:10:31 +00:00
|
|
|
// TODO(andrewkr) should not put all meta block in table_properties.h/cc
|
|
|
|
Status SeekToRangeDelBlock(InternalIterator* meta_iter, bool* is_found,
|
|
|
|
BlockHandle* block_handle);
|
|
|
|
|
2014-11-13 19:39:30 +00:00
|
|
|
} // namespace rocksdb
|