github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/c-deps/libroach/engine.h (about) 1 // Copyright 2018 The Cockroach Authors. 2 // 3 // Use of this software is governed by the Business Source License 4 // included in the file licenses/BSL.txt. 5 // 6 // As of the Change Date specified in that file, in accordance with 7 // the Business Source License, use of this software will be governed 8 // by the Apache License, Version 2.0, included in the file 9 // licenses/APL.txt. 10 11 #pragma once 12 13 #include <atomic> 14 #include <libroach.h> 15 #include <rocksdb/cache.h> 16 #include <rocksdb/db.h> 17 #include <rocksdb/env.h> 18 #include <rocksdb/statistics.h> 19 #include "eventlistener.h" 20 21 struct DBEngine { 22 rocksdb::DB* const rep; 23 std::atomic<int64_t>* iters; 24 25 DBEngine(rocksdb::DB* r, std::atomic<int64_t>* iters) : rep(r), iters(iters) {} 26 virtual ~DBEngine(); 27 28 virtual DBStatus AssertPreClose(); 29 virtual DBStatus Put(DBKey key, DBSlice value) = 0; 30 virtual DBStatus Merge(DBKey key, DBSlice value) = 0; 31 virtual DBStatus Delete(DBKey key) = 0; 32 virtual DBStatus SingleDelete(DBKey key) = 0; 33 virtual DBStatus DeleteRange(DBKey start, DBKey end) = 0; 34 virtual DBStatus CommitBatch(bool sync) = 0; 35 virtual DBStatus ApplyBatchRepr(DBSlice repr, bool sync) = 0; 36 virtual DBSlice BatchRepr() = 0; 37 virtual DBStatus Get(DBKey key, DBString* value) = 0; 38 virtual DBIterator* NewIter(DBIterOptions) = 0; 39 virtual DBStatus GetStats(DBStatsResult* stats) = 0; 40 virtual DBStatus GetTickersAndHistograms(DBTickersAndHistogramsResult* stats) = 0; 41 virtual DBString GetCompactionStats() = 0; 42 virtual DBString GetEnvStats(DBEnvStatsResult* stats) = 0; 43 virtual DBStatus GetEncryptionRegistries(DBEncryptionRegistries* result) = 0; 44 virtual DBStatus EnvWriteFile(DBSlice path, DBSlice contents) = 0; 45 virtual DBStatus EnvOpenFile(DBSlice path, uint64_t bytes_per_sync, rocksdb::WritableFile** file) = 0; 46 virtual DBStatus EnvReadFile(DBSlice path, DBSlice* contents) = 0; 47 virtual DBStatus EnvAppendFile(rocksdb::WritableFile* file, DBSlice contents) = 0; 48 virtual DBStatus EnvSyncFile(rocksdb::WritableFile* file) = 0; 49 virtual DBStatus EnvCloseFile(rocksdb::WritableFile* file) = 0; 50 virtual DBStatus EnvDeleteFile(DBSlice path) = 0; 51 virtual DBStatus EnvDeleteDirAndFiles(DBSlice dir) = 0; 52 virtual DBStatus EnvLinkFile(DBSlice oldname, DBSlice newname) = 0; 53 virtual DBStatus EnvOpenReadableFile(DBSlice path, rocksdb::RandomAccessFile** file) = 0; 54 virtual DBStatus EnvReadAtFile(rocksdb::RandomAccessFile* file, DBSlice buffer, int64_t offset, 55 int* n) = 0; 56 virtual DBStatus EnvCloseReadableFile(rocksdb::RandomAccessFile* file) = 0; 57 virtual DBStatus EnvOpenDirectory(DBSlice path, rocksdb::Directory** file) = 0; 58 virtual DBStatus EnvSyncDirectory(rocksdb::Directory* file) = 0; 59 virtual DBStatus EnvCloseDirectory(rocksdb::Directory* file) = 0; 60 virtual DBStatus EnvRenameFile(DBSlice oldname, DBSlice newname) = 0; 61 virtual DBStatus EnvCreateDir(DBSlice name) = 0; 62 virtual DBStatus EnvDeleteDir(DBSlice name) = 0; 63 virtual DBStatus EnvListDir(DBSlice name, std::vector<std::string>* result) = 0; 64 65 DBSSTable* GetSSTables(int* n); 66 DBStatus GetSortedWALFiles(DBWALFile** out_files, int* n); 67 DBString GetUserProperties(); 68 }; 69 70 namespace cockroach { 71 72 struct EnvManager; 73 74 struct DBImpl : public DBEngine { 75 std::unique_ptr<EnvManager> env_mgr; 76 std::unique_ptr<rocksdb::DB> rep_deleter; 77 std::shared_ptr<rocksdb::Cache> block_cache; 78 std::shared_ptr<DBEventListener> event_listener; 79 std::atomic<int64_t> iters_count; 80 81 // Construct a new DBImpl from the specified DB. 82 // The DB and passed Envs will be deleted when the DBImpl is deleted. 83 // Either env can be NULL. 84 DBImpl(rocksdb::DB* r, std::unique_ptr<EnvManager> e, std::shared_ptr<rocksdb::Cache> bc, 85 std::shared_ptr<DBEventListener> event_listener); 86 virtual ~DBImpl(); 87 88 virtual DBStatus AssertPreClose(); 89 virtual DBStatus Put(DBKey key, DBSlice value); 90 virtual DBStatus Merge(DBKey key, DBSlice value); 91 virtual DBStatus Delete(DBKey key); 92 virtual DBStatus SingleDelete(DBKey key); 93 virtual DBStatus DeleteRange(DBKey start, DBKey end); 94 virtual DBStatus CommitBatch(bool sync); 95 virtual DBStatus ApplyBatchRepr(DBSlice repr, bool sync); 96 virtual DBSlice BatchRepr(); 97 virtual DBStatus Get(DBKey key, DBString* value); 98 virtual DBIterator* NewIter(DBIterOptions); 99 virtual DBStatus GetStats(DBStatsResult* stats); 100 virtual DBStatus GetTickersAndHistograms(DBTickersAndHistogramsResult* stats); 101 virtual DBString GetCompactionStats(); 102 virtual DBStatus GetEnvStats(DBEnvStatsResult* stats); 103 virtual DBStatus GetEncryptionRegistries(DBEncryptionRegistries* result); 104 virtual DBStatus EnvWriteFile(DBSlice path, DBSlice contents); 105 virtual DBStatus EnvOpenFile(DBSlice path, uint64_t bytes_per_sync, rocksdb::WritableFile** file); 106 virtual DBStatus EnvReadFile(DBSlice path, DBSlice* contents); 107 virtual DBStatus EnvAppendFile(rocksdb::WritableFile* file, DBSlice contents); 108 virtual DBStatus EnvSyncFile(rocksdb::WritableFile* file); 109 virtual DBStatus EnvCloseFile(rocksdb::WritableFile* file); 110 virtual DBStatus EnvDeleteFile(DBSlice path); 111 virtual DBStatus EnvDeleteDirAndFiles(DBSlice dir); 112 virtual DBStatus EnvLinkFile(DBSlice oldname, DBSlice newname); 113 virtual DBStatus EnvOpenReadableFile(DBSlice path, rocksdb::RandomAccessFile** file); 114 virtual DBStatus EnvReadAtFile(rocksdb::RandomAccessFile* file, DBSlice buffer, int64_t offset, 115 int* n); 116 virtual DBStatus EnvCloseReadableFile(rocksdb::RandomAccessFile* file); 117 virtual DBStatus EnvOpenDirectory(DBSlice path, rocksdb::Directory** file); 118 virtual DBStatus EnvSyncDirectory(rocksdb::Directory* file); 119 virtual DBStatus EnvCloseDirectory(rocksdb::Directory* file); 120 virtual DBStatus EnvRenameFile(DBSlice oldname, DBSlice newname); 121 virtual DBStatus EnvCreateDir(DBSlice name); 122 virtual DBStatus EnvDeleteDir(DBSlice name); 123 virtual DBStatus EnvListDir(DBSlice name, std::vector<std::string>* result); 124 }; 125 126 } // namespace cockroach