@ -4,6 +4,7 @@
# pragma once
# pragma once
# include <map>
# include <map>
# include <memory>
# include <string>
# include <string>
# include "rocksdb/db.h"
# include "rocksdb/db.h"
@ -18,11 +19,20 @@ namespace rocksdb {
// This class contains APIs to stack rocksdb wrappers.Eg. Stack TTL over base d
// This class contains APIs to stack rocksdb wrappers.Eg. Stack TTL over base d
class StackableDB : public DB {
class StackableDB : public DB {
public :
public :
// StackableDB is the owner of db now!
// StackableDB take sole ownership of the underlying db.
explicit StackableDB ( DB * db ) : db_ ( 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 ( ) {
~ StackableDB ( ) {
delete db_ ;
if ( shared_db_ptr_ = = nullptr ) {
delete db_ ;
} else {
assert ( shared_db_ptr_ . get ( ) = = db_ ) ;
}
db_ = nullptr ;
}
}
virtual Status Close ( ) override { return db_ - > Close ( ) ; }
virtual Status Close ( ) override { return db_ - > Close ( ) ; }
@ -375,6 +385,7 @@ class StackableDB : public DB {
protected :
protected :
DB * db_ ;
DB * db_ ;
std : : shared_ptr < DB > shared_db_ptr_ ;
} ;
} ;
} // namespace rocksdb
} // namespace rocksdb