YugabyteDB (2.13.1.0-b60, 21121d69985fbf76aa6958d8f04a9bfa936293b5)

Coverage Report

Created: 2022-03-22 16:43

/Users/deen/code/yugabyte-db/src/yb/rocksdb/util/mutable_cf_options.h
Line
Count
Source
1
// Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2
// This source code is licensed under the BSD-style license found in the
3
// LICENSE file in the root directory of this source tree. An additional grant
4
// of patent rights can be found in the PATENTS file in the same directory.
5
//
6
// The following only applies to changes made to this file as part of YugaByte development.
7
//
8
// Portions Copyright (c) YugaByte, Inc.
9
//
10
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
11
// in compliance with the License.  You may obtain a copy of the License at
12
//
13
// http://www.apache.org/licenses/LICENSE-2.0
14
//
15
// Unless required by applicable law or agreed to in writing, software distributed under the License
16
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
17
// or implied.  See the License for the specific language governing permissions and limitations
18
// under the License.
19
//
20
21
#ifndef YB_ROCKSDB_UTIL_MUTABLE_CF_OPTIONS_H
22
#define YB_ROCKSDB_UTIL_MUTABLE_CF_OPTIONS_H
23
24
#pragma once
25
26
#include <vector>
27
#include "yb/rocksdb/options.h"
28
#include "yb/rocksdb/immutable_options.h"
29
30
namespace rocksdb {
31
32
struct MutableCFOptions {
33
  MutableCFOptions(const Options& options, const ImmutableCFOptions& ioptions)
34
      : write_buffer_size(options.write_buffer_size),
35
        max_write_buffer_number(options.max_write_buffer_number),
36
        arena_block_size(options.arena_block_size),
37
        memtable_prefix_bloom_bits(options.memtable_prefix_bloom_bits),
38
        memtable_prefix_bloom_probes(options.memtable_prefix_bloom_probes),
39
        memtable_prefix_bloom_huge_page_tlb_size(
40
            options.memtable_prefix_bloom_huge_page_tlb_size),
41
        max_successive_merges(options.max_successive_merges),
42
        filter_deletes(options.filter_deletes),
43
        inplace_update_num_locks(options.inplace_update_num_locks),
44
        disable_auto_compactions(options.disable_auto_compactions),
45
        soft_pending_compaction_bytes_limit(
46
            options.soft_pending_compaction_bytes_limit),
47
        hard_pending_compaction_bytes_limit(
48
            options.hard_pending_compaction_bytes_limit),
49
        level0_file_num_compaction_trigger(
50
            options.level0_file_num_compaction_trigger),
51
        level0_slowdown_writes_trigger(options.level0_slowdown_writes_trigger),
52
        level0_stop_writes_trigger(options.level0_stop_writes_trigger),
53
        compaction_pri(options.compaction_pri),
54
        max_grandparent_overlap_factor(options.max_grandparent_overlap_factor),
55
        expanded_compaction_factor(options.expanded_compaction_factor),
56
        source_compaction_factor(options.source_compaction_factor),
57
        target_file_size_base(options.target_file_size_base),
58
        target_file_size_multiplier(options.target_file_size_multiplier),
59
        max_bytes_for_level_base(options.max_bytes_for_level_base),
60
        max_bytes_for_level_multiplier(options.max_bytes_for_level_multiplier),
61
        max_bytes_for_level_multiplier_additional(
62
            options.max_bytes_for_level_multiplier_additional),
63
        verify_checksums_in_compaction(options.verify_checksums_in_compaction),
64
        max_subcompactions(options.max_subcompactions),
65
        max_sequential_skip_in_iterations(
66
            options.max_sequential_skip_in_iterations),
67
        paranoid_file_checks(options.paranoid_file_checks),
68
        compaction_measure_io_stats(options.compaction_measure_io_stats),
69
886k
        max_file_size_for_compaction(options.max_file_size_for_compaction) {
70
886k
    RefreshDerivedOptions(ioptions);
71
886k
  }
72
73
  MutableCFOptions()
74
      : write_buffer_size(0),
75
        max_write_buffer_number(0),
76
        arena_block_size(0),
77
        memtable_prefix_bloom_bits(0),
78
        memtable_prefix_bloom_probes(0),
79
        memtable_prefix_bloom_huge_page_tlb_size(0),
80
        max_successive_merges(0),
81
        filter_deletes(false),
82
        inplace_update_num_locks(0),
83
        disable_auto_compactions(false),
84
        soft_pending_compaction_bytes_limit(0),
85
        hard_pending_compaction_bytes_limit(0),
86
        level0_file_num_compaction_trigger(0),
87
        level0_slowdown_writes_trigger(0),
88
        level0_stop_writes_trigger(0),
89
        compaction_pri(kByCompensatedSize),
90
        max_grandparent_overlap_factor(0),
91
        expanded_compaction_factor(0),
92
        source_compaction_factor(0),
93
        target_file_size_base(0),
94
        target_file_size_multiplier(0),
95
        max_bytes_for_level_base(0),
96
        max_bytes_for_level_multiplier(0),
97
        verify_checksums_in_compaction(false),
98
        max_subcompactions(1),
99
        max_sequential_skip_in_iterations(0),
100
        paranoid_file_checks(false),
101
        compaction_measure_io_stats(false),
102
3.01M
        max_file_size_for_compaction(nullptr) {}
103
104
  // Must be called after any change to MutableCFOptions
105
  void RefreshDerivedOptions(const ImmutableCFOptions& ioptions);
106
107
  // Get the max file size in a given level.
108
  uint64_t MaxFileSizeForLevel(int level) const;
109
  // Get the max file size for compaction.
110
  uint64_t MaxFileSizeForCompaction() const;
111
  // Returns maximum total overlap bytes with grandparent
112
  // level (i.e., level+2) before we stop building a single
113
  // file in level->level+1 compaction.
114
  uint64_t MaxGrandParentOverlapBytes(int level) const;
115
  uint64_t ExpandedCompactionByteSizeLimit(int level) const;
116
413k
  int MaxBytesMultiplerAdditional(int level) const {
117
413k
    if (level >=
118
413k
        static_cast<int>(max_bytes_for_level_multiplier_additional.size())) {
119
9.27k
      return 1;
120
9.27k
    }
121
404k
    return max_bytes_for_level_multiplier_additional[level];
122
413k
  }
123
124
  void Dump(Logger* log) const;
125
126
  // Memtable related options
127
  size_t write_buffer_size;
128
  int max_write_buffer_number;
129
  size_t arena_block_size;
130
  uint32_t memtable_prefix_bloom_bits;
131
  uint32_t memtable_prefix_bloom_probes;
132
  size_t memtable_prefix_bloom_huge_page_tlb_size;
133
  size_t max_successive_merges;
134
  bool filter_deletes;
135
  size_t inplace_update_num_locks;
136
137
  // Compaction related options
138
  bool disable_auto_compactions;
139
  uint64_t soft_pending_compaction_bytes_limit;
140
  uint64_t hard_pending_compaction_bytes_limit;
141
  int level0_file_num_compaction_trigger;
142
  int level0_slowdown_writes_trigger;
143
  int level0_stop_writes_trigger;
144
  CompactionPri compaction_pri;
145
  int max_grandparent_overlap_factor;
146
  int expanded_compaction_factor;
147
  int source_compaction_factor;
148
  uint64_t target_file_size_base;
149
  int target_file_size_multiplier;
150
  uint64_t max_bytes_for_level_base;
151
  int max_bytes_for_level_multiplier;
152
  std::vector<int> max_bytes_for_level_multiplier_additional;
153
  bool verify_checksums_in_compaction;
154
  int max_subcompactions;
155
156
  // Misc options
157
  uint64_t max_sequential_skip_in_iterations;
158
  bool paranoid_file_checks;
159
  bool compaction_measure_io_stats;
160
  std::shared_ptr<std::function<uint64_t()>> max_file_size_for_compaction;
161
162
  // Derived options
163
  // Per-level target file size.
164
  std::vector<uint64_t> max_file_size;
165
};
166
167
uint64_t MultiplyCheckOverflow(uint64_t op1, int op2);
168
169
}  // namespace rocksdb
170
171
#endif // YB_ROCKSDB_UTIL_MUTABLE_CF_OPTIONS_H