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