@nxtedition/rocksdb 6.0.2 → 6.0.3

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 (257) hide show
  1. package/BUILDING.md +12 -4
  2. package/binding.cc +2 -0
  3. package/deps/rocksdb/rocksdb/CMakeLists.txt +9 -0
  4. package/deps/rocksdb/rocksdb/Makefile +16 -5
  5. package/deps/rocksdb/rocksdb/TARGETS +23 -2
  6. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  7. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  8. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  9. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  10. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  11. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  12. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  13. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  14. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  15. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  16. package/deps/rocksdb/rocksdb/db/builder.cc +12 -4
  17. package/deps/rocksdb/rocksdb/db/c.cc +26 -0
  18. package/deps/rocksdb/rocksdb/db/c_test.c +3 -0
  19. package/deps/rocksdb/rocksdb/db/column_family.cc +8 -2
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +29 -6
  21. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +8 -2
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +16 -4
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +2 -1
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +16 -0
  25. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +402 -30
  26. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +2 -12
  27. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +14 -0
  28. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +7 -5
  29. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +1 -1
  30. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +33 -7
  31. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +54 -23
  32. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -0
  33. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +8 -1
  34. package/deps/rocksdb/rocksdb/db/db_options_test.cc +16 -0
  35. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +14 -15
  36. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +331 -0
  37. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +5 -0
  38. package/deps/rocksdb/rocksdb/db/db_test.cc +16 -0
  39. package/deps/rocksdb/rocksdb/db/db_test2.cc +221 -92
  40. package/deps/rocksdb/rocksdb/db/db_test_util.cc +6 -2
  41. package/deps/rocksdb/rocksdb/db/db_test_util.h +4 -2
  42. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +1 -171
  43. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.cc +96 -0
  44. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.h +126 -0
  45. package/deps/rocksdb/rocksdb/db/experimental.cc +1 -1
  46. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +57 -0
  47. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +13 -2
  48. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +2 -0
  49. package/deps/rocksdb/rocksdb/db/flush_job.cc +10 -11
  50. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +11 -1
  51. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
  52. package/deps/rocksdb/rocksdb/db/repair.cc +12 -1
  53. package/deps/rocksdb/rocksdb/db/repair_test.cc +32 -10
  54. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +3 -1
  55. package/deps/rocksdb/rocksdb/db/table_cache.cc +19 -127
  56. package/deps/rocksdb/rocksdb/db/table_cache.h +3 -2
  57. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +140 -0
  58. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +130 -128
  59. package/deps/rocksdb/rocksdb/db/version_edit.cc +20 -0
  60. package/deps/rocksdb/rocksdb/db/version_edit.h +13 -4
  61. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +14 -14
  62. package/deps/rocksdb/rocksdb/db/version_set.cc +205 -212
  63. package/deps/rocksdb/rocksdb/db/version_set.h +11 -0
  64. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +154 -0
  65. package/deps/rocksdb/rocksdb/db/version_set_test.cc +10 -9
  66. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +2 -0
  67. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
  68. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +15 -0
  69. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +159 -65
  70. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +43 -21
  71. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +142 -17
  72. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +23 -27
  73. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +2 -3
  74. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +23 -5
  75. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +14 -1
  76. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  77. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +17 -0
  78. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -0
  79. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +4 -1
  80. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
  81. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +189 -0
  82. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
  83. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -0
  84. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
  85. package/deps/rocksdb/rocksdb/options/cf_options.cc +13 -0
  86. package/deps/rocksdb/rocksdb/options/db_options.cc +8 -0
  87. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  88. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  89. package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
  90. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -4
  91. package/deps/rocksdb/rocksdb/options/options_test.cc +107 -9
  92. package/deps/rocksdb/rocksdb/src.mk +4 -1
  93. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +9 -4
  94. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +80 -6
  95. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +8 -2
  96. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +81 -757
  97. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +21 -15
  98. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +9 -3
  99. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +754 -0
  100. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +2 -1
  101. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +8 -0
  102. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -10
  103. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +59 -1
  104. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +18 -0
  105. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +0 -61
  106. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +0 -13
  107. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  108. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -2
  109. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +2 -2
  110. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +2 -1
  111. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -1
  112. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +60 -2
  113. package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -0
  114. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +39 -0
  115. package/deps/rocksdb/rocksdb/table/multiget_context.h +46 -2
  116. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -1
  117. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +1 -1
  118. package/deps/rocksdb/rocksdb/table/table_reader.h +13 -0
  119. package/deps/rocksdb/rocksdb/table/unique_id.cc +27 -0
  120. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +3 -0
  121. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -0
  122. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +23 -7
  123. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +9 -1
  124. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +72 -0
  125. package/deps/rocksdb/rocksdb/util/async_file_reader.h +144 -0
  126. package/deps/rocksdb/rocksdb/util/compression.h +49 -0
  127. package/deps/rocksdb/rocksdb/util/coro_utils.h +111 -0
  128. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +55 -0
  129. package/deps/rocksdb/rocksdb.gyp +16 -15
  130. package/package-lock.json +23687 -0
  131. package/package.json +2 -30
  132. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  133. package/prebuilds/darwin-x64/node.napi.node +0 -0
  134. package/prebuilds/linux-x64/node.napi.node +0 -0
  135. package/deps/liburing/liburing/README +0 -46
  136. package/deps/liburing/liburing/test/232c93d07b74-test.c +0 -305
  137. package/deps/liburing/liburing/test/35fa71a030ca-test.c +0 -329
  138. package/deps/liburing/liburing/test/500f9fbadef8-test.c +0 -89
  139. package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +0 -93
  140. package/deps/liburing/liburing/test/8a9973408177-test.c +0 -106
  141. package/deps/liburing/liburing/test/917257daa0fe-test.c +0 -53
  142. package/deps/liburing/liburing/test/Makefile +0 -312
  143. package/deps/liburing/liburing/test/a0908ae19763-test.c +0 -58
  144. package/deps/liburing/liburing/test/a4c0b3decb33-test.c +0 -180
  145. package/deps/liburing/liburing/test/accept-link.c +0 -251
  146. package/deps/liburing/liburing/test/accept-reuse.c +0 -164
  147. package/deps/liburing/liburing/test/accept-test.c +0 -79
  148. package/deps/liburing/liburing/test/accept.c +0 -476
  149. package/deps/liburing/liburing/test/across-fork.c +0 -283
  150. package/deps/liburing/liburing/test/b19062a56726-test.c +0 -53
  151. package/deps/liburing/liburing/test/b5837bd5311d-test.c +0 -77
  152. package/deps/liburing/liburing/test/ce593a6c480a-test.c +0 -135
  153. package/deps/liburing/liburing/test/close-opath.c +0 -122
  154. package/deps/liburing/liburing/test/config +0 -10
  155. package/deps/liburing/liburing/test/connect.c +0 -398
  156. package/deps/liburing/liburing/test/cq-full.c +0 -96
  157. package/deps/liburing/liburing/test/cq-overflow.c +0 -294
  158. package/deps/liburing/liburing/test/cq-peek-batch.c +0 -102
  159. package/deps/liburing/liburing/test/cq-ready.c +0 -94
  160. package/deps/liburing/liburing/test/cq-size.c +0 -58
  161. package/deps/liburing/liburing/test/d4ae271dfaae-test.c +0 -96
  162. package/deps/liburing/liburing/test/d77a67ed5f27-test.c +0 -65
  163. package/deps/liburing/liburing/test/defer.c +0 -307
  164. package/deps/liburing/liburing/test/double-poll-crash.c +0 -186
  165. package/deps/liburing/liburing/test/eeed8b54e0df-test.c +0 -114
  166. package/deps/liburing/liburing/test/empty-eownerdead.c +0 -42
  167. package/deps/liburing/liburing/test/eventfd-disable.c +0 -151
  168. package/deps/liburing/liburing/test/eventfd-ring.c +0 -97
  169. package/deps/liburing/liburing/test/eventfd.c +0 -112
  170. package/deps/liburing/liburing/test/fadvise.c +0 -202
  171. package/deps/liburing/liburing/test/fallocate.c +0 -249
  172. package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +0 -138
  173. package/deps/liburing/liburing/test/file-register.c +0 -843
  174. package/deps/liburing/liburing/test/file-update.c +0 -173
  175. package/deps/liburing/liburing/test/files-exit-hang-poll.c +0 -128
  176. package/deps/liburing/liburing/test/files-exit-hang-timeout.c +0 -134
  177. package/deps/liburing/liburing/test/fixed-link.c +0 -90
  178. package/deps/liburing/liburing/test/fsync.c +0 -224
  179. package/deps/liburing/liburing/test/hardlink.c +0 -136
  180. package/deps/liburing/liburing/test/helpers.c +0 -135
  181. package/deps/liburing/liburing/test/helpers.h +0 -67
  182. package/deps/liburing/liburing/test/io-cancel.c +0 -537
  183. package/deps/liburing/liburing/test/io_uring_enter.c +0 -296
  184. package/deps/liburing/liburing/test/io_uring_register.c +0 -664
  185. package/deps/liburing/liburing/test/io_uring_setup.c +0 -192
  186. package/deps/liburing/liburing/test/iopoll.c +0 -366
  187. package/deps/liburing/liburing/test/lfs-openat-write.c +0 -117
  188. package/deps/liburing/liburing/test/lfs-openat.c +0 -273
  189. package/deps/liburing/liburing/test/link-timeout.c +0 -1107
  190. package/deps/liburing/liburing/test/link.c +0 -496
  191. package/deps/liburing/liburing/test/link_drain.c +0 -229
  192. package/deps/liburing/liburing/test/madvise.c +0 -195
  193. package/deps/liburing/liburing/test/mkdir.c +0 -108
  194. package/deps/liburing/liburing/test/multicqes_drain.c +0 -383
  195. package/deps/liburing/liburing/test/nop-all-sizes.c +0 -107
  196. package/deps/liburing/liburing/test/nop.c +0 -115
  197. package/deps/liburing/liburing/test/open-close.c +0 -146
  198. package/deps/liburing/liburing/test/openat2.c +0 -240
  199. package/deps/liburing/liburing/test/personality.c +0 -204
  200. package/deps/liburing/liburing/test/pipe-eof.c +0 -81
  201. package/deps/liburing/liburing/test/pipe-reuse.c +0 -105
  202. package/deps/liburing/liburing/test/poll-cancel-ton.c +0 -139
  203. package/deps/liburing/liburing/test/poll-cancel.c +0 -135
  204. package/deps/liburing/liburing/test/poll-link.c +0 -227
  205. package/deps/liburing/liburing/test/poll-many.c +0 -208
  206. package/deps/liburing/liburing/test/poll-mshot-update.c +0 -273
  207. package/deps/liburing/liburing/test/poll-ring.c +0 -48
  208. package/deps/liburing/liburing/test/poll-v-poll.c +0 -353
  209. package/deps/liburing/liburing/test/poll.c +0 -109
  210. package/deps/liburing/liburing/test/probe.c +0 -137
  211. package/deps/liburing/liburing/test/read-write.c +0 -876
  212. package/deps/liburing/liburing/test/register-restrictions.c +0 -633
  213. package/deps/liburing/liburing/test/rename.c +0 -134
  214. package/deps/liburing/liburing/test/ring-leak.c +0 -173
  215. package/deps/liburing/liburing/test/ring-leak2.c +0 -249
  216. package/deps/liburing/liburing/test/rsrc_tags.c +0 -449
  217. package/deps/liburing/liburing/test/runtests-loop.sh +0 -16
  218. package/deps/liburing/liburing/test/runtests.sh +0 -170
  219. package/deps/liburing/liburing/test/rw_merge_test.c +0 -97
  220. package/deps/liburing/liburing/test/self.c +0 -91
  221. package/deps/liburing/liburing/test/send_recv.c +0 -291
  222. package/deps/liburing/liburing/test/send_recvmsg.c +0 -345
  223. package/deps/liburing/liburing/test/sendmsg_fs_cve.c +0 -198
  224. package/deps/liburing/liburing/test/shared-wq.c +0 -84
  225. package/deps/liburing/liburing/test/short-read.c +0 -75
  226. package/deps/liburing/liburing/test/shutdown.c +0 -163
  227. package/deps/liburing/liburing/test/sigfd-deadlock.c +0 -74
  228. package/deps/liburing/liburing/test/socket-rw-eagain.c +0 -156
  229. package/deps/liburing/liburing/test/socket-rw.c +0 -147
  230. package/deps/liburing/liburing/test/splice.c +0 -511
  231. package/deps/liburing/liburing/test/sq-full-cpp.cc +0 -45
  232. package/deps/liburing/liburing/test/sq-full.c +0 -45
  233. package/deps/liburing/liburing/test/sq-poll-dup.c +0 -200
  234. package/deps/liburing/liburing/test/sq-poll-kthread.c +0 -168
  235. package/deps/liburing/liburing/test/sq-poll-share.c +0 -137
  236. package/deps/liburing/liburing/test/sq-space_left.c +0 -159
  237. package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +0 -159
  238. package/deps/liburing/liburing/test/sqpoll-disable-exit.c +0 -195
  239. package/deps/liburing/liburing/test/sqpoll-exit-hang.c +0 -77
  240. package/deps/liburing/liburing/test/sqpoll-sleep.c +0 -68
  241. package/deps/liburing/liburing/test/statx.c +0 -172
  242. package/deps/liburing/liburing/test/stdout.c +0 -232
  243. package/deps/liburing/liburing/test/submit-link-fail.c +0 -154
  244. package/deps/liburing/liburing/test/submit-reuse.c +0 -239
  245. package/deps/liburing/liburing/test/symlink.c +0 -116
  246. package/deps/liburing/liburing/test/teardowns.c +0 -58
  247. package/deps/liburing/liburing/test/thread-exit.c +0 -131
  248. package/deps/liburing/liburing/test/timeout-new.c +0 -246
  249. package/deps/liburing/liburing/test/timeout-overflow.c +0 -204
  250. package/deps/liburing/liburing/test/timeout.c +0 -1354
  251. package/deps/liburing/liburing/test/unlink.c +0 -111
  252. package/deps/liburing/liburing/test/wakeup-hang.c +0 -162
  253. package/deps/rocksdb/rocksdb/README.md +0 -32
  254. package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
  255. package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
  256. package/deps/rocksdb/rocksdb/port/README +0 -10
  257. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
@@ -1,97 +0,0 @@
1
- /* SPDX-License-Identifier: MIT */
2
- /*
3
- * Regression test for incorrect async_list io_should_merge() logic
4
- * Bug was fixed in 5.5 by (commit: 561fb04 io_uring: replace workqueue usage with io-wq")
5
- * Affects 5.4 lts branch, at least 5.4.106 is affected.
6
- */
7
- #include <stdio.h>
8
- #include <errno.h>
9
- #include <sys/socket.h>
10
- #include <sys/un.h>
11
- #include <assert.h>
12
- #include <fcntl.h>
13
- #include <unistd.h>
14
-
15
- #include "liburing.h"
16
- #include "helpers.h"
17
-
18
- int main(int argc, char *argv[])
19
- {
20
- struct io_uring_sqe *sqe;
21
- struct io_uring_cqe *cqe;
22
- struct io_uring ring;
23
- int ret, fd, pipe1[2];
24
- char buf[4096];
25
- struct iovec vec = {
26
- .iov_base = buf,
27
- .iov_len = sizeof(buf)
28
- };
29
- struct __kernel_timespec ts = {.tv_sec = 3, .tv_nsec = 0};
30
-
31
- if (argc > 1)
32
- return 0;
33
-
34
- ret = pipe(pipe1);
35
- assert(!ret);
36
-
37
- fd = open("testfile", O_RDWR | O_CREAT, 0644);
38
- assert(ret >= 0);
39
- ret = ftruncate(fd, 4096);
40
- assert(!ret);
41
-
42
- ret = t_create_ring(4, &ring, 0);
43
- if (ret == T_SETUP_SKIP)
44
- return 0;
45
- else if (ret < 0)
46
- return 1;
47
-
48
- /* REQ1 */
49
- sqe = io_uring_get_sqe(&ring);
50
- io_uring_prep_readv(sqe, pipe1[0], &vec, 1, 0);
51
- sqe->user_data = 1;
52
-
53
- /* REQ2 */
54
- sqe = io_uring_get_sqe(&ring);
55
- io_uring_prep_readv(sqe, fd, &vec, 1, 4096);
56
- sqe->user_data = 2;
57
-
58
- ret = io_uring_submit(&ring);
59
- assert(ret == 2);
60
-
61
- ret = io_uring_wait_cqe(&ring, &cqe);
62
- assert(!ret);
63
- assert(cqe->res == 0);
64
- assert(cqe->user_data == 2);
65
- io_uring_cqe_seen(&ring, cqe);
66
-
67
- /*
68
- * REQ3
69
- * Prepare request adjacent to previous one, so merge logic may want to
70
- * link it to previous request, but because of a bug in merge logic
71
- * it may be merged with <REQ1> request
72
- */
73
- sqe = io_uring_get_sqe(&ring);
74
- io_uring_prep_readv(sqe, fd, &vec, 1, 2048);
75
- sqe->user_data = 3;
76
-
77
- ret = io_uring_submit(&ring);
78
- assert(ret == 1);
79
-
80
- /*
81
- * Read may stuck because of bug there request was be incorrecly
82
- * merged with <REQ1> request
83
- */
84
- ret = io_uring_wait_cqe_timeout(&ring, &cqe, &ts);
85
- if (ret == -ETIME) {
86
- printf("TEST_FAIL: readv req3 stuck\n");
87
- return 1;
88
- }
89
- assert(!ret);
90
-
91
- assert(cqe->res == 2048);
92
- assert(cqe->user_data == 3);
93
-
94
- io_uring_cqe_seen(&ring, cqe);
95
- io_uring_queue_exit(&ring);
96
- return 0;
97
- }
@@ -1,91 +0,0 @@
1
- /* SPDX-License-Identifier: MIT */
2
- /*
3
- * Description: test that pathname resolution works from async context when
4
- * using /proc/self/ which should be the original submitting task, not the
5
- * async worker.
6
- *
7
- */
8
- #include <errno.h>
9
- #include <stdio.h>
10
- #include <unistd.h>
11
- #include <stdlib.h>
12
- #include <string.h>
13
- #include <fcntl.h>
14
-
15
- #include "liburing.h"
16
-
17
- static int io_openat2(struct io_uring *ring, const char *path, int dfd)
18
- {
19
- struct io_uring_cqe *cqe;
20
- struct io_uring_sqe *sqe;
21
- struct open_how how;
22
- int ret;
23
-
24
- sqe = io_uring_get_sqe(ring);
25
- if (!sqe) {
26
- fprintf(stderr, "get sqe failed\n");
27
- goto err;
28
- }
29
- memset(&how, 0, sizeof(how));
30
- how.flags = O_RDONLY;
31
- io_uring_prep_openat2(sqe, dfd, path, &how);
32
-
33
- ret = io_uring_submit(ring);
34
- if (ret <= 0) {
35
- fprintf(stderr, "sqe submit failed: %d\n", ret);
36
- goto err;
37
- }
38
-
39
- ret = io_uring_wait_cqe(ring, &cqe);
40
- if (ret < 0) {
41
- fprintf(stderr, "wait completion %d\n", ret);
42
- goto err;
43
- }
44
- ret = cqe->res;
45
- io_uring_cqe_seen(ring, cqe);
46
- return ret;
47
- err:
48
- return -1;
49
- }
50
-
51
- int main(int argc, char *argv[])
52
- {
53
- struct io_uring ring;
54
- char buf[64];
55
- int ret;
56
-
57
- if (argc > 1)
58
- return 0;
59
-
60
- ret = io_uring_queue_init(1, &ring, 0);
61
- if (ret) {
62
- fprintf(stderr, "ring setup failed\n");
63
- return 1;
64
- }
65
-
66
- ret = io_openat2(&ring, "/proc/self/comm", -1);
67
- if (ret < 0) {
68
- if (ret == -EOPNOTSUPP)
69
- return 0;
70
- if (ret == -EINVAL) {
71
- fprintf(stdout, "openat2 not supported, skipping\n");
72
- return 0;
73
- }
74
- fprintf(stderr, "openat2 failed: %s\n", strerror(-ret));
75
- return 1;
76
- }
77
-
78
- memset(buf, 0, sizeof(buf));
79
- ret = read(ret, buf, sizeof(buf));
80
- if (ret < 0) {
81
- perror("read");
82
- return 1;
83
- }
84
-
85
- if (strncmp(buf, "self", 4)) {
86
- fprintf(stderr, "got comm=<%s>, wanted <self>\n", buf);
87
- return 1;
88
- }
89
-
90
- return 0;
91
- }
@@ -1,291 +0,0 @@
1
- /* SPDX-License-Identifier: MIT */
2
- /*
3
- * Simple test case showing using send and recv through io_uring
4
- */
5
- #include <errno.h>
6
- #include <stdio.h>
7
- #include <stdlib.h>
8
- #include <string.h>
9
- #include <unistd.h>
10
- #include <arpa/inet.h>
11
- #include <sys/types.h>
12
- #include <sys/socket.h>
13
- #include <pthread.h>
14
-
15
- #include "liburing.h"
16
- #include "helpers.h"
17
-
18
- static char str[] = "This is a test of send and recv over io_uring!";
19
-
20
- #define MAX_MSG 128
21
-
22
- #define PORT 10200
23
- #define HOST "127.0.0.1"
24
-
25
- #if 0
26
- # define io_uring_prep_send io_uring_prep_write
27
- # define io_uring_prep_recv io_uring_prep_read
28
- #endif
29
-
30
- static int recv_prep(struct io_uring *ring, struct iovec *iov, int *sock,
31
- int registerfiles)
32
- {
33
- struct sockaddr_in saddr;
34
- struct io_uring_sqe *sqe;
35
- int sockfd, ret, val, use_fd;
36
-
37
- memset(&saddr, 0, sizeof(saddr));
38
- saddr.sin_family = AF_INET;
39
- saddr.sin_addr.s_addr = htonl(INADDR_ANY);
40
- saddr.sin_port = htons(PORT);
41
-
42
- sockfd = socket(AF_INET, SOCK_DGRAM, 0);
43
- if (sockfd < 0) {
44
- perror("socket");
45
- return 1;
46
- }
47
-
48
- val = 1;
49
- setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
50
-
51
- ret = bind(sockfd, (struct sockaddr *)&saddr, sizeof(saddr));
52
- if (ret < 0) {
53
- perror("bind");
54
- goto err;
55
- }
56
-
57
- if (registerfiles) {
58
- ret = io_uring_register_files(ring, &sockfd, 1);
59
- if (ret) {
60
- fprintf(stderr, "file reg failed\n");
61
- goto err;
62
- }
63
- use_fd = 0;
64
- } else {
65
- use_fd = sockfd;
66
- }
67
-
68
- sqe = io_uring_get_sqe(ring);
69
- io_uring_prep_recv(sqe, use_fd, iov->iov_base, iov->iov_len, 0);
70
- if (registerfiles)
71
- sqe->flags |= IOSQE_FIXED_FILE;
72
- sqe->user_data = 2;
73
-
74
- ret = io_uring_submit(ring);
75
- if (ret <= 0) {
76
- fprintf(stderr, "submit failed: %d\n", ret);
77
- goto err;
78
- }
79
-
80
- *sock = sockfd;
81
- return 0;
82
- err:
83
- close(sockfd);
84
- return 1;
85
- }
86
-
87
- static int do_recv(struct io_uring *ring, struct iovec *iov)
88
- {
89
- struct io_uring_cqe *cqe;
90
- int ret;
91
-
92
- ret = io_uring_wait_cqe(ring, &cqe);
93
- if (ret) {
94
- fprintf(stdout, "wait_cqe: %d\n", ret);
95
- goto err;
96
- }
97
- if (cqe->res == -EINVAL) {
98
- fprintf(stdout, "recv not supported, skipping\n");
99
- return 0;
100
- }
101
- if (cqe->res < 0) {
102
- fprintf(stderr, "failed cqe: %d\n", cqe->res);
103
- goto err;
104
- }
105
-
106
- if (cqe->res -1 != strlen(str)) {
107
- fprintf(stderr, "got wrong length: %d/%d\n", cqe->res,
108
- (int) strlen(str) + 1);
109
- goto err;
110
- }
111
-
112
- if (strcmp(str, iov->iov_base)) {
113
- fprintf(stderr, "string mismatch\n");
114
- goto err;
115
- }
116
-
117
- return 0;
118
- err:
119
- return 1;
120
- }
121
-
122
- struct recv_data {
123
- pthread_mutex_t mutex;
124
- int use_sqthread;
125
- int registerfiles;
126
- };
127
-
128
- static void *recv_fn(void *data)
129
- {
130
- struct recv_data *rd = data;
131
- char buf[MAX_MSG + 1];
132
- struct iovec iov = {
133
- .iov_base = buf,
134
- .iov_len = sizeof(buf) - 1,
135
- };
136
- struct io_uring_params p = { };
137
- struct io_uring ring;
138
- int ret, sock;
139
-
140
- if (rd->use_sqthread)
141
- p.flags = IORING_SETUP_SQPOLL;
142
- ret = t_create_ring_params(1, &ring, &p);
143
- if (ret == T_SETUP_SKIP) {
144
- pthread_mutex_unlock(&rd->mutex);
145
- ret = 0;
146
- goto err;
147
- } else if (ret < 0) {
148
- pthread_mutex_unlock(&rd->mutex);
149
- goto err;
150
- }
151
-
152
- if (rd->use_sqthread && !rd->registerfiles) {
153
- if (!(p.features & IORING_FEAT_SQPOLL_NONFIXED)) {
154
- fprintf(stdout, "Non-registered SQPOLL not available, skipping\n");
155
- pthread_mutex_unlock(&rd->mutex);
156
- goto err;
157
- }
158
- }
159
-
160
- ret = recv_prep(&ring, &iov, &sock, rd->registerfiles);
161
- if (ret) {
162
- fprintf(stderr, "recv_prep failed: %d\n", ret);
163
- goto err;
164
- }
165
- pthread_mutex_unlock(&rd->mutex);
166
- ret = do_recv(&ring, &iov);
167
-
168
- close(sock);
169
- io_uring_queue_exit(&ring);
170
- err:
171
- return (void *)(intptr_t)ret;
172
- }
173
-
174
- static int do_send(void)
175
- {
176
- struct sockaddr_in saddr;
177
- struct iovec iov = {
178
- .iov_base = str,
179
- .iov_len = sizeof(str),
180
- };
181
- struct io_uring ring;
182
- struct io_uring_cqe *cqe;
183
- struct io_uring_sqe *sqe;
184
- int sockfd, ret;
185
-
186
- ret = io_uring_queue_init(1, &ring, 0);
187
- if (ret) {
188
- fprintf(stderr, "queue init failed: %d\n", ret);
189
- return 1;
190
- }
191
-
192
- memset(&saddr, 0, sizeof(saddr));
193
- saddr.sin_family = AF_INET;
194
- saddr.sin_port = htons(PORT);
195
- inet_pton(AF_INET, HOST, &saddr.sin_addr);
196
-
197
- sockfd = socket(AF_INET, SOCK_DGRAM, 0);
198
- if (sockfd < 0) {
199
- perror("socket");
200
- return 1;
201
- }
202
-
203
- ret = connect(sockfd, &saddr, sizeof(saddr));
204
- if (ret < 0) {
205
- perror("connect");
206
- return 1;
207
- }
208
-
209
- sqe = io_uring_get_sqe(&ring);
210
- io_uring_prep_send(sqe, sockfd, iov.iov_base, iov.iov_len, 0);
211
- sqe->user_data = 1;
212
-
213
- ret = io_uring_submit(&ring);
214
- if (ret <= 0) {
215
- fprintf(stderr, "submit failed: %d\n", ret);
216
- goto err;
217
- }
218
-
219
- ret = io_uring_wait_cqe(&ring, &cqe);
220
- if (cqe->res == -EINVAL) {
221
- fprintf(stdout, "send not supported, skipping\n");
222
- close(sockfd);
223
- return 0;
224
- }
225
- if (cqe->res != iov.iov_len) {
226
- fprintf(stderr, "failed cqe: %d\n", cqe->res);
227
- goto err;
228
- }
229
-
230
- close(sockfd);
231
- return 0;
232
- err:
233
- close(sockfd);
234
- return 1;
235
- }
236
-
237
- static int test(int use_sqthread, int regfiles)
238
- {
239
- pthread_mutexattr_t attr;
240
- pthread_t recv_thread;
241
- struct recv_data rd;
242
- int ret;
243
- void *retval;
244
-
245
- pthread_mutexattr_init(&attr);
246
- pthread_mutexattr_setpshared(&attr, 1);
247
- pthread_mutex_init(&rd.mutex, &attr);
248
- pthread_mutex_lock(&rd.mutex);
249
- rd.use_sqthread = use_sqthread;
250
- rd.registerfiles = regfiles;
251
-
252
- ret = pthread_create(&recv_thread, NULL, recv_fn, &rd);
253
- if (ret) {
254
- fprintf(stderr, "Thread create failed: %d\n", ret);
255
- pthread_mutex_unlock(&rd.mutex);
256
- return 1;
257
- }
258
-
259
- pthread_mutex_lock(&rd.mutex);
260
- do_send();
261
- pthread_join(recv_thread, &retval);
262
- return (int)(intptr_t)retval;
263
- }
264
-
265
- int main(int argc, char *argv[])
266
- {
267
- int ret;
268
-
269
- if (argc > 1)
270
- return 0;
271
-
272
- ret = test(0, 0);
273
- if (ret) {
274
- fprintf(stderr, "test sqthread=0 failed\n");
275
- return ret;
276
- }
277
-
278
- ret = test(1, 1);
279
- if (ret) {
280
- fprintf(stderr, "test sqthread=1 reg=1 failed\n");
281
- return ret;
282
- }
283
-
284
- ret = test(1, 0);
285
- if (ret) {
286
- fprintf(stderr, "test sqthread=1 reg=0 failed\n");
287
- return ret;
288
- }
289
-
290
- return 0;
291
- }