1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
11 #include "table/block_based/cachable_entry.h"
12 #include "table/format.h"
14 namespace ROCKSDB_NAMESPACE
{
16 class BlockBasedTable
;
17 struct BlockCacheLookupContext
;
18 class FilePrefetchBuffer
;
21 struct UncompressionDict
;
23 // Provides access to the uncompression dictionary regardless of whether
24 // it is owned by the reader or stored in the cache, or whether it is pinned
25 // in the cache or not.
26 class UncompressionDictReader
{
29 const BlockBasedTable
* table
, const ReadOptions
& ro
,
30 FilePrefetchBuffer
* prefetch_buffer
, bool use_cache
, bool prefetch
,
31 bool pin
, BlockCacheLookupContext
* lookup_context
,
32 std::unique_ptr
<UncompressionDictReader
>* uncompression_dict_reader
);
34 Status
GetOrReadUncompressionDictionary(
35 FilePrefetchBuffer
* prefetch_buffer
, bool no_io
, bool verify_checksums
,
36 GetContext
* get_context
, BlockCacheLookupContext
* lookup_context
,
37 CachableEntry
<UncompressionDict
>* uncompression_dict
) const;
39 size_t ApproximateMemoryUsage() const;
42 UncompressionDictReader(const BlockBasedTable
* t
,
43 CachableEntry
<UncompressionDict
>&& uncompression_dict
)
44 : table_(t
), uncompression_dict_(std::move(uncompression_dict
)) {
48 bool cache_dictionary_blocks() const;
50 static Status
ReadUncompressionDictionary(
51 const BlockBasedTable
* table
, FilePrefetchBuffer
* prefetch_buffer
,
52 const ReadOptions
& read_options
, bool use_cache
, GetContext
* get_context
,
53 BlockCacheLookupContext
* lookup_context
,
54 CachableEntry
<UncompressionDict
>* uncompression_dict
);
56 const BlockBasedTable
* table_
;
57 CachableEntry
<UncompressionDict
> uncompression_dict_
;
60 } // namespace ROCKSDB_NAMESPACE