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