mirror of https://github.com/facebook/rocksdb.git
Remove compact cursor when split sub-compactions (#10289)
Summary: In round-robin compaction priority, when splitting the compaction into sub-compactions, the earlier implementation takes into account the compact cursor to have full use of available sub-compactions. But this may result in unbalanced sub-compactions, so we remove this here. The removal does not affect the cursor-based splitting mechanism within a sub-compaction, and thus the output files are still ensured to be split according to the cursor. Pull Request resolved: https://github.com/facebook/rocksdb/pull/10289 Reviewed By: ajkr Differential Revision: D37559091 Pulled By: littlepig2013 fbshipit-source-id: b8b45b99f63b09cf873f7f049bcb4ab13871fffc
This commit is contained in:
parent
720ab355f9
commit
4f51101d31
|
@ -641,16 +641,6 @@ void CompactionJob::GenSubcompactionBoundaries() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Slice output_split_user_key;
|
|
||||||
const InternalKey output_split_key = c->GetOutputSplitKey();
|
|
||||||
if (output_split_key.Valid()) {
|
|
||||||
output_split_user_key = ExtractUserKey(output_split_key.Encode());
|
|
||||||
bounds.emplace_back(output_split_key.Encode());
|
|
||||||
} else {
|
|
||||||
// Empty user key indicates that splitting is not required here
|
|
||||||
output_split_user_key = Slice();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::sort(bounds.begin(), bounds.end(),
|
std::sort(bounds.begin(), bounds.end(),
|
||||||
[cfd_comparator](const Slice& a, const Slice& b) -> bool {
|
[cfd_comparator](const Slice& a, const Slice& b) -> bool {
|
||||||
return cfd_comparator->Compare(ExtractUserKey(a),
|
return cfd_comparator->Compare(ExtractUserKey(a),
|
||||||
|
@ -721,10 +711,7 @@ void CompactionJob::GenSubcompactionBoundaries() {
|
||||||
// need to put an end boundary
|
// need to put an end boundary
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (sum >= mean ||
|
if (sum >= mean) {
|
||||||
(!output_split_user_key.empty() &&
|
|
||||||
cfd_comparator->Compare(ExtractUserKey(ranges[i].range.limit),
|
|
||||||
output_split_user_key) == 0)) {
|
|
||||||
boundaries_.emplace_back(ExtractUserKey(ranges[i].range.limit));
|
boundaries_.emplace_back(ExtractUserKey(ranges[i].range.limit));
|
||||||
sizes_.emplace_back(sum);
|
sizes_.emplace_back(sum);
|
||||||
subcompactions--;
|
subcompactions--;
|
||||||
|
|
Loading…
Reference in New Issue