@nxtedition/rocksdb 15.1.2 → 15.1.4

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 (154) hide show
  1. package/.claude/settings.local.json +15 -0
  2. package/binding.cc +79 -38
  3. package/build.sh +1 -2
  4. package/deps/rocksdb/rocksdb/BUCK +10 -8
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +27 -2
  6. package/deps/rocksdb/rocksdb/Makefile +27 -116
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -1
  8. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +101 -124
  9. package/deps/rocksdb/rocksdb/cache/clock_cache.h +47 -30
  10. package/deps/rocksdb/rocksdb/db/c.cc +793 -131
  11. package/deps/rocksdb/rocksdb/db/c_test.c +571 -0
  12. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +226 -0
  13. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +4 -0
  14. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +95 -59
  15. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +2 -2
  16. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +45 -35
  17. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +8 -4
  18. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +1 -1
  19. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -6
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +8 -2
  21. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +47 -0
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +12 -2
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +82 -0
  24. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +2 -2
  25. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +1 -1
  26. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +69 -24
  27. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +9 -1
  28. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +65 -0
  29. package/deps/rocksdb/rocksdb/db/db_etc3_test.cc +161 -0
  30. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -0
  31. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +20 -7
  32. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +13 -0
  33. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +114 -39
  34. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +3 -0
  35. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +3 -3
  36. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +1 -1
  37. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +39 -25
  38. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +361 -0
  39. package/deps/rocksdb/rocksdb/db/db_options_test.cc +35 -0
  40. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +83 -0
  41. package/deps/rocksdb/rocksdb/db/db_test.cc +249 -4
  42. package/deps/rocksdb/rocksdb/db/db_test2.cc +3 -0
  43. package/deps/rocksdb/rocksdb/db/db_test_util.cc +2 -1
  44. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +3 -2
  45. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +7 -7
  46. package/deps/rocksdb/rocksdb/db/listener_test.cc +7 -17
  47. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +4 -2
  48. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +41 -0
  49. package/deps/rocksdb/rocksdb/db/repair.cc +2 -2
  50. package/deps/rocksdb/rocksdb/db/version_edit.h +7 -4
  51. package/deps/rocksdb/rocksdb/db/version_set.cc +299 -90
  52. package/deps/rocksdb/rocksdb/db/version_set.h +56 -9
  53. package/deps/rocksdb/rocksdb/db/version_set_test.cc +41 -39
  54. package/deps/rocksdb/rocksdb/db/version_util.h +3 -2
  55. package/deps/rocksdb/rocksdb/db/wal_manager.cc +7 -1
  56. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +48 -10
  57. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +1 -0
  58. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +5 -1
  59. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +16 -5
  60. package/deps/rocksdb/rocksdb/env/env_test.cc +126 -41
  61. package/deps/rocksdb/rocksdb/env/fs_posix.cc +14 -7
  62. package/deps/rocksdb/rocksdb/env/io_posix.cc +304 -112
  63. package/deps/rocksdb/rocksdb/env/io_posix.h +16 -4
  64. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +43 -0
  65. package/deps/rocksdb/rocksdb/folly.mk +148 -0
  66. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +29 -3
  67. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +73 -0
  68. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +246 -0
  69. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +0 -2
  70. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +15 -9
  71. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +19 -9
  72. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
  73. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -4
  74. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +14 -0
  75. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +67 -6
  76. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +1 -7
  77. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
  78. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +6 -14
  79. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +8 -1
  80. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +2 -2
  81. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +0 -4
  82. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +33 -5
  83. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +6 -0
  84. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  85. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +2 -0
  86. package/deps/rocksdb/rocksdb/monitoring/thread_status_impl.cc +5 -2
  87. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -2
  88. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +6 -6
  89. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater_debug.cc +2 -2
  90. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +10 -5
  91. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
  92. package/deps/rocksdb/rocksdb/options/cf_options.cc +15 -3
  93. package/deps/rocksdb/rocksdb/options/cf_options.h +7 -0
  94. package/deps/rocksdb/rocksdb/options/db_options.cc +27 -36
  95. package/deps/rocksdb/rocksdb/options/db_options.h +3 -2
  96. package/deps/rocksdb/rocksdb/options/options.cc +4 -0
  97. package/deps/rocksdb/rocksdb/options/options_helper.cc +8 -2
  98. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +4 -1
  99. package/deps/rocksdb/rocksdb/options/options_test.cc +19 -3
  100. package/deps/rocksdb/rocksdb/src.mk +1 -1
  101. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +155 -32
  102. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +7 -3
  103. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +169 -125
  104. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +22 -7
  105. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +43 -24
  106. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +9 -5
  107. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +9 -8
  108. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +17 -0
  109. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +15 -5
  110. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +13 -18
  111. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +29 -0
  112. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +6 -0
  113. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +15 -0
  114. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +79 -19
  115. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +48 -20
  116. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +51 -0
  117. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +19 -0
  118. package/deps/rocksdb/rocksdb/table/block_based/user_defined_index_wrapper.h +1 -1
  119. package/deps/rocksdb/rocksdb/table/external_table.cc +2 -2
  120. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +3 -2
  121. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +3 -1
  122. package/deps/rocksdb/rocksdb/table/table_builder.h +5 -0
  123. package/deps/rocksdb/rocksdb/table/table_reader.h +4 -2
  124. package/deps/rocksdb/rocksdb/table/table_test.cc +48 -39
  125. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +4 -0
  126. package/deps/rocksdb/rocksdb/test_util/sync_point.h +32 -0
  127. package/deps/rocksdb/rocksdb/test_util/testutil.h +6 -2
  128. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +14 -4
  129. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
  130. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +3 -2
  131. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +63 -12
  132. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.cc +16 -1
  133. package/deps/rocksdb/rocksdb/util/auto_tune_compressor.h +5 -1
  134. package/deps/rocksdb/rocksdb/util/bit_fields.h +133 -23
  135. package/deps/rocksdb/rocksdb/util/bloom_test.cc +2 -5
  136. package/deps/rocksdb/rocksdb/util/compression.cc +51 -23
  137. package/deps/rocksdb/rocksdb/util/compression_test.cc +525 -270
  138. package/deps/rocksdb/rocksdb/util/filter_bench.cc +3 -4
  139. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +11 -2
  140. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +4 -1
  141. package/deps/rocksdb/rocksdb/util/slice_test.cc +92 -0
  142. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +2 -2
  143. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -2
  144. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +2 -2
  145. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +19 -2
  146. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +75 -0
  147. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +1 -0
  148. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +303 -111
  149. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +379 -0
  150. package/deps/rocksdb/rocksdb.gyp +1 -0
  151. package/iterator.js +66 -70
  152. package/package.json +6 -6
  153. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  154. package/deps/rocksdb/rocksdb/table/block_based/index_builder_test.cc +0 -183
@@ -1655,42 +1655,6 @@ void GenerateFilesAndRequest(Env* env, const std::string& fname,
1655
1655
  }
1656
1656
  }
1657
1657
 
1658
- TEST_F(EnvPosixTest, MultiReadIOUringError) {
1659
- // In this test we don't do aligned read, so we can't do direct I/O.
1660
- EnvOptions soptions;
1661
- soptions.use_direct_reads = soptions.use_direct_writes = false;
1662
- std::string fname = test::PerThreadDBPath(env_, "testfile");
1663
-
1664
- std::vector<std::string> scratches;
1665
- std::vector<ReadRequest> reqs;
1666
- GenerateFilesAndRequest(env_, fname, &reqs, &scratches);
1667
- // Query the data
1668
- std::unique_ptr<RandomAccessFile> file;
1669
- ASSERT_OK(env_->NewRandomAccessFile(fname, &file, soptions));
1670
-
1671
- bool io_uring_wait_cqe_called = false;
1672
- SyncPoint::GetInstance()->SetCallBack(
1673
- "PosixRandomAccessFile::MultiRead:io_uring_wait_cqe:return",
1674
- [&](void* arg) {
1675
- if (!io_uring_wait_cqe_called) {
1676
- io_uring_wait_cqe_called = true;
1677
- ssize_t& ret = *(static_cast<ssize_t*>(arg));
1678
- ret = 1;
1679
- }
1680
- });
1681
- SyncPoint::GetInstance()->EnableProcessing();
1682
-
1683
- Status s = file->MultiRead(reqs.data(), reqs.size());
1684
- if (io_uring_wait_cqe_called) {
1685
- ASSERT_NOK(s);
1686
- } else {
1687
- s.PermitUncheckedError();
1688
- }
1689
-
1690
- SyncPoint::GetInstance()->DisableProcessing();
1691
- SyncPoint::GetInstance()->ClearAllCallBacks();
1692
- }
1693
-
1694
1658
  TEST_F(EnvPosixTest, MultiReadIOUringError2) {
1695
1659
  // In this test we don't do aligned read, so we can't do direct I/O.
1696
1660
  EnvOptions soptions;
@@ -1706,19 +1670,20 @@ TEST_F(EnvPosixTest, MultiReadIOUringError2) {
1706
1670
 
1707
1671
  bool io_uring_submit_and_wait_called = false;
1708
1672
  SyncPoint::GetInstance()->SetCallBack(
1709
- "PosixRandomAccessFile::MultiRead:io_uring_submit_and_wait:return1",
1673
+ "PosixRandomAccessFile::MultiRead:io_uring_sq_ready:return1",
1710
1674
  [&](void* arg) {
1711
1675
  io_uring_submit_and_wait_called = true;
1712
- ssize_t* ret = static_cast<ssize_t*>(arg);
1713
- (*ret)--;
1676
+ unsigned* ret = static_cast<unsigned*>(arg);
1677
+ *ret = 1;
1714
1678
  });
1715
1679
  SyncPoint::GetInstance()->SetCallBack(
1716
1680
  "PosixRandomAccessFile::MultiRead:io_uring_submit_and_wait:return2",
1717
1681
  [&](void* arg) {
1718
1682
  struct io_uring* iu = static_cast<struct io_uring*>(arg);
1719
1683
  struct io_uring_cqe* cqe;
1720
- assert(io_uring_wait_cqe(iu, &cqe) == 0);
1721
- io_uring_cqe_seen(iu, cqe);
1684
+ // CQ should be empty after drain - peek should fail
1685
+ int ret = io_uring_peek_cqe(iu, &cqe);
1686
+ assert(-EAGAIN == ret); // No CQEs available
1722
1687
  });
1723
1688
  SyncPoint::GetInstance()->EnableProcessing();
1724
1689
 
@@ -3640,6 +3605,126 @@ TEST_F(TestAsyncRead, ReadAsync) {
3640
3605
  }
3641
3606
  }
3642
3607
 
3608
+ // Test ReadAsync -> MultiRead -> Poll with real io_uring (not mock).
3609
+ // This verifies that MultiRead doesn't interfere with async read buffers.
3610
+ TEST_F(TestAsyncRead, InterleavingIOUringOperations) {
3611
+ #if defined(ROCKSDB_IOURING_PRESENT)
3612
+ // Use the real filesystem directly (not the mock ReadAsyncFS).
3613
+ std::shared_ptr<FileSystem> fs = env_->GetFileSystem();
3614
+ std::string fname = test::PerThreadDBPath(env_, "testfile_iouring");
3615
+
3616
+ constexpr size_t kSectorSize = 4096;
3617
+ constexpr size_t kNumSectors = 8;
3618
+
3619
+ // 1. Create & write to a file.
3620
+ {
3621
+ std::unique_ptr<FSWritableFile> wfile;
3622
+ ASSERT_OK(
3623
+ fs->NewWritableFile(fname, FileOptions(), &wfile, nullptr /*dbg*/));
3624
+
3625
+ for (size_t i = 0; i < kNumSectors; ++i) {
3626
+ auto data = NewAligned(kSectorSize * 8, static_cast<char>(i + 1));
3627
+ Slice slice(data.get(), kSectorSize);
3628
+ ASSERT_OK(wfile->Append(slice, IOOptions(), nullptr));
3629
+ }
3630
+ ASSERT_OK(wfile->Close(IOOptions(), nullptr));
3631
+ }
3632
+
3633
+ // 2. Test interleaved ReadAsync and MultiRead operations.
3634
+ {
3635
+ std::unique_ptr<FSRandomAccessFile> file;
3636
+ ASSERT_OK(fs->NewRandomAccessFile(fname, FileOptions(), &file, nullptr));
3637
+
3638
+ IOOptions opts;
3639
+ std::vector<void*> io_handles(kNumSectors);
3640
+ std::vector<FSReadRequest> async_reqs(kNumSectors);
3641
+ std::vector<std::unique_ptr<char, Deleter>> async_data;
3642
+ std::vector<size_t> vals;
3643
+ IOHandleDeleter del_fn;
3644
+
3645
+ // Initialize async read requests.
3646
+ for (size_t i = 0; i < kNumSectors; i++) {
3647
+ async_reqs[i].offset = i * kSectorSize;
3648
+ async_reqs[i].len = kSectorSize;
3649
+ async_data.emplace_back(NewAligned(kSectorSize, 0));
3650
+ async_reqs[i].scratch = async_data.back().get();
3651
+ vals.push_back(i);
3652
+ }
3653
+
3654
+ // Callback function for async reads.
3655
+ std::function<void(FSReadRequest&, void*)> callback =
3656
+ [&](FSReadRequest& req, void* cb_arg) {
3657
+ assert(cb_arg != nullptr);
3658
+ size_t i = *(reinterpret_cast<size_t*>(cb_arg));
3659
+ async_reqs[i].offset = req.offset;
3660
+ async_reqs[i].result = req.result;
3661
+ async_reqs[i].status = req.status;
3662
+ };
3663
+
3664
+ // Submit asynchronous read requests.
3665
+ for (size_t i = 0; i < kNumSectors; i++) {
3666
+ void* cb_arg = static_cast<void*>(&(vals[i]));
3667
+ IOStatus s = file->ReadAsync(async_reqs[i], opts, callback, cb_arg,
3668
+ &(io_handles[i]), &del_fn, nullptr);
3669
+ if (s.IsNotSupported()) {
3670
+ // io_uring not supported on this system, skip the test.
3671
+ fprintf(stderr, "Skipping test - io_uring not supported: %s\n",
3672
+ s.ToString().c_str());
3673
+ for (size_t j = 0; j < i; j++) {
3674
+ if (io_handles[j] != nullptr) {
3675
+ del_fn(io_handles[j]);
3676
+ }
3677
+ }
3678
+ return;
3679
+ }
3680
+ // For any other error, fail the test.
3681
+ ASSERT_OK(s);
3682
+ }
3683
+
3684
+ // Do a MultiRead on same sectors while async reads are submitted.
3685
+ std::vector<FSReadRequest> multi_reqs(kNumSectors);
3686
+ std::vector<std::unique_ptr<char, Deleter>> multi_data;
3687
+ for (size_t i = 0; i < kNumSectors; i++) {
3688
+ multi_reqs[i].offset = i * kSectorSize;
3689
+ multi_reqs[i].len = kSectorSize;
3690
+ multi_data.emplace_back(NewAligned(kSectorSize, 0));
3691
+ multi_reqs[i].scratch = multi_data.back().get();
3692
+ }
3693
+ ASSERT_OK(file->MultiRead(multi_reqs.data(), kNumSectors, opts, nullptr));
3694
+
3695
+ // Check the status of MultiRead requests (should all succeed).
3696
+ for (size_t i = 0; i < kNumSectors; i++) {
3697
+ auto buf = NewAligned(kSectorSize * 8, static_cast<char>(i + 1));
3698
+ Slice expected_data(buf.get(), kSectorSize);
3699
+
3700
+ ASSERT_EQ(multi_reqs[i].offset, i * kSectorSize);
3701
+ ASSERT_OK(multi_reqs[i].status);
3702
+ ASSERT_EQ(expected_data.ToString(), multi_reqs[i].result.ToString());
3703
+ }
3704
+
3705
+ // Poll for the submitted async requests.
3706
+ ASSERT_OK(fs->Poll(io_handles, kNumSectors));
3707
+
3708
+ // Check the status of async read requests (should all succeed).
3709
+ for (size_t i = 0; i < kNumSectors; i++) {
3710
+ auto buf = NewAligned(kSectorSize * 8, static_cast<char>(i + 1));
3711
+ Slice expected_data(buf.get(), kSectorSize);
3712
+
3713
+ ASSERT_EQ(async_reqs[i].offset, i * kSectorSize);
3714
+ ASSERT_OK(async_reqs[i].status);
3715
+ ASSERT_EQ(expected_data.ToString(), async_reqs[i].result.ToString());
3716
+ }
3717
+
3718
+ // Delete io_handles.
3719
+ for (size_t i = 0; i < io_handles.size(); i++) {
3720
+ del_fn(io_handles[i]);
3721
+ }
3722
+ }
3723
+ #else
3724
+ fprintf(stderr, "Skipping test - ROCKSDB_IOURING_PRESENT not defined\n");
3725
+ #endif
3726
+ }
3727
+
3643
3728
  struct StaticDestructionTester {
3644
3729
  bool activated = false;
3645
3730
  ~StaticDestructionTester() {
@@ -270,7 +270,10 @@ class PosixFileSystem : public FileSystem {
270
270
  options
271
271
  #if defined(ROCKSDB_IOURING_PRESENT)
272
272
  ,
273
- !IsIOUringEnabled() ? nullptr : thread_local_io_urings_.get()
273
+ !IsIOUringEnabled() ? nullptr
274
+ : thread_local_async_read_io_urings_.get(),
275
+ !IsIOUringEnabled() ? nullptr
276
+ : thread_local_multi_read_io_urings_.get()
274
277
  #endif
275
278
  ));
276
279
  }
@@ -1087,8 +1090,9 @@ class PosixFileSystem : public FileSystem {
1087
1090
  #if defined(ROCKSDB_IOURING_PRESENT)
1088
1091
  // io_uring_queue_init.
1089
1092
  struct io_uring* iu = nullptr;
1090
- if (thread_local_io_urings_) {
1091
- iu = static_cast<struct io_uring*>(thread_local_io_urings_->Get());
1093
+ if (thread_local_async_read_io_urings_) {
1094
+ iu = static_cast<struct io_uring*>(
1095
+ thread_local_async_read_io_urings_->Get());
1092
1096
  }
1093
1097
 
1094
1098
  // Init failed, platform doesn't support io_uring.
@@ -1161,8 +1165,9 @@ class PosixFileSystem : public FileSystem {
1161
1165
  #if defined(ROCKSDB_IOURING_PRESENT)
1162
1166
  // io_uring_queue_init.
1163
1167
  struct io_uring* iu = nullptr;
1164
- if (thread_local_io_urings_) {
1165
- iu = static_cast<struct io_uring*>(thread_local_io_urings_->Get());
1168
+ if (thread_local_async_read_io_urings_) {
1169
+ iu = static_cast<struct io_uring*>(
1170
+ thread_local_async_read_io_urings_->Get());
1166
1171
  }
1167
1172
 
1168
1173
  // Init failed, platform doesn't support io_uring.
@@ -1277,7 +1282,8 @@ class PosixFileSystem : public FileSystem {
1277
1282
 
1278
1283
  #if defined(ROCKSDB_IOURING_PRESENT)
1279
1284
  // io_uring instance
1280
- std::unique_ptr<ThreadLocalPtr> thread_local_io_urings_;
1285
+ std::unique_ptr<ThreadLocalPtr> thread_local_async_read_io_urings_;
1286
+ std::unique_ptr<ThreadLocalPtr> thread_local_multi_read_io_urings_;
1281
1287
  #endif
1282
1288
 
1283
1289
  size_t page_size_;
@@ -1337,7 +1343,8 @@ PosixFileSystem::PosixFileSystem()
1337
1343
  // io_uring can be created.
1338
1344
  struct io_uring* new_io_uring = CreateIOUring();
1339
1345
  if (new_io_uring != nullptr) {
1340
- thread_local_io_urings_.reset(new ThreadLocalPtr(DeleteIOUring));
1346
+ thread_local_async_read_io_urings_.reset(new ThreadLocalPtr(DeleteIOUring));
1347
+ thread_local_multi_read_io_urings_.reset(new ThreadLocalPtr(DeleteIOUring));
1341
1348
  delete new_io_uring;
1342
1349
  }
1343
1350
  #endif