@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.
- package/binding.cc +147 -125
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +15 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +8 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +11 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +17 -11
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +15 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +155 -0
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +564 -461
- package/deps/rocksdb/rocksdb/db/db_follower_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +40 -24
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +8 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +7 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +3 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +19 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +20 -16
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +27 -0
- package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +10 -2
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +85 -0
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +55 -2
- package/deps/rocksdb/rocksdb/db/db_test2.cc +231 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +10 -1
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +175 -1
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +64 -0
- package/deps/rocksdb/rocksdb/db/dbformat.h +5 -6
- package/deps/rocksdb/rocksdb/db/dbformat_test.cc +8 -8
- package/deps/rocksdb/rocksdb/db/experimental.cc +3 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +2 -4
- package/deps/rocksdb/rocksdb/db/flush_job.cc +7 -2
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +4 -2
- package/deps/rocksdb/rocksdb/db/listener_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/log_writer.cc +12 -3
- package/deps/rocksdb/rocksdb/db/memtable.cc +83 -23
- package/deps/rocksdb/rocksdb/db/memtable.h +11 -3
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +7 -5
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +21 -0
- package/deps/rocksdb/rocksdb/db/version_builder.cc +462 -33
- package/deps/rocksdb/rocksdb/db/version_builder.h +70 -23
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +95 -207
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +54 -35
- package/deps/rocksdb/rocksdb/db/version_set.cc +13 -11
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +313 -59
- package/deps/rocksdb/rocksdb/db/write_batch.cc +124 -64
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +2 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +9 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +4 -32
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +60 -172
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +57 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +23 -15
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +2 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.cc +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +4 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +200 -92
- package/deps/rocksdb/rocksdb/env/file_system.cc +3 -3
- package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +124 -23
- package/deps/rocksdb/rocksdb/file/delete_scheduler.h +61 -8
- package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +141 -2
- package/deps/rocksdb/rocksdb/file/file_util.cc +17 -2
- package/deps/rocksdb/rocksdb/file/file_util.h +10 -0
- package/deps/rocksdb/rocksdb/file/filename.cc +11 -3
- package/deps/rocksdb/rocksdb/file/filename.h +2 -1
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +18 -0
- package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +27 -4
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +8 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +8 -13
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +5 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +2 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +34 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +25 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +27 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +12 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +21 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +29 -1
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +102 -33
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +46 -3
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +4 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +6 -0
- package/deps/rocksdb/rocksdb/options/cf_options.h +2 -0
- package/deps/rocksdb/rocksdb/options/db_options.cc +15 -1
- package/deps/rocksdb/rocksdb/options/db_options.h +2 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +10 -0
- package/deps/rocksdb/rocksdb/options/options_parser.cc +3 -2
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +9 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +75 -35
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +4 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +8 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +40 -15
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +98 -17
- package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +14 -2
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +21 -91
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +13 -21
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +14 -5
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +62 -53
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +60 -38
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +175 -78
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +65 -36
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +25 -15
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +13 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +18 -4
- package/deps/rocksdb/rocksdb/table/meta_blocks.h +4 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +11 -0
- package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +2 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +47 -18
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +1 -2
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +95 -0
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +26 -15
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +62 -19
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +73 -34
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +10 -3
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +2 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +8 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +7 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +225 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +5 -2
- package/index.js +5 -17
- package/iterator.js +1 -1
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- 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
|
-
|
|
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
|
-
|
|
936
|
-
|
|
937
|
-
|
|
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
|
-
|
|
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
|
-
|
|
974
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1271
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1386
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1612
|
-
}
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
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
|
-
|
|
1620
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1634
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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->
|
|
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->
|
|
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->
|
|
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->
|
|
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
|
|
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
|
}
|