#pragma once
#include <map>
+#include <memory>
#include <string>
#include "rocksdb/db.h"
// This class contains APIs to stack rocksdb wrappers.Eg. Stack TTL over base d
class StackableDB : public DB {
public:
- // StackableDB is the owner of db now!
+ // StackableDB take sole ownership of the underlying db.
explicit StackableDB(DB* db) : db_(db) {}
+ // StackableDB take shared ownership of the underlying db.
+ explicit StackableDB(std::shared_ptr<DB> db)
+ : db_(db.get()), shared_db_ptr_(db) {}
+
~StackableDB() {
- delete db_;
+ if (shared_db_ptr_ == nullptr) {
+ delete db_;
+ } else {
+ assert(shared_db_ptr_.get() == db_);
+ }
+ db_ = nullptr;
}
virtual DB* GetBaseDB() {
protected:
DB* db_;
+ std::shared_ptr<DB> shared_db_ptr_;
};
} // namespace rocksdb