Make MemTableRepFactory into a Customizable class (#8419)
Summary: This PR does the following: -> Makes the MemTableRepFactory into a Customizable class and creatable/configurable via CreateFromString -> Makes the existing implementations compatible with configurations -> Moves the "SpecialRepFactory" test class into testutil, accessible via the ObjectRegistry or a NewSpecial API New tests were added to validate the functionality and all existing tests pass. db_bench and memtablerep_bench were hand-tested to verify the functionality in those tools. Pull Request resolved: https://github.com/facebook/rocksdb/pull/8419 Reviewed By: zhichao-cao Differential Revision: D29558961 Pulled By: mrambacher fbshipit-source-id: 81b7229636e4e649a0c914e73ac7b0f8454c931cmain
parent
e40b04e9fa
commit
beed86473a
@ -1,49 +0,0 @@ |
|||||||
// 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 |
|
||||||
#ifndef ROCKSDB_LITE |
|
||||||
#include "rocksdb/slice_transform.h" |
|
||||||
#include "rocksdb/memtablerep.h" |
|
||||||
|
|
||||||
namespace ROCKSDB_NAMESPACE { |
|
||||||
|
|
||||||
class HashLinkListRepFactory : public MemTableRepFactory { |
|
||||||
public: |
|
||||||
explicit HashLinkListRepFactory(size_t bucket_count, |
|
||||||
uint32_t threshold_use_skiplist, |
|
||||||
size_t huge_page_tlb_size, |
|
||||||
int bucket_entries_logging_threshold, |
|
||||||
bool if_log_bucket_dist_when_flash) |
|
||||||
: bucket_count_(bucket_count), |
|
||||||
threshold_use_skiplist_(threshold_use_skiplist), |
|
||||||
huge_page_tlb_size_(huge_page_tlb_size), |
|
||||||
bucket_entries_logging_threshold_(bucket_entries_logging_threshold), |
|
||||||
if_log_bucket_dist_when_flash_(if_log_bucket_dist_when_flash) {} |
|
||||||
|
|
||||||
virtual ~HashLinkListRepFactory() {} |
|
||||||
|
|
||||||
using MemTableRepFactory::CreateMemTableRep; |
|
||||||
virtual MemTableRep* CreateMemTableRep( |
|
||||||
const MemTableRep::KeyComparator& compare, Allocator* allocator, |
|
||||||
const SliceTransform* transform, Logger* logger) override; |
|
||||||
|
|
||||||
virtual const char* Name() const override { |
|
||||||
return "HashLinkListRepFactory"; |
|
||||||
} |
|
||||||
|
|
||||||
private: |
|
||||||
const size_t bucket_count_; |
|
||||||
const uint32_t threshold_use_skiplist_; |
|
||||||
const size_t huge_page_tlb_size_; |
|
||||||
int bucket_entries_logging_threshold_; |
|
||||||
bool if_log_bucket_dist_when_flash_; |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ROCKSDB_NAMESPACE
|
|
||||||
#endif // ROCKSDB_LITE
|
|
@ -1,44 +0,0 @@ |
|||||||
// 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 |
|
||||||
#ifndef ROCKSDB_LITE |
|
||||||
#include "rocksdb/slice_transform.h" |
|
||||||
#include "rocksdb/memtablerep.h" |
|
||||||
|
|
||||||
namespace ROCKSDB_NAMESPACE { |
|
||||||
|
|
||||||
class HashSkipListRepFactory : public MemTableRepFactory { |
|
||||||
public: |
|
||||||
explicit HashSkipListRepFactory( |
|
||||||
size_t bucket_count, |
|
||||||
int32_t skiplist_height, |
|
||||||
int32_t skiplist_branching_factor) |
|
||||||
: bucket_count_(bucket_count), |
|
||||||
skiplist_height_(skiplist_height), |
|
||||||
skiplist_branching_factor_(skiplist_branching_factor) { } |
|
||||||
|
|
||||||
virtual ~HashSkipListRepFactory() {} |
|
||||||
|
|
||||||
using MemTableRepFactory::CreateMemTableRep; |
|
||||||
virtual MemTableRep* CreateMemTableRep( |
|
||||||
const MemTableRep::KeyComparator& compare, Allocator* allocator, |
|
||||||
const SliceTransform* transform, Logger* logger) override; |
|
||||||
|
|
||||||
virtual const char* Name() const override { |
|
||||||
return "HashSkipListRepFactory"; |
|
||||||
} |
|
||||||
|
|
||||||
private: |
|
||||||
const size_t bucket_count_; |
|
||||||
const int32_t skiplist_height_; |
|
||||||
const int32_t skiplist_branching_factor_; |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace ROCKSDB_NAMESPACE
|
|
||||||
#endif // ROCKSDB_LITE
|
|
Loading…
Reference in new issue