Move flush_block_policy from Options to TableFactory
Summary: Previously we introduce a `flush_block_policy_factory` in Options, however, that options is strongly releated to Table based tables. It will make more sense to move it to block based table's own factory class. Test Plan: make check to pass existing tests Reviewers: dhruba, haobo Reviewed By: dhruba CC: leveldb Differential Revision: https://reviews.facebook.net/D14211
This commit is contained in:
parent
469a9f32a7
commit
6eb5649800
@ -44,6 +44,7 @@
|
|||||||
#include "rocksdb/table.h"
|
#include "rocksdb/table.h"
|
||||||
#include "port/port.h"
|
#include "port/port.h"
|
||||||
#include "table/block.h"
|
#include "table/block.h"
|
||||||
|
#include "table/block_based_table_factory.h"
|
||||||
#include "table/merger.h"
|
#include "table/merger.h"
|
||||||
#include "table/two_level_iterator.h"
|
#include "table/two_level_iterator.h"
|
||||||
#include "util/auto_roll_logger.h"
|
#include "util/auto_roll_logger.h"
|
||||||
@ -198,10 +199,6 @@ Options SanitizeOptions(const std::string& dbname,
|
|||||||
std::make_shared<InternalKeyPropertiesCollector>()
|
std::make_shared<InternalKeyPropertiesCollector>()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!result.flush_block_policy_factory) {
|
|
||||||
result.SetUpDefaultFlushBlockPolicyFactory();
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "db/table_properties_collector.h"
|
#include "db/table_properties_collector.h"
|
||||||
#include "rocksdb/table_properties.h"
|
#include "rocksdb/table_properties.h"
|
||||||
#include "rocksdb/table.h"
|
#include "rocksdb/table.h"
|
||||||
|
#include "table/block_based_table_factory.h"
|
||||||
#include "util/coding.h"
|
#include "util/coding.h"
|
||||||
#include "util/testharness.h"
|
#include "util/testharness.h"
|
||||||
#include "util/testutil.h"
|
#include "util/testutil.h"
|
||||||
@ -83,13 +84,10 @@ class DumbLogger : public Logger {
|
|||||||
|
|
||||||
// Utilities test functions
|
// Utilities test functions
|
||||||
void MakeBuilder(
|
void MakeBuilder(
|
||||||
Options options,
|
const Options& options,
|
||||||
std::unique_ptr<FakeWritableFile>* writable,
|
std::unique_ptr<FakeWritableFile>* writable,
|
||||||
std::unique_ptr<TableBuilder>* builder) {
|
std::unique_ptr<TableBuilder>* builder) {
|
||||||
writable->reset(new FakeWritableFile);
|
writable->reset(new FakeWritableFile);
|
||||||
if (!options.flush_block_policy_factory) {
|
|
||||||
options.SetUpDefaultFlushBlockPolicyFactory();
|
|
||||||
}
|
|
||||||
builder->reset(
|
builder->reset(
|
||||||
options.table_factory->GetTableBuilder(options, writable->get(),
|
options.table_factory->GetTableBuilder(options, writable->get(),
|
||||||
options.compression));
|
options.compression));
|
||||||
@ -99,6 +97,7 @@ void OpenTable(
|
|||||||
const Options& options,
|
const Options& options,
|
||||||
const std::string& contents,
|
const std::string& contents,
|
||||||
std::unique_ptr<TableReader>* table_reader) {
|
std::unique_ptr<TableReader>* table_reader) {
|
||||||
|
|
||||||
std::unique_ptr<RandomAccessFile> file(new FakeRandomeAccessFile(contents));
|
std::unique_ptr<RandomAccessFile> file(new FakeRandomeAccessFile(contents));
|
||||||
auto s = options.table_factory->GetTableReader(
|
auto s = options.table_factory->GetTableReader(
|
||||||
options,
|
options,
|
||||||
|
@ -32,7 +32,6 @@ class CompactionFilterFactory;
|
|||||||
class Comparator;
|
class Comparator;
|
||||||
class Env;
|
class Env;
|
||||||
class FilterPolicy;
|
class FilterPolicy;
|
||||||
class FlushBlockPolicyFactory;
|
|
||||||
class Logger;
|
class Logger;
|
||||||
class MergeOperator;
|
class MergeOperator;
|
||||||
class Snapshot;
|
class Snapshot;
|
||||||
@ -491,13 +490,6 @@ struct Options {
|
|||||||
// from the database, because otherwise the read can be very slow.
|
// from the database, because otherwise the read can be very slow.
|
||||||
Options* PrepareForBulkLoad();
|
Options* PrepareForBulkLoad();
|
||||||
|
|
||||||
// Set up the default flush-block policy factory. By default, we'll use
|
|
||||||
// `FlushBlockBySizePolicyFactory` as the policy factory.
|
|
||||||
// Note: Please call this method after block_size and block_size_deviation
|
|
||||||
// is set.
|
|
||||||
// REQUIRES: flush_block_policy_factory is not set.
|
|
||||||
Options* SetUpDefaultFlushBlockPolicyFactory();
|
|
||||||
|
|
||||||
// Disable automatic compactions. Manual compactions can still
|
// Disable automatic compactions. Manual compactions can still
|
||||||
// be issued on this database.
|
// be issued on this database.
|
||||||
bool disable_auto_compactions;
|
bool disable_auto_compactions;
|
||||||
@ -632,13 +624,6 @@ struct Options {
|
|||||||
// Number of locks used for inplace update
|
// Number of locks used for inplace update
|
||||||
// Default: 10000, if inplace_update_support = true, else 0.
|
// Default: 10000, if inplace_update_support = true, else 0.
|
||||||
size_t inplace_update_num_locks;
|
size_t inplace_update_num_locks;
|
||||||
|
|
||||||
// Creates the instances of flush block policy.
|
|
||||||
// A flush-block policy provides a configurable way to determine when to
|
|
||||||
// flush a block in the block based tables,
|
|
||||||
// Default: nullptr. User can call FlushBlockBySizePolicyFactory() to set
|
|
||||||
// up default policy factory (`FlushBlockBySizePolicyFactory`).
|
|
||||||
std::shared_ptr<FlushBlockPolicyFactory> flush_block_policy_factory;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -93,13 +93,15 @@ struct BlockBasedTableBuilder::Rep {
|
|||||||
char compressed_cache_key_prefix[BlockBasedTable::kMaxCacheKeyPrefixSize];
|
char compressed_cache_key_prefix[BlockBasedTable::kMaxCacheKeyPrefixSize];
|
||||||
size_t compressed_cache_key_prefix_size;
|
size_t compressed_cache_key_prefix_size;
|
||||||
|
|
||||||
|
|
||||||
BlockHandle pending_handle; // Handle to add to index block
|
BlockHandle pending_handle; // Handle to add to index block
|
||||||
|
|
||||||
std::string compressed_output;
|
std::string compressed_output;
|
||||||
std::unique_ptr<FlushBlockPolicy> flush_block_policy;
|
std::unique_ptr<FlushBlockPolicy> flush_block_policy;
|
||||||
|
|
||||||
Rep(const Options& opt, WritableFile* f, CompressionType compression_type)
|
Rep(const Options& opt,
|
||||||
|
WritableFile* f,
|
||||||
|
FlushBlockPolicyFactory* flush_block_policy_factory,
|
||||||
|
CompressionType compression_type)
|
||||||
: options(opt),
|
: options(opt),
|
||||||
file(f),
|
file(f),
|
||||||
data_block(options),
|
data_block(options),
|
||||||
@ -108,17 +110,19 @@ struct BlockBasedTableBuilder::Rep {
|
|||||||
index_block(1 /* block_restart_interval */, options.comparator),
|
index_block(1 /* block_restart_interval */, options.comparator),
|
||||||
compression_type(compression_type),
|
compression_type(compression_type),
|
||||||
filter_block(opt.filter_policy == nullptr ? nullptr
|
filter_block(opt.filter_policy == nullptr ? nullptr
|
||||||
: new FilterBlockBuilder(opt)) {
|
: new FilterBlockBuilder(opt)),
|
||||||
assert(options.flush_block_policy_factory);
|
flush_block_policy(
|
||||||
auto factory = options.flush_block_policy_factory;
|
flush_block_policy_factory->NewFlushBlockPolicy(data_block)) {
|
||||||
flush_block_policy.reset(factory->NewFlushBlockPolicy(data_block));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
BlockBasedTableBuilder::BlockBasedTableBuilder(const Options& options,
|
BlockBasedTableBuilder::BlockBasedTableBuilder(
|
||||||
WritableFile* file,
|
const Options& options,
|
||||||
CompressionType compression_type)
|
WritableFile* file,
|
||||||
: rep_(new Rep(options, file, compression_type)) {
|
FlushBlockPolicyFactory* flush_block_policy_factory,
|
||||||
|
CompressionType compression_type)
|
||||||
|
: rep_(new Rep(options,
|
||||||
|
file, flush_block_policy_factory, compression_type)) {
|
||||||
if (rep_->filter_block != nullptr) {
|
if (rep_->filter_block != nullptr) {
|
||||||
rep_->filter_block->StartBlock(0);
|
rep_->filter_block->StartBlock(0);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "rocksdb/flush_block_policy.h"
|
||||||
#include "rocksdb/options.h"
|
#include "rocksdb/options.h"
|
||||||
#include "rocksdb/status.h"
|
#include "rocksdb/status.h"
|
||||||
#include "rocksdb/table.h"
|
#include "rocksdb/table.h"
|
||||||
@ -25,7 +26,9 @@ class BlockBasedTableBuilder : public TableBuilder {
|
|||||||
// Create a builder that will store the contents of the table it is
|
// Create a builder that will store the contents of the table it is
|
||||||
// building in *file. Does not close the file. It is up to the
|
// building in *file. Does not close the file. It is up to the
|
||||||
// caller to close the file after calling Finish().
|
// caller to close the file after calling Finish().
|
||||||
BlockBasedTableBuilder(const Options& options, WritableFile* file,
|
BlockBasedTableBuilder(const Options& options,
|
||||||
|
WritableFile* file,
|
||||||
|
FlushBlockPolicyFactory* flush_block_policy_factory,
|
||||||
CompressionType compression_type);
|
CompressionType compression_type);
|
||||||
|
|
||||||
// REQUIRES: Either Finish() or Abandon() has been called.
|
// REQUIRES: Either Finish() or Abandon() has been called.
|
||||||
|
@ -29,6 +29,36 @@ Status BlockBasedTableFactory::GetTableReader(
|
|||||||
TableBuilder* BlockBasedTableFactory::GetTableBuilder(
|
TableBuilder* BlockBasedTableFactory::GetTableBuilder(
|
||||||
const Options& options, WritableFile* file,
|
const Options& options, WritableFile* file,
|
||||||
CompressionType compression_type) const {
|
CompressionType compression_type) const {
|
||||||
return new BlockBasedTableBuilder(options, file, compression_type);
|
auto flush_block_policy_factory = flush_block_policy_factory_.get();
|
||||||
|
|
||||||
|
// if flush block policy factory is not set, we'll create the default one
|
||||||
|
// from the options.
|
||||||
|
//
|
||||||
|
// NOTE: we cannot pre-cache the "default block policy factory" because
|
||||||
|
// `FlushBlockBySizePolicyFactory` takes `options.block_size` and
|
||||||
|
// `options.block_size_deviation` as parameters, which may be different
|
||||||
|
// every time.
|
||||||
|
if (flush_block_policy_factory == nullptr) {
|
||||||
|
flush_block_policy_factory =
|
||||||
|
new FlushBlockBySizePolicyFactory(options.block_size,
|
||||||
|
options.block_size_deviation);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto table_builder = new BlockBasedTableBuilder(
|
||||||
|
options,
|
||||||
|
file,
|
||||||
|
flush_block_policy_factory,
|
||||||
|
compression_type);
|
||||||
|
|
||||||
|
// Delete flush_block_policy_factory only when it's just created from the
|
||||||
|
// options.
|
||||||
|
// We can safely delete flush_block_policy_factory since it will only be used
|
||||||
|
// during the construction of `BlockBasedTableBuilder`.
|
||||||
|
if (flush_block_policy_factory != flush_block_policy_factory_.get()) {
|
||||||
|
delete flush_block_policy_factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
return table_builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace rocksdb
|
} // namespace rocksdb
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "rocksdb/flush_block_policy.h"
|
||||||
|
#include "rocksdb/options.h"
|
||||||
#include "rocksdb/table.h"
|
#include "rocksdb/table.h"
|
||||||
|
|
||||||
namespace rocksdb {
|
namespace rocksdb {
|
||||||
@ -29,13 +31,23 @@ class BlockBasedTableBuilder;
|
|||||||
|
|
||||||
class BlockBasedTableFactory: public TableFactory {
|
class BlockBasedTableFactory: public TableFactory {
|
||||||
public:
|
public:
|
||||||
|
// @flush_block_policy_factory creates the instances of flush block policy.
|
||||||
|
// which provides a configurable way to determine when to flush a block in
|
||||||
|
// the block based tables. If not set, table builder will use the default
|
||||||
|
// block flush policy, which cut blocks by block size (please refer to
|
||||||
|
// `FlushBlockBySizePolicy`).
|
||||||
|
BlockBasedTableFactory(
|
||||||
|
FlushBlockPolicyFactory* flush_block_policy_factory = nullptr) :
|
||||||
|
flush_block_policy_factory_(flush_block_policy_factory) {
|
||||||
|
}
|
||||||
|
|
||||||
~BlockBasedTableFactory() {
|
~BlockBasedTableFactory() {
|
||||||
}
|
}
|
||||||
BlockBasedTableFactory() {
|
|
||||||
}
|
|
||||||
const char* Name() const override {
|
const char* Name() const override {
|
||||||
return "BlockBasedTable";
|
return "BlockBasedTable";
|
||||||
}
|
}
|
||||||
|
|
||||||
Status GetTableReader(const Options& options, const EnvOptions& soptions,
|
Status GetTableReader(const Options& options, const EnvOptions& soptions,
|
||||||
unique_ptr<RandomAccessFile> && file,
|
unique_ptr<RandomAccessFile> && file,
|
||||||
uint64_t file_size,
|
uint64_t file_size,
|
||||||
@ -44,6 +56,9 @@ public:
|
|||||||
TableBuilder* GetTableBuilder(const Options& options, WritableFile* file,
|
TableBuilder* GetTableBuilder(const Options& options, WritableFile* file,
|
||||||
CompressionType compression_type) const
|
CompressionType compression_type) const
|
||||||
override;
|
override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<FlushBlockPolicyFactory> flush_block_policy_factory_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace rocksdb
|
} // namespace rocksdb
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "rocksdb/iterator.h"
|
#include "rocksdb/iterator.h"
|
||||||
#include "rocksdb/memtablerep.h"
|
#include "rocksdb/memtablerep.h"
|
||||||
#include "table/block_based_table_builder.h"
|
#include "table/block_based_table_builder.h"
|
||||||
|
#include "table/block_based_table_factory.h"
|
||||||
#include "table/block_based_table_reader.h"
|
#include "table/block_based_table_reader.h"
|
||||||
#include "table/block_builder.h"
|
#include "table/block_builder.h"
|
||||||
#include "table/block.h"
|
#include "table/block.h"
|
||||||
@ -44,12 +45,6 @@ static std::string Reverse(const Slice& key) {
|
|||||||
return rev;
|
return rev;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Options GetDefaultOptions() {
|
|
||||||
Options options;
|
|
||||||
options.SetUpDefaultFlushBlockPolicyFactory();
|
|
||||||
return options;
|
|
||||||
}
|
|
||||||
|
|
||||||
class ReverseKeyComparator : public Comparator {
|
class ReverseKeyComparator : public Comparator {
|
||||||
public:
|
public:
|
||||||
virtual const char* Name() const {
|
virtual const char* Name() const {
|
||||||
@ -257,7 +252,12 @@ class BlockBasedTableConstructor: public Constructor {
|
|||||||
virtual Status FinishImpl(const Options& options, const KVMap& data) {
|
virtual Status FinishImpl(const Options& options, const KVMap& data) {
|
||||||
Reset();
|
Reset();
|
||||||
sink_.reset(new StringSink());
|
sink_.reset(new StringSink());
|
||||||
BlockBasedTableBuilder builder(options, sink_.get(), options.compression);
|
BlockBasedTableBuilder builder(
|
||||||
|
options,
|
||||||
|
sink_.get(),
|
||||||
|
new FlushBlockBySizePolicyFactory(
|
||||||
|
options.block_size, options.block_size_deviation),
|
||||||
|
options.compression);
|
||||||
|
|
||||||
for (KVMap::const_iterator it = data.begin();
|
for (KVMap::const_iterator it = data.begin();
|
||||||
it != data.end();
|
it != data.end();
|
||||||
@ -430,7 +430,7 @@ class DBConstructor: public Constructor {
|
|||||||
void NewDB() {
|
void NewDB() {
|
||||||
std::string name = test::TmpDir() + "/table_testdb";
|
std::string name = test::TmpDir() + "/table_testdb";
|
||||||
|
|
||||||
Options options = GetDefaultOptions();
|
Options options;
|
||||||
options.comparator = comparator_;
|
options.comparator = comparator_;
|
||||||
Status status = DestroyDB(name, options);
|
Status status = DestroyDB(name, options);
|
||||||
ASSERT_TRUE(status.ok()) << status.ToString();
|
ASSERT_TRUE(status.ok()) << status.ToString();
|
||||||
@ -449,7 +449,7 @@ class DBConstructor: public Constructor {
|
|||||||
static bool SnappyCompressionSupported() {
|
static bool SnappyCompressionSupported() {
|
||||||
std::string out;
|
std::string out;
|
||||||
Slice in = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
Slice in = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
||||||
return port::Snappy_Compress(GetDefaultOptions().compression_opts,
|
return port::Snappy_Compress(Options().compression_opts,
|
||||||
in.data(), in.size(),
|
in.data(), in.size(),
|
||||||
&out);
|
&out);
|
||||||
}
|
}
|
||||||
@ -457,7 +457,7 @@ static bool SnappyCompressionSupported() {
|
|||||||
static bool ZlibCompressionSupported() {
|
static bool ZlibCompressionSupported() {
|
||||||
std::string out;
|
std::string out;
|
||||||
Slice in = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
Slice in = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
||||||
return port::Zlib_Compress(GetDefaultOptions().compression_opts,
|
return port::Zlib_Compress(Options().compression_opts,
|
||||||
in.data(), in.size(),
|
in.data(), in.size(),
|
||||||
&out);
|
&out);
|
||||||
}
|
}
|
||||||
@ -466,7 +466,7 @@ static bool ZlibCompressionSupported() {
|
|||||||
static bool BZip2CompressionSupported() {
|
static bool BZip2CompressionSupported() {
|
||||||
std::string out;
|
std::string out;
|
||||||
Slice in = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
Slice in = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
||||||
return port::BZip2_Compress(GetDefaultOptions().compression_opts,
|
return port::BZip2_Compress(Options().compression_opts,
|
||||||
in.data(), in.size(),
|
in.data(), in.size(),
|
||||||
&out);
|
&out);
|
||||||
}
|
}
|
||||||
@ -487,7 +487,7 @@ struct TestArgs {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static std::vector<TestArgs> Generate_Arg_List() {
|
static std::vector<TestArgs> GenerateArgList() {
|
||||||
std::vector<TestArgs> ret;
|
std::vector<TestArgs> ret;
|
||||||
TestType test_type[4] = {TABLE_TEST, BLOCK_TEST, MEMTABLE_TEST, DB_TEST};
|
TestType test_type[4] = {TABLE_TEST, BLOCK_TEST, MEMTABLE_TEST, DB_TEST};
|
||||||
int test_type_len = 4;
|
int test_type_len = 4;
|
||||||
@ -536,14 +536,13 @@ class Harness {
|
|||||||
void Init(const TestArgs& args) {
|
void Init(const TestArgs& args) {
|
||||||
delete constructor_;
|
delete constructor_;
|
||||||
constructor_ = nullptr;
|
constructor_ = nullptr;
|
||||||
options_ = GetDefaultOptions();
|
options_ = Options();
|
||||||
|
|
||||||
options_.block_restart_interval = args.restart_interval;
|
options_.block_restart_interval = args.restart_interval;
|
||||||
options_.compression = args.compression;
|
options_.compression = args.compression;
|
||||||
// Use shorter block size for tests to exercise block boundary
|
// Use shorter block size for tests to exercise block boundary
|
||||||
// conditions more.
|
// conditions more.
|
||||||
options_.block_size = 256;
|
options_.block_size = 256;
|
||||||
options_.SetUpDefaultFlushBlockPolicyFactory();
|
|
||||||
if (args.reverse_compare) {
|
if (args.reverse_compare) {
|
||||||
options_.comparator = &reverse_key_comparator;
|
options_.comparator = &reverse_key_comparator;
|
||||||
}
|
}
|
||||||
@ -737,13 +736,13 @@ class Harness {
|
|||||||
DB* db() const { return constructor_->db(); }
|
DB* db() const { return constructor_->db(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Options options_ = GetDefaultOptions();
|
Options options_ = Options();
|
||||||
Constructor* constructor_;
|
Constructor* constructor_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Test the empty key
|
// Test the empty key
|
||||||
TEST(Harness, SimpleEmptyKey) {
|
TEST(Harness, SimpleEmptyKey) {
|
||||||
std::vector<TestArgs> args = Generate_Arg_List();
|
std::vector<TestArgs> args = GenerateArgList();
|
||||||
for (unsigned int i = 0; i < args.size(); i++) {
|
for (unsigned int i = 0; i < args.size(); i++) {
|
||||||
Init(args[i]);
|
Init(args[i]);
|
||||||
Random rnd(test::RandomSeed() + 1);
|
Random rnd(test::RandomSeed() + 1);
|
||||||
@ -753,7 +752,7 @@ TEST(Harness, SimpleEmptyKey) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(Harness, SimpleSingle) {
|
TEST(Harness, SimpleSingle) {
|
||||||
std::vector<TestArgs> args = Generate_Arg_List();
|
std::vector<TestArgs> args = GenerateArgList();
|
||||||
for (unsigned int i = 0; i < args.size(); i++) {
|
for (unsigned int i = 0; i < args.size(); i++) {
|
||||||
Init(args[i]);
|
Init(args[i]);
|
||||||
Random rnd(test::RandomSeed() + 2);
|
Random rnd(test::RandomSeed() + 2);
|
||||||
@ -763,7 +762,7 @@ TEST(Harness, SimpleSingle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(Harness, SimpleMulti) {
|
TEST(Harness, SimpleMulti) {
|
||||||
std::vector<TestArgs> args = Generate_Arg_List();
|
std::vector<TestArgs> args = GenerateArgList();
|
||||||
for (unsigned int i = 0; i < args.size(); i++) {
|
for (unsigned int i = 0; i < args.size(); i++) {
|
||||||
Init(args[i]);
|
Init(args[i]);
|
||||||
Random rnd(test::RandomSeed() + 3);
|
Random rnd(test::RandomSeed() + 3);
|
||||||
@ -775,7 +774,7 @@ TEST(Harness, SimpleMulti) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(Harness, SimpleSpecialKey) {
|
TEST(Harness, SimpleSpecialKey) {
|
||||||
std::vector<TestArgs> args = Generate_Arg_List();
|
std::vector<TestArgs> args = GenerateArgList();
|
||||||
for (unsigned int i = 0; i < args.size(); i++) {
|
for (unsigned int i = 0; i < args.size(); i++) {
|
||||||
Init(args[i]);
|
Init(args[i]);
|
||||||
Random rnd(test::RandomSeed() + 4);
|
Random rnd(test::RandomSeed() + 4);
|
||||||
@ -814,7 +813,7 @@ TEST(TableTest, BasicTableProperties) {
|
|||||||
|
|
||||||
std::vector<std::string> keys;
|
std::vector<std::string> keys;
|
||||||
KVMap kvmap;
|
KVMap kvmap;
|
||||||
Options options = GetDefaultOptions();
|
Options options;
|
||||||
options.compression = kNoCompression;
|
options.compression = kNoCompression;
|
||||||
options.block_restart_interval = 1;
|
options.block_restart_interval = 1;
|
||||||
|
|
||||||
@ -848,7 +847,7 @@ TEST(TableTest, FilterPolicyNameProperties) {
|
|||||||
c.Add("a1", "val1");
|
c.Add("a1", "val1");
|
||||||
std::vector<std::string> keys;
|
std::vector<std::string> keys;
|
||||||
KVMap kvmap;
|
KVMap kvmap;
|
||||||
Options options = GetDefaultOptions();
|
Options options;
|
||||||
std::unique_ptr<const FilterPolicy> filter_policy(
|
std::unique_ptr<const FilterPolicy> filter_policy(
|
||||||
NewBloomFilterPolicy(10)
|
NewBloomFilterPolicy(10)
|
||||||
);
|
);
|
||||||
@ -891,7 +890,7 @@ TEST(TableTest, IndexSizeStat) {
|
|||||||
|
|
||||||
std::vector<std::string> ks;
|
std::vector<std::string> ks;
|
||||||
KVMap kvmap;
|
KVMap kvmap;
|
||||||
Options options = GetDefaultOptions();
|
Options options;
|
||||||
options.compression = kNoCompression;
|
options.compression = kNoCompression;
|
||||||
options.block_restart_interval = 1;
|
options.block_restart_interval = 1;
|
||||||
|
|
||||||
@ -910,11 +909,6 @@ TEST(TableTest, NumBlockStat) {
|
|||||||
options.compression = kNoCompression;
|
options.compression = kNoCompression;
|
||||||
options.block_restart_interval = 1;
|
options.block_restart_interval = 1;
|
||||||
options.block_size = 1000;
|
options.block_size = 1000;
|
||||||
options.SetUpDefaultFlushBlockPolicyFactory();
|
|
||||||
|
|
||||||
// Block Size changed, need to set up a new flush policy to reflect the
|
|
||||||
// change.
|
|
||||||
options.SetUpDefaultFlushBlockPolicyFactory();
|
|
||||||
|
|
||||||
for (int i = 0; i < 10; ++i) {
|
for (int i = 0; i < 10; ++i) {
|
||||||
// the key/val are slightly smaller than block size, so that each block
|
// the key/val are slightly smaller than block size, so that each block
|
||||||
@ -979,7 +973,7 @@ class BlockCacheProperties {
|
|||||||
|
|
||||||
TEST(TableTest, BlockCacheTest) {
|
TEST(TableTest, BlockCacheTest) {
|
||||||
// -- Table construction
|
// -- Table construction
|
||||||
Options options = GetDefaultOptions();
|
Options options;
|
||||||
options.create_if_missing = true;
|
options.create_if_missing = true;
|
||||||
options.statistics = CreateDBStatistics();
|
options.statistics = CreateDBStatistics();
|
||||||
options.block_cache = NewLRUCache(1024);
|
options.block_cache = NewLRUCache(1024);
|
||||||
@ -1117,9 +1111,8 @@ TEST(TableTest, ApproximateOffsetOfPlain) {
|
|||||||
c.Add("k07", std::string(100000, 'x'));
|
c.Add("k07", std::string(100000, 'x'));
|
||||||
std::vector<std::string> keys;
|
std::vector<std::string> keys;
|
||||||
KVMap kvmap;
|
KVMap kvmap;
|
||||||
Options options = GetDefaultOptions();
|
Options options;
|
||||||
options.block_size = 1024;
|
options.block_size = 1024;
|
||||||
options.SetUpDefaultFlushBlockPolicyFactory();
|
|
||||||
options.compression = kNoCompression;
|
options.compression = kNoCompression;
|
||||||
c.Finish(options, &keys, &kvmap);
|
c.Finish(options, &keys, &kvmap);
|
||||||
|
|
||||||
@ -1147,9 +1140,8 @@ static void Do_Compression_Test(CompressionType comp) {
|
|||||||
c.Add("k04", test::CompressibleString(&rnd, 0.25, 10000, &tmp));
|
c.Add("k04", test::CompressibleString(&rnd, 0.25, 10000, &tmp));
|
||||||
std::vector<std::string> keys;
|
std::vector<std::string> keys;
|
||||||
KVMap kvmap;
|
KVMap kvmap;
|
||||||
Options options = GetDefaultOptions();
|
Options options;
|
||||||
options.block_size = 1024;
|
options.block_size = 1024;
|
||||||
options.SetUpDefaultFlushBlockPolicyFactory();
|
|
||||||
options.compression = comp;
|
options.compression = comp;
|
||||||
c.Finish(options, &keys, &kvmap);
|
c.Finish(options, &keys, &kvmap);
|
||||||
|
|
||||||
@ -1190,9 +1182,8 @@ TEST(TableTest, BlockCacheLeak) {
|
|||||||
// in the cache. This test checks whether the Table actually makes use of the
|
// in the cache. This test checks whether the Table actually makes use of the
|
||||||
// unique ID from the file.
|
// unique ID from the file.
|
||||||
|
|
||||||
Options opt = GetDefaultOptions();
|
Options opt;
|
||||||
opt.block_size = 1024;
|
opt.block_size = 1024;
|
||||||
opt.SetUpDefaultFlushBlockPolicyFactory();
|
|
||||||
opt.compression = kNoCompression;
|
opt.compression = kNoCompression;
|
||||||
opt.block_cache = NewLRUCache(16*1024*1024); // big enough so we don't ever
|
opt.block_cache = NewLRUCache(16*1024*1024); // big enough so we don't ever
|
||||||
// lose cached values.
|
// lose cached values.
|
||||||
@ -1225,7 +1216,7 @@ TEST(TableTest, BlockCacheLeak) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(Harness, Randomized) {
|
TEST(Harness, Randomized) {
|
||||||
std::vector<TestArgs> args = Generate_Arg_List();
|
std::vector<TestArgs> args = GenerateArgList();
|
||||||
for (unsigned int i = 0; i < args.size(); i++) {
|
for (unsigned int i = 0; i < args.size(); i++) {
|
||||||
Init(args[i]);
|
Init(args[i]);
|
||||||
Random rnd(test::RandomSeed() + 5);
|
Random rnd(test::RandomSeed() + 5);
|
||||||
@ -1277,7 +1268,7 @@ TEST(MemTableTest, Simple) {
|
|||||||
MemTable* memtable = new MemTable(cmp, table_factory);
|
MemTable* memtable = new MemTable(cmp, table_factory);
|
||||||
memtable->Ref();
|
memtable->Ref();
|
||||||
WriteBatch batch;
|
WriteBatch batch;
|
||||||
Options options = GetDefaultOptions();
|
Options options;
|
||||||
WriteBatchInternal::SetSequence(&batch, 100);
|
WriteBatchInternal::SetSequence(&batch, 100);
|
||||||
batch.Put(std::string("k1"), std::string("v1"));
|
batch.Put(std::string("k1"), std::string("v1"));
|
||||||
batch.Put(std::string("k2"), std::string("v2"));
|
batch.Put(std::string("k2"), std::string("v2"));
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
#include "rocksdb/comparator.h"
|
#include "rocksdb/comparator.h"
|
||||||
#include "rocksdb/env.h"
|
#include "rocksdb/env.h"
|
||||||
#include "rocksdb/filter_policy.h"
|
#include "rocksdb/filter_policy.h"
|
||||||
#include "rocksdb/flush_block_policy.h"
|
|
||||||
#include "rocksdb/merge_operator.h"
|
#include "rocksdb/merge_operator.h"
|
||||||
#include "table/block_based_table_factory.h"
|
#include "table/block_based_table_factory.h"
|
||||||
|
|
||||||
@ -290,8 +289,6 @@ Options::Dump(Logger* log) const
|
|||||||
inplace_update_support);
|
inplace_update_support);
|
||||||
Log(log, " Options.inplace_update_num_locks: %zd",
|
Log(log, " Options.inplace_update_num_locks: %zd",
|
||||||
inplace_update_num_locks);
|
inplace_update_num_locks);
|
||||||
Log(log, " Options.flush_block_policy_factory: %s",
|
|
||||||
flush_block_policy_factory ? flush_block_policy_factory->Name() : "");
|
|
||||||
} // Options::Dump
|
} // Options::Dump
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -331,11 +328,4 @@ Options::PrepareForBulkLoad()
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Options* Options::SetUpDefaultFlushBlockPolicyFactory() {
|
|
||||||
flush_block_policy_factory =
|
|
||||||
std::make_shared<FlushBlockBySizePolicyFactory>(
|
|
||||||
block_size, block_size_deviation);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace rocksdb
|
} // namespace rocksdb
|
||||||
|
Loading…
x
Reference in New Issue
Block a user