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