@ohos-ports/514labs-kafka-javascript 0.0.0-stage → 1.7.1-patch-beta.0

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 (639) hide show
  1. package/.claude/settings.local.json +12 -0
  2. package/.editorconfig +5 -0
  3. package/.envrc +1 -0
  4. package/CHANGELOG.md +380 -0
  5. package/CONTRIBUTING.md +257 -0
  6. package/INTRODUCTION.md +1155 -0
  7. package/LICENSE.kafkajs +31 -0
  8. package/LICENSE.node-rdkafka +25 -0
  9. package/LICENSE.txt +20 -0
  10. package/MIGRATION.md +428 -0
  11. package/Makefile +84 -0
  12. package/QUICKSTART.md +70 -0
  13. package/README.md +127 -2
  14. package/SECURITY.md +11 -0
  15. package/binding.gyp +167 -0
  16. package/buf.gen.yaml +8 -0
  17. package/build/Release/confluent-kafka-javascript.node +0 -0
  18. package/configure +15 -0
  19. package/coverage/mocha/base.css +224 -0
  20. package/coverage/mocha/block-navigation.js +87 -0
  21. package/coverage/mocha/coverage-final.json +11 -0
  22. package/coverage/mocha/favicon.png +0 -0
  23. package/coverage/mocha/forked-kafkajs/index.html +116 -0
  24. package/coverage/mocha/forked-kafkajs/lib/client.js.html +2122 -0
  25. package/coverage/mocha/forked-kafkajs/lib/error.js.html +1588 -0
  26. package/coverage/mocha/forked-kafkajs/lib/index.html +236 -0
  27. package/coverage/mocha/forked-kafkajs/lib/kafka-consumer-stream.js.html +1282 -0
  28. package/coverage/mocha/forked-kafkajs/lib/kafka-consumer.js.html +2476 -0
  29. package/coverage/mocha/forked-kafkajs/lib/producer-stream.js.html +1096 -0
  30. package/coverage/mocha/forked-kafkajs/lib/producer.js.html +1300 -0
  31. package/coverage/mocha/forked-kafkajs/lib/topic-partition.js.html +358 -0
  32. package/coverage/mocha/forked-kafkajs/lib/topic.js.html +214 -0
  33. package/coverage/mocha/forked-kafkajs/lib/util.js.html +250 -0
  34. package/coverage/mocha/forked-kafkajs/librdkafka.js.html +121 -0
  35. package/coverage/mocha/index.html +131 -0
  36. package/coverage/mocha/prettify.css +1 -0
  37. package/coverage/mocha/prettify.js +2 -0
  38. package/coverage/mocha/sort-arrow-sprite.png +0 -0
  39. package/coverage/mocha/sorter.js +210 -0
  40. package/cpplint.py +6970 -0
  41. package/deploy.enc +0 -0
  42. package/deps/librdkafka/.clang-format +136 -0
  43. package/deps/librdkafka/.clang-format-cpp +103 -0
  44. package/deps/librdkafka/.dir-locals.el +10 -0
  45. package/deps/librdkafka/.formatignore +33 -0
  46. package/deps/librdkafka/.gdbmacros +19 -0
  47. package/deps/librdkafka/CHANGELOG.md +2225 -0
  48. package/deps/librdkafka/CMakeLists.txt +291 -0
  49. package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
  50. package/deps/librdkafka/CONFIGURATION.md +209 -0
  51. package/deps/librdkafka/CONTRIBUTING.md +431 -0
  52. package/deps/librdkafka/Doxyfile +2375 -0
  53. package/deps/librdkafka/INTRODUCTION.md +2481 -0
  54. package/deps/librdkafka/LICENSE +26 -0
  55. package/deps/librdkafka/LICENSE.cjson +22 -0
  56. package/deps/librdkafka/LICENSE.crc32c +28 -0
  57. package/deps/librdkafka/LICENSE.fnv1a +18 -0
  58. package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
  59. package/deps/librdkafka/LICENSE.lz4 +26 -0
  60. package/deps/librdkafka/LICENSE.murmur2 +25 -0
  61. package/deps/librdkafka/LICENSE.nanopb +22 -0
  62. package/deps/librdkafka/LICENSE.opentelemetry +203 -0
  63. package/deps/librdkafka/LICENSE.pycrc +23 -0
  64. package/deps/librdkafka/LICENSE.queue +31 -0
  65. package/deps/librdkafka/LICENSE.regexp +5 -0
  66. package/deps/librdkafka/LICENSE.snappy +36 -0
  67. package/deps/librdkafka/LICENSE.tinycthread +26 -0
  68. package/deps/librdkafka/LICENSE.wingetopt +49 -0
  69. package/deps/librdkafka/LICENSES.txt +625 -0
  70. package/deps/librdkafka/Makefile +125 -0
  71. package/deps/librdkafka/README.md +199 -0
  72. package/deps/librdkafka/README.win32 +26 -0
  73. package/deps/librdkafka/STATISTICS.md +624 -0
  74. package/deps/librdkafka/configure +214 -0
  75. package/deps/librdkafka/configure.self +331 -0
  76. package/deps/librdkafka/dev-conf.sh +123 -0
  77. package/deps/librdkafka/lds-gen.py +73 -0
  78. package/deps/librdkafka/mainpage.doxy +40 -0
  79. package/deps/librdkafka/mklove/Makefile.base +329 -0
  80. package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
  81. package/deps/librdkafka/mklove/modules/configure.base +2484 -0
  82. package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
  83. package/deps/librdkafka/mklove/modules/configure.cc +186 -0
  84. package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
  85. package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
  86. package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
  87. package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
  88. package/deps/librdkafka/mklove/modules/configure.host +132 -0
  89. package/deps/librdkafka/mklove/modules/configure.lib +49 -0
  90. package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
  91. package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
  92. package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
  93. package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
  94. package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
  95. package/deps/librdkafka/mklove/modules/configure.pic +16 -0
  96. package/deps/librdkafka/mklove/modules/configure.socket +20 -0
  97. package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
  98. package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
  99. package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
  100. package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
  101. package/deps/librdkafka/service.yml +172 -0
  102. package/deps/librdkafka/src/CMakeLists.txt +374 -0
  103. package/deps/librdkafka/src/Makefile +103 -0
  104. package/deps/librdkafka/src/README.lz4.md +30 -0
  105. package/deps/librdkafka/src/cJSON.c +2834 -0
  106. package/deps/librdkafka/src/cJSON.h +398 -0
  107. package/deps/librdkafka/src/crc32c.c +430 -0
  108. package/deps/librdkafka/src/crc32c.h +38 -0
  109. package/deps/librdkafka/src/generate_proto.sh +66 -0
  110. package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
  111. package/deps/librdkafka/src/lz4.c +2727 -0
  112. package/deps/librdkafka/src/lz4.h +842 -0
  113. package/deps/librdkafka/src/lz4frame.c +2078 -0
  114. package/deps/librdkafka/src/lz4frame.h +692 -0
  115. package/deps/librdkafka/src/lz4frame_static.h +47 -0
  116. package/deps/librdkafka/src/lz4hc.c +1631 -0
  117. package/deps/librdkafka/src/lz4hc.h +413 -0
  118. package/deps/librdkafka/src/nanopb/pb.h +917 -0
  119. package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
  120. package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
  121. package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
  122. package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
  123. package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
  124. package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
  125. package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
  126. package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
  127. package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
  128. package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
  129. package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
  130. package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
  131. package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
  132. package/deps/librdkafka/src/queue.h +850 -0
  133. package/deps/librdkafka/src/rd.h +584 -0
  134. package/deps/librdkafka/src/rdaddr.c +255 -0
  135. package/deps/librdkafka/src/rdaddr.h +202 -0
  136. package/deps/librdkafka/src/rdatomic.h +230 -0
  137. package/deps/librdkafka/src/rdavg.h +260 -0
  138. package/deps/librdkafka/src/rdavl.c +210 -0
  139. package/deps/librdkafka/src/rdavl.h +250 -0
  140. package/deps/librdkafka/src/rdbase64.c +200 -0
  141. package/deps/librdkafka/src/rdbase64.h +43 -0
  142. package/deps/librdkafka/src/rdbuf.c +1884 -0
  143. package/deps/librdkafka/src/rdbuf.h +375 -0
  144. package/deps/librdkafka/src/rdcrc32.c +114 -0
  145. package/deps/librdkafka/src/rdcrc32.h +170 -0
  146. package/deps/librdkafka/src/rddl.c +179 -0
  147. package/deps/librdkafka/src/rddl.h +43 -0
  148. package/deps/librdkafka/src/rdendian.h +175 -0
  149. package/deps/librdkafka/src/rdfloat.h +67 -0
  150. package/deps/librdkafka/src/rdfnv1a.c +113 -0
  151. package/deps/librdkafka/src/rdfnv1a.h +35 -0
  152. package/deps/librdkafka/src/rdgz.c +120 -0
  153. package/deps/librdkafka/src/rdgz.h +46 -0
  154. package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
  155. package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
  156. package/deps/librdkafka/src/rdhttp.c +830 -0
  157. package/deps/librdkafka/src/rdhttp.h +101 -0
  158. package/deps/librdkafka/src/rdinterval.h +177 -0
  159. package/deps/librdkafka/src/rdkafka.c +5505 -0
  160. package/deps/librdkafka/src/rdkafka.h +10686 -0
  161. package/deps/librdkafka/src/rdkafka_admin.c +9794 -0
  162. package/deps/librdkafka/src/rdkafka_admin.h +661 -0
  163. package/deps/librdkafka/src/rdkafka_assignment.c +1010 -0
  164. package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
  165. package/deps/librdkafka/src/rdkafka_assignor.c +1786 -0
  166. package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
  167. package/deps/librdkafka/src/rdkafka_aux.c +409 -0
  168. package/deps/librdkafka/src/rdkafka_aux.h +174 -0
  169. package/deps/librdkafka/src/rdkafka_background.c +221 -0
  170. package/deps/librdkafka/src/rdkafka_broker.c +6337 -0
  171. package/deps/librdkafka/src/rdkafka_broker.h +744 -0
  172. package/deps/librdkafka/src/rdkafka_buf.c +543 -0
  173. package/deps/librdkafka/src/rdkafka_buf.h +1525 -0
  174. package/deps/librdkafka/src/rdkafka_cert.c +576 -0
  175. package/deps/librdkafka/src/rdkafka_cert.h +62 -0
  176. package/deps/librdkafka/src/rdkafka_cgrp.c +7587 -0
  177. package/deps/librdkafka/src/rdkafka_cgrp.h +477 -0
  178. package/deps/librdkafka/src/rdkafka_conf.c +4880 -0
  179. package/deps/librdkafka/src/rdkafka_conf.h +732 -0
  180. package/deps/librdkafka/src/rdkafka_confval.h +97 -0
  181. package/deps/librdkafka/src/rdkafka_coord.c +623 -0
  182. package/deps/librdkafka/src/rdkafka_coord.h +132 -0
  183. package/deps/librdkafka/src/rdkafka_error.c +228 -0
  184. package/deps/librdkafka/src/rdkafka_error.h +80 -0
  185. package/deps/librdkafka/src/rdkafka_event.c +502 -0
  186. package/deps/librdkafka/src/rdkafka_event.h +126 -0
  187. package/deps/librdkafka/src/rdkafka_feature.c +898 -0
  188. package/deps/librdkafka/src/rdkafka_feature.h +104 -0
  189. package/deps/librdkafka/src/rdkafka_fetcher.c +1422 -0
  190. package/deps/librdkafka/src/rdkafka_fetcher.h +44 -0
  191. package/deps/librdkafka/src/rdkafka_header.c +220 -0
  192. package/deps/librdkafka/src/rdkafka_header.h +76 -0
  193. package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
  194. package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
  195. package/deps/librdkafka/src/rdkafka_int.h +1260 -0
  196. package/deps/librdkafka/src/rdkafka_interceptor.c +819 -0
  197. package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
  198. package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
  199. package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
  200. package/deps/librdkafka/src/rdkafka_metadata.c +2209 -0
  201. package/deps/librdkafka/src/rdkafka_metadata.h +345 -0
  202. package/deps/librdkafka/src/rdkafka_metadata_cache.c +1183 -0
  203. package/deps/librdkafka/src/rdkafka_mock.c +3661 -0
  204. package/deps/librdkafka/src/rdkafka_mock.h +610 -0
  205. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1876 -0
  206. package/deps/librdkafka/src/rdkafka_mock_handlers.c +3113 -0
  207. package/deps/librdkafka/src/rdkafka_mock_int.h +710 -0
  208. package/deps/librdkafka/src/rdkafka_msg.c +2589 -0
  209. package/deps/librdkafka/src/rdkafka_msg.h +614 -0
  210. package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
  211. package/deps/librdkafka/src/rdkafka_msgset.h +98 -0
  212. package/deps/librdkafka/src/rdkafka_msgset_reader.c +1806 -0
  213. package/deps/librdkafka/src/rdkafka_msgset_writer.c +1474 -0
  214. package/deps/librdkafka/src/rdkafka_offset.c +1565 -0
  215. package/deps/librdkafka/src/rdkafka_offset.h +150 -0
  216. package/deps/librdkafka/src/rdkafka_op.c +997 -0
  217. package/deps/librdkafka/src/rdkafka_op.h +858 -0
  218. package/deps/librdkafka/src/rdkafka_partition.c +4896 -0
  219. package/deps/librdkafka/src/rdkafka_partition.h +1182 -0
  220. package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
  221. package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
  222. package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
  223. package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
  224. package/deps/librdkafka/src/rdkafka_proto.h +736 -0
  225. package/deps/librdkafka/src/rdkafka_protocol.h +128 -0
  226. package/deps/librdkafka/src/rdkafka_queue.c +1230 -0
  227. package/deps/librdkafka/src/rdkafka_queue.h +1220 -0
  228. package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
  229. package/deps/librdkafka/src/rdkafka_request.c +7089 -0
  230. package/deps/librdkafka/src/rdkafka_request.h +732 -0
  231. package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
  232. package/deps/librdkafka/src/rdkafka_sasl.c +530 -0
  233. package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
  234. package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
  235. package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
  236. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1833 -0
  237. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
  238. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1666 -0
  239. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +47 -0
  240. package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
  241. package/deps/librdkafka/src/rdkafka_sasl_scram.c +858 -0
  242. package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
  243. package/deps/librdkafka/src/rdkafka_ssl.c +2129 -0
  244. package/deps/librdkafka/src/rdkafka_ssl.h +86 -0
  245. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4785 -0
  246. package/deps/librdkafka/src/rdkafka_subscription.c +278 -0
  247. package/deps/librdkafka/src/rdkafka_telemetry.c +760 -0
  248. package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
  249. package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1053 -0
  250. package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
  251. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +997 -0
  252. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +301 -0
  253. package/deps/librdkafka/src/rdkafka_timer.c +402 -0
  254. package/deps/librdkafka/src/rdkafka_timer.h +117 -0
  255. package/deps/librdkafka/src/rdkafka_topic.c +2161 -0
  256. package/deps/librdkafka/src/rdkafka_topic.h +334 -0
  257. package/deps/librdkafka/src/rdkafka_transport.c +1309 -0
  258. package/deps/librdkafka/src/rdkafka_transport.h +99 -0
  259. package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
  260. package/deps/librdkafka/src/rdkafka_txnmgr.c +3256 -0
  261. package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
  262. package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
  263. package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
  264. package/deps/librdkafka/src/rdlist.c +576 -0
  265. package/deps/librdkafka/src/rdlist.h +434 -0
  266. package/deps/librdkafka/src/rdlog.c +89 -0
  267. package/deps/librdkafka/src/rdlog.h +41 -0
  268. package/deps/librdkafka/src/rdmap.c +508 -0
  269. package/deps/librdkafka/src/rdmap.h +492 -0
  270. package/deps/librdkafka/src/rdmurmur2.c +167 -0
  271. package/deps/librdkafka/src/rdmurmur2.h +35 -0
  272. package/deps/librdkafka/src/rdports.c +61 -0
  273. package/deps/librdkafka/src/rdports.h +38 -0
  274. package/deps/librdkafka/src/rdposix.h +250 -0
  275. package/deps/librdkafka/src/rdrand.c +80 -0
  276. package/deps/librdkafka/src/rdrand.h +43 -0
  277. package/deps/librdkafka/src/rdregex.c +156 -0
  278. package/deps/librdkafka/src/rdregex.h +43 -0
  279. package/deps/librdkafka/src/rdsignal.h +57 -0
  280. package/deps/librdkafka/src/rdstring.c +645 -0
  281. package/deps/librdkafka/src/rdstring.h +98 -0
  282. package/deps/librdkafka/src/rdsysqueue.h +404 -0
  283. package/deps/librdkafka/src/rdtime.h +356 -0
  284. package/deps/librdkafka/src/rdtypes.h +86 -0
  285. package/deps/librdkafka/src/rdunittest.c +549 -0
  286. package/deps/librdkafka/src/rdunittest.h +232 -0
  287. package/deps/librdkafka/src/rdvarint.c +134 -0
  288. package/deps/librdkafka/src/rdvarint.h +165 -0
  289. package/deps/librdkafka/src/rdwin32.h +382 -0
  290. package/deps/librdkafka/src/rdxxhash.c +1030 -0
  291. package/deps/librdkafka/src/rdxxhash.h +328 -0
  292. package/deps/librdkafka/src/regexp.c +1352 -0
  293. package/deps/librdkafka/src/regexp.h +41 -0
  294. package/deps/librdkafka/src/snappy.c +1866 -0
  295. package/deps/librdkafka/src/snappy.h +62 -0
  296. package/deps/librdkafka/src/snappy_compat.h +138 -0
  297. package/deps/librdkafka/src/statistics_schema.json +444 -0
  298. package/deps/librdkafka/src/tinycthread.c +932 -0
  299. package/deps/librdkafka/src/tinycthread.h +503 -0
  300. package/deps/librdkafka/src/tinycthread_extra.c +199 -0
  301. package/deps/librdkafka/src/tinycthread_extra.h +212 -0
  302. package/deps/librdkafka/src/win32_config.h +58 -0
  303. package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
  304. package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
  305. package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
  306. package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
  307. package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
  308. package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
  309. package/deps/librdkafka/src-cpp/Makefile +55 -0
  310. package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
  311. package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
  312. package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
  313. package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
  314. package/deps/librdkafka/src-cpp/README.md +16 -0
  315. package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
  316. package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
  317. package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
  318. package/deps/librdkafka/src-cpp/rdkafkacpp.h +3797 -0
  319. package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
  320. package/deps/librdkafka/tests/0000-unittests.c +72 -0
  321. package/deps/librdkafka/tests/0001-multiobj.c +102 -0
  322. package/deps/librdkafka/tests/0002-unkpart.c +244 -0
  323. package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
  324. package/deps/librdkafka/tests/0004-conf.c +934 -0
  325. package/deps/librdkafka/tests/0005-order.c +133 -0
  326. package/deps/librdkafka/tests/0006-symbols.c +163 -0
  327. package/deps/librdkafka/tests/0007-autotopic.c +136 -0
  328. package/deps/librdkafka/tests/0008-reqacks.c +179 -0
  329. package/deps/librdkafka/tests/0009-mock_cluster.c +97 -0
  330. package/deps/librdkafka/tests/0011-produce_batch.c +753 -0
  331. package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
  332. package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
  333. package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
  334. package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
  335. package/deps/librdkafka/tests/0016-client_swname.c +181 -0
  336. package/deps/librdkafka/tests/0017-compression.c +140 -0
  337. package/deps/librdkafka/tests/0018-cgrp_term.c +338 -0
  338. package/deps/librdkafka/tests/0019-list_groups.c +289 -0
  339. package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
  340. package/deps/librdkafka/tests/0021-rkt_destroy.c +72 -0
  341. package/deps/librdkafka/tests/0022-consume_batch.c +279 -0
  342. package/deps/librdkafka/tests/0025-timers.c +147 -0
  343. package/deps/librdkafka/tests/0026-consume_pause.c +547 -0
  344. package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
  345. package/deps/librdkafka/tests/0029-assign_offset.c +202 -0
  346. package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
  347. package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
  348. package/deps/librdkafka/tests/0033-regex_subscribe.c +536 -0
  349. package/deps/librdkafka/tests/0034-offset_reset.c +398 -0
  350. package/deps/librdkafka/tests/0035-api_version.c +73 -0
  351. package/deps/librdkafka/tests/0036-partial_fetch.c +87 -0
  352. package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
  353. package/deps/librdkafka/tests/0038-performance.c +121 -0
  354. package/deps/librdkafka/tests/0039-event.c +284 -0
  355. package/deps/librdkafka/tests/0040-io_event.c +257 -0
  356. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +97 -0
  357. package/deps/librdkafka/tests/0042-many_topics.c +252 -0
  358. package/deps/librdkafka/tests/0043-no_connection.c +77 -0
  359. package/deps/librdkafka/tests/0044-partition_cnt.c +94 -0
  360. package/deps/librdkafka/tests/0045-subscribe_update.c +1010 -0
  361. package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
  362. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +98 -0
  363. package/deps/librdkafka/tests/0048-partitioner.c +283 -0
  364. package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
  365. package/deps/librdkafka/tests/0050-subscribe_adds.c +145 -0
  366. package/deps/librdkafka/tests/0051-assign_adds.c +126 -0
  367. package/deps/librdkafka/tests/0052-msg_timestamps.c +238 -0
  368. package/deps/librdkafka/tests/0053-stats_cb.cpp +527 -0
  369. package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
  370. package/deps/librdkafka/tests/0055-producer_latency.c +539 -0
  371. package/deps/librdkafka/tests/0056-balanced_group_mt.c +315 -0
  372. package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
  373. package/deps/librdkafka/tests/0058-log.cpp +123 -0
  374. package/deps/librdkafka/tests/0059-bsearch.cpp +241 -0
  375. package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
  376. package/deps/librdkafka/tests/0061-consumer_lag.cpp +295 -0
  377. package/deps/librdkafka/tests/0062-stats_event.c +126 -0
  378. package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
  379. package/deps/librdkafka/tests/0064-interceptors.c +481 -0
  380. package/deps/librdkafka/tests/0065-yield.cpp +140 -0
  381. package/deps/librdkafka/tests/0066-plugins.cpp +129 -0
  382. package/deps/librdkafka/tests/0067-empty_topic.cpp +151 -0
  383. package/deps/librdkafka/tests/0068-produce_timeout.c +136 -0
  384. package/deps/librdkafka/tests/0069-consumer_add_parts.c +119 -0
  385. package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
  386. package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
  387. package/deps/librdkafka/tests/0073-headers.c +381 -0
  388. package/deps/librdkafka/tests/0074-producev.c +87 -0
  389. package/deps/librdkafka/tests/0075-retry.c +290 -0
  390. package/deps/librdkafka/tests/0076-produce_retry.c +452 -0
  391. package/deps/librdkafka/tests/0077-compaction.c +363 -0
  392. package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
  393. package/deps/librdkafka/tests/0079-fork.c +93 -0
  394. package/deps/librdkafka/tests/0080-admin_ut.c +3095 -0
  395. package/deps/librdkafka/tests/0081-admin.c +5633 -0
  396. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +137 -0
  397. package/deps/librdkafka/tests/0083-cb_event.c +233 -0
  398. package/deps/librdkafka/tests/0084-destroy_flags.c +208 -0
  399. package/deps/librdkafka/tests/0085-headers.cpp +392 -0
  400. package/deps/librdkafka/tests/0086-purge.c +368 -0
  401. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
  402. package/deps/librdkafka/tests/0089-max_poll_interval.c +511 -0
  403. package/deps/librdkafka/tests/0090-idempotence.c +171 -0
  404. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +295 -0
  405. package/deps/librdkafka/tests/0092-mixed_msgver.c +103 -0
  406. package/deps/librdkafka/tests/0093-holb.c +200 -0
  407. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +231 -0
  408. package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
  409. package/deps/librdkafka/tests/0097-ssl_verify.cpp +658 -0
  410. package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
  411. package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
  412. package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
  413. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
  414. package/deps/librdkafka/tests/0102-static_group_rebalance.c +836 -0
  415. package/deps/librdkafka/tests/0103-transactions.c +1383 -0
  416. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +625 -0
  417. package/deps/librdkafka/tests/0105-transactions_mock.c +3930 -0
  418. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +318 -0
  419. package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
  420. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +278 -0
  421. package/deps/librdkafka/tests/0110-batch_size.cpp +182 -0
  422. package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
  423. package/deps/librdkafka/tests/0112-assign_unknown_part.c +87 -0
  424. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3473 -0
  425. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
  426. package/deps/librdkafka/tests/0115-producer_auth.cpp +182 -0
  427. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +216 -0
  428. package/deps/librdkafka/tests/0117-mock_errors.c +331 -0
  429. package/deps/librdkafka/tests/0118-commit_rebalance.c +154 -0
  430. package/deps/librdkafka/tests/0119-consumer_auth.cpp +167 -0
  431. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +185 -0
  432. package/deps/librdkafka/tests/0121-clusterid.c +115 -0
  433. package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
  434. package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
  435. package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
  436. package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
  437. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +528 -0
  438. package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
  439. package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +125 -0
  440. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +79 -0
  441. package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
  442. package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
  443. package/deps/librdkafka/tests/0132-strategy_ordering.c +179 -0
  444. package/deps/librdkafka/tests/0133-ssl_keys.c +150 -0
  445. package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
  446. package/deps/librdkafka/tests/0135-sasl_credentials.cpp +143 -0
  447. package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
  448. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +619 -0
  449. package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
  450. package/deps/librdkafka/tests/0139-offset_validation_mock.c +950 -0
  451. package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
  452. package/deps/librdkafka/tests/0142-reauthentication.c +515 -0
  453. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +552 -0
  454. package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
  455. package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
  456. package/deps/librdkafka/tests/0146-metadata_mock.c +505 -0
  457. package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +952 -0
  458. package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +563 -0
  459. package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
  460. package/deps/librdkafka/tests/0150-telemetry_mock.c +651 -0
  461. package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
  462. package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
  463. package/deps/librdkafka/tests/0153-memberid.c +128 -0
  464. package/deps/librdkafka/tests/1000-unktopic.c +164 -0
  465. package/deps/librdkafka/tests/8000-idle.cpp +60 -0
  466. package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
  467. package/deps/librdkafka/tests/CMakeLists.txt +170 -0
  468. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +291 -0
  469. package/deps/librdkafka/tests/Makefile +182 -0
  470. package/deps/librdkafka/tests/README.md +509 -0
  471. package/deps/librdkafka/tests/autotest.sh +33 -0
  472. package/deps/librdkafka/tests/backtrace.gdb +30 -0
  473. package/deps/librdkafka/tests/broker_version_tests.py +315 -0
  474. package/deps/librdkafka/tests/buildbox.sh +17 -0
  475. package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
  476. package/deps/librdkafka/tests/cluster_testing.py +191 -0
  477. package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
  478. package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -0
  479. package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
  480. package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
  481. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.intermediate.p12 +0 -0
  482. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  483. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
  484. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +50 -0
  485. package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
  486. package/deps/librdkafka/tests/fixtures/ssl/client2.key +46 -0
  487. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +168 -0
  488. package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
  489. package/deps/librdkafka/tests/fuzzers/README.md +31 -0
  490. package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
  491. package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
  492. package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
  493. package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
  494. package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
  495. package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
  496. package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
  497. package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
  498. package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
  499. package/deps/librdkafka/tests/java/Makefile +13 -0
  500. package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
  501. package/deps/librdkafka/tests/java/README.md +14 -0
  502. package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
  503. package/deps/librdkafka/tests/java/run-class.sh +11 -0
  504. package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
  505. package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
  506. package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
  507. package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
  508. package/deps/librdkafka/tests/performance_plot.py +115 -0
  509. package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
  510. package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
  511. package/deps/librdkafka/tests/requirements.txt +2 -0
  512. package/deps/librdkafka/tests/run-all-tests.sh +79 -0
  513. package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
  514. package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
  515. package/deps/librdkafka/tests/run-test-batches.py +157 -0
  516. package/deps/librdkafka/tests/run-test.sh +140 -0
  517. package/deps/librdkafka/tests/rusage.c +249 -0
  518. package/deps/librdkafka/tests/sasl_test.py +289 -0
  519. package/deps/librdkafka/tests/scenarios/README.md +6 -0
  520. package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
  521. package/deps/librdkafka/tests/scenarios/default.json +5 -0
  522. package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
  523. package/deps/librdkafka/tests/sockem.c +801 -0
  524. package/deps/librdkafka/tests/sockem.h +85 -0
  525. package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
  526. package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
  527. package/deps/librdkafka/tests/test.c +7778 -0
  528. package/deps/librdkafka/tests/test.conf.example +27 -0
  529. package/deps/librdkafka/tests/test.h +1028 -0
  530. package/deps/librdkafka/tests/testcpp.cpp +131 -0
  531. package/deps/librdkafka/tests/testcpp.h +388 -0
  532. package/deps/librdkafka/tests/testshared.h +416 -0
  533. package/deps/librdkafka/tests/tools/README.md +4 -0
  534. package/deps/librdkafka/tests/tools/stats/README.md +21 -0
  535. package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
  536. package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
  537. package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
  538. package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
  539. package/deps/librdkafka/tests/trivup/trivup-0.14.0.tar.gz +0 -0
  540. package/deps/librdkafka/tests/until-fail.sh +87 -0
  541. package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
  542. package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
  543. package/deps/librdkafka/vcpkg.json +23 -0
  544. package/deps/librdkafka/win32/README.md +5 -0
  545. package/deps/librdkafka/win32/build-package.bat +3 -0
  546. package/deps/librdkafka/win32/build.bat +19 -0
  547. package/deps/librdkafka/win32/common.vcxproj +84 -0
  548. package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
  549. package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
  550. package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
  551. package/deps/librdkafka/win32/librdkafka.sln +226 -0
  552. package/deps/librdkafka/win32/librdkafka.vcxproj +276 -0
  553. package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
  554. package/deps/librdkafka/win32/msbuild.ps1 +15 -0
  555. package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
  556. package/deps/librdkafka/win32/package-zip.ps1 +46 -0
  557. package/deps/librdkafka/win32/packages/repositories.config +4 -0
  558. package/deps/librdkafka/win32/push-package.bat +4 -0
  559. package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
  560. package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
  561. package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
  562. package/deps/librdkafka/win32/setup-msys2.ps1 +47 -0
  563. package/deps/librdkafka/win32/setup-vcpkg.ps1 +34 -0
  564. package/deps/librdkafka/win32/tests/test.conf.example +25 -0
  565. package/deps/librdkafka/win32/tests/tests.vcxproj +253 -0
  566. package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
  567. package/deps/librdkafka/win32/wingetopt.c +564 -0
  568. package/deps/librdkafka/win32/wingetopt.h +101 -0
  569. package/deps/librdkafka/win32/wintime.h +33 -0
  570. package/deps/librdkafka.gyp +83 -0
  571. package/deps/windows-install.py +80 -0
  572. package/eslint.config.js +75 -0
  573. package/flake.lock +61 -0
  574. package/flake.nix +76 -0
  575. package/index.d.ts +3 -0
  576. package/jest.config.js +8 -0
  577. package/jsdoc.conf +23 -0
  578. package/lib/admin.js +732 -0
  579. package/lib/client.js +679 -0
  580. package/lib/error.js +501 -0
  581. package/lib/index.js +8 -0
  582. package/lib/kafka-consumer-stream.js +399 -0
  583. package/lib/kafka-consumer.js +798 -0
  584. package/lib/kafkajs/_admin.js +1053 -0
  585. package/lib/kafkajs/_common.js +887 -0
  586. package/lib/kafkajs/_consumer.js +2143 -0
  587. package/lib/kafkajs/_consumer_cache.js +310 -0
  588. package/lib/kafkajs/_error.js +298 -0
  589. package/lib/kafkajs/_kafka.js +125 -0
  590. package/lib/kafkajs/_linked-list.js +220 -0
  591. package/lib/kafkajs/_producer.js +863 -0
  592. package/lib/kafkajs/index.js +5 -0
  593. package/lib/producer/high-level-producer.js +400 -0
  594. package/lib/producer-stream.js +337 -0
  595. package/lib/producer.js +405 -0
  596. package/lib/rdkafka.js +44 -0
  597. package/lib/tools/ref-counter.js +53 -0
  598. package/lib/topic-partition.js +91 -0
  599. package/lib/topic.js +43 -0
  600. package/lib/util.js +55 -0
  601. package/librdkafka.js +12 -0
  602. package/make_docs.sh +57 -0
  603. package/package.json +59 -4
  604. package/run_docker.sh +42 -0
  605. package/service.yml +36 -0
  606. package/sonar-project.properties +9 -0
  607. package/src/admin.cc +1597 -0
  608. package/src/admin.h +112 -0
  609. package/src/binding.cc +76 -0
  610. package/src/binding.h +25 -0
  611. package/src/callbacks.cc +676 -0
  612. package/src/callbacks.h +302 -0
  613. package/src/common.cc +1601 -0
  614. package/src/common.h +192 -0
  615. package/src/config.cc +219 -0
  616. package/src/config.h +61 -0
  617. package/src/connection.cc +703 -0
  618. package/src/connection.h +117 -0
  619. package/src/errors.cc +119 -0
  620. package/src/errors.h +60 -0
  621. package/src/kafka-consumer.cc +1539 -0
  622. package/src/kafka-consumer.h +147 -0
  623. package/src/producer.cc +917 -0
  624. package/src/producer.h +124 -0
  625. package/src/topic.cc +173 -0
  626. package/src/topic.h +54 -0
  627. package/src/workers.cc +1714 -0
  628. package/src/workers.h +690 -0
  629. package/tsconfig.json +18 -0
  630. package/types/config.d.ts +1248 -0
  631. package/types/errors.d.ts +373 -0
  632. package/types/kafkajs.d.ts +568 -0
  633. package/types/rdkafka.d.ts +561 -0
  634. package/util/configure.js +34 -0
  635. package/util/generate-docs.sh +18 -0
  636. package/util/get-env.js +6 -0
  637. package/util/test-compile.js +11 -0
  638. package/util/test-producer-delivery.js +100 -0
  639. package/win_install.ps1 +2 -0
@@ -0,0 +1,753 @@
1
+ /*
2
+ * librdkafka - Apache Kafka C library
3
+ *
4
+ * Copyright (c) 2012-2022, Magnus Edenhill
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are met:
9
+ *
10
+ * 1. Redistributions of source code must retain the above copyright notice,
11
+ * this list of conditions and the following disclaimer.
12
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
13
+ * this list of conditions and the following disclaimer in the documentation
14
+ * and/or other materials provided with the distribution.
15
+ *
16
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
+ * POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
29
+ /**
30
+ * Tests messages are produced in order.
31
+ */
32
+
33
+
34
+ #include "test.h"
35
+
36
+ /* Typical include path would be <librdkafka/rdkafka.h>, but this program
37
+ * is built from within the librdkafka source tree and thus differs. */
38
+ #include "rdkafka.h" /* for Kafka driver */
39
+
40
+
41
+ static int msgid_next = 0;
42
+ static int fails = 0;
43
+ static int msgcounter = 0;
44
+ static int *dr_partition_count = NULL;
45
+ static const int topic_num_partitions = 4;
46
+ static int msg_partition_wo_flag = 2;
47
+ static int msg_partition_wo_flag_success = 0;
48
+ static int invalid_record_fail_cnt = 0;
49
+ static int invalid_different_record_fail_cnt = 0;
50
+ static int valid_message_cnt = 0;
51
+
52
+ /**
53
+ * Delivery reported callback.
54
+ * Called for each message once to signal its delivery status.
55
+ */
56
+ static void dr_single_partition_cb(rd_kafka_t *rk,
57
+ void *payload,
58
+ size_t len,
59
+ rd_kafka_resp_err_t err,
60
+ void *opaque,
61
+ void *msg_opaque) {
62
+ int msgid = *(int *)msg_opaque;
63
+
64
+ free(msg_opaque);
65
+
66
+ if (err != RD_KAFKA_RESP_ERR_NO_ERROR)
67
+ TEST_FAIL("Message delivery failed: %s\n",
68
+ rd_kafka_err2str(err));
69
+
70
+ if (msgid != msgid_next) {
71
+ fails++;
72
+ TEST_FAIL("Delivered msg %i, expected %i\n", msgid, msgid_next);
73
+ return;
74
+ }
75
+
76
+ msgid_next = msgid + 1;
77
+ msgcounter--;
78
+ }
79
+
80
+ /* Produce a batch of messages to a single partition. */
81
+ static void test_single_partition(void) {
82
+ int partition = 0;
83
+ int r;
84
+ rd_kafka_t *rk;
85
+ rd_kafka_topic_t *rkt;
86
+ rd_kafka_conf_t *conf;
87
+ rd_kafka_topic_conf_t *topic_conf;
88
+ char msg[128];
89
+ int msgcnt = test_quick ? 100 : 100000;
90
+ int failcnt = 0;
91
+ int i;
92
+ rd_kafka_message_t *rkmessages;
93
+ char client_id[271];
94
+ SUB_TEST_QUICK();
95
+
96
+ msgid_next = 0;
97
+
98
+ test_conf_init(&conf, &topic_conf, 20);
99
+
100
+ /* A long client id must not cause a segmentation fault
101
+ * because of an erased segment when using flexver.
102
+ * See:
103
+ * https://github.com/confluentinc/confluent-kafka-dotnet/issues/2084 */
104
+ memset(client_id, 'c', sizeof(client_id) - 1);
105
+ client_id[sizeof(client_id) - 1] = '\0';
106
+ rd_kafka_conf_set(conf, "client.id", client_id, NULL, 0);
107
+
108
+ /* Set delivery report callback */
109
+ rd_kafka_conf_set_dr_cb(conf, dr_single_partition_cb);
110
+
111
+ /* Create kafka instance */
112
+ rk = test_create_handle(RD_KAFKA_PRODUCER, conf);
113
+
114
+ TEST_SAY("test_single_partition: Created kafka instance %s\n",
115
+ rd_kafka_name(rk));
116
+
117
+ rkt = rd_kafka_topic_new(rk, test_mk_topic_name("0011", 0), topic_conf);
118
+ if (!rkt)
119
+ TEST_FAIL("Failed to create topic: %s\n", rd_strerror(errno));
120
+
121
+ /* Create messages */
122
+ rkmessages = calloc(sizeof(*rkmessages), msgcnt);
123
+ for (i = 0; i < msgcnt; i++) {
124
+ int *msgidp = malloc(sizeof(*msgidp));
125
+ *msgidp = i;
126
+ rd_snprintf(msg, sizeof(msg), "%s:%s test message #%i",
127
+ __FILE__, __FUNCTION__, i);
128
+
129
+ rkmessages[i].payload = rd_strdup(msg);
130
+ rkmessages[i].len = strlen(msg);
131
+ rkmessages[i]._private = msgidp;
132
+ rkmessages[i].partition = 2; /* Will be ignored since
133
+ * RD_KAFKA_MSG_F_PARTITION
134
+ * is not supplied. */
135
+ }
136
+
137
+ r = rd_kafka_produce_batch(rkt, partition, RD_KAFKA_MSG_F_FREE,
138
+ rkmessages, msgcnt);
139
+
140
+ /* Scan through messages to check for errors. */
141
+ for (i = 0; i < msgcnt; i++) {
142
+ if (rkmessages[i].err) {
143
+ failcnt++;
144
+ if (failcnt < 100)
145
+ TEST_SAY("Message #%i failed: %s\n", i,
146
+ rd_kafka_err2str(rkmessages[i].err));
147
+ }
148
+ }
149
+
150
+ /* All messages should've been produced. */
151
+ if (r < msgcnt) {
152
+ TEST_SAY(
153
+ "Not all messages were accepted "
154
+ "by produce_batch(): %i < %i\n",
155
+ r, msgcnt);
156
+ if (msgcnt - r != failcnt)
157
+ TEST_SAY(
158
+ "Discrepency between failed messages (%i) "
159
+ "and return value %i (%i - %i)\n",
160
+ failcnt, msgcnt - r, msgcnt, r);
161
+ TEST_FAIL("%i/%i messages failed\n", msgcnt - r, msgcnt);
162
+ }
163
+
164
+ free(rkmessages);
165
+ TEST_SAY(
166
+ "Single partition: "
167
+ "Produced %i messages, waiting for deliveries\n",
168
+ r);
169
+
170
+ msgcounter = msgcnt;
171
+
172
+ /* Wait for messages to be delivered */
173
+ test_wait_delivery(rk, &msgcounter);
174
+
175
+ if (fails)
176
+ TEST_FAIL("%i failures, see previous errors", fails);
177
+
178
+ if (msgid_next != msgcnt)
179
+ TEST_FAIL("Still waiting for messages: next %i != end %i\n",
180
+ msgid_next, msgcnt);
181
+
182
+ /* Destroy topic */
183
+ rd_kafka_topic_destroy(rkt);
184
+
185
+ /* Destroy rdkafka instance */
186
+ TEST_SAY("Destroying kafka instance %s\n", rd_kafka_name(rk));
187
+ rd_kafka_destroy(rk);
188
+
189
+ SUB_TEST_PASS();
190
+ }
191
+
192
+
193
+
194
+ /**
195
+ * Delivery reported callback.
196
+ * Called for each message once to signal its delivery status.
197
+ */
198
+ static void dr_partitioner_cb(rd_kafka_t *rk,
199
+ void *payload,
200
+ size_t len,
201
+ rd_kafka_resp_err_t err,
202
+ void *opaque,
203
+ void *msg_opaque) {
204
+ int msgid = *(int *)msg_opaque;
205
+
206
+ free(msg_opaque);
207
+
208
+ if (err != RD_KAFKA_RESP_ERR_NO_ERROR)
209
+ TEST_FAIL("Message delivery failed: %s\n",
210
+ rd_kafka_err2str(err));
211
+
212
+ if (msgcounter <= 0)
213
+ TEST_FAIL(
214
+ "Too many message dr_cb callback calls "
215
+ "(at msgid #%i)\n",
216
+ msgid);
217
+ msgcounter--;
218
+ }
219
+
220
+ /* Produce a batch of messages using random (default) partitioner */
221
+ static void test_partitioner(void) {
222
+ int partition = RD_KAFKA_PARTITION_UA;
223
+ int r;
224
+ rd_kafka_t *rk;
225
+ rd_kafka_topic_t *rkt;
226
+ rd_kafka_conf_t *conf;
227
+ rd_kafka_topic_conf_t *topic_conf;
228
+ char msg[128];
229
+ int msgcnt = test_quick ? 100 : 100000;
230
+ int failcnt = 0;
231
+ int i;
232
+ rd_kafka_message_t *rkmessages;
233
+
234
+ SUB_TEST_QUICK();
235
+
236
+ test_conf_init(&conf, &topic_conf, 30);
237
+
238
+ /* Set delivery report callback */
239
+ rd_kafka_conf_set_dr_cb(conf, dr_partitioner_cb);
240
+
241
+ /* Create kafka instance */
242
+ rk = test_create_handle(RD_KAFKA_PRODUCER, conf);
243
+
244
+ TEST_SAY("test_partitioner: Created kafka instance %s\n",
245
+ rd_kafka_name(rk));
246
+
247
+ rkt = rd_kafka_topic_new(rk, test_mk_topic_name("0011", 0), topic_conf);
248
+ if (!rkt)
249
+ TEST_FAIL("Failed to create topic: %s\n", rd_strerror(errno));
250
+
251
+ /* Create messages */
252
+ rkmessages = calloc(sizeof(*rkmessages), msgcnt);
253
+ for (i = 0; i < msgcnt; i++) {
254
+ int *msgidp = malloc(sizeof(*msgidp));
255
+ *msgidp = i;
256
+ rd_snprintf(msg, sizeof(msg), "%s:%s test message #%i",
257
+ __FILE__, __FUNCTION__, i);
258
+
259
+ rkmessages[i].payload = rd_strdup(msg);
260
+ rkmessages[i].len = strlen(msg);
261
+ rkmessages[i]._private = msgidp;
262
+ }
263
+
264
+ r = rd_kafka_produce_batch(rkt, partition, RD_KAFKA_MSG_F_FREE,
265
+ rkmessages, msgcnt);
266
+
267
+ /* Scan through messages to check for errors. */
268
+ for (i = 0; i < msgcnt; i++) {
269
+ if (rkmessages[i].err) {
270
+ failcnt++;
271
+ if (failcnt < 100)
272
+ TEST_SAY("Message #%i failed: %s\n", i,
273
+ rd_kafka_err2str(rkmessages[i].err));
274
+ }
275
+ }
276
+
277
+ /* All messages should've been produced. */
278
+ if (r < msgcnt) {
279
+ TEST_SAY(
280
+ "Not all messages were accepted "
281
+ "by produce_batch(): %i < %i\n",
282
+ r, msgcnt);
283
+ if (msgcnt - r != failcnt)
284
+ TEST_SAY(
285
+ "Discrepency between failed messages (%i) "
286
+ "and return value %i (%i - %i)\n",
287
+ failcnt, msgcnt - r, msgcnt, r);
288
+ TEST_FAIL("%i/%i messages failed\n", msgcnt - r, msgcnt);
289
+ }
290
+
291
+ free(rkmessages);
292
+ TEST_SAY(
293
+ "Partitioner: "
294
+ "Produced %i messages, waiting for deliveries\n",
295
+ r);
296
+
297
+ msgcounter = msgcnt;
298
+ /* Wait for messages to be delivered */
299
+ test_wait_delivery(rk, &msgcounter);
300
+
301
+ if (fails)
302
+ TEST_FAIL("%i failures, see previous errors", fails);
303
+
304
+ if (msgcounter != 0)
305
+ TEST_FAIL("Still waiting for %i/%i messages\n", msgcounter,
306
+ msgcnt);
307
+
308
+ /* Destroy topic */
309
+ rd_kafka_topic_destroy(rkt);
310
+
311
+ /* Destroy rdkafka instance */
312
+ TEST_SAY("Destroying kafka instance %s\n", rd_kafka_name(rk));
313
+ rd_kafka_destroy(rk);
314
+
315
+ SUB_TEST_PASS();
316
+ }
317
+
318
+ static void dr_per_message_partition_cb(rd_kafka_t *rk,
319
+ const rd_kafka_message_t *rkmessage,
320
+ void *opaque) {
321
+
322
+ free(rkmessage->_private);
323
+
324
+ if (rkmessage->err != RD_KAFKA_RESP_ERR_NO_ERROR)
325
+ TEST_FAIL("Message delivery failed: %s\n",
326
+ rd_kafka_err2str(rkmessage->err));
327
+
328
+ if (msgcounter <= 0)
329
+ TEST_FAIL(
330
+ "Too many message dr_cb callback calls "
331
+ "(at msg offset #%" PRId64 ")\n",
332
+ rkmessage->offset);
333
+
334
+ TEST_ASSERT(rkmessage->partition < topic_num_partitions);
335
+ msgcounter--;
336
+
337
+ dr_partition_count[rkmessage->partition]++;
338
+ }
339
+
340
+ /* Produce a batch of messages using with per message partition flag */
341
+ static void test_per_message_partition_flag(void) {
342
+ int partition = 0;
343
+ int r;
344
+ rd_kafka_t *rk;
345
+ rd_kafka_topic_t *rkt;
346
+ rd_kafka_conf_t *conf;
347
+ rd_kafka_topic_conf_t *topic_conf;
348
+ char msg[128 + sizeof(__FILE__) + sizeof(__FUNCTION__)];
349
+ int msgcnt = test_quick ? 100 : 1000;
350
+ int failcnt = 0;
351
+ int i;
352
+ int *rkpartition_counts;
353
+ rd_kafka_message_t *rkmessages;
354
+ const char *topic_name;
355
+
356
+ SUB_TEST_QUICK();
357
+
358
+ test_conf_init(&conf, &topic_conf, 30);
359
+
360
+ /* Set delivery report callback */
361
+ rd_kafka_conf_set_dr_msg_cb(conf, dr_per_message_partition_cb);
362
+
363
+ /* Create kafka instance */
364
+ rk = test_create_handle(RD_KAFKA_PRODUCER, conf);
365
+
366
+ TEST_SAY("test_per_message_partition_flag: Created kafka instance %s\n",
367
+ rd_kafka_name(rk));
368
+ topic_name = test_mk_topic_name("0011_per_message_flag", 1);
369
+ test_create_topic_wait_exists(rk, topic_name, topic_num_partitions, 1,
370
+ 5000);
371
+
372
+ rkt = rd_kafka_topic_new(rk, topic_name, topic_conf);
373
+ if (!rkt)
374
+ TEST_FAIL("Failed to create topic: %s\n", rd_strerror(errno));
375
+
376
+ /* Create messages */
377
+ rkpartition_counts = calloc(sizeof(int), topic_num_partitions);
378
+ dr_partition_count = calloc(sizeof(int), topic_num_partitions);
379
+ rkmessages = calloc(sizeof(*rkmessages), msgcnt);
380
+ for (i = 0; i < msgcnt; i++) {
381
+ int *msgidp = malloc(sizeof(*msgidp));
382
+ *msgidp = i;
383
+ rd_snprintf(msg, sizeof(msg), "%s:%s test message #%i",
384
+ __FILE__, __FUNCTION__, i);
385
+
386
+ rkmessages[i].payload = rd_strdup(msg);
387
+ rkmessages[i].len = strlen(msg);
388
+ rkmessages[i]._private = msgidp;
389
+ rkmessages[i].partition = jitter(0, topic_num_partitions - 1);
390
+ rkpartition_counts[rkmessages[i].partition]++;
391
+ }
392
+
393
+ r = rd_kafka_produce_batch(
394
+ rkt, partition, RD_KAFKA_MSG_F_PARTITION | RD_KAFKA_MSG_F_FREE,
395
+ rkmessages, msgcnt);
396
+
397
+ /* Scan through messages to check for errors. */
398
+ for (i = 0; i < msgcnt; i++) {
399
+ if (rkmessages[i].err) {
400
+ failcnt++;
401
+ if (failcnt < 100)
402
+ TEST_SAY("Message #%i failed: %s\n", i,
403
+ rd_kafka_err2str(rkmessages[i].err));
404
+ }
405
+ }
406
+
407
+ /* All messages should've been produced. */
408
+ if (r < msgcnt) {
409
+ TEST_SAY(
410
+ "Not all messages were accepted "
411
+ "by produce_batch(): %i < %i\n",
412
+ r, msgcnt);
413
+ if (msgcnt - r != failcnt)
414
+ TEST_SAY(
415
+ "Discrepency between failed messages (%i) "
416
+ "and return value %i (%i - %i)\n",
417
+ failcnt, msgcnt - r, msgcnt, r);
418
+ TEST_FAIL("%i/%i messages failed\n", msgcnt - r, msgcnt);
419
+ }
420
+
421
+ free(rkmessages);
422
+ TEST_SAY(
423
+ "Per-message partition: "
424
+ "Produced %i messages, waiting for deliveries\n",
425
+ r);
426
+
427
+ msgcounter = msgcnt;
428
+ /* Wait for messages to be delivered */
429
+ test_wait_delivery(rk, &msgcounter);
430
+
431
+ if (msgcounter != 0)
432
+ TEST_FAIL("Still waiting for %i/%i messages\n", msgcounter,
433
+ msgcnt);
434
+
435
+ for (i = 0; i < topic_num_partitions; i++) {
436
+ if (dr_partition_count[i] != rkpartition_counts[i]) {
437
+ TEST_FAIL(
438
+ "messages were not sent to designated "
439
+ "partitions expected messages %i in "
440
+ "partition %i, but only "
441
+ "%i messages were sent",
442
+ rkpartition_counts[i], i, dr_partition_count[i]);
443
+ }
444
+ }
445
+
446
+ free(rkpartition_counts);
447
+ free(dr_partition_count);
448
+
449
+ /* Destroy topic */
450
+ rd_kafka_topic_destroy(rkt);
451
+
452
+ /* Destroy rdkafka instance */
453
+ TEST_SAY("Destroying kafka instance %s\n", rd_kafka_name(rk));
454
+ rd_kafka_destroy(rk);
455
+
456
+ SUB_TEST_PASS();
457
+ }
458
+
459
+ static void
460
+ dr_partitioner_wo_per_message_flag_cb(rd_kafka_t *rk,
461
+ const rd_kafka_message_t *rkmessage,
462
+ void *opaque) {
463
+ free(rkmessage->_private);
464
+
465
+ if (rkmessage->err != RD_KAFKA_RESP_ERR_NO_ERROR)
466
+ TEST_FAIL("Message delivery failed: %s\n",
467
+ rd_kafka_err2str(rkmessage->err));
468
+ if (msgcounter <= 0)
469
+ TEST_FAIL(
470
+ "Too many message dr_cb callback calls "
471
+ "(at msg offset #%" PRId64 ")\n",
472
+ rkmessage->offset);
473
+ if (rkmessage->partition != msg_partition_wo_flag)
474
+ msg_partition_wo_flag_success = 1;
475
+ msgcounter--;
476
+ }
477
+
478
+ /**
479
+ * @brief Produce a batch of messages using partitioner
480
+ * without per message partition flag
481
+ */
482
+ static void test_message_partitioner_wo_per_message_flag(void) {
483
+ int partition = RD_KAFKA_PARTITION_UA;
484
+ int r;
485
+ rd_kafka_t *rk;
486
+ rd_kafka_topic_t *rkt;
487
+ rd_kafka_conf_t *conf;
488
+ rd_kafka_topic_conf_t *topic_conf;
489
+ char msg[128 + sizeof(__FILE__) + sizeof(__FUNCTION__)];
490
+ int msgcnt = test_quick ? 100 : 1000;
491
+ int failcnt = 0;
492
+ int i;
493
+ rd_kafka_message_t *rkmessages;
494
+
495
+ SUB_TEST_QUICK();
496
+
497
+ test_conf_init(&conf, &topic_conf, 30);
498
+
499
+ /* Set delivery report callback */
500
+ rd_kafka_conf_set_dr_msg_cb(conf,
501
+ dr_partitioner_wo_per_message_flag_cb);
502
+ test_conf_set(conf, "sticky.partitioning.linger.ms", "0");
503
+
504
+ /* Create kafka instance */
505
+ rk = test_create_handle(RD_KAFKA_PRODUCER, conf);
506
+
507
+ TEST_SAY("test_partitioner: Created kafka instance %s\n",
508
+ rd_kafka_name(rk));
509
+
510
+ rkt = rd_kafka_topic_new(rk, test_mk_topic_name("0011", 0), topic_conf);
511
+ if (!rkt)
512
+ TEST_FAIL("Failed to create topic: %s\n", rd_strerror(errno));
513
+
514
+ /* Create messages */
515
+ rkmessages = calloc(sizeof(*rkmessages), msgcnt);
516
+ for (i = 0; i < msgcnt; i++) {
517
+ int *msgidp = malloc(sizeof(*msgidp));
518
+ *msgidp = i;
519
+ rd_snprintf(msg, sizeof(msg), "%s:%s test message #%i",
520
+ __FILE__, __FUNCTION__, i);
521
+
522
+ rkmessages[i].payload = rd_strdup(msg);
523
+ rkmessages[i].len = strlen(msg);
524
+ rkmessages[i]._private = msgidp;
525
+ rkmessages[i].partition = msg_partition_wo_flag;
526
+ }
527
+
528
+ r = rd_kafka_produce_batch(rkt, partition, RD_KAFKA_MSG_F_FREE,
529
+ rkmessages, msgcnt);
530
+
531
+ /* Scan through messages to check for errors. */
532
+ for (i = 0; i < msgcnt; i++) {
533
+ if (rkmessages[i].err) {
534
+ failcnt++;
535
+ if (failcnt < 100)
536
+ TEST_SAY("Message #%i failed: %s\n", i,
537
+ rd_kafka_err2str(rkmessages[i].err));
538
+ }
539
+ }
540
+
541
+ /* All messages should've been produced. */
542
+ if (r < msgcnt) {
543
+ TEST_SAY(
544
+ "Not all messages were accepted "
545
+ "by produce_batch(): %i < %i\n",
546
+ r, msgcnt);
547
+ if (msgcnt - r != failcnt)
548
+ TEST_SAY(
549
+ "Discrepency between failed messages (%i) "
550
+ "and return value %i (%i - %i)\n",
551
+ failcnt, msgcnt - r, msgcnt, r);
552
+ TEST_FAIL("%i/%i messages failed\n", msgcnt - r, msgcnt);
553
+ }
554
+
555
+ free(rkmessages);
556
+ TEST_SAY(
557
+ "Partitioner: "
558
+ "Produced %i messages, waiting for deliveries\n",
559
+ r);
560
+
561
+ msgcounter = msgcnt;
562
+ /* Wait for messages to be delivered */
563
+ test_wait_delivery(rk, &msgcounter);
564
+
565
+ if (fails)
566
+ TEST_FAIL("%i failures, see previous errors", fails);
567
+
568
+ if (msgcounter != 0)
569
+ TEST_FAIL("Still waiting for %i/%i messages\n", msgcounter,
570
+ msgcnt);
571
+ if (msg_partition_wo_flag_success == 0) {
572
+ TEST_FAIL(
573
+ "partitioner was not used, all messages were sent to "
574
+ "message specified partition %i",
575
+ i);
576
+ }
577
+
578
+ /* Destroy topic */
579
+ rd_kafka_topic_destroy(rkt);
580
+
581
+ /* Destroy rdkafka instance */
582
+ TEST_SAY("Destroying kafka instance %s\n", rd_kafka_name(rk));
583
+ rd_kafka_destroy(rk);
584
+
585
+ SUB_TEST_PASS();
586
+ }
587
+
588
+ static void
589
+ dr_message_single_partition_record_fail(rd_kafka_t *rk,
590
+ const rd_kafka_message_t *rkmessage,
591
+ void *opaque) {
592
+ free(rkmessage->_private);
593
+ if (rkmessage->err) {
594
+ if (rkmessage->err == RD_KAFKA_RESP_ERR_INVALID_RECORD)
595
+ invalid_record_fail_cnt++;
596
+ else if (rkmessage->err ==
597
+ RD_KAFKA_RESP_ERR__INVALID_DIFFERENT_RECORD)
598
+ invalid_different_record_fail_cnt++;
599
+ } else {
600
+ valid_message_cnt++;
601
+ }
602
+ msgcounter--;
603
+ }
604
+
605
+ /**
606
+ * @brief Some messages fail because of INVALID_RECORD: compacted topic
607
+ * but no key was sent.
608
+ *
609
+ * - variation 1: they're in the same batch, rest of messages
610
+ * fail with _INVALID_DIFFERENT_RECORD
611
+ * - variation 2: one message per batch, other messages succeed
612
+ */
613
+ static void test_message_single_partition_record_fail(int variation) {
614
+ int partition = 0;
615
+ int r;
616
+ rd_kafka_t *rk;
617
+ rd_kafka_topic_t *rkt;
618
+ rd_kafka_conf_t *conf;
619
+ rd_kafka_topic_conf_t *topic_conf;
620
+ char msg[128];
621
+ int msgcnt = 100;
622
+ int failcnt = 0;
623
+ int i;
624
+ rd_kafka_message_t *rkmessages;
625
+ const char *topic_name = test_mk_topic_name(__FUNCTION__, 1);
626
+ invalid_record_fail_cnt = 0;
627
+ invalid_different_record_fail_cnt = 0;
628
+
629
+ SUB_TEST_QUICK();
630
+
631
+ const char *confs_set_append[] = {"cleanup.policy", "APPEND",
632
+ "compact"};
633
+
634
+ const char *confs_delete_subtract[] = {"cleanup.policy", "SUBTRACT",
635
+ "compact"};
636
+
637
+ test_conf_init(&conf, &topic_conf, 20);
638
+ if (variation == 1)
639
+ test_conf_set(conf, "batch.size", "1");
640
+
641
+ /* Set delivery report callback */
642
+ rd_kafka_conf_set_dr_msg_cb(conf,
643
+ dr_message_single_partition_record_fail);
644
+
645
+
646
+ /* Create kafka instance */
647
+ rk = test_create_handle(RD_KAFKA_PRODUCER, conf);
648
+
649
+ TEST_SAY(
650
+ "test_message_single_partition_record_fail: Created kafka instance "
651
+ "%s\n",
652
+ rd_kafka_name(rk));
653
+
654
+ rkt = rd_kafka_topic_new(rk, topic_name, topic_conf);
655
+ if (!rkt)
656
+ TEST_FAIL("Failed to create topic: %s\n", rd_strerror(errno));
657
+ test_wait_topic_exists(rk, topic_name, 5000);
658
+
659
+ test_IncrementalAlterConfigs_simple(rk, RD_KAFKA_RESOURCE_TOPIC,
660
+ topic_name, confs_set_append, 1);
661
+ rd_sleep(1);
662
+
663
+
664
+ /* Create messages */
665
+ rkmessages = calloc(sizeof(*rkmessages), msgcnt);
666
+ for (i = 0; i < msgcnt; i++) {
667
+ int *msgidp = malloc(sizeof(*msgidp));
668
+
669
+ *msgidp = i;
670
+ rd_snprintf(msg, sizeof(msg), "%s:%s test message #%i",
671
+ __FILE__, __FUNCTION__, i);
672
+ if (i % 10 == 0) {
673
+ rkmessages[i].payload = rd_strdup(msg);
674
+ rkmessages[i].len = strlen(msg);
675
+
676
+ } else {
677
+ rkmessages[i].payload = rd_strdup(msg);
678
+ rkmessages[i].len = strlen(msg);
679
+ rkmessages[i].key = rd_strdup(msg);
680
+ rkmessages[i].key_len = strlen(msg);
681
+ }
682
+ rkmessages[i]._private = msgidp;
683
+ rkmessages[i].partition = 2;
684
+ }
685
+
686
+ r = rd_kafka_produce_batch(rkt, partition, RD_KAFKA_MSG_F_FREE,
687
+ rkmessages, msgcnt);
688
+
689
+ if (r < msgcnt) {
690
+ TEST_SAY(
691
+ "Not all messages were accepted "
692
+ "by produce_batch(): %i < %i\n",
693
+ r, msgcnt);
694
+ if (msgcnt - r != failcnt)
695
+ TEST_SAY(
696
+ "Discrepency between failed messages (%i) "
697
+ "and return value %i (%i - %i)\n",
698
+ failcnt, msgcnt - r, msgcnt, r);
699
+ TEST_FAIL("%i/%i messages failed\n", msgcnt - r, msgcnt);
700
+ }
701
+
702
+ for (i = 0; i < msgcnt; i++)
703
+ free(rkmessages[i].key);
704
+ free(rkmessages);
705
+ TEST_SAY(
706
+ "test_message_single_partition_record_fail: "
707
+ "Produced %i messages, waiting for deliveries\n",
708
+ r);
709
+
710
+ msgcounter = msgcnt;
711
+
712
+ /* Wait for messages to be delivered */
713
+ test_wait_delivery(rk, &msgcounter);
714
+ TEST_SAY(
715
+ "invalid_record_fail_cnt: %d invalid_different_record_fail_cnt : "
716
+ "%d \n",
717
+ invalid_record_fail_cnt, invalid_different_record_fail_cnt);
718
+ TEST_ASSERT(invalid_record_fail_cnt == 10);
719
+ if (variation == 0)
720
+ TEST_ASSERT(invalid_different_record_fail_cnt == 90);
721
+ else if (variation == 1)
722
+ TEST_ASSERT(valid_message_cnt == 90);
723
+
724
+ test_IncrementalAlterConfigs_simple(
725
+ rk, RD_KAFKA_RESOURCE_TOPIC, topic_name, confs_delete_subtract, 1);
726
+
727
+ if (fails)
728
+ TEST_FAIL("%i failures, see previous errors", fails);
729
+
730
+
731
+ /* Destroy topic */
732
+ rd_kafka_topic_destroy(rkt);
733
+
734
+ test_DeleteTopics_simple(rk, NULL, (char **)&topic_name, 1, NULL);
735
+
736
+ /* Destroy rdkafka instance */
737
+ TEST_SAY("Destroying kafka instance %s\n", rd_kafka_name(rk));
738
+ rd_kafka_destroy(rk);
739
+ SUB_TEST_PASS();
740
+ }
741
+
742
+
743
+ int main_0011_produce_batch(int argc, char **argv) {
744
+ test_message_partitioner_wo_per_message_flag();
745
+ test_single_partition();
746
+ test_partitioner();
747
+ if (test_can_create_topics(1))
748
+ test_per_message_partition_flag();
749
+
750
+ test_message_single_partition_record_fail(0);
751
+ test_message_single_partition_record_fail(1);
752
+ return 0;
753
+ }