| 1508 | } |
| 1509 | |
| 1510 | bool Compaction::IsBaseLevelForKey(const Slice& user_key) { |
| 1511 | // Maybe use binary search to find right entry instead of linear search? |
| 1512 | const Comparator* user_cmp = input_version_->vset_->icmp_.user_comparator(); |
| 1513 | for (int lvl = level_ + 2; lvl < config::kNumLevels; lvl++) { |
| 1514 | const std::vector<FileMetaData*>& files = input_version_->files_[lvl]; |
| 1515 | while (level_ptrs_[lvl] < files.size()) { |
| 1516 | FileMetaData* f = files[level_ptrs_[lvl]]; |
| 1517 | if (user_cmp->Compare(user_key, f->largest.user_key()) <= 0) { |
| 1518 | // We've advanced far enough |
| 1519 | if (user_cmp->Compare(user_key, f->smallest.user_key()) >= 0) { |
| 1520 | // Key falls in this file's range, so definitely not base level |
| 1521 | return false; |
| 1522 | } |
| 1523 | break; |
| 1524 | } |
| 1525 | level_ptrs_[lvl]++; |
| 1526 | } |
| 1527 | } |
| 1528 | return true; |
| 1529 | } |
| 1530 | |
| 1531 | bool Compaction::ShouldStopBefore(const Slice& internal_key) { |
| 1532 | const VersionSet* vset = input_version_->vset_; |
no test coverage detected