level_multiplier = _level_multiplier;
uint64_t prev_levels = _level0_size;
uint64_t cur_level = _level_base;
- uint64_t cur_threshold = prev_levels + cur_level;
extra_level = 1;
do {
uint64_t next_level = cur_level * _level_multiplier;
uint64_t next_threshold = prev_levels + cur_level + next_level;
++extra_level;
if (_db_total <= next_threshold) {
- cur_threshold *= reserved_factor;
+ uint64_t cur_threshold = prev_levels + cur_level * reserved_factor;
db_avail4slow = cur_threshold < _db_total ? _db_total - cur_threshold : 0;
break;
} else {
prev_levels += cur_level;
cur_level = next_level;
- cur_threshold = next_threshold;
}
} while (true);
} else {
}
}
+ uint64_t get_available_extra() const {
+ return db_avail4slow;
+ }
+ uint64_t get_extra_level() const {
+ return extra_level;
+ }
void* get_hint_for_log() const override {
return reinterpret_cast<void*>(LEVEL_LOG);
}