| 92 | } |
| 93 | |
| 94 | void SharedRocksDB::openForReadOnly(rocksdb::Options options) { |
| 95 | std::unique_lock<std::shared_mutex> _(_stateMutex); |
| 96 | ALWAYS_ASSERT(_db.get() == nullptr); |
| 97 | options.create_if_missing = false; |
| 98 | options.create_missing_column_families = false; |
| 99 | |
| 100 | std::vector<rocksdb::ColumnFamilyHandle*> cfHandles; |
| 101 | cfHandles.reserve(_cfDescriptors.size()); |
| 102 | rocksdb::DB* db; |
| 103 | LOG_INFO(_env, "Opening RocksDB as readonly in %s", _path); |
| 104 | ROCKS_DB_CHECKED_MSG( |
| 105 | rocksdb::DB::OpenForReadOnly(options, _path, _cfDescriptors, &cfHandles, &db), |
| 106 | "could not open RocksDB %s", _path |
| 107 | ); |
| 108 | |
| 109 | _db = std::unique_ptr<rocksdb::DB, void (*)(rocksdb::DB*)>(db,closeDB); |
| 110 | ALWAYS_ASSERT(_cfDescriptors.size() == cfHandles.size()); |
| 111 | |
| 112 | for (auto i = 0; i < _cfDescriptors.size(); ++i) { |
| 113 | _cfs.insert(std::make_pair(_cfDescriptors[i].name, cfHandles[i])); |
| 114 | } |
| 115 | |
| 116 | _cfDescriptors.clear(); |
| 117 | } |
| 118 | |
| 119 | void SharedRocksDB::close() { |
| 120 | std::unique_lock<std::shared_mutex> _(_stateMutex); |
no test coverage detected