@nxtedition/rocksdb 13.5.13 → 15.0.1
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 +55 -180
- package/binding.gyp +2 -2
- package/chained-batch.js +9 -16
- package/deps/rocksdb/rocksdb/BUCK +18 -1
- package/deps/rocksdb/rocksdb/CMakeLists.txt +10 -3
- package/deps/rocksdb/rocksdb/Makefile +20 -9
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +90 -13
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +88 -75
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +44 -36
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +184 -148
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +5 -11
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +116 -47
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1 -1
- package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +3 -6
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -1
- package/deps/rocksdb/rocksdb/db/builder.cc +4 -2
- package/deps/rocksdb/rocksdb/db/c.cc +207 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +72 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +3 -2
- package/deps/rocksdb/rocksdb/db/column_family.h +5 -0
- package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +51 -38
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +29 -12
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +5 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +566 -366
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +131 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +13 -14
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +12 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +97 -76
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +11 -14
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +1 -1
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +8 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +16 -3
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +448 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +22 -20
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +4 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +5 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +7 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_iter.cc +104 -0
- package/deps/rocksdb/rocksdb/db/db_iter.h +4 -11
- package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +331 -58
- package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +129 -0
- package/deps/rocksdb/rocksdb/db/db_sst_test.cc +64 -0
- package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +40 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +25 -15
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +42 -24
- package/deps/rocksdb/rocksdb/db/db_test_util.h +29 -14
- package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +69 -36
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +0 -1
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +5 -4
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +8 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +275 -79
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +23 -5
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +591 -175
- package/deps/rocksdb/rocksdb/db/flush_job.cc +3 -4
- package/deps/rocksdb/rocksdb/db/log_reader.cc +5 -2
- package/deps/rocksdb/rocksdb/db/memtable.cc +84 -35
- package/deps/rocksdb/rocksdb/db/memtable.h +39 -34
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +1 -0
- package/deps/rocksdb/rocksdb/db/merge_operator.cc +1 -1
- package/deps/rocksdb/rocksdb/db/multi_scan.cc +11 -5
- package/deps/rocksdb/rocksdb/db/version_edit.cc +1 -1
- package/deps/rocksdb/rocksdb/db/version_edit.h +1 -1
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +34 -14
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +28 -5
- package/deps/rocksdb/rocksdb/db/version_set.cc +159 -14
- package/deps/rocksdb/rocksdb/db/version_set.h +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +60 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +16 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +75 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.cc +28 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +31 -1
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +50 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +57 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +0 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +266 -35
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -6
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +18 -2
- package/deps/rocksdb/rocksdb/env/env.cc +12 -0
- package/deps/rocksdb/rocksdb/env/env_test.cc +18 -0
- package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +2 -0
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +9 -5
- package/deps/rocksdb/rocksdb/env/io_posix.cc +4 -2
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +19 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +33 -31
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +42 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +93 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +43 -49
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +4 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +8 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +487 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +11 -12
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +135 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +12 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +12 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +19 -9
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +219 -24
- package/deps/rocksdb/rocksdb/include/rocksdb/point_lock_bench_tool.h +14 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/status.h +16 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +16 -4
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +13 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/types.h +4 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +0 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/user_defined_index.h +45 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +1 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +6 -1
- 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/memory/memory_allocator_impl.h +3 -3
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +77 -51
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +10 -13
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +16 -7
- package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +9 -4
- package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +2 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +6 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +13 -1
- package/deps/rocksdb/rocksdb/options/cf_options.h +6 -2
- package/deps/rocksdb/rocksdb/options/options.cc +2 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +9 -8
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +9 -5
- package/deps/rocksdb/rocksdb/port/mmap.cc +1 -1
- package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +51 -0
- package/deps/rocksdb/rocksdb/port/win/xpress_win.h +4 -0
- package/deps/rocksdb/rocksdb/src.mk +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1125 -765
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +35 -24
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +29 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +732 -256
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +225 -16
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +102 -26
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +2 -75
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +433 -141
- package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +17 -10
- package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy_impl.h +20 -0
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +112 -85
- package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +191 -36
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +108 -31
- package/deps/rocksdb/rocksdb/table/external_table.cc +7 -3
- package/deps/rocksdb/rocksdb/table/format.cc +6 -12
- package/deps/rocksdb/rocksdb/table/format.h +10 -0
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +1 -1
- package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +1 -1
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +1 -1
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +5 -0
- package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +118 -46
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +9 -8
- package/deps/rocksdb/rocksdb/table/table_builder.h +5 -0
- package/deps/rocksdb/rocksdb/table/table_properties.cc +16 -0
- package/deps/rocksdb/rocksdb/table/table_test.cc +1540 -155
- package/deps/rocksdb/rocksdb/test_util/testutil.h +21 -5
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +26 -5
- package/deps/rocksdb/rocksdb/tools/ldb.cc +1 -2
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +2 -0
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +9 -3
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +133 -165
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +173 -64
- package/deps/rocksdb/rocksdb/util/aligned_buffer.h +69 -0
- package/deps/rocksdb/rocksdb/util/atomic.h +6 -0
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +29 -20
- package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +10 -6
- package/deps/rocksdb/rocksdb/util/bit_fields.h +338 -0
- package/deps/rocksdb/rocksdb/util/coding.h +3 -3
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -2
- package/deps/rocksdb/rocksdb/util/compression.cc +777 -82
- package/deps/rocksdb/rocksdb/util/compression.h +5 -0
- package/deps/rocksdb/rocksdb/util/compression_test.cc +5 -3
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +2 -2
- package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +15 -14
- package/deps/rocksdb/rocksdb/util/interval_test.cc +102 -0
- package/deps/rocksdb/rocksdb/util/semaphore.h +164 -0
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +10 -6
- package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -2
- package/deps/rocksdb/rocksdb/util/slice_test.cc +136 -0
- package/deps/rocksdb/rocksdb/util/status.cc +1 -0
- package/deps/rocksdb/rocksdb/util/string_util.cc +2 -16
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +7 -4
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +35 -14
- package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +5 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/any_lock_manager_test.h +244 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_bench.cc +18 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_bench_tool.cc +159 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +1244 -161
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +66 -12
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_stress_test.cc +103 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +1275 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +40 -262
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test_common.h +78 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_validation_test_runner.h +469 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +2 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +9 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +18 -9
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +2 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +72 -44
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +92 -15
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +6 -20
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +143 -112
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +23 -16
- package/index.js +18 -42
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
- package/util.h +38 -12
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.cc +0 -17
|
@@ -132,8 +132,12 @@ class PointLockManager : public LockManager {
|
|
|
132
132
|
// this column family is no longer in use.
|
|
133
133
|
void RemoveColumnFamily(const ColumnFamilyHandle* cf) override;
|
|
134
134
|
|
|
135
|
+
// Caller makes sure that a lock on the key is not requested again, unless it
|
|
136
|
+
// is an upgrade or downgrade.
|
|
135
137
|
Status TryLock(PessimisticTransaction* txn, ColumnFamilyId column_family_id,
|
|
136
138
|
const std::string& key, Env* env, bool exclusive) override;
|
|
139
|
+
// Caller makes sure that a lock on the key is not requested again, unless it
|
|
140
|
+
// is an upgrade or downgrade.
|
|
137
141
|
Status TryLock(PessimisticTransaction* txn, ColumnFamilyId column_family_id,
|
|
138
142
|
const Endpoint& start, const Endpoint& end, Env* env,
|
|
139
143
|
bool exclusive) override;
|
|
@@ -153,7 +157,7 @@ class PointLockManager : public LockManager {
|
|
|
153
157
|
|
|
154
158
|
void Resize(uint32_t new_size) override;
|
|
155
159
|
|
|
156
|
-
|
|
160
|
+
protected:
|
|
157
161
|
PessimisticTransactionDB* txn_db_impl_;
|
|
158
162
|
|
|
159
163
|
// Default number of lock map stripes per column family
|
|
@@ -179,6 +183,11 @@ class PointLockManager : public LockManager {
|
|
|
179
183
|
// to avoid acquiring a mutex in order to look up a LockMap
|
|
180
184
|
std::unique_ptr<ThreadLocalPtr> lock_maps_cache_;
|
|
181
185
|
|
|
186
|
+
// Thread local variable for KeyLockWaiter. As one thread could only need one
|
|
187
|
+
// KeyLockWaiter.
|
|
188
|
+
// Lazy init on first time usage
|
|
189
|
+
ThreadLocalPtr key_lock_waiter_;
|
|
190
|
+
|
|
182
191
|
// Must be held when modifying wait_txn_map_ and rev_wait_txn_map_.
|
|
183
192
|
std::mutex wait_txn_map_mutex_;
|
|
184
193
|
|
|
@@ -196,18 +205,13 @@ class PointLockManager : public LockManager {
|
|
|
196
205
|
|
|
197
206
|
std::shared_ptr<LockMap> GetLockMap(uint32_t column_family_id);
|
|
198
207
|
|
|
199
|
-
Status AcquireWithTimeout(
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
208
|
+
virtual Status AcquireWithTimeout(
|
|
209
|
+
PessimisticTransaction* txn, LockMap* lock_map, LockMapStripe* stripe,
|
|
210
|
+
uint32_t column_family_id, const std::string& key, Env* env,
|
|
211
|
+
int64_t timeout, int64_t deadlock_timeout_us, const LockInfo& lock_info);
|
|
203
212
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const LockInfo& lock_info, uint64_t* wait_time,
|
|
207
|
-
autovector<TransactionID>* txn_ids);
|
|
208
|
-
|
|
209
|
-
void UnLockKey(PessimisticTransaction* txn, const std::string& key,
|
|
210
|
-
LockMapStripe* stripe, LockMap* lock_map, Env* env);
|
|
213
|
+
virtual void UnLockKey(PessimisticTransaction* txn, const std::string& key,
|
|
214
|
+
LockMapStripe* stripe, LockMap* lock_map, Env* env);
|
|
211
215
|
|
|
212
216
|
// Returns true if a deadlock is detected.
|
|
213
217
|
// Will DecrementWaiters() if a deadlock is detected.
|
|
@@ -219,6 +223,56 @@ class PointLockManager : public LockManager {
|
|
|
219
223
|
const autovector<TransactionID>& wait_ids);
|
|
220
224
|
void DecrementWaitersImpl(const PessimisticTransaction* txn,
|
|
221
225
|
const autovector<TransactionID>& wait_ids);
|
|
226
|
+
|
|
227
|
+
private:
|
|
228
|
+
Status AcquireLocked(LockMap* lock_map, LockMapStripe* stripe,
|
|
229
|
+
const std::string& key, Env* env,
|
|
230
|
+
const LockInfo& lock_info, uint64_t* wait_time,
|
|
231
|
+
autovector<TransactionID>* txn_ids);
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
class PerKeyPointLockManager : public PointLockManager {
|
|
235
|
+
public:
|
|
236
|
+
PerKeyPointLockManager(PessimisticTransactionDB* db,
|
|
237
|
+
const TransactionDBOptions& opt);
|
|
238
|
+
// No copying allowed
|
|
239
|
+
PerKeyPointLockManager(const PerKeyPointLockManager&) = delete;
|
|
240
|
+
PerKeyPointLockManager& operator=(const PerKeyPointLockManager&) = delete;
|
|
241
|
+
// No move allowed
|
|
242
|
+
PerKeyPointLockManager(PerKeyPointLockManager&&) = delete;
|
|
243
|
+
PerKeyPointLockManager& operator=(PerKeyPointLockManager&&) = delete;
|
|
244
|
+
|
|
245
|
+
~PerKeyPointLockManager() override {}
|
|
246
|
+
|
|
247
|
+
void UnLock(PessimisticTransaction* txn, const LockTracker& tracker,
|
|
248
|
+
Env* env) override;
|
|
249
|
+
void UnLock(PessimisticTransaction* txn, ColumnFamilyId column_family_id,
|
|
250
|
+
const std::string& key, Env* env) override;
|
|
251
|
+
void UnLock(PessimisticTransaction* txn, ColumnFamilyId column_family_id,
|
|
252
|
+
const Endpoint& start, const Endpoint& end, Env* env) override;
|
|
253
|
+
|
|
254
|
+
void UnLockKey(PessimisticTransaction* txn, const std::string& key,
|
|
255
|
+
LockMapStripe* stripe, LockMap* lock_map, Env* env) override;
|
|
256
|
+
|
|
257
|
+
protected:
|
|
258
|
+
Status AcquireWithTimeout(PessimisticTransaction* txn, LockMap* lock_map,
|
|
259
|
+
LockMapStripe* stripe, uint32_t column_family_id,
|
|
260
|
+
const std::string& key, Env* env, int64_t timeout,
|
|
261
|
+
int64_t deadlock_timeout_us,
|
|
262
|
+
const LockInfo& lock_info) override;
|
|
263
|
+
|
|
264
|
+
private:
|
|
265
|
+
Status AcquireLocked(LockMap* lock_map, LockMapStripe* stripe,
|
|
266
|
+
const std::string& key, Env* env,
|
|
267
|
+
const LockInfo& txn_lock_info, uint64_t* wait_time,
|
|
268
|
+
autovector<TransactionID>* txn_ids,
|
|
269
|
+
LockInfo** lock_info_ptr, bool* isUpgrade, bool fifo);
|
|
270
|
+
|
|
271
|
+
int64_t CalculateWaitEndTime(int64_t expire_time_hint, int64_t end_time);
|
|
272
|
+
|
|
273
|
+
Status FillWaitIds(LockInfo& lock_info, const LockInfo& txn_lock_info,
|
|
274
|
+
autovector<TransactionID>* wait_ids, bool& isUpgrade,
|
|
275
|
+
TransactionID& my_txn_id, const std::string& key);
|
|
222
276
|
};
|
|
223
277
|
|
|
224
278
|
} // namespace ROCKSDB_NAMESPACE
|
package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_stress_test.cc
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
//
|
|
3
|
+
// This source code is licensed under both the GPLv2 (found in the
|
|
4
|
+
// COPYING file in the root directory) and Apache 2.0 License
|
|
5
|
+
// (found in the LICENSE.Apache file in the root directory).
|
|
6
|
+
|
|
7
|
+
#include "utilities/transactions/lock/point/point_lock_manager_test.h"
|
|
8
|
+
#include "utilities/transactions/lock/point/point_lock_validation_test_runner.h"
|
|
9
|
+
|
|
10
|
+
namespace ROCKSDB_NAMESPACE {
|
|
11
|
+
|
|
12
|
+
struct PointLockCorrectnessCheckTestParam {
|
|
13
|
+
bool is_per_key_point_lock_manager;
|
|
14
|
+
uint32_t thread_count;
|
|
15
|
+
uint32_t key_count;
|
|
16
|
+
uint32_t max_num_keys_to_lock_per_txn;
|
|
17
|
+
uint32_t execution_time_sec;
|
|
18
|
+
LockTypeToTest lock_type;
|
|
19
|
+
int64_t lock_timeout_us;
|
|
20
|
+
int64_t lock_expiration_us;
|
|
21
|
+
bool allow_non_deadlock_error;
|
|
22
|
+
// to simulate some useful work
|
|
23
|
+
uint32_t max_sleep_after_lock_acquisition_ms;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
class PointLockCorrectnessCheckTest
|
|
27
|
+
: public PointLockManagerTest,
|
|
28
|
+
public testing::WithParamInterface<PointLockCorrectnessCheckTestParam> {
|
|
29
|
+
public:
|
|
30
|
+
void SetUp() override {
|
|
31
|
+
init();
|
|
32
|
+
auto const& param = GetParam();
|
|
33
|
+
auto per_key_lock_manager = param.is_per_key_point_lock_manager;
|
|
34
|
+
if (per_key_lock_manager) {
|
|
35
|
+
locker_ = std::make_shared<PerKeyPointLockManager>(
|
|
36
|
+
static_cast<PessimisticTransactionDB*>(db_), txndb_opt_);
|
|
37
|
+
} else {
|
|
38
|
+
locker_ = std::make_shared<PointLockManager>(
|
|
39
|
+
static_cast<PessimisticTransactionDB*>(db_), txndb_opt_);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
txn_opt_.deadlock_detect = true;
|
|
43
|
+
txn_opt_.lock_timeout = param.lock_timeout_us;
|
|
44
|
+
txn_opt_.expiration = param.lock_expiration_us;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
protected:
|
|
48
|
+
TransactionOptions txn_opt_;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
TEST_P(PointLockCorrectnessCheckTest, LockCorrectnessValidation) {
|
|
52
|
+
auto const& param = GetParam();
|
|
53
|
+
PointLockValidationTestRunner test_runner(
|
|
54
|
+
env_, txndb_opt_, locker_, db_, txn_opt_, param.thread_count,
|
|
55
|
+
param.key_count, param.max_num_keys_to_lock_per_txn,
|
|
56
|
+
param.execution_time_sec, static_cast<LockTypeToTest>(param.lock_type),
|
|
57
|
+
param.allow_non_deadlock_error,
|
|
58
|
+
param.max_sleep_after_lock_acquisition_ms);
|
|
59
|
+
test_runner.run();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
constexpr auto X_S_LOCK = LockTypeToTest::EXCLUSIVE_AND_SHARED;
|
|
63
|
+
constexpr auto X_LOCK = LockTypeToTest::EXCLUSIVE_ONLY;
|
|
64
|
+
constexpr auto S_LOCK = LockTypeToTest::SHARED_ONLY;
|
|
65
|
+
|
|
66
|
+
INSTANTIATE_TEST_CASE_P(
|
|
67
|
+
PointLockCorrectnessCheckTestSuite, PointLockCorrectnessCheckTest,
|
|
68
|
+
::testing::ValuesIn(std::vector<PointLockCorrectnessCheckTestParam>{
|
|
69
|
+
// 2 second timeout and no expiration simulates myrocks default
|
|
70
|
+
// configuration
|
|
71
|
+
{true, 16, 16, 8, 10, X_S_LOCK, 2000, -1, true, 0},
|
|
72
|
+
{false, 16, 16, 8, 10, X_S_LOCK, 2000, -1, true, 0},
|
|
73
|
+
{true, 16, 16, 8, 10, X_LOCK, 2000, -1, true, 0},
|
|
74
|
+
{false, 16, 16, 8, 10, X_LOCK, 2000, -1, true, 0},
|
|
75
|
+
{true, 16, 16, 8, 10, S_LOCK, 2000, -1, true, 0},
|
|
76
|
+
{false, 16, 16, 8, 10, S_LOCK, 2000, -1, true, 0},
|
|
77
|
+
// short timeout and expiration to test lock stealing
|
|
78
|
+
{true, 16, 16, 8, 10, X_S_LOCK, 10, 10, true, 10},
|
|
79
|
+
{false, 16, 16, 8, 10, X_S_LOCK, 10, 10, true, 10},
|
|
80
|
+
{true, 16, 16, 8, 10, X_LOCK, 10, 10, true, 10},
|
|
81
|
+
{false, 16, 16, 8, 10, X_LOCK, 10, 10, true, 10},
|
|
82
|
+
{true, 16, 16, 8, 10, S_LOCK, 10, 10, true, 10},
|
|
83
|
+
{false, 16, 16, 8, 10, S_LOCK, 10, 10, true, 10},
|
|
84
|
+
// long timeout and expiration to test deadlock detection without
|
|
85
|
+
// timeout
|
|
86
|
+
{true, 16, 16, 8, 10, X_S_LOCK, 100000, 100000, false, 0},
|
|
87
|
+
{false, 16, 16, 8, 10, X_S_LOCK, 100000, 100000, false, 0},
|
|
88
|
+
{true, 16, 16, 8, 10, X_LOCK, 100000, 100000, false, 0},
|
|
89
|
+
{false, 16, 16, 8, 10, X_LOCK, 100000, 100000, false, 0},
|
|
90
|
+
{true, 16, 16, 8, 10, S_LOCK, 100000, 100000, false, 0},
|
|
91
|
+
{false, 16, 16, 8, 10, S_LOCK, 100000, 100000, false, 0},
|
|
92
|
+
// Low lock contention
|
|
93
|
+
{true, 4, 1024 * 1024, 2, 10, S_LOCK, 100000, 100000, false, 0},
|
|
94
|
+
{false, 4, 1024 * 1024, 2, 10, S_LOCK, 100000, 100000, false, 0},
|
|
95
|
+
}));
|
|
96
|
+
|
|
97
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
98
|
+
|
|
99
|
+
int main(int argc, char** argv) {
|
|
100
|
+
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
|
|
101
|
+
::testing::InitGoogleTest(&argc, argv);
|
|
102
|
+
return RUN_ALL_TESTS();
|
|
103
|
+
}
|