Skip to content

Commit 972fd9a

Browse files
cbi42facebook-github-bot
authored andcommitted
Remove expect_valid_internal_key parameter from CompactionIterator (facebook#13882)
Summary: Pull Request resolved: facebook#13882 The `expect_valid_internal_key` parameter was always passed as true, with false only used in one unit test. This change removes the parameter and always fail compaction when encountering corrupted internal keys, which is the expected production behavior. Reviewed By: mszeszko-meta Differential Revision: D80287672 fbshipit-source-id: e30a282ac30d7fded677504cec11173de8d15167
1 parent 1369c7b commit 972fd9a

6 files changed

Lines changed: 17 additions & 36 deletions

File tree

db/builder.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,7 @@ Status BuildTable(
201201
CompactionIterator c_iter(
202202
iter, ucmp, &merge, kMaxSequenceNumber, &snapshots, earliest_snapshot,
203203
earliest_write_conflict_snapshot, job_snapshot, snapshot_checker, env,
204-
ShouldReportDetailedTime(env, ioptions.stats),
205-
true /* internal key corruption is not ok */, range_del_agg.get(),
204+
ShouldReportDetailedTime(env, ioptions.stats), range_del_agg.get(),
206205
blob_file_builder.get(), ioptions.allow_data_in_errors,
207206
ioptions.enforce_single_del_contracts,
208207
/*manual_compaction_canceled=*/kManualCompactionCanceledFalse,

db/compaction/compaction_iterator.cc

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ CompactionIterator::CompactionIterator(
2828
SequenceNumber earliest_snapshot,
2929
SequenceNumber earliest_write_conflict_snapshot,
3030
SequenceNumber job_snapshot, const SnapshotChecker* snapshot_checker,
31-
Env* env, bool report_detailed_time, bool expect_valid_internal_key,
31+
Env* env, bool report_detailed_time,
3232
CompactionRangeDelAggregator* range_del_agg,
3333
BlobFileBuilder* blob_file_builder, bool allow_data_in_errors,
3434
bool enforce_single_del_contracts,
@@ -42,8 +42,8 @@ CompactionIterator::CompactionIterator(
4242
: CompactionIterator(
4343
input, cmp, merge_helper, last_sequence, snapshots, earliest_snapshot,
4444
earliest_write_conflict_snapshot, job_snapshot, snapshot_checker, env,
45-
report_detailed_time, expect_valid_internal_key, range_del_agg,
46-
blob_file_builder, allow_data_in_errors, enforce_single_del_contracts,
45+
report_detailed_time, range_del_agg, blob_file_builder,
46+
allow_data_in_errors, enforce_single_del_contracts,
4747
manual_compaction_canceled,
4848
compaction ? std::make_unique<RealCompaction>(compaction) : nullptr,
4949
must_count_input_entries, compaction_filter, shutting_down, info_log,
@@ -55,7 +55,7 @@ CompactionIterator::CompactionIterator(
5555
SequenceNumber earliest_snapshot,
5656
SequenceNumber earliest_write_conflict_snapshot,
5757
SequenceNumber job_snapshot, const SnapshotChecker* snapshot_checker,
58-
Env* env, bool report_detailed_time, bool expect_valid_internal_key,
58+
Env* env, bool report_detailed_time,
5959
CompactionRangeDelAggregator* range_del_agg,
6060
BlobFileBuilder* blob_file_builder, bool allow_data_in_errors,
6161
bool enforce_single_del_contracts,
@@ -76,7 +76,6 @@ CompactionIterator::CompactionIterator(
7676
env_(env),
7777
clock_(env_->GetSystemClock().get()),
7878
report_detailed_time_(report_detailed_time),
79-
expect_valid_internal_key_(expect_valid_internal_key),
8079
range_del_agg_(range_del_agg),
8180
blob_file_builder_(blob_file_builder),
8281
compaction_(std::move(compaction)),
@@ -464,18 +463,9 @@ void CompactionIterator::NextFromInput() {
464463
if (!pik_status.ok()) {
465464
iter_stats_.num_input_corrupt_records++;
466465

467-
// If `expect_valid_internal_key_` is false, return the corrupted key
468-
// and let the caller decide what to do with it.
469-
if (expect_valid_internal_key_) {
470-
status_ = pik_status;
471-
return;
472-
}
473-
key_ = current_key_.SetInternalKey(key_);
474-
has_current_user_key_ = false;
475-
current_user_key_sequence_ = kMaxSequenceNumber;
476-
current_user_key_snapshot_ = 0;
477-
validity_info_.SetValid(ValidContext::kParseKeyError);
478-
break;
466+
// Always fail compaction when encountering corrupted internal keys
467+
status_ = pik_status;
468+
return;
479469
}
480470
TEST_SYNC_POINT_CALLBACK("CompactionIterator:ProcessKV", &ikey_);
481471
if (is_range_del_) {

db/compaction/compaction_iterator.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ class CompactionIterator {
193193
SequenceNumber earliest_snapshot,
194194
SequenceNumber earliest_write_conflict_snapshot,
195195
SequenceNumber job_snapshot, const SnapshotChecker* snapshot_checker,
196-
Env* env, bool report_detailed_time, bool expect_valid_internal_key,
196+
Env* env, bool report_detailed_time,
197197
CompactionRangeDelAggregator* range_del_agg,
198198
BlobFileBuilder* blob_file_builder, bool allow_data_in_errors,
199199
bool enforce_single_del_contracts,
@@ -213,7 +213,7 @@ class CompactionIterator {
213213
SequenceNumber earliest_write_conflict_snapshot,
214214
SequenceNumber job_snapshot,
215215
const SnapshotChecker* snapshot_checker, Env* env,
216-
bool report_detailed_time, bool expect_valid_internal_key,
216+
bool report_detailed_time,
217217
CompactionRangeDelAggregator* range_del_agg,
218218
BlobFileBuilder* blob_file_builder,
219219
bool allow_data_in_errors,
@@ -348,7 +348,6 @@ class CompactionIterator {
348348
Env* env_;
349349
SystemClock* clock_;
350350
const bool report_detailed_time_;
351-
const bool expect_valid_internal_key_;
352351
CompactionRangeDelAggregator* range_del_agg_;
353352
BlobFileBuilder* blob_file_builder_;
354353
std::unique_ptr<CompactionProxy> compaction_;

db/compaction/compaction_iterator_test.cc

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ class CompactionIteratorTest : public testing::TestWithParam<bool> {
294294
snapshots_.empty() ? kMaxSequenceNumber : snapshots_.at(0),
295295
earliest_write_conflict_snapshot, kMaxSequenceNumber,
296296
snapshot_checker_.get(), Env::Default(),
297-
false /* report_detailed_time */, false, range_del_agg_.get(),
297+
false /* report_detailed_time */, range_del_agg_.get(),
298298
nullptr /* blob_file_builder */, true /*allow_data_in_errors*/,
299299
true /*enforce_single_del_contracts*/,
300300
/*manual_compaction_canceled=*/kManualCompactionCanceledFalse_,
@@ -374,8 +374,7 @@ TEST_P(CompactionIteratorTest, EmptyResult) {
374374
ASSERT_FALSE(c_iter_->Valid());
375375
}
376376

377-
// If there is a corruption after a single deletion, the corrupted key should
378-
// be preserved.
377+
// If there is a corruption after a single deletion, the compaction should fail.
379378
TEST_P(CompactionIteratorTest, CorruptionAfterSingleDeletion) {
380379
InitIterators({test::KeyStr("a", 5, kTypeSingleDeletion),
381380
test::KeyStr("a", 3, kTypeValue, true),
@@ -386,14 +385,10 @@ TEST_P(CompactionIteratorTest, CorruptionAfterSingleDeletion) {
386385
ASSERT_EQ(test::KeyStr("a", 5, kTypeSingleDeletion),
387386
c_iter_->key().ToString());
388387
c_iter_->Next();
389-
ASSERT_TRUE(c_iter_->Valid());
390-
ASSERT_EQ(test::KeyStr("a", 3, kTypeValue, true), c_iter_->key().ToString());
391-
c_iter_->Next();
392-
ASSERT_TRUE(c_iter_->Valid());
393-
ASSERT_EQ(test::KeyStr("b", 10, kTypeValue), c_iter_->key().ToString());
394-
c_iter_->Next();
395-
ASSERT_OK(c_iter_->status());
388+
// The iterator should now fail when encountering the corrupted key
396389
ASSERT_FALSE(c_iter_->Valid());
390+
ASSERT_FALSE(c_iter_->status().ok());
391+
ASSERT_TRUE(c_iter_->status().IsCorruption());
397392
}
398393

399394
// Tests compatibility of TimedPut and SingleDelete. TimedPut should act as if

db/compaction/compaction_job.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1410,8 +1410,7 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
14101410
&(job_context_->snapshot_seqs), earliest_snapshot_,
14111411
job_context_->earliest_write_conflict_snapshot, job_snapshot_seq,
14121412
job_context_->snapshot_checker, env_,
1413-
ShouldReportDetailedTime(env_, stats_),
1414-
/*expect_valid_internal_key=*/true, sub_compact->RangeDelAgg(),
1413+
ShouldReportDetailedTime(env_, stats_), sub_compact->RangeDelAgg(),
14151414
blob_file_builder.get(), db_options_.allow_data_in_errors,
14161415
db_options_.enforce_single_del_contracts, manual_compaction_canceled_,
14171416
sub_compact->compaction

db/flush_job.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -502,8 +502,7 @@ Status FlushJob::MemPurge() {
502502
kMaxSequenceNumber, &job_context_->snapshot_seqs, earliest_snapshot_,
503503
job_context_->earliest_write_conflict_snapshot,
504504
job_context_->GetJobSnapshotSequence(), job_context_->snapshot_checker,
505-
env, ShouldReportDetailedTime(env, ioptions.stats),
506-
true /* internal key corruption is not ok */, range_del_agg.get(),
505+
env, ShouldReportDetailedTime(env, ioptions.stats), range_del_agg.get(),
507506
nullptr, ioptions.allow_data_in_errors,
508507
ioptions.enforce_single_del_contracts,
509508
/*manual_compaction_canceled=*/kManualCompactionCanceledFalse,

0 commit comments

Comments
 (0)