@nxtedition/rocksdb 8.0.4 → 8.0.5

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 (51) hide show
  1. package/BUILDING.md +2 -2
  2. package/binding.cc +7 -2
  3. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -0
  4. package/deps/rocksdb/rocksdb/Makefile +13 -1
  5. package/deps/rocksdb/rocksdb/db/builder.cc +13 -4
  6. package/deps/rocksdb/rocksdb/db/builder.h +2 -1
  7. package/deps/rocksdb/rocksdb/db/c.cc +6 -0
  8. package/deps/rocksdb/rocksdb/db/column_family.cc +1 -0
  9. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +18 -4
  10. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +2 -0
  11. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +2 -1
  12. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +22 -2
  13. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +5 -1
  14. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +14 -14
  15. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +1 -2
  16. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +2 -3
  17. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +225 -0
  18. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +8 -9
  19. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +0 -8
  20. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +63 -23
  21. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  22. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +12 -8
  23. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +115 -2
  24. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  25. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1 -0
  26. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +88 -12
  27. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +38 -1
  28. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +14 -110
  29. package/deps/rocksdb/rocksdb/db/flush_job.cc +2 -3
  30. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +1 -1
  31. package/deps/rocksdb/rocksdb/db/repair.cc +2 -1
  32. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +41 -39
  33. package/deps/rocksdb/rocksdb/db/version_edit.cc +12 -0
  34. package/deps/rocksdb/rocksdb/db/version_edit.h +18 -6
  35. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +9 -9
  36. package/deps/rocksdb/rocksdb/db/version_set.cc +12 -6
  37. package/deps/rocksdb/rocksdb/db/version_set_test.cc +23 -9
  38. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +1 -0
  39. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +4 -0
  40. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +5 -0
  41. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +4 -0
  42. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -1
  43. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +2 -1
  44. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +69 -9
  45. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +245 -74
  46. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +195 -4
  47. package/max_rev_operator.h +100 -0
  48. package/package.json +1 -1
  49. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  50. package/prebuilds/darwin-x64/node.napi.node +0 -0
  51. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -973,7 +973,7 @@ TEST_F(ExternalSSTFileTest, MultiThreaded) {
973
973
 
974
974
  do {
975
975
  Options options = CurrentOptions();
976
-
976
+ options.disable_auto_compactions = true;
977
977
  std::atomic<int> thread_num(0);
978
978
  std::function<void()> write_file_func = [&]() {
979
979
  int file_idx = thread_num.fetch_add(1);
@@ -1249,8 +1249,9 @@ TEST_P(ExternalSSTFileTest, PickedLevel) {
1249
1249
 
1250
1250
  // This file overlaps with file 0 (L3), file 1 (L2) and the
1251
1251
  // output of compaction going to L1
1252
- ASSERT_OK(GenerateAndAddExternalFile(options, {4, 7}, -1, false, false, true,
1253
- false, false, &true_data));
1252
+ ASSERT_OK(GenerateAndAddExternalFile(options, {4, 7}, -1,
1253
+ true /* allow_global_seqno */, false,
1254
+ true, false, false, &true_data));
1254
1255
  EXPECT_EQ(FilesPerLevel(), "5,0,1,1");
1255
1256
 
1256
1257
  // This file does not overlap with any file or with the running compaction
@@ -1270,106 +1271,6 @@ TEST_P(ExternalSSTFileTest, PickedLevel) {
1270
1271
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
1271
1272
  }
1272
1273
 
1273
- TEST_F(ExternalSSTFileTest, PickedLevelBug) {
1274
- env_->skip_fsync_ = true;
1275
- Options options = CurrentOptions();
1276
- options.disable_auto_compactions = false;
1277
- options.level0_file_num_compaction_trigger = 3;
1278
- options.num_levels = 2;
1279
- DestroyAndReopen(options);
1280
-
1281
- std::vector<int> file_keys;
1282
-
1283
- // file #1 in L0
1284
- file_keys = {0, 5, 7};
1285
- for (int k : file_keys) {
1286
- ASSERT_OK(Put(Key(k), Key(k)));
1287
- }
1288
- ASSERT_OK(Flush());
1289
-
1290
- // file #2 in L0
1291
- file_keys = {4, 6, 8, 9};
1292
- for (int k : file_keys) {
1293
- ASSERT_OK(Put(Key(k), Key(k)));
1294
- }
1295
- ASSERT_OK(Flush());
1296
-
1297
- // We have 2 overlapping files in L0
1298
- EXPECT_EQ(FilesPerLevel(), "2");
1299
-
1300
- ASSERT_OK(dbfull()->TEST_WaitForCompact());
1301
-
1302
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
1303
- {{"DBImpl::IngestExternalFile:AfterIncIngestFileCounter",
1304
- "ExternalSSTFileTest::PickedLevelBug:0"},
1305
- {"ExternalSSTFileTest::PickedLevelBug:1", "DBImpl::AddFile:MutexUnlock"},
1306
- {"ExternalSSTFileTest::PickedLevelBug:2",
1307
- "DBImpl::RunManualCompaction:0"},
1308
- {"ExternalSSTFileTest::PickedLevelBug:3",
1309
- "DBImpl::RunManualCompaction:1"}});
1310
-
1311
- std::atomic<bool> bg_compact_started(false);
1312
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
1313
- "DBImpl::BackgroundCompaction:Start",
1314
- [&](void* /*arg*/) { bg_compact_started.store(true); });
1315
-
1316
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
1317
-
1318
- Status bg_compact_status;
1319
- Status bg_addfile_status;
1320
-
1321
- {
1322
- // While writing the MANIFEST start a thread that will ask for compaction
1323
- ThreadGuard bg_compact(port::Thread([&]() {
1324
- bg_compact_status =
1325
- db_->CompactRange(CompactRangeOptions(), nullptr, nullptr);
1326
- }));
1327
- TEST_SYNC_POINT("ExternalSSTFileTest::PickedLevelBug:2");
1328
-
1329
- // Start a thread that will ingest a new file
1330
- ThreadGuard bg_addfile(port::Thread([&]() {
1331
- file_keys = {1, 2, 3};
1332
- bg_addfile_status = GenerateAndAddExternalFile(options, file_keys, 1);
1333
- }));
1334
-
1335
- // Wait for AddFile to start picking levels and writing MANIFEST
1336
- TEST_SYNC_POINT("ExternalSSTFileTest::PickedLevelBug:0");
1337
-
1338
- TEST_SYNC_POINT("ExternalSSTFileTest::PickedLevelBug:3");
1339
-
1340
- // We need to verify that no compactions can run while AddFile is
1341
- // ingesting the files into the levels it find suitable. So we will
1342
- // wait for 2 seconds to give a chance for compactions to run during
1343
- // this period, and then make sure that no compactions where able to run
1344
- env_->SleepForMicroseconds(1000000 * 2);
1345
- bool bg_compact_started_tmp = bg_compact_started.load();
1346
-
1347
- // Hold AddFile from finishing writing the MANIFEST
1348
- TEST_SYNC_POINT("ExternalSSTFileTest::PickedLevelBug:1");
1349
-
1350
- // check the status at the end, so even if the ASSERT fails the threads
1351
- // could be joined and return.
1352
- ASSERT_FALSE(bg_compact_started_tmp);
1353
- }
1354
-
1355
- ASSERT_OK(bg_addfile_status);
1356
- ASSERT_OK(bg_compact_status);
1357
-
1358
- ASSERT_OK(dbfull()->TEST_WaitForCompact());
1359
-
1360
- int total_keys = 0;
1361
- Iterator* iter = db_->NewIterator(ReadOptions());
1362
- for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
1363
- ASSERT_OK(iter->status());
1364
- total_keys++;
1365
- }
1366
- ASSERT_EQ(total_keys, 10);
1367
-
1368
- delete iter;
1369
-
1370
- ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
1371
- }
1372
-
1373
1274
  TEST_F(ExternalSSTFileTest, IngestNonExistingFile) {
1374
1275
  Options options = CurrentOptions();
1375
1276
  DestroyAndReopen(options);
@@ -1420,7 +1321,8 @@ TEST_F(ExternalSSTFileTest, CompactDuringAddFileRandom) {
1420
1321
  int range_id = 0;
1421
1322
  std::vector<int> file_keys;
1422
1323
  std::function<void()> bg_addfile = [&]() {
1423
- ASSERT_OK(GenerateAndAddExternalFile(options, file_keys, range_id));
1324
+ ASSERT_OK(GenerateAndAddExternalFile(options, file_keys, range_id,
1325
+ true /* allow_global_seqno */));
1424
1326
  };
1425
1327
 
1426
1328
  const int num_of_ranges = 1000;
@@ -1503,8 +1405,9 @@ TEST_F(ExternalSSTFileTest, PickedLevelDynamic) {
1503
1405
 
1504
1406
  // This file overlaps with the output of the compaction (going to L3)
1505
1407
  // so the file will be added to L0 since L3 is the base level
1506
- ASSERT_OK(GenerateAndAddExternalFile(options, {31, 32, 33, 34}, -1, false,
1507
- false, true, false, false, &true_data));
1408
+ ASSERT_OK(GenerateAndAddExternalFile(options, {31, 32, 33, 34}, -1,
1409
+ true /* allow_global_seqno */, false,
1410
+ true, false, false, &true_data));
1508
1411
  EXPECT_EQ(FilesPerLevel(), "5");
1509
1412
 
1510
1413
  // This file does not overlap with the current running compactiong
@@ -1642,14 +1545,15 @@ TEST_F(ExternalSSTFileTest, AddFileTrivialMoveBug) {
1642
1545
 
1643
1546
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
1644
1547
  "CompactionJob::Run():Start", [&](void* /*arg*/) {
1645
- // fit in L3 but will overlap with compaction so will be added
1646
- // to L2 but a compaction will trivially move it to L3
1647
- // and break LSM consistency
1548
+ // Fit in L3 but will overlap with the compaction output so will be
1549
+ // added to L2. Prior to the fix, a compaction will then trivially move
1550
+ // this file to L3 and break LSM consistency
1648
1551
  static std::atomic<bool> called = {false};
1649
1552
  if (!called) {
1650
1553
  called = true;
1651
1554
  ASSERT_OK(dbfull()->SetOptions({{"max_bytes_for_level_base", "1"}}));
1652
- ASSERT_OK(GenerateAndAddExternalFile(options, {15, 16}, 7));
1555
+ ASSERT_OK(GenerateAndAddExternalFile(options, {15, 16}, 7,
1556
+ true /* allow_global_seqno */));
1653
1557
  }
1654
1558
  });
1655
1559
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
@@ -941,7 +941,7 @@ Status FlushJob::WriteLevel0Table() {
941
941
  cfd_->internal_stats(), &io_s, io_tracer_,
942
942
  BlobFileCreationReason::kFlush, seqno_to_time_mapping_, event_logger_,
943
943
  job_context_->job_id, io_priority, &table_properties_, write_hint,
944
- full_history_ts_low, blob_callback_, &num_input_entries,
944
+ full_history_ts_low, blob_callback_, base_, &num_input_entries,
945
945
  &memtable_payload_bytes, &memtable_garbage_bytes);
946
946
  // TODO: Cleanup io_status in BuildTable and table builders
947
947
  assert(!s.ok() || io_s.ok());
@@ -1003,8 +1003,7 @@ Status FlushJob::WriteLevel0Table() {
1003
1003
  meta_.oldest_blob_file_number, meta_.oldest_ancester_time,
1004
1004
  meta_.file_creation_time, meta_.epoch_number,
1005
1005
  meta_.file_checksum, meta_.file_checksum_func_name,
1006
- meta_.unique_id);
1007
-
1006
+ meta_.unique_id, meta_.compensated_range_deletion_size);
1008
1007
  edit_->SetBlobFileAdditions(std::move(blob_file_additions));
1009
1008
  }
1010
1009
  #ifndef ROCKSDB_LITE
@@ -143,7 +143,7 @@ Status ImportColumnFamilyJob::Run() {
143
143
  file_metadata.smallest_seqno, file_metadata.largest_seqno, false,
144
144
  file_metadata.temperature, kInvalidBlobFileNumber, oldest_ancester_time,
145
145
  current_time, file_metadata.epoch_number, kUnknownFileChecksum,
146
- kUnknownFileChecksumFuncName, f.unique_id);
146
+ kUnknownFileChecksumFuncName, f.unique_id, 0);
147
147
  s = dummy_version_builder.Apply(&dummy_version_edit);
148
148
  }
149
149
  if (s.ok()) {
@@ -665,7 +665,8 @@ class Repairer {
665
665
  table->meta.temperature, table->meta.oldest_blob_file_number,
666
666
  table->meta.oldest_ancester_time, table->meta.file_creation_time,
667
667
  table->meta.epoch_number, table->meta.file_checksum,
668
- table->meta.file_checksum_func_name, table->meta.unique_id);
668
+ table->meta.file_checksum_func_name, table->meta.unique_id,
669
+ table->meta.compensated_range_deletion_size);
669
670
  }
670
671
  s = dummy_version_builder.Apply(&dummy_edit);
671
672
  if (s.ok()) {
@@ -73,7 +73,7 @@ class VersionBuilderTest : public testing::Test {
73
73
  /* marked_for_compact */ false, Temperature::kUnknown,
74
74
  oldest_blob_file_number, kUnknownOldestAncesterTime,
75
75
  kUnknownFileCreationTime, epoch_number, kUnknownFileChecksum,
76
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
76
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
77
77
  f->compensated_file_size = file_size;
78
78
  f->num_entries = num_entries;
79
79
  f->num_deletions = num_deletions;
@@ -130,12 +130,13 @@ class VersionBuilderTest : public testing::Test {
130
130
  constexpr SequenceNumber largest_seqno = 300;
131
131
  constexpr bool marked_for_compaction = false;
132
132
 
133
- edit->AddFile(
134
- level, table_file_number, path_id, file_size, GetInternalKey(smallest),
135
- GetInternalKey(largest), smallest_seqno, largest_seqno,
136
- marked_for_compaction, Temperature::kUnknown, blob_file_number,
137
- kUnknownOldestAncesterTime, kUnknownFileCreationTime, epoch_number,
138
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
133
+ edit->AddFile(level, table_file_number, path_id, file_size,
134
+ GetInternalKey(smallest), GetInternalKey(largest),
135
+ smallest_seqno, largest_seqno, marked_for_compaction,
136
+ Temperature::kUnknown, blob_file_number,
137
+ kUnknownOldestAncesterTime, kUnknownFileCreationTime,
138
+ epoch_number, kUnknownFileChecksum,
139
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
139
140
  }
140
141
 
141
142
  void UpdateVersionStorageInfo(VersionStorageInfo* vstorage) {
@@ -186,7 +187,7 @@ TEST_F(VersionBuilderTest, ApplyAndSaveTo) {
186
187
  2, 666, 0, 100U, GetInternalKey("301"), GetInternalKey("350"), 200, 200,
187
188
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
188
189
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
189
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
190
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
190
191
  version_edit.DeleteFile(3, 27U);
191
192
 
192
193
  EnvOptions env_options;
@@ -233,7 +234,8 @@ TEST_F(VersionBuilderTest, ApplyAndSaveToDynamic) {
233
234
  3, 666, 0, 100U, GetInternalKey("301"), GetInternalKey("350"), 200, 200,
234
235
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
235
236
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
236
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
237
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
238
+
237
239
  version_edit.DeleteFile(0, 1U);
238
240
  version_edit.DeleteFile(0, 88U);
239
241
 
@@ -283,7 +285,7 @@ TEST_F(VersionBuilderTest, ApplyAndSaveToDynamic2) {
283
285
  4, 666, 0, 100U, GetInternalKey("301"), GetInternalKey("350"), 200, 200,
284
286
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
285
287
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
286
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
288
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
287
289
  version_edit.DeleteFile(0, 1U);
288
290
  version_edit.DeleteFile(0, 88U);
289
291
  version_edit.DeleteFile(4, 6U);
@@ -319,27 +321,27 @@ TEST_F(VersionBuilderTest, ApplyMultipleAndSaveTo) {
319
321
  2, 666, 0, 100U, GetInternalKey("301"), GetInternalKey("350"), 200, 200,
320
322
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
321
323
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
322
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
324
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
323
325
  version_edit.AddFile(
324
326
  2, 676, 0, 100U, GetInternalKey("401"), GetInternalKey("450"), 200, 200,
325
327
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
326
328
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
327
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
329
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
328
330
  version_edit.AddFile(
329
331
  2, 636, 0, 100U, GetInternalKey("601"), GetInternalKey("650"), 200, 200,
330
332
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
331
333
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
332
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
334
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
333
335
  version_edit.AddFile(
334
336
  2, 616, 0, 100U, GetInternalKey("501"), GetInternalKey("550"), 200, 200,
335
337
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
336
338
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
337
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
339
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
338
340
  version_edit.AddFile(
339
341
  2, 606, 0, 100U, GetInternalKey("701"), GetInternalKey("750"), 200, 200,
340
342
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
341
343
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
342
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
344
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
343
345
 
344
346
  EnvOptions env_options;
345
347
  constexpr TableCache* table_cache = nullptr;
@@ -378,27 +380,27 @@ TEST_F(VersionBuilderTest, ApplyDeleteAndSaveTo) {
378
380
  2, 666, 0, 100U, GetInternalKey("301"), GetInternalKey("350"), 200, 200,
379
381
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
380
382
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
381
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
383
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
382
384
  version_edit.AddFile(
383
385
  2, 676, 0, 100U, GetInternalKey("401"), GetInternalKey("450"), 200, 200,
384
386
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
385
387
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
386
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
388
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
387
389
  version_edit.AddFile(
388
390
  2, 636, 0, 100U, GetInternalKey("601"), GetInternalKey("650"), 200, 200,
389
391
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
390
392
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
391
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
393
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
392
394
  version_edit.AddFile(
393
395
  2, 616, 0, 100U, GetInternalKey("501"), GetInternalKey("550"), 200, 200,
394
396
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
395
397
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
396
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
398
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
397
399
  version_edit.AddFile(
398
400
  2, 606, 0, 100U, GetInternalKey("701"), GetInternalKey("750"), 200, 200,
399
401
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
400
402
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
401
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
403
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
402
404
  ASSERT_OK(version_builder.Apply(&version_edit));
403
405
 
404
406
  VersionEdit version_edit2;
@@ -406,14 +408,14 @@ TEST_F(VersionBuilderTest, ApplyDeleteAndSaveTo) {
406
408
  2, 808, 0, 100U, GetInternalKey("901"), GetInternalKey("950"), 200, 200,
407
409
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
408
410
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
409
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
411
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
410
412
  version_edit2.DeleteFile(2, 616);
411
413
  version_edit2.DeleteFile(2, 636);
412
414
  version_edit.AddFile(
413
415
  2, 806, 0, 100U, GetInternalKey("801"), GetInternalKey("850"), 200, 200,
414
416
  false, Temperature::kUnknown, kInvalidBlobFileNumber,
415
417
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
416
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
418
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
417
419
 
418
420
  ASSERT_OK(version_builder.Apply(&version_edit2));
419
421
  ASSERT_OK(version_builder.SaveTo(&new_vstorage));
@@ -524,7 +526,7 @@ TEST_F(VersionBuilderTest, ApplyFileDeletionAndAddition) {
524
526
  GetInternalKey(largest, largest_seq), smallest_seqno, largest_seqno,
525
527
  marked_for_compaction, Temperature::kUnknown, kInvalidBlobFileNumber,
526
528
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
527
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
529
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
528
530
 
529
531
  ASSERT_OK(builder.Apply(&addition));
530
532
 
@@ -573,7 +575,7 @@ TEST_F(VersionBuilderTest, ApplyFileAdditionAlreadyInBase) {
573
575
  GetInternalKey(largest), smallest_seqno, largest_seqno,
574
576
  marked_for_compaction, Temperature::kUnknown, kInvalidBlobFileNumber,
575
577
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
576
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
578
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
577
579
 
578
580
  const Status s = builder.Apply(&edit);
579
581
  ASSERT_TRUE(s.IsCorruption());
@@ -609,7 +611,7 @@ TEST_F(VersionBuilderTest, ApplyFileAdditionAlreadyApplied) {
609
611
  GetInternalKey(largest), smallest_seqno, largest_seqno,
610
612
  marked_for_compaction, Temperature::kUnknown, kInvalidBlobFileNumber,
611
613
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
612
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
614
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
613
615
 
614
616
  ASSERT_OK(builder.Apply(&edit));
615
617
 
@@ -622,7 +624,7 @@ TEST_F(VersionBuilderTest, ApplyFileAdditionAlreadyApplied) {
622
624
  GetInternalKey(largest), smallest_seqno, largest_seqno,
623
625
  marked_for_compaction, Temperature::kUnknown, kInvalidBlobFileNumber,
624
626
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
625
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
627
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
626
628
 
627
629
  const Status s = builder.Apply(&other_edit);
628
630
  ASSERT_TRUE(s.IsCorruption());
@@ -658,7 +660,7 @@ TEST_F(VersionBuilderTest, ApplyFileAdditionAndDeletion) {
658
660
  GetInternalKey(largest), smallest_seqno, largest_seqno,
659
661
  marked_for_compaction, Temperature::kUnknown, kInvalidBlobFileNumber,
660
662
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, kUnknownEpochNumber,
661
- kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2);
663
+ kUnknownFileChecksum, kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
662
664
 
663
665
  ASSERT_OK(builder.Apply(&addition));
664
666
 
@@ -1231,7 +1233,7 @@ TEST_F(VersionBuilderTest, SaveBlobFilesToConcurrentJobs) {
1231
1233
  GetInternalKey(largest), smallest_seqno, largest_seqno,
1232
1234
  marked_for_compaction, Temperature::kUnknown, blob_file_number,
1233
1235
  kUnknownOldestAncesterTime, kUnknownFileCreationTime, 2 /*epoch_number*/,
1234
- checksum_value, checksum_method, kNullUniqueId64x2);
1236
+ checksum_value, checksum_method, kNullUniqueId64x2, 0);
1235
1237
  edit.AddBlobFile(blob_file_number, total_blob_count, total_blob_bytes,
1236
1238
  checksum_method, checksum_value);
1237
1239
 
@@ -1319,7 +1321,7 @@ TEST_F(VersionBuilderTest, CheckConsistencyForBlobFiles) {
1319
1321
  /* oldest_blob_file_number */ 16, kUnknownOldestAncesterTime,
1320
1322
  kUnknownFileCreationTime, kUnknownEpochNumber,
1321
1323
  kUnknownFileChecksum, kUnknownFileChecksumFuncName,
1322
- kNullUniqueId64x2);
1324
+ kNullUniqueId64x2, 0);
1323
1325
 
1324
1326
  edit.AddFile(/* level */ 1, /* file_number */ 700, /* path_id */ 0,
1325
1327
  /* file_size */ 100, /* smallest */ GetInternalKey("801"),
@@ -1329,7 +1331,7 @@ TEST_F(VersionBuilderTest, CheckConsistencyForBlobFiles) {
1329
1331
  /* oldest_blob_file_number */ 1000, kUnknownOldestAncesterTime,
1330
1332
  kUnknownFileCreationTime, kUnknownEpochNumber,
1331
1333
  kUnknownFileChecksum, kUnknownFileChecksumFuncName,
1332
- kNullUniqueId64x2);
1334
+ kNullUniqueId64x2, 0);
1333
1335
  edit.AddBlobFile(/* blob_file_number */ 1000, /* total_blob_count */ 2000,
1334
1336
  /* total_blob_bytes */ 200000,
1335
1337
  /* checksum_method */ std::string(),
@@ -1550,7 +1552,7 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
1550
1552
  Temperature::kUnknown,
1551
1553
  /* oldest_blob_file_number */ 1, kUnknownOldestAncesterTime,
1552
1554
  kUnknownFileCreationTime, kUnknownEpochNumber, kUnknownFileChecksum,
1553
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
1555
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
1554
1556
 
1555
1557
  // Add an SST that does not reference any blob files.
1556
1558
  edit.AddFile(
@@ -1560,7 +1562,7 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
1560
1562
  /* largest_seqno */ 2200, /* marked_for_compaction */ false,
1561
1563
  Temperature::kUnknown, kInvalidBlobFileNumber, kUnknownOldestAncesterTime,
1562
1564
  kUnknownFileCreationTime, kUnknownEpochNumber, kUnknownFileChecksum,
1563
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
1565
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
1564
1566
 
1565
1567
  // Delete a file that references a blob file.
1566
1568
  edit.DeleteFile(/* level */ 1, /* file_number */ 6);
@@ -1583,7 +1585,7 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
1583
1585
  /* oldest_blob_file_number */ 3, kUnknownOldestAncesterTime,
1584
1586
  kUnknownFileCreationTime, kUnknownEpochNumber,
1585
1587
  kUnknownFileChecksum, kUnknownFileChecksumFuncName,
1586
- kNullUniqueId64x2);
1588
+ kNullUniqueId64x2, 0);
1587
1589
 
1588
1590
  // Trivially move a file that does not reference any blob files.
1589
1591
  edit.DeleteFile(/* level */ 1, /* file_number */ 13);
@@ -1595,7 +1597,7 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
1595
1597
  Temperature::kUnknown, kInvalidBlobFileNumber,
1596
1598
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
1597
1599
  kUnknownEpochNumber, kUnknownFileChecksum,
1598
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
1600
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
1599
1601
 
1600
1602
  // Add one more SST file that references a blob file, then promptly
1601
1603
  // delete it in a second version edit before the new version gets saved.
@@ -1609,7 +1611,7 @@ TEST_F(VersionBuilderTest, MaintainLinkedSstsForBlobFiles) {
1609
1611
  /* oldest_blob_file_number */ 5, kUnknownOldestAncesterTime,
1610
1612
  kUnknownFileCreationTime, kUnknownEpochNumber,
1611
1613
  kUnknownFileChecksum, kUnknownFileChecksumFuncName,
1612
- kNullUniqueId64x2);
1614
+ kNullUniqueId64x2, 0);
1613
1615
 
1614
1616
  VersionEdit edit2;
1615
1617
 
@@ -1710,7 +1712,7 @@ TEST_F(VersionBuilderTest, CheckConsistencyForL0FilesSortedByEpochNumber) {
1710
1712
  /* oldest_blob_file_number */ kInvalidBlobFileNumber,
1711
1713
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
1712
1714
  1 /* epoch_number */, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
1713
- kNullUniqueId64x2);
1715
+ kNullUniqueId64x2, 0);
1714
1716
  version_edit_1.AddFile(
1715
1717
  /* level */ 0, /* file_number */ 2U, /* path_id */ 0,
1716
1718
  /* file_size */ 100, /* smallest */ GetInternalKey("b", 2),
@@ -1720,7 +1722,7 @@ TEST_F(VersionBuilderTest, CheckConsistencyForL0FilesSortedByEpochNumber) {
1720
1722
  /* oldest_blob_file_number */ kInvalidBlobFileNumber,
1721
1723
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
1722
1724
  1 /* epoch_number */, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
1723
- kNullUniqueId64x2);
1725
+ kNullUniqueId64x2, 0);
1724
1726
 
1725
1727
  VersionBuilder version_builder_1(EnvOptions(), &ioptions_,
1726
1728
  nullptr /* table_cache */, &vstorage_,
@@ -1747,7 +1749,7 @@ TEST_F(VersionBuilderTest, CheckConsistencyForL0FilesSortedByEpochNumber) {
1747
1749
  /* oldest_blob_file_number */ kInvalidBlobFileNumber,
1748
1750
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
1749
1751
  1 /* epoch_number */, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
1750
- kNullUniqueId64x2);
1752
+ kNullUniqueId64x2, 0);
1751
1753
  version_edit_2.AddFile(
1752
1754
  /* level */ 0, /* file_number */ 2U, /* path_id */ 0,
1753
1755
  /* file_size */ 100, /* smallest */ GetInternalKey("b", 2),
@@ -1757,7 +1759,7 @@ TEST_F(VersionBuilderTest, CheckConsistencyForL0FilesSortedByEpochNumber) {
1757
1759
  /* oldest_blob_file_number */ kInvalidBlobFileNumber,
1758
1760
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
1759
1761
  2 /* epoch_number */, kUnknownFileChecksum, kUnknownFileChecksumFuncName,
1760
- kNullUniqueId64x2);
1762
+ kNullUniqueId64x2, 0);
1761
1763
 
1762
1764
  VersionBuilder version_builder_2(EnvOptions(), &ioptions_,
1763
1765
  nullptr /* table_cache */, &vstorage_,
@@ -231,6 +231,13 @@ bool VersionEdit::EncodeTo(std::string* dst) const {
231
231
  std::string unique_id_str = EncodeUniqueIdBytes(&unique_id);
232
232
  PutLengthPrefixedSlice(dst, Slice(unique_id_str));
233
233
  }
234
+ if (f.compensated_range_deletion_size) {
235
+ PutVarint32(dst, kCompensatedRangeDeletionSize);
236
+ std::string compensated_range_deletion_size;
237
+ PutVarint64(&compensated_range_deletion_size,
238
+ f.compensated_range_deletion_size);
239
+ PutLengthPrefixedSlice(dst, Slice(compensated_range_deletion_size));
240
+ }
234
241
 
235
242
  TEST_SYNC_POINT_CALLBACK("VersionEdit::EncodeTo:NewFile4:CustomizeFields",
236
243
  dst);
@@ -404,6 +411,11 @@ const char* VersionEdit::DecodeNewFile4From(Slice* input) {
404
411
  return "invalid unique id";
405
412
  }
406
413
  break;
414
+ case kCompensatedRangeDeletionSize:
415
+ if (!GetVarint64(&field, &f.compensated_range_deletion_size)) {
416
+ return "Invalid compensated range deletion size";
417
+ }
418
+ break;
407
419
  default:
408
420
  if ((custom_tag & kCustomTagNonSafeIgnoreMask) != 0) {
409
421
  // Should not proceed if cannot understand it
@@ -89,6 +89,7 @@ enum NewFileCustomTag : uint32_t {
89
89
  kMaxTimestamp = 11,
90
90
  kUniqueId = 12,
91
91
  kEpochNumber = 13,
92
+ kCompensatedRangeDeletionSize = 14,
92
93
 
93
94
  // If this bit for the custom tag is set, opening DB should fail if
94
95
  // we don't know this field.
@@ -182,15 +183,22 @@ struct FileMetaData {
182
183
  // Stats for compensating deletion entries during compaction
183
184
 
184
185
  // File size compensated by deletion entry.
185
- // This is updated in Version::UpdateAccumulatedStats() first time when the
186
- // file is created or loaded. After it is updated (!= 0), it is immutable.
186
+ // This is used to compute a file's compaction priority, and is updated in
187
+ // Version::ComputeCompensatedSizes() first time when the file is created or
188
+ // loaded. After it is updated (!= 0), it is immutable.
187
189
  uint64_t compensated_file_size = 0;
188
190
  // These values can mutate, but they can only be read or written from
189
191
  // single-threaded LogAndApply thread
190
192
  uint64_t num_entries = 0; // the number of entries.
191
- uint64_t num_deletions = 0; // the number of deletion entries.
193
+ // The number of deletion entries, including range deletions.
194
+ uint64_t num_deletions = 0;
192
195
  uint64_t raw_key_size = 0; // total uncompressed key size.
193
196
  uint64_t raw_value_size = 0; // total uncompressed value size.
197
+ uint64_t num_range_deletions = 0;
198
+ // This is computed during Flush/Compaction, and is added to
199
+ // `compensated_file_size`. Currently, this estimates the size of keys in the
200
+ // next level covered by range tombstones in this file.
201
+ uint64_t compensated_range_deletion_size = 0;
194
202
 
195
203
  int refs = 0; // Reference count
196
204
 
@@ -240,10 +248,12 @@ struct FileMetaData {
240
248
  uint64_t _oldest_ancester_time, uint64_t _file_creation_time,
241
249
  uint64_t _epoch_number, const std::string& _file_checksum,
242
250
  const std::string& _file_checksum_func_name,
243
- UniqueId64x2 _unique_id)
251
+ UniqueId64x2 _unique_id,
252
+ const uint64_t _compensated_range_deletion_size)
244
253
  : fd(file, file_path_id, file_size, smallest_seq, largest_seq),
245
254
  smallest(smallest_key),
246
255
  largest(largest_key),
256
+ compensated_range_deletion_size(_compensated_range_deletion_size),
247
257
  marked_for_compaction(marked_for_compact),
248
258
  temperature(_temperature),
249
259
  oldest_blob_file_number(oldest_blob_file),
@@ -434,7 +444,8 @@ class VersionEdit {
434
444
  uint64_t oldest_ancester_time, uint64_t file_creation_time,
435
445
  uint64_t epoch_number, const std::string& file_checksum,
436
446
  const std::string& file_checksum_func_name,
437
- const UniqueId64x2& unique_id) {
447
+ const UniqueId64x2& unique_id,
448
+ const uint64_t compensated_range_deletion_size) {
438
449
  assert(smallest_seqno <= largest_seqno);
439
450
  new_files_.emplace_back(
440
451
  level,
@@ -442,7 +453,8 @@ class VersionEdit {
442
453
  smallest_seqno, largest_seqno, marked_for_compaction,
443
454
  temperature, oldest_blob_file_number, oldest_ancester_time,
444
455
  file_creation_time, epoch_number, file_checksum,
445
- file_checksum_func_name, unique_id));
456
+ file_checksum_func_name, unique_id,
457
+ compensated_range_deletion_size));
446
458
  if (!HasLastSequence() || largest_seqno > GetLastSequence()) {
447
459
  SetLastSequence(largest_seqno);
448
460
  }
@@ -45,7 +45,7 @@ TEST_F(VersionEditTest, EncodeDecode) {
45
45
  kBig + 500 + i, kBig + 600 + i, false, Temperature::kUnknown,
46
46
  kInvalidBlobFileNumber, 888, 678,
47
47
  kBig + 300 + i /* epoch_number */, "234", "crc32c",
48
- kNullUniqueId64x2);
48
+ kNullUniqueId64x2, 0);
49
49
  edit.DeleteFile(4, kBig + 700 + i);
50
50
  }
51
51
 
@@ -65,24 +65,24 @@ TEST_F(VersionEditTest, EncodeDecodeNewFile4) {
65
65
  kBig + 600, true, Temperature::kUnknown, kInvalidBlobFileNumber,
66
66
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
67
67
  300 /* epoch_number */, kUnknownFileChecksum,
68
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
68
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
69
69
  edit.AddFile(4, 301, 3, 100, InternalKey("foo", kBig + 501, kTypeValue),
70
70
  InternalKey("zoo", kBig + 601, kTypeDeletion), kBig + 501,
71
71
  kBig + 601, false, Temperature::kUnknown, kInvalidBlobFileNumber,
72
72
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
73
73
  301 /* epoch_number */, kUnknownFileChecksum,
74
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
74
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
75
75
  edit.AddFile(5, 302, 0, 100, InternalKey("foo", kBig + 502, kTypeValue),
76
76
  InternalKey("zoo", kBig + 602, kTypeDeletion), kBig + 502,
77
77
  kBig + 602, true, Temperature::kUnknown, kInvalidBlobFileNumber,
78
78
  666, 888, 302 /* epoch_number */, kUnknownFileChecksum,
79
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
79
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
80
80
  edit.AddFile(5, 303, 0, 100, InternalKey("foo", kBig + 503, kTypeBlobIndex),
81
81
  InternalKey("zoo", kBig + 603, kTypeBlobIndex), kBig + 503,
82
82
  kBig + 603, true, Temperature::kUnknown, 1001,
83
83
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
84
84
  303 /* epoch_number */, kUnknownFileChecksum,
85
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
85
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
86
86
 
87
87
  edit.DeleteFile(4, 700);
88
88
 
@@ -123,12 +123,12 @@ TEST_F(VersionEditTest, ForwardCompatibleNewFile4) {
123
123
  kBig + 600, true, Temperature::kUnknown, kInvalidBlobFileNumber,
124
124
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
125
125
  300 /* epoch_number */, kUnknownFileChecksum,
126
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
126
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
127
127
  edit.AddFile(4, 301, 3, 100, InternalKey("foo", kBig + 501, kTypeValue),
128
128
  InternalKey("zoo", kBig + 601, kTypeDeletion), kBig + 501,
129
129
  kBig + 601, false, Temperature::kUnknown, kInvalidBlobFileNumber,
130
130
  686, 868, 301 /* epoch_number */, "234", "crc32c",
131
- kNullUniqueId64x2);
131
+ kNullUniqueId64x2, 0);
132
132
  edit.DeleteFile(4, 700);
133
133
 
134
134
  edit.SetComparatorName("foo");
@@ -177,7 +177,7 @@ TEST_F(VersionEditTest, NewFile4NotSupportedField) {
177
177
  kBig + 600, true, Temperature::kUnknown, kInvalidBlobFileNumber,
178
178
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
179
179
  300 /* epoch_number */, kUnknownFileChecksum,
180
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
180
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
181
181
 
182
182
  edit.SetComparatorName("foo");
183
183
  edit.SetLogNumber(kBig + 100);
@@ -208,7 +208,7 @@ TEST_F(VersionEditTest, EncodeEmptyFile) {
208
208
  Temperature::kUnknown, kInvalidBlobFileNumber,
209
209
  kUnknownOldestAncesterTime, kUnknownFileCreationTime,
210
210
  1 /*epoch_number*/, kUnknownFileChecksum,
211
- kUnknownFileChecksumFuncName, kNullUniqueId64x2);
211
+ kUnknownFileChecksumFuncName, kNullUniqueId64x2, 0);
212
212
  std::string buffer;
213
213
  ASSERT_TRUE(!edit.EncodeTo(&buffer));
214
214
  }