@nxtedition/rocksdb 11.0.3 → 11.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 (134) hide show
  1. package/binding.cc +147 -125
  2. package/deps/rocksdb/rocksdb/db/column_family_test.cc +15 -7
  3. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  4. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +8 -4
  5. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +11 -7
  6. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +17 -11
  7. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +15 -0
  8. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +155 -0
  9. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +564 -461
  10. package/deps/rocksdb/rocksdb/db/db_follower_test.cc +8 -4
  11. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +40 -24
  12. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +8 -1
  13. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +7 -4
  14. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
  15. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +3 -1
  16. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +19 -1
  17. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +20 -16
  18. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +27 -0
  19. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +10 -2
  20. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +85 -0
  21. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +55 -2
  22. package/deps/rocksdb/rocksdb/db/db_test2.cc +231 -0
  23. package/deps/rocksdb/rocksdb/db/db_test_util.cc +5 -0
  24. package/deps/rocksdb/rocksdb/db/db_test_util.h +10 -1
  25. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +0 -1
  26. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +175 -1
  27. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +64 -0
  28. package/deps/rocksdb/rocksdb/db/dbformat.h +5 -6
  29. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +8 -8
  30. package/deps/rocksdb/rocksdb/db/experimental.cc +3 -2
  31. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +2 -4
  32. package/deps/rocksdb/rocksdb/db/flush_job.cc +7 -2
  33. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +4 -2
  34. package/deps/rocksdb/rocksdb/db/listener_test.cc +5 -5
  35. package/deps/rocksdb/rocksdb/db/log_writer.cc +12 -3
  36. package/deps/rocksdb/rocksdb/db/memtable.cc +83 -23
  37. package/deps/rocksdb/rocksdb/db/memtable.h +11 -3
  38. package/deps/rocksdb/rocksdb/db/memtable_list.cc +7 -5
  39. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +21 -0
  40. package/deps/rocksdb/rocksdb/db/version_builder.cc +462 -33
  41. package/deps/rocksdb/rocksdb/db/version_builder.h +70 -23
  42. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +95 -207
  43. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +54 -35
  44. package/deps/rocksdb/rocksdb/db/version_set.cc +13 -11
  45. package/deps/rocksdb/rocksdb/db/version_set_test.cc +313 -59
  46. package/deps/rocksdb/rocksdb/db/write_batch.cc +124 -64
  47. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +2 -3
  48. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +1 -1
  49. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -1
  50. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +9 -0
  51. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +4 -32
  52. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -3
  53. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +60 -172
  54. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +57 -2
  55. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +23 -15
  56. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +2 -3
  57. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +1 -1
  58. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +4 -1
  59. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +200 -92
  60. package/deps/rocksdb/rocksdb/env/file_system.cc +3 -3
  61. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +124 -23
  62. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +61 -8
  63. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +141 -2
  64. package/deps/rocksdb/rocksdb/file/file_util.cc +17 -2
  65. package/deps/rocksdb/rocksdb/file/file_util.h +10 -0
  66. package/deps/rocksdb/rocksdb/file/filename.cc +11 -3
  67. package/deps/rocksdb/rocksdb/file/filename.h +2 -1
  68. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +18 -0
  69. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +27 -4
  70. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +8 -1
  71. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +8 -13
  72. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -0
  73. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
  74. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +5 -2
  75. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +2 -1
  76. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +34 -0
  77. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +25 -1
  78. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +5 -0
  79. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +27 -9
  80. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +2 -0
  81. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +12 -0
  82. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +21 -0
  83. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  84. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +29 -1
  85. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +102 -33
  86. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +46 -3
  87. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +4 -0
  88. package/deps/rocksdb/rocksdb/options/cf_options.cc +6 -0
  89. package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
  90. package/deps/rocksdb/rocksdb/options/db_options.cc +15 -1
  91. package/deps/rocksdb/rocksdb/options/db_options.h +2 -0
  92. package/deps/rocksdb/rocksdb/options/options_helper.cc +10 -0
  93. package/deps/rocksdb/rocksdb/options/options_parser.cc +3 -2
  94. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +9 -2
  95. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +75 -35
  96. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -0
  97. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +4 -0
  98. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +8 -1
  99. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +40 -15
  100. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +98 -17
  101. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +14 -2
  102. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +21 -91
  103. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +13 -21
  104. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +14 -5
  105. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +62 -53
  106. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +60 -38
  107. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +175 -78
  108. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +65 -36
  109. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +25 -15
  110. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +13 -1
  111. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +18 -4
  112. package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
  113. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +11 -0
  114. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +2 -2
  115. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +47 -18
  116. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +1 -2
  117. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +95 -0
  118. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +26 -15
  119. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +62 -19
  120. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +73 -34
  121. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -0
  122. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +10 -3
  123. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +2 -1
  124. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +8 -5
  125. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +7 -4
  126. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +225 -0
  127. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -1
  128. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -0
  129. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +5 -2
  130. package/index.js +5 -17
  131. package/iterator.js +1 -1
  132. package/package.json +1 -1
  133. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  134. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
@@ -929,15 +929,19 @@ Status WriteBatch::Put(ColumnFamilyHandle* column_family, const Slice& key,
929
929
  }
930
930
 
931
931
  if (0 == ts_sz) {
932
- return WriteBatchInternal::Put(this, cf_id, key, value);
932
+ s = WriteBatchInternal::Put(this, cf_id, key, value);
933
+ } else {
934
+ needs_in_place_update_ts_ = true;
935
+ has_key_with_ts_ = true;
936
+ std::string dummy_ts(ts_sz, '\0');
937
+ std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
938
+ s = WriteBatchInternal::Put(this, cf_id, SliceParts(key_with_ts.data(), 2),
939
+ SliceParts(&value, 1));
933
940
  }
934
-
935
- needs_in_place_update_ts_ = true;
936
- has_key_with_ts_ = true;
937
- std::string dummy_ts(ts_sz, '\0');
938
- std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
939
- return WriteBatchInternal::Put(this, cf_id, SliceParts(key_with_ts.data(), 2),
940
- SliceParts(&value, 1));
941
+ if (s.ok()) {
942
+ MaybeTrackTimestampSize(cf_id, ts_sz);
943
+ }
944
+ return s;
941
945
  }
942
946
 
943
947
  Status WriteBatch::TimedPut(ColumnFamilyHandle* column_family, const Slice& key,
@@ -962,7 +966,7 @@ Status WriteBatch::TimedPut(ColumnFamilyHandle* column_family, const Slice& key,
962
966
 
963
967
  Status WriteBatch::Put(ColumnFamilyHandle* column_family, const Slice& key,
964
968
  const Slice& ts, const Slice& value) {
965
- const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
969
+ Status s = CheckColumnFamilyTimestampSize(column_family, ts);
966
970
  if (!s.ok()) {
967
971
  return s;
968
972
  }
@@ -970,8 +974,12 @@ Status WriteBatch::Put(ColumnFamilyHandle* column_family, const Slice& key,
970
974
  assert(column_family);
971
975
  uint32_t cf_id = column_family->GetID();
972
976
  std::array<Slice, 2> key_with_ts{{key, ts}};
973
- return WriteBatchInternal::Put(this, cf_id, SliceParts(key_with_ts.data(), 2),
974
- SliceParts(&value, 1));
977
+ s = WriteBatchInternal::Put(this, cf_id, SliceParts(key_with_ts.data(), 2),
978
+ SliceParts(&value, 1));
979
+ if (s.ok()) {
980
+ MaybeTrackTimestampSize(cf_id, ts.size());
981
+ }
982
+ return s;
975
983
  }
976
984
 
977
985
  Status WriteBatchInternal::CheckSlicePartsLength(const SliceParts& key,
@@ -1039,7 +1047,11 @@ Status WriteBatch::Put(ColumnFamilyHandle* column_family, const SliceParts& key,
1039
1047
  }
1040
1048
 
1041
1049
  if (ts_sz == 0) {
1042
- return WriteBatchInternal::Put(this, cf_id, key, value);
1050
+ s = WriteBatchInternal::Put(this, cf_id, key, value);
1051
+ if (s.ok()) {
1052
+ MaybeTrackTimestampSize(cf_id, ts_sz);
1053
+ }
1054
+ return s;
1043
1055
  }
1044
1056
 
1045
1057
  return Status::InvalidArgument(
@@ -1246,20 +1258,24 @@ Status WriteBatch::Delete(ColumnFamilyHandle* column_family, const Slice& key) {
1246
1258
  }
1247
1259
 
1248
1260
  if (0 == ts_sz) {
1249
- return WriteBatchInternal::Delete(this, cf_id, key);
1261
+ s = WriteBatchInternal::Delete(this, cf_id, key);
1262
+ } else {
1263
+ needs_in_place_update_ts_ = true;
1264
+ has_key_with_ts_ = true;
1265
+ std::string dummy_ts(ts_sz, '\0');
1266
+ std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
1267
+ s = WriteBatchInternal::Delete(this, cf_id,
1268
+ SliceParts(key_with_ts.data(), 2));
1250
1269
  }
1251
-
1252
- needs_in_place_update_ts_ = true;
1253
- has_key_with_ts_ = true;
1254
- std::string dummy_ts(ts_sz, '\0');
1255
- std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
1256
- return WriteBatchInternal::Delete(this, cf_id,
1257
- SliceParts(key_with_ts.data(), 2));
1270
+ if (s.ok()) {
1271
+ MaybeTrackTimestampSize(cf_id, ts_sz);
1272
+ }
1273
+ return s;
1258
1274
  }
1259
1275
 
1260
1276
  Status WriteBatch::Delete(ColumnFamilyHandle* column_family, const Slice& key,
1261
1277
  const Slice& ts) {
1262
- const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1278
+ Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1263
1279
  if (!s.ok()) {
1264
1280
  return s;
1265
1281
  }
@@ -1267,8 +1283,12 @@ Status WriteBatch::Delete(ColumnFamilyHandle* column_family, const Slice& key,
1267
1283
  has_key_with_ts_ = true;
1268
1284
  uint32_t cf_id = column_family->GetID();
1269
1285
  std::array<Slice, 2> key_with_ts{{key, ts}};
1270
- return WriteBatchInternal::Delete(this, cf_id,
1271
- SliceParts(key_with_ts.data(), 2));
1286
+ s = WriteBatchInternal::Delete(this, cf_id,
1287
+ SliceParts(key_with_ts.data(), 2));
1288
+ if (s.ok()) {
1289
+ MaybeTrackTimestampSize(cf_id, ts.size());
1290
+ }
1291
+ return s;
1272
1292
  }
1273
1293
 
1274
1294
  Status WriteBatchInternal::Delete(WriteBatch* b, uint32_t column_family_id,
@@ -1313,7 +1333,11 @@ Status WriteBatch::Delete(ColumnFamilyHandle* column_family,
1313
1333
  }
1314
1334
 
1315
1335
  if (0 == ts_sz) {
1316
- return WriteBatchInternal::Delete(this, cf_id, key);
1336
+ s = WriteBatchInternal::Delete(this, cf_id, key);
1337
+ if (s.ok()) {
1338
+ MaybeTrackTimestampSize(cf_id, ts_sz);
1339
+ }
1340
+ return s;
1317
1341
  }
1318
1342
 
1319
1343
  return Status::InvalidArgument(
@@ -1361,20 +1385,24 @@ Status WriteBatch::SingleDelete(ColumnFamilyHandle* column_family,
1361
1385
  }
1362
1386
 
1363
1387
  if (0 == ts_sz) {
1364
- return WriteBatchInternal::SingleDelete(this, cf_id, key);
1388
+ s = WriteBatchInternal::SingleDelete(this, cf_id, key);
1389
+ } else {
1390
+ needs_in_place_update_ts_ = true;
1391
+ has_key_with_ts_ = true;
1392
+ std::string dummy_ts(ts_sz, '\0');
1393
+ std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
1394
+ s = WriteBatchInternal::SingleDelete(this, cf_id,
1395
+ SliceParts(key_with_ts.data(), 2));
1365
1396
  }
1366
-
1367
- needs_in_place_update_ts_ = true;
1368
- has_key_with_ts_ = true;
1369
- std::string dummy_ts(ts_sz, '\0');
1370
- std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
1371
- return WriteBatchInternal::SingleDelete(this, cf_id,
1372
- SliceParts(key_with_ts.data(), 2));
1397
+ if (s.ok()) {
1398
+ MaybeTrackTimestampSize(cf_id, ts_sz);
1399
+ }
1400
+ return s;
1373
1401
  }
1374
1402
 
1375
1403
  Status WriteBatch::SingleDelete(ColumnFamilyHandle* column_family,
1376
1404
  const Slice& key, const Slice& ts) {
1377
- const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1405
+ Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1378
1406
  if (!s.ok()) {
1379
1407
  return s;
1380
1408
  }
@@ -1382,8 +1410,12 @@ Status WriteBatch::SingleDelete(ColumnFamilyHandle* column_family,
1382
1410
  assert(column_family);
1383
1411
  uint32_t cf_id = column_family->GetID();
1384
1412
  std::array<Slice, 2> key_with_ts{{key, ts}};
1385
- return WriteBatchInternal::SingleDelete(this, cf_id,
1386
- SliceParts(key_with_ts.data(), 2));
1413
+ s = WriteBatchInternal::SingleDelete(this, cf_id,
1414
+ SliceParts(key_with_ts.data(), 2));
1415
+ if (s.ok()) {
1416
+ MaybeTrackTimestampSize(cf_id, ts.size());
1417
+ }
1418
+ return s;
1387
1419
  }
1388
1420
 
1389
1421
  Status WriteBatchInternal::SingleDelete(WriteBatch* b,
@@ -1430,7 +1462,11 @@ Status WriteBatch::SingleDelete(ColumnFamilyHandle* column_family,
1430
1462
  }
1431
1463
 
1432
1464
  if (0 == ts_sz) {
1433
- return WriteBatchInternal::SingleDelete(this, cf_id, key);
1465
+ s = WriteBatchInternal::SingleDelete(this, cf_id, key);
1466
+ if (s.ok()) {
1467
+ MaybeTrackTimestampSize(cf_id, ts_sz);
1468
+ }
1469
+ return s;
1434
1470
  }
1435
1471
 
1436
1472
  return Status::InvalidArgument(
@@ -1480,23 +1516,27 @@ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
1480
1516
  }
1481
1517
 
1482
1518
  if (0 == ts_sz) {
1483
- return WriteBatchInternal::DeleteRange(this, cf_id, begin_key, end_key);
1519
+ s = WriteBatchInternal::DeleteRange(this, cf_id, begin_key, end_key);
1520
+ } else {
1521
+ needs_in_place_update_ts_ = true;
1522
+ has_key_with_ts_ = true;
1523
+ std::string dummy_ts(ts_sz, '\0');
1524
+ std::array<Slice, 2> begin_key_with_ts{{begin_key, dummy_ts}};
1525
+ std::array<Slice, 2> end_key_with_ts{{end_key, dummy_ts}};
1526
+ s = WriteBatchInternal::DeleteRange(this, cf_id,
1527
+ SliceParts(begin_key_with_ts.data(), 2),
1528
+ SliceParts(end_key_with_ts.data(), 2));
1484
1529
  }
1485
-
1486
- needs_in_place_update_ts_ = true;
1487
- has_key_with_ts_ = true;
1488
- std::string dummy_ts(ts_sz, '\0');
1489
- std::array<Slice, 2> begin_key_with_ts{{begin_key, dummy_ts}};
1490
- std::array<Slice, 2> end_key_with_ts{{end_key, dummy_ts}};
1491
- return WriteBatchInternal::DeleteRange(
1492
- this, cf_id, SliceParts(begin_key_with_ts.data(), 2),
1493
- SliceParts(end_key_with_ts.data(), 2));
1530
+ if (s.ok()) {
1531
+ MaybeTrackTimestampSize(cf_id, ts_sz);
1532
+ }
1533
+ return s;
1494
1534
  }
1495
1535
 
1496
1536
  Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
1497
1537
  const Slice& begin_key, const Slice& end_key,
1498
1538
  const Slice& ts) {
1499
- const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1539
+ Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1500
1540
  if (!s.ok()) {
1501
1541
  return s;
1502
1542
  }
@@ -1505,9 +1545,13 @@ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
1505
1545
  uint32_t cf_id = column_family->GetID();
1506
1546
  std::array<Slice, 2> key_with_ts{{begin_key, ts}};
1507
1547
  std::array<Slice, 2> end_key_with_ts{{end_key, ts}};
1508
- return WriteBatchInternal::DeleteRange(this, cf_id,
1509
- SliceParts(key_with_ts.data(), 2),
1510
- SliceParts(end_key_with_ts.data(), 2));
1548
+ s = WriteBatchInternal::DeleteRange(this, cf_id,
1549
+ SliceParts(key_with_ts.data(), 2),
1550
+ SliceParts(end_key_with_ts.data(), 2));
1551
+ if (s.ok()) {
1552
+ MaybeTrackTimestampSize(cf_id, ts.size());
1553
+ }
1554
+ return s;
1511
1555
  }
1512
1556
 
1513
1557
  Status WriteBatchInternal::DeleteRange(WriteBatch* b, uint32_t column_family_id,
@@ -1554,7 +1598,11 @@ Status WriteBatch::DeleteRange(ColumnFamilyHandle* column_family,
1554
1598
  }
1555
1599
 
1556
1600
  if (0 == ts_sz) {
1557
- return WriteBatchInternal::DeleteRange(this, cf_id, begin_key, end_key);
1601
+ s = WriteBatchInternal::DeleteRange(this, cf_id, begin_key, end_key);
1602
+ if (s.ok()) {
1603
+ MaybeTrackTimestampSize(cf_id, ts_sz);
1604
+ }
1605
+ return s;
1558
1606
  }
1559
1607
 
1560
1608
  return Status::InvalidArgument(
@@ -1608,21 +1656,25 @@ Status WriteBatch::Merge(ColumnFamilyHandle* column_family, const Slice& key,
1608
1656
  }
1609
1657
 
1610
1658
  if (0 == ts_sz) {
1611
- return WriteBatchInternal::Merge(this, cf_id, key, value);
1612
- }
1613
-
1614
- needs_in_place_update_ts_ = true;
1615
- has_key_with_ts_ = true;
1616
- std::string dummy_ts(ts_sz, '\0');
1617
- std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
1659
+ s = WriteBatchInternal::Merge(this, cf_id, key, value);
1660
+ } else {
1661
+ needs_in_place_update_ts_ = true;
1662
+ has_key_with_ts_ = true;
1663
+ std::string dummy_ts(ts_sz, '\0');
1664
+ std::array<Slice, 2> key_with_ts{{key, dummy_ts}};
1618
1665
 
1619
- return WriteBatchInternal::Merge(
1620
- this, cf_id, SliceParts(key_with_ts.data(), 2), SliceParts(&value, 1));
1666
+ s = WriteBatchInternal::Merge(
1667
+ this, cf_id, SliceParts(key_with_ts.data(), 2), SliceParts(&value, 1));
1668
+ }
1669
+ if (s.ok()) {
1670
+ MaybeTrackTimestampSize(cf_id, ts_sz);
1671
+ }
1672
+ return s;
1621
1673
  }
1622
1674
 
1623
1675
  Status WriteBatch::Merge(ColumnFamilyHandle* column_family, const Slice& key,
1624
1676
  const Slice& ts, const Slice& value) {
1625
- const Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1677
+ Status s = CheckColumnFamilyTimestampSize(column_family, ts);
1626
1678
  if (!s.ok()) {
1627
1679
  return s;
1628
1680
  }
@@ -1630,8 +1682,12 @@ Status WriteBatch::Merge(ColumnFamilyHandle* column_family, const Slice& key,
1630
1682
  assert(column_family);
1631
1683
  uint32_t cf_id = column_family->GetID();
1632
1684
  std::array<Slice, 2> key_with_ts{{key, ts}};
1633
- return WriteBatchInternal::Merge(
1634
- this, cf_id, SliceParts(key_with_ts.data(), 2), SliceParts(&value, 1));
1685
+ s = WriteBatchInternal::Merge(this, cf_id, SliceParts(key_with_ts.data(), 2),
1686
+ SliceParts(&value, 1));
1687
+ if (s.ok()) {
1688
+ MaybeTrackTimestampSize(cf_id, ts.size());
1689
+ }
1690
+ return s;
1635
1691
  }
1636
1692
 
1637
1693
  Status WriteBatchInternal::Merge(WriteBatch* b, uint32_t column_family_id,
@@ -1680,7 +1736,11 @@ Status WriteBatch::Merge(ColumnFamilyHandle* column_family,
1680
1736
  }
1681
1737
 
1682
1738
  if (0 == ts_sz) {
1683
- return WriteBatchInternal::Merge(this, cf_id, key, value);
1739
+ s = WriteBatchInternal::Merge(this, cf_id, key, value);
1740
+ if (s.ok()) {
1741
+ MaybeTrackTimestampSize(cf_id, ts_sz);
1742
+ }
1743
+ return s;
1684
1744
  }
1685
1745
 
1686
1746
  return Status::InvalidArgument(
@@ -125,7 +125,6 @@ DECLARE_int32(level0_stop_writes_trigger);
125
125
  DECLARE_int32(block_size);
126
126
  DECLARE_int32(format_version);
127
127
  DECLARE_int32(index_block_restart_interval);
128
- DECLARE_bool(disable_auto_compactions);
129
128
  DECLARE_int32(max_background_compactions);
130
129
  DECLARE_int32(num_bottom_pri_threads);
131
130
  DECLARE_int32(compaction_thread_pool_adjust_interval);
@@ -151,6 +150,7 @@ DECLARE_bool(charge_filter_construction);
151
150
  DECLARE_bool(charge_table_reader);
152
151
  DECLARE_bool(charge_file_metadata);
153
152
  DECLARE_bool(charge_blob_cache);
153
+ DECLARE_bool(decouple_partitioned_filters);
154
154
  DECLARE_int32(top_level_index_pinning);
155
155
  DECLARE_int32(partition_pinning);
156
156
  DECLARE_int32(unpartitioned_pinning);
@@ -197,7 +197,6 @@ DECLARE_int64(target_file_size_base);
197
197
  DECLARE_int32(target_file_size_multiplier);
198
198
  DECLARE_uint64(max_bytes_for_level_base);
199
199
  DECLARE_double(max_bytes_for_level_multiplier);
200
- DECLARE_int32(range_deletion_width);
201
200
  DECLARE_uint64(rate_limiter_bytes_per_sec);
202
201
  DECLARE_bool(rate_limit_bg_reads);
203
202
  DECLARE_bool(rate_limit_user_ops);
@@ -275,6 +274,7 @@ DECLARE_bool(verification_only);
275
274
  DECLARE_string(last_level_temperature);
276
275
  DECLARE_string(default_write_temperature);
277
276
  DECLARE_string(default_temperature);
277
+ DECLARE_bool(paranoid_memory_checks);
278
278
 
279
279
  // Options for transaction dbs.
280
280
  // Use TransactionDB (a.k.a. Pessimistic Transaction DB)
@@ -319,7 +319,6 @@ DECLARE_int32(prepopulate_blob_cache);
319
319
  DECLARE_int32(approximate_size_one_in);
320
320
  DECLARE_bool(best_efforts_recovery);
321
321
  DECLARE_bool(skip_verifydb);
322
- DECLARE_bool(enable_compaction_filter);
323
322
  DECLARE_bool(paranoid_file_checks);
324
323
  DECLARE_bool(fail_if_options_file_error);
325
324
  DECLARE_uint64(batch_protection_bytes_per_key);
@@ -49,7 +49,7 @@ class DbStressCompactionFilter : public CompactionFilter {
49
49
  return Decision::kKeep;
50
50
  }
51
51
  // Reaching here means we acquired the lock.
52
-
52
+ key_mutex->AssertHeld();
53
53
  bool key_exists = state_->Exists(cf_id_, key_num);
54
54
  const bool allow_overwrite = state_->AllowsOverwrite(key_num);
55
55
 
@@ -167,7 +167,10 @@ bool RunStressTestImpl(SharedState* shared) {
167
167
  {FileType::kWalFile});
168
168
  }
169
169
  }
170
- now = clock->NowMicros();
170
+ if (ShouldDisableAutoCompactionsBeforeVerifyDb()) {
171
+ Status s = stress->EnableAutoCompaction();
172
+ assert(s.ok());
173
+ }
171
174
  fprintf(stdout, "%s Starting database operations\n",
172
175
  clock->TimeToString(now / 1000000).c_str());
173
176
 
@@ -380,6 +380,11 @@ DEFINE_bool(charge_blob_cache, false,
380
380
  "CacheEntryRoleOptions::charged of "
381
381
  "kBlobCache");
382
382
 
383
+ DEFINE_bool(
384
+ decouple_partitioned_filters,
385
+ ROCKSDB_NAMESPACE::BlockBasedTableOptions().decouple_partitioned_filters,
386
+ "Decouple filter partitioning from index partitioning.");
387
+
383
388
  DEFINE_int32(
384
389
  top_level_index_pinning,
385
390
  static_cast<int32_t>(ROCKSDB_NAMESPACE::PinningTier::kFallback),
@@ -1443,4 +1448,8 @@ DEFINE_uint32(uncache_aggressiveness,
1443
1448
  "obsolete. 0 = disabled, 1 = minimum, 100 = moderate, 10000 = "
1444
1449
  "normal max");
1445
1450
 
1451
+ DEFINE_bool(paranoid_memory_checks,
1452
+ ROCKSDB_NAMESPACE::Options().paranoid_memory_checks,
1453
+ "Sets CF option paranoid_memory_checks.");
1454
+
1446
1455
  #endif // GFLAGS
@@ -72,14 +72,7 @@ class DbStressListener : public EventListener {
72
72
  // pretending doing some work here
73
73
  RandomSleep();
74
74
  if (fault_fs_guard) {
75
- fault_fs_guard->DisableThreadLocalErrorInjection(
76
- FaultInjectionIOType::kRead);
77
- fault_fs_guard->DisableThreadLocalErrorInjection(
78
- FaultInjectionIOType::kWrite);
79
- fault_fs_guard->DisableThreadLocalErrorInjection(
80
- FaultInjectionIOType::kMetadataRead);
81
- fault_fs_guard->DisableThreadLocalErrorInjection(
82
- FaultInjectionIOType::kMetadataWrite);
75
+ fault_fs_guard->DisableAllThreadLocalErrorInjection();
83
76
  }
84
77
  }
85
78
 
@@ -180,14 +173,7 @@ class DbStressListener : public EventListener {
180
173
 
181
174
  void OnSubcompactionCompleted(const SubcompactionJobInfo& /* si */) override {
182
175
  if (fault_fs_guard) {
183
- fault_fs_guard->DisableThreadLocalErrorInjection(
184
- FaultInjectionIOType::kRead);
185
- fault_fs_guard->DisableThreadLocalErrorInjection(
186
- FaultInjectionIOType::kWrite);
187
- fault_fs_guard->DisableThreadLocalErrorInjection(
188
- FaultInjectionIOType::kMetadataRead);
189
- fault_fs_guard->DisableThreadLocalErrorInjection(
190
- FaultInjectionIOType::kMetadataWrite);
176
+ fault_fs_guard->DisableAllThreadLocalErrorInjection();
191
177
  }
192
178
  }
193
179
 
@@ -274,14 +260,7 @@ class DbStressListener : public EventListener {
274
260
  bool* /* auto_recovery */) override {
275
261
  RandomSleep();
276
262
  if (FLAGS_error_recovery_with_no_fault_injection && fault_fs_guard) {
277
- fault_fs_guard->DisableThreadLocalErrorInjection(
278
- FaultInjectionIOType::kRead);
279
- fault_fs_guard->DisableThreadLocalErrorInjection(
280
- FaultInjectionIOType::kWrite);
281
- fault_fs_guard->DisableThreadLocalErrorInjection(
282
- FaultInjectionIOType::kMetadataRead);
283
- fault_fs_guard->DisableThreadLocalErrorInjection(
284
- FaultInjectionIOType::kMetadataWrite);
263
+ fault_fs_guard->DisableAllThreadLocalErrorInjection();
285
264
  // TODO(hx235): only exempt the flush thread during error recovery instead
286
265
  // of all the flush threads from error injection
287
266
  fault_fs_guard->SetIOActivtiesExcludedFromFaultInjection(
@@ -293,14 +272,7 @@ class DbStressListener : public EventListener {
293
272
  const BackgroundErrorRecoveryInfo& /*info*/) override {
294
273
  RandomSleep();
295
274
  if (FLAGS_error_recovery_with_no_fault_injection && fault_fs_guard) {
296
- fault_fs_guard->EnableThreadLocalErrorInjection(
297
- FaultInjectionIOType::kRead);
298
- fault_fs_guard->EnableThreadLocalErrorInjection(
299
- FaultInjectionIOType::kWrite);
300
- fault_fs_guard->EnableThreadLocalErrorInjection(
301
- FaultInjectionIOType::kMetadataRead);
302
- fault_fs_guard->EnableThreadLocalErrorInjection(
303
- FaultInjectionIOType::kMetadataWrite);
275
+ fault_fs_guard->EnableAllThreadLocalErrorInjection();
304
276
  fault_fs_guard->SetIOActivtiesExcludedFromFaultInjection({});
305
277
  }
306
278
  }
@@ -31,6 +31,7 @@ DECLARE_int32(compaction_thread_pool_adjust_interval);
31
31
  DECLARE_int32(continuous_verification_interval);
32
32
  DECLARE_bool(error_recovery_with_no_fault_injection);
33
33
  DECLARE_bool(sync_fault_injection);
34
+ DECLARE_int32(range_deletion_width);
34
35
  DECLARE_bool(disable_wal);
35
36
  DECLARE_int32(manual_wal_flush_one_in);
36
37
  DECLARE_int32(metadata_read_fault_one_in);
@@ -44,6 +45,8 @@ DECLARE_int32(open_write_fault_one_in);
44
45
  DECLARE_int32(open_read_fault_one_in);
45
46
 
46
47
  DECLARE_int32(inject_error_severity);
48
+ DECLARE_bool(disable_auto_compactions);
49
+ DECLARE_bool(enable_compaction_filter);
47
50
 
48
51
  namespace ROCKSDB_NAMESPACE {
49
52
  class StressTest;
@@ -147,7 +150,8 @@ class SharedState {
147
150
 
148
151
  ~SharedState() {
149
152
  #ifndef NDEBUG
150
- if (FLAGS_read_fault_one_in) {
153
+ if (FLAGS_read_fault_one_in || FLAGS_write_fault_one_in ||
154
+ FLAGS_metadata_write_fault_one_in) {
151
155
  SyncPoint::GetInstance()->ClearAllCallBacks();
152
156
  SyncPoint::GetInstance()->DisableProcessing();
153
157
  }
@@ -260,8 +264,8 @@ class SharedState {
260
264
  // This is useful for crash-recovery testing when the process may crash
261
265
  // before updating the corresponding expected value
262
266
  //
263
- // Requires external locking covering `key` in `cf` to prevent concurrent
264
- // write or delete to the same `key`.
267
+ // Requires external locking covering `key` in `cf` to prevent
268
+ // concurrent write or delete to the same `key`.
265
269
  PendingExpectedValue PreparePut(int cf, int64_t key) {
266
270
  return expected_state_manager_->PreparePut(cf, key);
267
271
  }