mirror of
https://github.com/XTXMarkets/ternfs.git
synced 2026-05-04 08:49:29 -05:00
cdc: use SharedRocksDB
This commit is contained in:
committed by
GitHub Enterprise
parent
fcb8ab79f8
commit
409b126e4b
@@ -7,6 +7,7 @@
|
||||
#include <shared_mutex>
|
||||
#include <utility>
|
||||
|
||||
#include "Assert.hpp"
|
||||
#include "RocksDBUtils.hpp"
|
||||
|
||||
static void closeDB(rocksdb::DB* db) {
|
||||
@@ -15,7 +16,7 @@ static void closeDB(rocksdb::DB* db) {
|
||||
}
|
||||
|
||||
SharedRocksDB::SharedRocksDB(Logger& logger, std::shared_ptr<XmonAgent>& xmon)
|
||||
: _env(logger, xmon, "shared_rocksdb"), _db(nullptr, closeDB) {}
|
||||
: _env(logger, xmon, "shared_rocksdb"), _transactionDB(false), _db(nullptr, closeDB) {}
|
||||
|
||||
SharedRocksDB::~SharedRocksDB() {
|
||||
close();
|
||||
@@ -50,6 +51,36 @@ void SharedRocksDB::open(rocksdb::Options options, const std::string& path) {
|
||||
_cfDescriptors.clear();
|
||||
}
|
||||
|
||||
void SharedRocksDB::openTransactionDB(rocksdb::Options options, const std::string& path) {
|
||||
std::unique_lock<std::shared_mutex> _(_stateMutex);
|
||||
ALWAYS_ASSERT(_db.get() == nullptr);
|
||||
ALWAYS_ASSERT(options.statistics.get() == nullptr);
|
||||
_dbStatistics = rocksdb::CreateDBStatistics();
|
||||
_dbStatisticsFile = path + "/db-statistics.txt";
|
||||
options.statistics = _dbStatistics;
|
||||
|
||||
|
||||
std::vector<rocksdb::ColumnFamilyHandle*> cfHandles;
|
||||
cfHandles.reserve(_cfDescriptors.size());
|
||||
rocksdb::OptimisticTransactionDB* db;
|
||||
auto dbPath = path + "/db";
|
||||
LOG_INFO(_env, "Opening RocksDB in %s", dbPath);
|
||||
ROCKS_DB_CHECKED_MSG(
|
||||
rocksdb::OptimisticTransactionDB::Open(options, dbPath, _cfDescriptors, &cfHandles, &db),
|
||||
"could not open RocksDB %s", path
|
||||
);
|
||||
|
||||
_db = std::unique_ptr<rocksdb::DB, void (*)(rocksdb::DB*)>(db,closeDB);
|
||||
_transactionDB = true;
|
||||
ALWAYS_ASSERT(_cfDescriptors.size() == cfHandles.size());
|
||||
|
||||
for (auto i = 0; i < _cfDescriptors.size(); ++i) {
|
||||
_cfs.insert(std::make_pair(_cfDescriptors[i].name, cfHandles[i]));
|
||||
}
|
||||
|
||||
_cfDescriptors.clear();
|
||||
}
|
||||
|
||||
void SharedRocksDB::openForReadOnly(rocksdb::Options options, const std::string& path) {
|
||||
std::unique_lock<std::shared_mutex> _(_stateMutex);
|
||||
ALWAYS_ASSERT(_db.get() == nullptr);
|
||||
@@ -136,6 +167,13 @@ rocksdb::DB* SharedRocksDB::db() const {
|
||||
return _db.get();
|
||||
}
|
||||
|
||||
rocksdb::OptimisticTransactionDB* SharedRocksDB::transactionDB() const {
|
||||
std::shared_lock<std::shared_mutex> _(_stateMutex);
|
||||
ALWAYS_ASSERT(_db.get() != nullptr);
|
||||
ALWAYS_ASSERT(_transactionDB);
|
||||
return (rocksdb::OptimisticTransactionDB*)_db.get();
|
||||
}
|
||||
|
||||
void SharedRocksDB::rocksDBMetrics(std::unordered_map<std::string, uint64_t>& stats) {
|
||||
std::shared_lock<std::shared_mutex> _(_stateMutex);
|
||||
ALWAYS_ASSERT(_db.get() != nullptr);
|
||||
|
||||
Reference in New Issue
Block a user