Summary: rocksdb replicaiton will need this when writing value+TS from master to slave 'as is' Test Plan: make Reviewers: dhruba, vamsi, haobo Reviewed By: dhruba CC: leveldb Differential Revision: https://reviews.facebook.net/D11919main
parent
1036537c94
commit
1d7b4765c3
@ -0,0 +1,154 @@ |
|||||||
|
// 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.
|
||||||
|
|
||||||
|
#ifndef LEVELDB_INCLUDE_UTILITIES_STACKABLE_DB_H_ |
||||||
|
#define LEVELDB_INCLUDE_UTILITIES_STACKABLE_DB_H_ |
||||||
|
|
||||||
|
#include "leveldb/db.h" |
||||||
|
|
||||||
|
namespace leveldb { |
||||||
|
|
||||||
|
// This class contains APIs to stack rocksdb wrappers.Eg. Stack TTL over base d
|
||||||
|
class StackableDB : public DB { |
||||||
|
public: |
||||||
|
explicit StackableDB(StackableDB* sdb) : sdb_(sdb) {} |
||||||
|
|
||||||
|
// Returns the DB object that is the lowermost component in the stack of DBs
|
||||||
|
virtual DB* GetRawDB() { |
||||||
|
return sdb_->GetRawDB(); |
||||||
|
} |
||||||
|
|
||||||
|
// convert a DB to StackableDB
|
||||||
|
static StackableDB* DBToStackableDB(DB* db) { |
||||||
|
class NewStackableDB : public StackableDB { |
||||||
|
public: |
||||||
|
NewStackableDB(DB* db) |
||||||
|
: StackableDB(nullptr), |
||||||
|
db_(db) {} |
||||||
|
|
||||||
|
DB* GetRawDB() { |
||||||
|
return db_; |
||||||
|
} |
||||||
|
|
||||||
|
private: |
||||||
|
DB* db_; |
||||||
|
}; |
||||||
|
return new NewStackableDB(db); |
||||||
|
} |
||||||
|
|
||||||
|
virtual Status Put(const WriteOptions& options, |
||||||
|
const Slice& key, |
||||||
|
const Slice& val) override { |
||||||
|
return sdb_->Put(options, key, val); |
||||||
|
} |
||||||
|
|
||||||
|
virtual Status Get(const ReadOptions& options, |
||||||
|
const Slice& key, |
||||||
|
std::string* value) override { |
||||||
|
return sdb_->Get(options, key, value); |
||||||
|
} |
||||||
|
|
||||||
|
virtual std::vector<Status> MultiGet(const ReadOptions& options, |
||||||
|
const std::vector<Slice>& keys, |
||||||
|
std::vector<std::string>* values) |
||||||
|
override { |
||||||
|
return sdb_->MultiGet(options, keys, values); |
||||||
|
} |
||||||
|
|
||||||
|
virtual bool KeyMayExist(const ReadOptions& options, |
||||||
|
const Slice& key, |
||||||
|
std::string* value, |
||||||
|
bool* value_found = nullptr) override { |
||||||
|
return KeyMayExist(options, key, value, value_found); |
||||||
|
} |
||||||
|
|
||||||
|
virtual Status Delete(const WriteOptions& wopts, const Slice& key) override { |
||||||
|
return sdb_->Delete(wopts, key); |
||||||
|
} |
||||||
|
|
||||||
|
virtual Status Merge(const WriteOptions& options, |
||||||
|
const Slice& key, |
||||||
|
const Slice& value) override { |
||||||
|
return sdb_->Merge(options, key, value); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
virtual Status Write(const WriteOptions& opts, WriteBatch* updates) |
||||||
|
override { |
||||||
|
return sdb_->Write(opts, updates); |
||||||
|
} |
||||||
|
|
||||||
|
virtual Iterator* NewIterator(const ReadOptions& opts) override { |
||||||
|
return sdb_->NewIterator(opts); |
||||||
|
} |
||||||
|
|
||||||
|
virtual const Snapshot* GetSnapshot() override { |
||||||
|
return sdb_->GetSnapshot(); |
||||||
|
} |
||||||
|
|
||||||
|
virtual void ReleaseSnapshot(const Snapshot* snapshot) override { |
||||||
|
return sdb_->ReleaseSnapshot(snapshot); |
||||||
|
} |
||||||
|
|
||||||
|
virtual bool GetProperty(const Slice& property, std::string* value) |
||||||
|
override { |
||||||
|
return sdb_->GetProperty(property, value); |
||||||
|
} |
||||||
|
|
||||||
|
virtual void GetApproximateSizes(const Range* r, int n, uint64_t* sizes) |
||||||
|
override { |
||||||
|
return sdb_->GetApproximateSizes(r, n, sizes); |
||||||
|
} |
||||||
|
|
||||||
|
virtual void CompactRange(const Slice* begin, const Slice* end, |
||||||
|
bool reduce_level = false) override { |
||||||
|
return sdb_->CompactRange(begin, end, reduce_level); |
||||||
|
} |
||||||
|
|
||||||
|
virtual int NumberLevels() override { |
||||||
|
return sdb_->NumberLevels(); |
||||||
|
} |
||||||
|
|
||||||
|
virtual int MaxMemCompactionLevel() override { |
||||||
|
return sdb_->MaxMemCompactionLevel(); |
||||||
|
} |
||||||
|
|
||||||
|
virtual int Level0StopWriteTrigger() override { |
||||||
|
return sdb_->Level0StopWriteTrigger(); |
||||||
|
} |
||||||
|
|
||||||
|
virtual Status Flush(const FlushOptions& fopts) override { |
||||||
|
return sdb_->Flush(fopts); |
||||||
|
} |
||||||
|
|
||||||
|
virtual Status DisableFileDeletions() override { |
||||||
|
return sdb_->DisableFileDeletions(); |
||||||
|
} |
||||||
|
|
||||||
|
virtual Status EnableFileDeletions() override { |
||||||
|
return sdb_->EnableFileDeletions(); |
||||||
|
} |
||||||
|
|
||||||
|
virtual Status GetLiveFiles(std::vector<std::string>& vec, uint64_t* mfs) |
||||||
|
override { |
||||||
|
return sdb_->GetLiveFiles(vec, mfs); |
||||||
|
} |
||||||
|
|
||||||
|
virtual SequenceNumber GetLatestSequenceNumber() override { |
||||||
|
return sdb_->GetLatestSequenceNumber(); |
||||||
|
} |
||||||
|
|
||||||
|
virtual Status GetUpdatesSince(SequenceNumber seq_number, |
||||||
|
unique_ptr<TransactionLogIterator>* iter) |
||||||
|
override { |
||||||
|
return sdb_->GetUpdatesSince(seq_number, iter); |
||||||
|
} |
||||||
|
|
||||||
|
protected: |
||||||
|
StackableDB* sdb_; |
||||||
|
}; |
||||||
|
|
||||||
|
} // namespace leveldb
|
||||||
|
|
||||||
|
#endif // LEVELDB_INCLUDE_UTILITIES_STACKABLE_DB_H_
|
Loading…
Reference in new issue