fork of https://github.com/rust-rocksdb/rust-rocksdb for nextgraph
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.5 KiB
101 lines
3.5 KiB
1 year ago
|
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
||
|
// 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).
|
||
|
//
|
||
|
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
||
|
|
||
|
#pragma once
|
||
|
#include <memory>
|
||
|
#include <string>
|
||
|
#include <utility>
|
||
|
#include <vector>
|
||
|
|
||
|
#include "file/random_access_file_reader.h"
|
||
|
#include "rocksdb/env.h"
|
||
|
#include "rocksdb/options.h"
|
||
|
#include "table/table_reader.h"
|
||
|
|
||
|
namespace ROCKSDB_NAMESPACE {
|
||
|
|
||
|
class Arena;
|
||
|
class TableReader;
|
||
|
struct ImmutableOptions;
|
||
|
|
||
|
class CuckooTableReader : public TableReader {
|
||
|
public:
|
||
|
CuckooTableReader(const ImmutableOptions& ioptions,
|
||
|
std::unique_ptr<RandomAccessFileReader>&& file,
|
||
|
uint64_t file_size, const Comparator* user_comparator,
|
||
|
uint64_t (*get_slice_hash)(const Slice&, uint32_t,
|
||
|
uint64_t));
|
||
|
~CuckooTableReader() {}
|
||
|
|
||
|
std::shared_ptr<const TableProperties> GetTableProperties() const override {
|
||
|
return table_props_;
|
||
|
}
|
||
|
|
||
|
Status status() const { return status_; }
|
||
|
|
||
|
Status Get(const ReadOptions& readOptions, const Slice& key,
|
||
|
GetContext* get_context, const SliceTransform* prefix_extractor,
|
||
|
bool skip_filters = false) override;
|
||
|
|
||
|
// Returns a new iterator over table contents
|
||
|
// compaction_readahead_size: its value will only be used if for_compaction =
|
||
|
// true
|
||
|
InternalIterator* NewIterator(const ReadOptions&,
|
||
|
const SliceTransform* prefix_extractor,
|
||
|
Arena* arena, bool skip_filters,
|
||
|
TableReaderCaller caller,
|
||
|
size_t compaction_readahead_size = 0,
|
||
|
bool allow_unprepared_value = false) override;
|
||
|
void Prepare(const Slice& target) override;
|
||
|
|
||
|
// Report an approximation of how much memory has been used.
|
||
|
size_t ApproximateMemoryUsage() const override;
|
||
|
|
||
|
// Following methods are not implemented for Cuckoo Table Reader
|
||
|
uint64_t ApproximateOffsetOf(const ReadOptions& /*read_options*/,
|
||
|
const Slice& /*key*/,
|
||
|
TableReaderCaller /*caller*/) override {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
uint64_t ApproximateSize(const ReadOptions& /* read_options */,
|
||
|
const Slice& /*start*/, const Slice& /*end*/,
|
||
|
TableReaderCaller /*caller*/) override {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void SetupForCompaction() override {}
|
||
|
// End of methods not implemented.
|
||
|
|
||
|
private:
|
||
|
friend class CuckooTableIterator;
|
||
|
void LoadAllKeys(std::vector<std::pair<Slice, uint32_t>>* key_to_bucket_id);
|
||
|
std::unique_ptr<RandomAccessFileReader> file_;
|
||
|
Slice file_data_;
|
||
|
bool is_last_level_;
|
||
|
bool identity_as_first_hash_;
|
||
|
bool use_module_hash_;
|
||
|
std::shared_ptr<const TableProperties> table_props_;
|
||
|
Status status_;
|
||
|
uint32_t num_hash_func_;
|
||
|
std::string unused_key_;
|
||
|
uint32_t key_length_;
|
||
|
uint32_t user_key_length_;
|
||
|
uint32_t value_length_;
|
||
|
uint32_t bucket_length_;
|
||
|
uint32_t cuckoo_block_size_;
|
||
|
uint32_t cuckoo_block_bytes_minus_one_;
|
||
|
uint64_t table_size_;
|
||
|
const Comparator* ucomp_;
|
||
|
uint64_t (*get_slice_hash_)(const Slice& s, uint32_t index,
|
||
|
uint64_t max_num_buckets);
|
||
|
};
|
||
|
|
||
|
} // namespace ROCKSDB_NAMESPACE
|