Coverage Report

Created: 2023-06-07 06:28

/src/leveldb/db/version_edit.h
Line
Count
Source
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
1.22M
  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
640k
  VersionEdit() { Clear(); }
32
640k
  ~VersionEdit() = default;
33
34
  void Clear();
35
36
136k
  void SetComparatorName(const Slice& name) {
37
136k
    has_comparator_ = true;
38
136k
    comparator_ = name.ToString();
39
136k
  }
40
326k
  void SetLogNumber(uint64_t num) {
41
326k
    has_log_number_ = true;
42
326k
    log_number_ = num;
43
326k
  }
44
190k
  void SetPrevLogNumber(uint64_t num) {
45
190k
    has_prev_log_number_ = true;
46
190k
    prev_log_number_ = num;
47
190k
  }
48
195k
  void SetNextFile(uint64_t num) {
49
195k
    has_next_file_number_ = true;
50
195k
    next_file_number_ = num;
51
195k
  }
52
195k
  void SetLastSequence(SequenceNumber seq) {
53
195k
    has_last_sequence_ = true;
54
195k
    last_sequence_ = seq;
55
195k
  }
56
140k
  void SetCompactPointer(int level, const InternalKey& key) {
57
140k
    compact_pointers_.push_back(std::make_pair(level, key));
58
140k
  }
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
832k
               const InternalKey& smallest, const InternalKey& largest) {
65
832k
    FileMetaData f;
66
832k
    f.number = file;
67
832k
    f.file_size = file_size;
68
832k
    f.smallest = smallest;
69
832k
    f.largest = largest;
70
832k
    new_files_.push_back(std::make_pair(level, f));
71
832k
  }
72
73
  // Delete the specified "file" from the specified "level".
74
79.7k
  void RemoveFile(int level, uint64_t file) {
75
79.7k
    deleted_files_.insert(std::make_pair(level, file));
76
79.7k
  }
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_