mirror of https://github.com/facebook/rocksdb.git
Relax an assertion in Compaction::ShouldStopBefore
Summary: In some case, it is possible to have two concesutive SST files might sharing same boundary keys. However, in the assertion in Compaction::ShouldStopBefore, it exclude such possibility. This patch fix this issue by relaxing the assertion to allow the equal case. Test Plan: rocksdb tests Reviewers: IslamAbdelRahman, kradhakrishnan, sdong Reviewed By: sdong Subscribers: andrewkr, dhruba, leveldb Differential Revision: https://reviews.facebook.net/D55875
This commit is contained in:
parent
ae21d71e94
commit
13e6c8e97a
|
@ -104,13 +104,12 @@ struct CompactionJob::SubcompactionState {
|
||||||
uint64_t num_output_records;
|
uint64_t num_output_records;
|
||||||
CompactionJobStats compaction_job_stats;
|
CompactionJobStats compaction_job_stats;
|
||||||
uint64_t approx_size;
|
uint64_t approx_size;
|
||||||
// An index that used to speed up Compaction::ShouldStopBefore().
|
// An index that used to speed up ShouldStopBefore().
|
||||||
size_t grandparent_index = 0;
|
size_t grandparent_index = 0;
|
||||||
// The number of bytes overlapping between the current output and
|
// The number of bytes overlapping between the current output and
|
||||||
// grandparent files used in Compaction::ShouldStopBefore().
|
// grandparent files used in ShouldStopBefore().
|
||||||
uint64_t overlapped_bytes = 0;
|
uint64_t overlapped_bytes = 0;
|
||||||
// A flag determine whether the key has been seen in
|
// A flag determine whether the key has been seen in ShouldStopBefore()
|
||||||
// Compaction::ShouldStopBefore()
|
|
||||||
bool seen_key = false;
|
bool seen_key = false;
|
||||||
|
|
||||||
SubcompactionState(Compaction* c, Slice* _start, Slice* _end,
|
SubcompactionState(Compaction* c, Slice* _start, Slice* _end,
|
||||||
|
@ -174,7 +173,7 @@ struct CompactionJob::SubcompactionState {
|
||||||
assert(grandparent_index + 1 >= grandparents.size() ||
|
assert(grandparent_index + 1 >= grandparents.size() ||
|
||||||
icmp->Compare(
|
icmp->Compare(
|
||||||
grandparents[grandparent_index]->largest.Encode(),
|
grandparents[grandparent_index]->largest.Encode(),
|
||||||
grandparents[grandparent_index + 1]->smallest.Encode()) < 0);
|
grandparents[grandparent_index + 1]->smallest.Encode()) <= 0);
|
||||||
grandparent_index++;
|
grandparent_index++;
|
||||||
}
|
}
|
||||||
seen_key = true;
|
seen_key = true;
|
||||||
|
|
Loading…
Reference in New Issue