#pragma once
#include "rocksdb/flush_block_policy.h"
namespace ROCKSDB_NAMESPACE {
class FlushBlockEveryKeyPolicy : public FlushBlockPolicy {
public:
bool Update(const Slice& , const Slice& ) override {
if (!start_) {
start_ = true;
return false;
}
return true;
}
private:
bool start_ = false;
};
class FlushBlockEveryKeyPolicyFactory : public FlushBlockPolicyFactory {
public:
explicit FlushBlockEveryKeyPolicyFactory() {}
static const char* kClassName() { return "FlushBlockEveryKeyPolicyFactory"; }
const char* Name() const override { return kClassName(); }
FlushBlockPolicy* NewFlushBlockPolicy(
const BlockBasedTableOptions& ,
const BlockBuilder& ) const override {
return new FlushBlockEveryKeyPolicy;
}
};
class RetargetableFlushBlockPolicy : public FlushBlockPolicy {
public:
explicit RetargetableFlushBlockPolicy(const BlockBuilder& data_block_builder)
: data_block_builder_(&data_block_builder) {}
void Retarget(const BlockBuilder& data_block_builder) {
data_block_builder_ = &data_block_builder;
}
protected:
const BlockBuilder* data_block_builder_;
};
std::unique_ptr<RetargetableFlushBlockPolicy> NewFlushBlockBySizePolicy(
const uint64_t size, const int deviation,
const BlockBuilder& data_block_builder);
}