diff --git a/db/corruption_test.cc b/db/corruption_test.cc index 3fd85953d..4add9b26a 100644 --- a/db/corruption_test.cc +++ b/db/corruption_test.cc @@ -369,6 +369,13 @@ TEST_F(CorruptionTest, VerifyChecksumReadahead) { ASSERT_GE(senv.random_read_counter_.Read(), 213); ASSERT_LE(senv.random_read_counter_.Read(), 447); + // Test readahead shouldn't break mmap mode (where it should be + // disabled). + options.allow_mmap_reads = true; + Reopen(&options); + dbi = static_cast(db_); + ASSERT_OK(dbi->VerifyChecksum(ro)); + CloseDb(); } diff --git a/table/block_based/block_based_table_reader.cc b/table/block_based/block_based_table_reader.cc index 27e1d6cf2..0189df36c 100644 --- a/table/block_based/block_based_table_reader.cc +++ b/table/block_based/block_based_table_reader.cc @@ -3781,8 +3781,12 @@ Status BlockBasedTable::VerifyChecksumInBlocks( size_t readahead_size = (read_options.readahead_size != 0) ? read_options.readahead_size : kMaxAutoReadaheadSize; - FilePrefetchBuffer prefetch_buffer(rep_->file.get(), readahead_size, - readahead_size); + // FilePrefetchBuffer doesn't work in mmap mode and readahead is not + // needed there. + FilePrefetchBuffer prefetch_buffer( + rep_->file.get(), readahead_size /* readadhead_size */, + readahead_size /* max_readahead_size */, + !rep_->ioptions.allow_mmap_reads /* enable */); for (index_iter->SeekToFirst(); index_iter->Valid(); index_iter->Next()) { s = index_iter->status();