1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. 2 // This source code is licensed under both the GPLv2 (found in the 3 // COPYING file in the root directory) and Apache 2.0 License 4 // (found in the LICENSE.Apache file in the root directory). 5 6 #pragma once 7 8 #ifndef ROCKSDB_LITE 9 10 #include <string> 11 #include <vector> 12 #include "db/db_impl/db_impl.h" 13 14 namespace ROCKSDB_NAMESPACE { 15 16 class DBImplReadOnly : public DBImpl { 17 public: 18 DBImplReadOnly(const DBOptions& options, const std::string& dbname); 19 // No copying allowed 20 DBImplReadOnly(const DBImplReadOnly&) = delete; 21 void operator=(const DBImplReadOnly&) = delete; 22 23 virtual ~DBImplReadOnly(); 24 25 // Implementations of the DB interface 26 using DB::Get; 27 virtual Status Get(const ReadOptions& options, 28 ColumnFamilyHandle* column_family, const Slice& key, 29 PinnableSlice* value) override; 30 31 // TODO: Implement ReadOnly MultiGet? 32 33 using DBImpl::NewIterator; 34 virtual Iterator* NewIterator(const ReadOptions&, 35 ColumnFamilyHandle* column_family) override; 36 37 virtual Status NewIterators( 38 const ReadOptions& options, 39 const std::vector<ColumnFamilyHandle*>& column_families, 40 std::vector<Iterator*>* iterators) override; 41 42 using DBImpl::Put; Put(const WriteOptions &,ColumnFamilyHandle *,const Slice &,const Slice &)43 virtual Status Put(const WriteOptions& /*options*/, 44 ColumnFamilyHandle* /*column_family*/, 45 const Slice& /*key*/, const Slice& /*value*/) override { 46 return Status::NotSupported("Not supported operation in read only mode."); 47 } 48 using DBImpl::Merge; Merge(const WriteOptions &,ColumnFamilyHandle *,const Slice &,const Slice &)49 virtual Status Merge(const WriteOptions& /*options*/, 50 ColumnFamilyHandle* /*column_family*/, 51 const Slice& /*key*/, const Slice& /*value*/) override { 52 return Status::NotSupported("Not supported operation in read only mode."); 53 } 54 using DBImpl::Delete; Delete(const WriteOptions &,ColumnFamilyHandle *,const Slice &)55 virtual Status Delete(const WriteOptions& /*options*/, 56 ColumnFamilyHandle* /*column_family*/, 57 const Slice& /*key*/) override { 58 return Status::NotSupported("Not supported operation in read only mode."); 59 } 60 using DBImpl::SingleDelete; SingleDelete(const WriteOptions &,ColumnFamilyHandle *,const Slice &)61 virtual Status SingleDelete(const WriteOptions& /*options*/, 62 ColumnFamilyHandle* /*column_family*/, 63 const Slice& /*key*/) override { 64 return Status::NotSupported("Not supported operation in read only mode."); 65 } Write(const WriteOptions &,WriteBatch *)66 virtual Status Write(const WriteOptions& /*options*/, 67 WriteBatch* /*updates*/) override { 68 return Status::NotSupported("Not supported operation in read only mode."); 69 } 70 using DBImpl::CompactRange; CompactRange(const CompactRangeOptions &,ColumnFamilyHandle *,const Slice *,const Slice *)71 virtual Status CompactRange(const CompactRangeOptions& /*options*/, 72 ColumnFamilyHandle* /*column_family*/, 73 const Slice* /*begin*/, 74 const Slice* /*end*/) override { 75 return Status::NotSupported("Not supported operation in read only mode."); 76 } 77 78 using DBImpl::CompactFiles; 79 virtual Status CompactFiles( 80 const CompactionOptions& /*compact_options*/, 81 ColumnFamilyHandle* /*column_family*/, 82 const std::vector<std::string>& /*input_file_names*/, 83 const int /*output_level*/, const int /*output_path_id*/ = -1, 84 std::vector<std::string>* const /*output_file_names*/ = nullptr, 85 CompactionJobInfo* /*compaction_job_info*/ = nullptr) override { 86 return Status::NotSupported("Not supported operation in read only mode."); 87 } 88 DisableFileDeletions()89 virtual Status DisableFileDeletions() override { 90 return Status::NotSupported("Not supported operation in read only mode."); 91 } 92 EnableFileDeletions(bool)93 virtual Status EnableFileDeletions(bool /*force*/) override { 94 return Status::NotSupported("Not supported operation in read only mode."); 95 } GetLiveFiles(std::vector<std::string> & ret,uint64_t * manifest_file_size,bool)96 virtual Status GetLiveFiles(std::vector<std::string>& ret, 97 uint64_t* manifest_file_size, 98 bool /*flush_memtable*/) override { 99 return DBImpl::GetLiveFiles(ret, manifest_file_size, 100 false /* flush_memtable */); 101 } 102 103 using DBImpl::Flush; Flush(const FlushOptions &,ColumnFamilyHandle *)104 virtual Status Flush(const FlushOptions& /*options*/, 105 ColumnFamilyHandle* /*column_family*/) override { 106 return Status::NotSupported("Not supported operation in read only mode."); 107 } 108 109 using DBImpl::SyncWAL; SyncWAL()110 virtual Status SyncWAL() override { 111 return Status::NotSupported("Not supported operation in read only mode."); 112 } 113 114 using DB::IngestExternalFile; IngestExternalFile(ColumnFamilyHandle *,const std::vector<std::string> &,const IngestExternalFileOptions &)115 virtual Status IngestExternalFile( 116 ColumnFamilyHandle* /*column_family*/, 117 const std::vector<std::string>& /*external_files*/, 118 const IngestExternalFileOptions& /*ingestion_options*/) override { 119 return Status::NotSupported("Not supported operation in read only mode."); 120 } 121 122 using DB::CreateColumnFamilyWithImport; CreateColumnFamilyWithImport(const ColumnFamilyOptions &,const std::string &,const ImportColumnFamilyOptions &,const ExportImportFilesMetaData &,ColumnFamilyHandle **)123 virtual Status CreateColumnFamilyWithImport( 124 const ColumnFamilyOptions& /*options*/, 125 const std::string& /*column_family_name*/, 126 const ImportColumnFamilyOptions& /*import_options*/, 127 const ExportImportFilesMetaData& /*metadata*/, 128 ColumnFamilyHandle** /*handle*/) override { 129 return Status::NotSupported("Not supported operation in read only mode."); 130 } 131 132 private: 133 friend class DB; 134 }; 135 } // namespace ROCKSDB_NAMESPACE 136 137 #endif // !ROCKSDB_LITE 138