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 #ifndef ROCKSDB_LITE
8 #include <string>
9 #include <vector>
10 #include "db/db_impl/db_impl.h"
11 
12 namespace rocksdb {
13 
14 class CompactedDBImpl : public DBImpl {
15  public:
16   CompactedDBImpl(const DBOptions& options, const std::string& dbname);
17   // No copying allowed
18   CompactedDBImpl(const CompactedDBImpl&) = delete;
19   void operator=(const CompactedDBImpl&) = delete;
20 
21   virtual ~CompactedDBImpl();
22 
23   static Status Open(const Options& options, const std::string& dbname,
24                      DB** dbptr);
25 
26   // Implementations of the DB interface
27   using DB::Get;
28   virtual Status Get(const ReadOptions& options,
29                      ColumnFamilyHandle* column_family, const Slice& key,
30                      PinnableSlice* value) override;
31   using DB::MultiGet;
32   virtual std::vector<Status> MultiGet(
33       const ReadOptions& options,
34       const std::vector<ColumnFamilyHandle*>&,
35       const std::vector<Slice>& keys, std::vector<std::string>* values)
36     override;
37 
38   using DBImpl::Put;
Put(const WriteOptions &,ColumnFamilyHandle *,const Slice &,const Slice &)39   virtual Status Put(const WriteOptions& /*options*/,
40                      ColumnFamilyHandle* /*column_family*/,
41                      const Slice& /*key*/, const Slice& /*value*/) override {
42     return Status::NotSupported("Not supported in compacted db mode.");
43   }
44   using DBImpl::Merge;
Merge(const WriteOptions &,ColumnFamilyHandle *,const Slice &,const Slice &)45   virtual Status Merge(const WriteOptions& /*options*/,
46                        ColumnFamilyHandle* /*column_family*/,
47                        const Slice& /*key*/, const Slice& /*value*/) override {
48     return Status::NotSupported("Not supported in compacted db mode.");
49   }
50   using DBImpl::Delete;
Delete(const WriteOptions &,ColumnFamilyHandle *,const Slice &)51   virtual Status Delete(const WriteOptions& /*options*/,
52                         ColumnFamilyHandle* /*column_family*/,
53                         const Slice& /*key*/) override {
54     return Status::NotSupported("Not supported in compacted db mode.");
55   }
Write(const WriteOptions &,WriteBatch *)56   virtual Status Write(const WriteOptions& /*options*/,
57                        WriteBatch* /*updates*/) override {
58     return Status::NotSupported("Not supported in compacted db mode.");
59   }
60   using DBImpl::CompactRange;
CompactRange(const CompactRangeOptions &,ColumnFamilyHandle *,const Slice *,const Slice *)61   virtual Status CompactRange(const CompactRangeOptions& /*options*/,
62                               ColumnFamilyHandle* /*column_family*/,
63                               const Slice* /*begin*/,
64                               const Slice* /*end*/) override {
65     return Status::NotSupported("Not supported in compacted db mode.");
66   }
67 
DisableFileDeletions()68   virtual Status DisableFileDeletions() override {
69     return Status::NotSupported("Not supported in compacted db mode.");
70   }
EnableFileDeletions(bool)71   virtual Status EnableFileDeletions(bool /*force*/) override {
72     return Status::NotSupported("Not supported in compacted db mode.");
73   }
GetLiveFiles(std::vector<std::string> & ret,uint64_t * manifest_file_size,bool)74   virtual Status GetLiveFiles(std::vector<std::string>& ret,
75                               uint64_t* manifest_file_size,
76                               bool /*flush_memtable*/) override {
77     return DBImpl::GetLiveFiles(ret, manifest_file_size,
78                                 false /* flush_memtable */);
79   }
80   using DBImpl::Flush;
Flush(const FlushOptions &,ColumnFamilyHandle *)81   virtual Status Flush(const FlushOptions& /*options*/,
82                        ColumnFamilyHandle* /*column_family*/) override {
83     return Status::NotSupported("Not supported in compacted db mode.");
84   }
85   using DB::IngestExternalFile;
IngestExternalFile(ColumnFamilyHandle *,const std::vector<std::string> &,const IngestExternalFileOptions &)86   virtual Status IngestExternalFile(
87       ColumnFamilyHandle* /*column_family*/,
88       const std::vector<std::string>& /*external_files*/,
89       const IngestExternalFileOptions& /*ingestion_options*/) override {
90     return Status::NotSupported("Not supported in compacted db mode.");
91   }
92   using DB::CreateColumnFamilyWithImport;
CreateColumnFamilyWithImport(const ColumnFamilyOptions &,const std::string &,const ImportColumnFamilyOptions &,const ExportImportFilesMetaData &,ColumnFamilyHandle **)93   virtual Status CreateColumnFamilyWithImport(
94       const ColumnFamilyOptions& /*options*/,
95       const std::string& /*column_family_name*/,
96       const ImportColumnFamilyOptions& /*import_options*/,
97       const ExportImportFilesMetaData& /*metadata*/,
98       ColumnFamilyHandle** /*handle*/) override {
99     return Status::NotSupported("Not supported in compacted db mode.");
100   }
101 
102  private:
103   friend class DB;
104   inline size_t FindFile(const Slice& key);
105   Status Init(const Options& options);
106 
107   ColumnFamilyData* cfd_;
108   Version* version_;
109   const Comparator* user_comparator_;
110   LevelFilesBrief files_;
111 };
112 }
113 #endif  // ROCKSDB_LITE
114