xref: /aosp_15_r20/external/leveldb/db/version_edit.h (revision 9507f98c5f32dee4b5f9e4a38cd499f3ff5c4490)
1*9507f98cSAndroid Build Coastguard Worker // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2*9507f98cSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*9507f98cSAndroid Build Coastguard Worker // found in the LICENSE file. See the AUTHORS file for names of contributors.
4*9507f98cSAndroid Build Coastguard Worker 
5*9507f98cSAndroid Build Coastguard Worker #ifndef STORAGE_LEVELDB_DB_VERSION_EDIT_H_
6*9507f98cSAndroid Build Coastguard Worker #define STORAGE_LEVELDB_DB_VERSION_EDIT_H_
7*9507f98cSAndroid Build Coastguard Worker 
8*9507f98cSAndroid Build Coastguard Worker #include <set>
9*9507f98cSAndroid Build Coastguard Worker #include <utility>
10*9507f98cSAndroid Build Coastguard Worker #include <vector>
11*9507f98cSAndroid Build Coastguard Worker 
12*9507f98cSAndroid Build Coastguard Worker #include "db/dbformat.h"
13*9507f98cSAndroid Build Coastguard Worker 
14*9507f98cSAndroid Build Coastguard Worker namespace leveldb {
15*9507f98cSAndroid Build Coastguard Worker 
16*9507f98cSAndroid Build Coastguard Worker class VersionSet;
17*9507f98cSAndroid Build Coastguard Worker 
18*9507f98cSAndroid Build Coastguard Worker struct FileMetaData {
FileMetaDataFileMetaData19*9507f98cSAndroid Build Coastguard Worker   FileMetaData() : refs(0), allowed_seeks(1 << 30), file_size(0) {}
20*9507f98cSAndroid Build Coastguard Worker 
21*9507f98cSAndroid Build Coastguard Worker   int refs;
22*9507f98cSAndroid Build Coastguard Worker   int allowed_seeks;  // Seeks allowed until compaction
23*9507f98cSAndroid Build Coastguard Worker   uint64_t number;
24*9507f98cSAndroid Build Coastguard Worker   uint64_t file_size;    // File size in bytes
25*9507f98cSAndroid Build Coastguard Worker   InternalKey smallest;  // Smallest internal key served by table
26*9507f98cSAndroid Build Coastguard Worker   InternalKey largest;   // Largest internal key served by table
27*9507f98cSAndroid Build Coastguard Worker };
28*9507f98cSAndroid Build Coastguard Worker 
29*9507f98cSAndroid Build Coastguard Worker class VersionEdit {
30*9507f98cSAndroid Build Coastguard Worker  public:
VersionEdit()31*9507f98cSAndroid Build Coastguard Worker   VersionEdit() { Clear(); }
32*9507f98cSAndroid Build Coastguard Worker   ~VersionEdit() = default;
33*9507f98cSAndroid Build Coastguard Worker 
34*9507f98cSAndroid Build Coastguard Worker   void Clear();
35*9507f98cSAndroid Build Coastguard Worker 
SetComparatorName(const Slice & name)36*9507f98cSAndroid Build Coastguard Worker   void SetComparatorName(const Slice& name) {
37*9507f98cSAndroid Build Coastguard Worker     has_comparator_ = true;
38*9507f98cSAndroid Build Coastguard Worker     comparator_ = name.ToString();
39*9507f98cSAndroid Build Coastguard Worker   }
SetLogNumber(uint64_t num)40*9507f98cSAndroid Build Coastguard Worker   void SetLogNumber(uint64_t num) {
41*9507f98cSAndroid Build Coastguard Worker     has_log_number_ = true;
42*9507f98cSAndroid Build Coastguard Worker     log_number_ = num;
43*9507f98cSAndroid Build Coastguard Worker   }
SetPrevLogNumber(uint64_t num)44*9507f98cSAndroid Build Coastguard Worker   void SetPrevLogNumber(uint64_t num) {
45*9507f98cSAndroid Build Coastguard Worker     has_prev_log_number_ = true;
46*9507f98cSAndroid Build Coastguard Worker     prev_log_number_ = num;
47*9507f98cSAndroid Build Coastguard Worker   }
SetNextFile(uint64_t num)48*9507f98cSAndroid Build Coastguard Worker   void SetNextFile(uint64_t num) {
49*9507f98cSAndroid Build Coastguard Worker     has_next_file_number_ = true;
50*9507f98cSAndroid Build Coastguard Worker     next_file_number_ = num;
51*9507f98cSAndroid Build Coastguard Worker   }
SetLastSequence(SequenceNumber seq)52*9507f98cSAndroid Build Coastguard Worker   void SetLastSequence(SequenceNumber seq) {
53*9507f98cSAndroid Build Coastguard Worker     has_last_sequence_ = true;
54*9507f98cSAndroid Build Coastguard Worker     last_sequence_ = seq;
55*9507f98cSAndroid Build Coastguard Worker   }
SetCompactPointer(int level,const InternalKey & key)56*9507f98cSAndroid Build Coastguard Worker   void SetCompactPointer(int level, const InternalKey& key) {
57*9507f98cSAndroid Build Coastguard Worker     compact_pointers_.push_back(std::make_pair(level, key));
58*9507f98cSAndroid Build Coastguard Worker   }
59*9507f98cSAndroid Build Coastguard Worker 
60*9507f98cSAndroid Build Coastguard Worker   // Add the specified file at the specified number.
61*9507f98cSAndroid Build Coastguard Worker   // REQUIRES: This version has not been saved (see VersionSet::SaveTo)
62*9507f98cSAndroid Build Coastguard Worker   // REQUIRES: "smallest" and "largest" are smallest and largest keys in file
AddFile(int level,uint64_t file,uint64_t file_size,const InternalKey & smallest,const InternalKey & largest)63*9507f98cSAndroid Build Coastguard Worker   void AddFile(int level, uint64_t file, uint64_t file_size,
64*9507f98cSAndroid Build Coastguard Worker                const InternalKey& smallest, const InternalKey& largest) {
65*9507f98cSAndroid Build Coastguard Worker     FileMetaData f;
66*9507f98cSAndroid Build Coastguard Worker     f.number = file;
67*9507f98cSAndroid Build Coastguard Worker     f.file_size = file_size;
68*9507f98cSAndroid Build Coastguard Worker     f.smallest = smallest;
69*9507f98cSAndroid Build Coastguard Worker     f.largest = largest;
70*9507f98cSAndroid Build Coastguard Worker     new_files_.push_back(std::make_pair(level, f));
71*9507f98cSAndroid Build Coastguard Worker   }
72*9507f98cSAndroid Build Coastguard Worker 
73*9507f98cSAndroid Build Coastguard Worker   // Delete the specified "file" from the specified "level".
RemoveFile(int level,uint64_t file)74*9507f98cSAndroid Build Coastguard Worker   void RemoveFile(int level, uint64_t file) {
75*9507f98cSAndroid Build Coastguard Worker     deleted_files_.insert(std::make_pair(level, file));
76*9507f98cSAndroid Build Coastguard Worker   }
77*9507f98cSAndroid Build Coastguard Worker 
78*9507f98cSAndroid Build Coastguard Worker   void EncodeTo(std::string* dst) const;
79*9507f98cSAndroid Build Coastguard Worker   Status DecodeFrom(const Slice& src);
80*9507f98cSAndroid Build Coastguard Worker 
81*9507f98cSAndroid Build Coastguard Worker   std::string DebugString() const;
82*9507f98cSAndroid Build Coastguard Worker 
83*9507f98cSAndroid Build Coastguard Worker  private:
84*9507f98cSAndroid Build Coastguard Worker   friend class VersionSet;
85*9507f98cSAndroid Build Coastguard Worker 
86*9507f98cSAndroid Build Coastguard Worker   typedef std::set<std::pair<int, uint64_t>> DeletedFileSet;
87*9507f98cSAndroid Build Coastguard Worker 
88*9507f98cSAndroid Build Coastguard Worker   std::string comparator_;
89*9507f98cSAndroid Build Coastguard Worker   uint64_t log_number_;
90*9507f98cSAndroid Build Coastguard Worker   uint64_t prev_log_number_;
91*9507f98cSAndroid Build Coastguard Worker   uint64_t next_file_number_;
92*9507f98cSAndroid Build Coastguard Worker   SequenceNumber last_sequence_;
93*9507f98cSAndroid Build Coastguard Worker   bool has_comparator_;
94*9507f98cSAndroid Build Coastguard Worker   bool has_log_number_;
95*9507f98cSAndroid Build Coastguard Worker   bool has_prev_log_number_;
96*9507f98cSAndroid Build Coastguard Worker   bool has_next_file_number_;
97*9507f98cSAndroid Build Coastguard Worker   bool has_last_sequence_;
98*9507f98cSAndroid Build Coastguard Worker 
99*9507f98cSAndroid Build Coastguard Worker   std::vector<std::pair<int, InternalKey>> compact_pointers_;
100*9507f98cSAndroid Build Coastguard Worker   DeletedFileSet deleted_files_;
101*9507f98cSAndroid Build Coastguard Worker   std::vector<std::pair<int, FileMetaData>> new_files_;
102*9507f98cSAndroid Build Coastguard Worker };
103*9507f98cSAndroid Build Coastguard Worker 
104*9507f98cSAndroid Build Coastguard Worker }  // namespace leveldb
105*9507f98cSAndroid Build Coastguard Worker 
106*9507f98cSAndroid Build Coastguard Worker #endif  // STORAGE_LEVELDB_DB_VERSION_EDIT_H_
107