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