@nxtedition/rocksdb 14.0.0 → 15.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/binding.cc +52 -179
  2. package/deps/rocksdb/rocksdb/BUCK +7 -0
  3. package/deps/rocksdb/rocksdb/CMakeLists.txt +29 -14
  4. package/deps/rocksdb/rocksdb/Directory.Build.props +9 -0
  5. package/deps/rocksdb/rocksdb/Makefile +6 -1
  6. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +4 -4
  7. package/deps/rocksdb/rocksdb/ccache_msvc_compiler.bat +1 -0
  8. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +17 -3
  9. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +8 -3
  10. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +10 -0
  11. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +522 -60
  12. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +69 -10
  13. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +443 -0
  14. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +4 -2
  15. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -3
  16. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +5 -5
  17. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -6
  18. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
  19. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +28 -5
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +4 -4
  21. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +6 -3
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +455 -98
  23. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +4 -2
  24. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +13 -1
  25. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +146 -0
  26. package/deps/rocksdb/rocksdb/db/db_follower_test.cc +2 -2
  27. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +6 -0
  28. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +5 -2
  29. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +18 -19
  30. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
  31. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +665 -14
  32. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +83 -0
  33. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +68 -0
  34. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +101 -0
  35. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +44 -0
  36. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +1 -2
  37. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +22 -5
  38. package/deps/rocksdb/rocksdb/db/log_reader.h +4 -4
  39. package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
  40. package/deps/rocksdb/rocksdb/db/merge_helper.h +1 -1
  41. package/deps/rocksdb/rocksdb/db/version_edit.cc +477 -139
  42. package/deps/rocksdb/rocksdb/db/version_edit.h +228 -8
  43. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +333 -0
  44. package/deps/rocksdb/rocksdb/db/write_thread.h +1 -1
  45. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  46. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +247 -32
  47. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +3 -0
  48. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.cc +61 -0
  49. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +17 -28
  50. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +16 -0
  51. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +6 -1
  52. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +46 -18
  53. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +18 -1
  54. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +8 -7
  55. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +4 -4
  56. package/deps/rocksdb/rocksdb/env/fs_posix.cc +1 -0
  57. package/deps/rocksdb/rocksdb/file/filename.cc +40 -0
  58. package/deps/rocksdb/rocksdb/file/filename.h +14 -1
  59. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +4 -3
  60. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +2 -1
  61. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +26 -7
  62. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +5 -3
  63. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +59 -0
  64. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
  65. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +24 -0
  66. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +2 -1
  67. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +4 -0
  68. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +13 -8
  69. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -0
  70. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +2 -0
  71. package/deps/rocksdb/rocksdb/options/options_test.cc +5 -0
  72. package/deps/rocksdb/rocksdb/src.mk +2 -0
  73. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +73 -16
  74. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +10 -5
  75. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +32 -0
  76. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +18 -27
  77. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +0 -3
  78. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +5 -1
  79. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +708 -217
  80. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +11 -6
  81. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +5 -3
  82. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +27 -19
  83. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +24 -6
  84. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +51 -18
  85. package/deps/rocksdb/rocksdb/table/block_based/index_builder_test.cc +183 -0
  86. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +4 -2
  87. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +0 -2
  88. package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +8 -3
  89. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -1
  90. package/deps/rocksdb/rocksdb/table/table_test.cc +222 -36
  91. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +246 -6
  92. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +86 -0
  93. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +21 -0
  94. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  95. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -1
  96. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -0
  97. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +0 -2
  98. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +12 -12
  99. package/index.js +27 -37
  100. package/package.json +1 -1
  101. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  102. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
@@ -3561,6 +3561,152 @@ TEST_F(DBFlushTest, VerifyOutputRecordCount) {
3561
3561
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
3562
3562
  }
3563
3563
  }
3564
+
3565
+ class DBFlushSuperBlockTest
3566
+ : public DBFlushTest,
3567
+ public ::testing::WithParamInterface<std::tuple<bool, size_t, size_t>> {
3568
+ public:
3569
+ DBFlushSuperBlockTest() : DBFlushTest() {}
3570
+
3571
+ std::string formatKey(int i) {
3572
+ int desired_length = 10;
3573
+ char buffer[64];
3574
+ snprintf(buffer, 64, "%0*d", desired_length, i);
3575
+ return buffer;
3576
+ }
3577
+
3578
+ void VerifyReadWithGet(int key_count) {
3579
+ for (int i = 0; i < key_count; ++i) {
3580
+ PinnableSlice value;
3581
+ ASSERT_OK(Get(formatKey(i), &value));
3582
+ ASSERT_EQ(value.ToString(), added_data[formatKey(i)]);
3583
+ }
3584
+ }
3585
+
3586
+ void VerifyReadWithIterator(int key_count) {
3587
+ {
3588
+ std::unique_ptr<Iterator> it(db_->NewIterator(ReadOptions()));
3589
+ int i = 0;
3590
+ for (it->SeekToFirst(); it->Valid(); it->Next()) {
3591
+ ASSERT_OK(it->status());
3592
+ ASSERT_EQ((it->key()).ToString(), formatKey(i));
3593
+ ASSERT_EQ((it->value()).ToString(), added_data[formatKey(i)]);
3594
+ i++;
3595
+ }
3596
+ ASSERT_OK(it->status());
3597
+ ASSERT_EQ(i, key_count);
3598
+ }
3599
+ }
3600
+
3601
+ protected:
3602
+ Random rnd{123};
3603
+ std::unordered_map<std::string, std::string> added_data;
3604
+ };
3605
+
3606
+ constexpr size_t kLowSpaceOverheadRatio = 256;
3607
+
3608
+ TEST_P(DBFlushSuperBlockTest, SuperBlock) {
3609
+ constexpr int key_count = 12345;
3610
+ Options options;
3611
+ options.env = env_;
3612
+ options.file_checksum_gen_factory = GetFileChecksumGenCrc32cFactory();
3613
+ options.paranoid_file_checks = true;
3614
+ options.write_buffer_size = 1024 * 1024;
3615
+ BlockBasedTableOptions block_options;
3616
+ block_options.block_align = get<0>(GetParam());
3617
+ block_options.index_block_restart_interval = 3;
3618
+ block_options.super_block_alignment_size = get<1>(GetParam());
3619
+ block_options.super_block_alignment_space_overhead_ratio = get<2>(GetParam());
3620
+ options.table_factory.reset(NewBlockBasedTableFactory(block_options));
3621
+ if (block_options.block_align) {
3622
+ // When block align is enabled, disable compression
3623
+ options.compression = kNoCompression;
3624
+ }
3625
+
3626
+ ASSERT_OK(options.table_factory->ValidateOptions(
3627
+ DBOptions(options), ColumnFamilyOptions(options)));
3628
+
3629
+ Reopen(options);
3630
+
3631
+ int super_block_pad_count = 0;
3632
+ int super_block_pad_exceed_limit_count = 0;
3633
+ SyncPoint::GetInstance()->SetCallBack(
3634
+ "BlockBasedTableBuilder::WriteMaybeCompressedBlock:"
3635
+ "SuperBlockAlignment",
3636
+ [&super_block_pad_count](void* /*arg*/) { super_block_pad_count++; });
3637
+ SyncPoint::GetInstance()->SetCallBack(
3638
+ "BlockBasedTableBuilder::WriteMaybeCompressedBlock:"
3639
+ "SuperBlockAlignmentPaddingBytesExceedLimit",
3640
+ [&super_block_pad_exceed_limit_count](void* /*arg*/) {
3641
+ super_block_pad_exceed_limit_count++;
3642
+ });
3643
+ SyncPoint::GetInstance()->EnableProcessing();
3644
+
3645
+ // Add lots of keys
3646
+ for (int i = 0; i < key_count; ++i) {
3647
+ added_data[formatKey(i)] = std::string(rnd.RandomString(rnd.Next() % 1000));
3648
+ ASSERT_OK(Put(formatKey(i), added_data[formatKey(i)]));
3649
+ }
3650
+
3651
+ // flush the data in memory to disk to verify with super block alignment, the
3652
+ // data could be read back properly
3653
+ Reopen(options);
3654
+
3655
+ SyncPoint::GetInstance()->DisableProcessing();
3656
+ SyncPoint::GetInstance()->ClearAllCallBacks();
3657
+
3658
+ // When block_align is enabled, super block is always aligned, so there should
3659
+ // be 0 padding for super block alignment
3660
+ if (block_options.super_block_alignment_size != 0 &&
3661
+ !block_options.block_align) {
3662
+ ASSERT_GT(super_block_pad_count, 0);
3663
+ } else {
3664
+ ASSERT_EQ(super_block_pad_count, 0);
3665
+ }
3666
+
3667
+ if (!block_options.block_align &&
3668
+ block_options.super_block_alignment_size != 0 &&
3669
+ block_options.super_block_alignment_space_overhead_ratio ==
3670
+ kLowSpaceOverheadRatio) {
3671
+ ASSERT_GT(super_block_pad_exceed_limit_count, 0);
3672
+ }
3673
+
3674
+ // verify the values are correct
3675
+ VerifyReadWithGet(key_count);
3676
+ Reopen(options);
3677
+ VerifyReadWithIterator(key_count);
3678
+
3679
+ // verify checksum
3680
+ ASSERT_OK(db_->VerifyFileChecksums(ReadOptions()));
3681
+
3682
+ // Reopen options and flip the option of super block configuration, read still
3683
+ // works. This verifies the forward/backward compatibility
3684
+ if (block_options.super_block_alignment_size == 0) {
3685
+ block_options.super_block_alignment_size = 16 * 1024;
3686
+ } else {
3687
+ block_options.super_block_alignment_size = 0;
3688
+ }
3689
+ options.table_factory.reset(NewBlockBasedTableFactory(block_options));
3690
+
3691
+ Reopen(options);
3692
+
3693
+ // verify the values are correct
3694
+ VerifyReadWithGet(key_count);
3695
+ Reopen(options);
3696
+ VerifyReadWithIterator(key_count);
3697
+
3698
+ // verify checksum
3699
+ ASSERT_OK(db_->VerifyFileChecksums(ReadOptions()));
3700
+ }
3701
+
3702
+ INSTANTIATE_TEST_CASE_P(
3703
+ SuperBlockTests, DBFlushSuperBlockTest,
3704
+ testing::Combine(testing::Bool(), testing::Values(0, 32 * 1024, 16 * 1024),
3705
+ // Use very low space overhead ratio to test
3706
+ // the case where required padded bytes is
3707
+ // larger than the max allowed padding size
3708
+ testing::Values(4, kLowSpaceOverheadRatio)));
3709
+
3564
3710
  } // namespace ROCKSDB_NAMESPACE
3565
3711
 
3566
3712
  int main(int argc, char** argv) {
@@ -370,10 +370,10 @@ TEST_F(DBFollowerTest, RetryCatchupManifestRollover) {
370
370
 
371
371
  // This test creates 4 L0 files and compacts them. The follower, during catchup,
372
372
  // successfully instantiates 4 Versions corresponding to the 4 files (but
373
- // donesn't install them yet), followed by deleting those 4 and adding a new
373
+ // doesn't install them yet), followed by deleting those 4 and adding a new
374
374
  // file from compaction. The test verifies that the 4 L0 files are deleted
375
375
  // correctly by the follower.
376
- // We use teh Barrier* functions to ensure that the follower first sees the 4
376
+ // We use the Barrier* functions to ensure that the follower first sees the 4
377
377
  // L0 files and is able to link them, and then sees the compaction that
378
378
  // obsoletes those L0 files (so those L0 files are intermediates that it has
379
379
  // to explicitly delete). Suppose we don't have any barriers, its possible
@@ -1480,6 +1480,12 @@ int DBImpl::FindMinimumEmptyLevelFitting(
1480
1480
  return minimum_level;
1481
1481
  }
1482
1482
 
1483
+ Status DBImpl::FlushWAL(const FlushWALOptions& options) {
1484
+ WriteOptions write_options;
1485
+ write_options.rate_limiter_priority = options.rate_limiter_priority;
1486
+ return FlushWAL(write_options, options.sync);
1487
+ }
1488
+
1483
1489
  Status DBImpl::FlushWAL(const WriteOptions& write_options, bool sync) {
1484
1490
  if (manual_wal_flush_) {
1485
1491
  IOStatus io_s;
@@ -484,10 +484,13 @@ class DBImpl : public DB {
484
484
  const FlushOptions& options,
485
485
  const std::vector<ColumnFamilyHandle*>& column_families) override;
486
486
  Status FlushWAL(bool sync) override {
487
- // TODO: plumb Env::IOActivity, Env::IOPriority
488
- return FlushWAL(WriteOptions(), sync);
487
+ FlushWALOptions options;
488
+ options.sync = sync;
489
+ return FlushWAL(options);
489
490
  }
490
491
 
492
+ Status FlushWAL(const FlushWALOptions& options) override;
493
+
491
494
  virtual Status FlushWAL(const WriteOptions& write_options, bool sync);
492
495
  bool WALBufferIsEmpty();
493
496
  Status SyncWAL() override;
@@ -1843,8 +1843,7 @@ Status DBImpl::ReFitLevel(ColumnFamilyData* cfd, int level, int target_level) {
1843
1843
  ,
1844
1844
  LLONG_MAX /* max compaction bytes, not applicable */,
1845
1845
  0 /* output path ID, not applicable */, mutable_cf_options.compression,
1846
- mutable_cf_options.compression_opts,
1847
- mutable_cf_options.default_write_temperature,
1846
+ mutable_cf_options.compression_opts, Temperature::kUnknown,
1848
1847
  0 /* max_subcompactions, not applicable */,
1849
1848
  {} /* grandparents, not applicable */,
1850
1849
  std::nullopt /* earliest_snapshot */, nullptr /* snapshot_checker */,
@@ -3861,7 +3860,7 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
3861
3860
  uint64_t out_file_creation_time = static_cast<uint64_t>(tmp_current_time);
3862
3861
 
3863
3862
  FileOptions copied_file_options = file_options_;
3864
- copied_file_options.temperature = c->output_temperature();
3863
+ copied_file_options.temperature = c->GetOutputTemperature();
3865
3864
  std::unique_ptr<WritableFileWriter> dest_writer;
3866
3865
  {
3867
3866
  std::unique_ptr<FSWritableFile> dest_file;
@@ -3879,7 +3878,7 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
3879
3878
  "NewWritableFile %s\n"
3880
3879
  " out_fname=%s, temperature=%s, io_status=%s",
3881
3880
  c->column_family_data()->GetName().c_str(), out_fname.c_str(),
3882
- temperature_to_string[c->output_temperature()].c_str(),
3881
+ temperature_to_string[c->GetOutputTemperature()].c_str(),
3883
3882
  io_s.ToString().c_str());
3884
3883
  break;
3885
3884
  }
@@ -3901,7 +3900,7 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
3901
3900
  c->column_family_data()->GetName().c_str(), in_fname.c_str(),
3902
3901
  temperature_to_string[in_file->temperature].c_str(),
3903
3902
  out_fname.c_str(),
3904
- temperature_to_string[c->output_temperature()].c_str(),
3903
+ temperature_to_string[c->GetOutputTemperature()].c_str(),
3905
3904
  c->mutable_cf_options()
3906
3905
  .compaction_options_fifo.trivial_copy_buffer_size);
3907
3906
  // Add IO_LOW HINT for compaction
@@ -3941,7 +3940,7 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
3941
3940
  c->column_family_data()->GetName().c_str(), in_fname.c_str(),
3942
3941
  temperature_to_string[in_file->temperature].c_str(),
3943
3942
  out_fname.c_str(),
3944
- temperature_to_string[c->output_temperature()].c_str(),
3943
+ temperature_to_string[c->GetOutputTemperature()].c_str(),
3945
3944
  io_s.ToString().c_str());
3946
3945
  break;
3947
3946
  }
@@ -3950,15 +3949,15 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
3950
3949
  io_s = copy_file_io_status;
3951
3950
 
3952
3951
  if (!io_s.ok()) {
3953
- ROCKS_LOG_BUFFER(log_buffer,
3954
- "[%s] Failed to copy from: %s\n"
3955
- " temperature=%s, to=%s, temperature=%s, io_status=%s",
3956
- c->column_family_data()->GetName().c_str(),
3957
- in_fname.c_str(),
3958
- temperature_to_string[in_file->temperature].c_str(),
3959
- out_fname.c_str(),
3960
- temperature_to_string[c->output_temperature()].c_str(),
3961
- io_s.ToString().c_str());
3952
+ ROCKS_LOG_BUFFER(
3953
+ log_buffer,
3954
+ "[%s] Failed to copy from: %s\n"
3955
+ " temperature=%s, to=%s, temperature=%s, io_status=%s",
3956
+ c->column_family_data()->GetName().c_str(), in_fname.c_str(),
3957
+ temperature_to_string[in_file->temperature].c_str(),
3958
+ out_fname.c_str(),
3959
+ temperature_to_string[c->GetOutputTemperature()].c_str(),
3960
+ io_s.ToString().c_str());
3962
3961
  break;
3963
3962
  }
3964
3963
  ROCKS_LOG_BUFFER(log_buffer,
@@ -3968,7 +3967,7 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
3968
3967
  in_fname.c_str(),
3969
3968
  temperature_to_string[in_file->temperature].c_str(),
3970
3969
  out_fname.c_str(),
3971
- temperature_to_string[c->output_temperature()].c_str(),
3970
+ temperature_to_string[c->GetOutputTemperature()].c_str(),
3972
3971
  io_s.ToString().c_str());
3973
3972
 
3974
3973
  FileMetaData out_file_metadata{
@@ -3980,7 +3979,7 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
3980
3979
  in_file->fd.smallest_seqno,
3981
3980
  in_file->fd.largest_seqno,
3982
3981
  false /* marked_for_compact */,
3983
- c->output_temperature() /* temperature */,
3982
+ c->GetOutputTemperature() /* temperature */,
3984
3983
  in_file->oldest_blob_file_number,
3985
3984
  in_file->oldest_ancester_time,
3986
3985
  out_file_creation_time,
@@ -4049,7 +4048,7 @@ Status DBImpl::BackgroundCompaction(bool* made_progress,
4049
4048
  " temperature=%s, to temperature=%s, status=%s, io_status=%s",
4050
4049
  c->column_family_data()->GetName().c_str(), in_fname.c_str(),
4051
4050
  temperature_to_string[in_file->temperature].c_str(),
4052
- temperature_to_string[c->output_temperature()].c_str(),
4051
+ temperature_to_string[c->GetOutputTemperature()].c_str(),
4053
4052
  status.ToString().c_str(), io_s.ToString().c_str());
4054
4053
  }
4055
4054
  }
@@ -4428,7 +4427,7 @@ Compaction* DBImpl::CreateIntendedCompactionForwardedToBottomPriorityPool(
4428
4427
  c->output_level(), c->target_output_file_size(),
4429
4428
  c->max_compaction_bytes(), c->output_path_id(),
4430
4429
  c->output_compression(), c->output_compression_opts(),
4431
- c->output_temperature(), c->max_subcompactions(),
4430
+ c->GetOutputTemperature(), c->max_subcompactions(),
4432
4431
  c->grandparents(), std::nullopt /* earliest_snapshot */,
4433
4432
  nullptr /* snapshot_checker */, c->compaction_reason());
4434
4433
 
@@ -614,6 +614,11 @@ void DBImpl::PurgeObsoleteFiles(JobContext& state, bool schedule_only) {
614
614
  case kOptionsFile:
615
615
  keep = (number >= optsfile_num2);
616
616
  break;
617
+ case kCompactionProgressFile:
618
+ // Keep compaction progress files - they are managed
619
+ // separately by DBImplSecondary for now
620
+ keep = true;
621
+ break;
617
622
  case kCurrentFile:
618
623
  case kDBLockFile:
619
624
  case kIdentityFile: