| 3056 | } |
| 3057 | |
| 3058 | bool Compaction::IsBaseLevelForKey(const Slice& user_key) { |
| 3059 | // Maybe use binary search to find right entry instead of linear search? |
| 3060 | const Comparator* user_cmp = input_version_->vset_->icmp_.user_comparator(); |
| 3061 | for (int lvl = output_level_ + 1; lvl < config::kNumLevels; lvl++) { |
| 3062 | const std::vector<FileMetaData*>& files = input_version_->files_[lvl]; |
| 3063 | for (; level_ptrs_[lvl] < files.size();) { |
| 3064 | FileMetaData* f = files[level_ptrs_[lvl]]; |
| 3065 | if (user_cmp->Compare(user_key, f->largest.user_key()) <= 0) { |
| 3066 | // We've advanced far enough |
| 3067 | if (user_cmp->Compare(user_key, f->smallest.user_key()) >= 0) { |
| 3068 | // Key falls in this file's range, so definitely not base level |
| 3069 | return false; |
| 3070 | } |
| 3071 | break; |
| 3072 | } |
| 3073 | level_ptrs_[lvl]++; |
| 3074 | } |
| 3075 | } |
| 3076 | return true; |
| 3077 | } |
| 3078 | |
| 3079 | bool Compaction::ShouldStopBefore(const Slice& internal_key) { |
| 3080 | // Scan to find earliest grandparent file that contains key. |
no test coverage detected