@ohos-ports/confluentinc-kafka-javascript 1.10.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/CHANGELOG.md +457 -0
  2. package/LICENSE.kafkajs +31 -0
  3. package/LICENSE.node-rdkafka +25 -0
  4. package/LICENSE.txt +20 -0
  5. package/README.md +133 -0
  6. package/binding.gyp +184 -0
  7. package/build/Release/confluent-kafka-javascript.node +0 -0
  8. package/build/deps/librdkafka++.so.1 +0 -0
  9. package/build/deps/librdkafka.Makefile +6 -0
  10. package/build/deps/librdkafka.so.1 +0 -0
  11. package/build/deps/librdkafka.target.mk +55 -0
  12. package/deps/librdkafka/.clang-format +136 -0
  13. package/deps/librdkafka/.clang-format-cpp +103 -0
  14. package/deps/librdkafka/.dir-locals.el +10 -0
  15. package/deps/librdkafka/.formatignore +35 -0
  16. package/deps/librdkafka/.gdbmacros +19 -0
  17. package/deps/librdkafka/CHANGELOG.md +2477 -0
  18. package/deps/librdkafka/CMakeLists.txt +291 -0
  19. package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
  20. package/deps/librdkafka/CONFIGURATION.md +212 -0
  21. package/deps/librdkafka/CONTRIBUTING.md +431 -0
  22. package/deps/librdkafka/Doxyfile +2375 -0
  23. package/deps/librdkafka/INTRODUCTION.md +2752 -0
  24. package/deps/librdkafka/LICENSE +26 -0
  25. package/deps/librdkafka/LICENSE.cjson +22 -0
  26. package/deps/librdkafka/LICENSE.crc32c +28 -0
  27. package/deps/librdkafka/LICENSE.fnv1a +18 -0
  28. package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
  29. package/deps/librdkafka/LICENSE.lz4 +26 -0
  30. package/deps/librdkafka/LICENSE.murmur2 +25 -0
  31. package/deps/librdkafka/LICENSE.nanopb +22 -0
  32. package/deps/librdkafka/LICENSE.opentelemetry +203 -0
  33. package/deps/librdkafka/LICENSE.pycrc +23 -0
  34. package/deps/librdkafka/LICENSE.queue +31 -0
  35. package/deps/librdkafka/LICENSE.regexp +5 -0
  36. package/deps/librdkafka/LICENSE.snappy +36 -0
  37. package/deps/librdkafka/LICENSE.tinycthread +26 -0
  38. package/deps/librdkafka/LICENSE.wingetopt +49 -0
  39. package/deps/librdkafka/LICENSES.txt +625 -0
  40. package/deps/librdkafka/Makefile +125 -0
  41. package/deps/librdkafka/README.md +201 -0
  42. package/deps/librdkafka/README.win32 +26 -0
  43. package/deps/librdkafka/STATISTICS.md +624 -0
  44. package/deps/librdkafka/configure +214 -0
  45. package/deps/librdkafka/configure.self +341 -0
  46. package/deps/librdkafka/dev-conf.sh +123 -0
  47. package/deps/librdkafka/lds-gen.py +73 -0
  48. package/deps/librdkafka/mainpage.doxy +40 -0
  49. package/deps/librdkafka/mklove/Makefile.base +329 -0
  50. package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
  51. package/deps/librdkafka/mklove/modules/configure.base +2484 -0
  52. package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
  53. package/deps/librdkafka/mklove/modules/configure.cc +186 -0
  54. package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
  55. package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
  56. package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
  57. package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
  58. package/deps/librdkafka/mklove/modules/configure.host +132 -0
  59. package/deps/librdkafka/mklove/modules/configure.lib +49 -0
  60. package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
  61. package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
  62. package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
  63. package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
  64. package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
  65. package/deps/librdkafka/mklove/modules/configure.pic +16 -0
  66. package/deps/librdkafka/mklove/modules/configure.socket +20 -0
  67. package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
  68. package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
  69. package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
  70. package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
  71. package/deps/librdkafka/service.yml +182 -0
  72. package/deps/librdkafka/src/CMakeLists.txt +379 -0
  73. package/deps/librdkafka/src/Makefile +105 -0
  74. package/deps/librdkafka/src/README.lz4.md +30 -0
  75. package/deps/librdkafka/src/cJSON.c +3191 -0
  76. package/deps/librdkafka/src/cJSON.h +306 -0
  77. package/deps/librdkafka/src/crc32c.c +430 -0
  78. package/deps/librdkafka/src/crc32c.h +38 -0
  79. package/deps/librdkafka/src/generate_proto.sh +66 -0
  80. package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
  81. package/deps/librdkafka/src/lz4.c +2727 -0
  82. package/deps/librdkafka/src/lz4.h +842 -0
  83. package/deps/librdkafka/src/lz4frame.c +2078 -0
  84. package/deps/librdkafka/src/lz4frame.h +692 -0
  85. package/deps/librdkafka/src/lz4frame_static.h +47 -0
  86. package/deps/librdkafka/src/lz4hc.c +1631 -0
  87. package/deps/librdkafka/src/lz4hc.h +413 -0
  88. package/deps/librdkafka/src/nanopb/pb.h +917 -0
  89. package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
  90. package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
  91. package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
  92. package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
  93. package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
  94. package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
  95. package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
  96. package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
  97. package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
  98. package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
  99. package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
  100. package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
  101. package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
  102. package/deps/librdkafka/src/queue.h +850 -0
  103. package/deps/librdkafka/src/rd.h +592 -0
  104. package/deps/librdkafka/src/rdaddr.c +255 -0
  105. package/deps/librdkafka/src/rdaddr.h +202 -0
  106. package/deps/librdkafka/src/rdatomic.h +262 -0
  107. package/deps/librdkafka/src/rdavg.h +260 -0
  108. package/deps/librdkafka/src/rdavl.c +210 -0
  109. package/deps/librdkafka/src/rdavl.h +250 -0
  110. package/deps/librdkafka/src/rdbase64.c +200 -0
  111. package/deps/librdkafka/src/rdbase64.h +43 -0
  112. package/deps/librdkafka/src/rdbuf.c +1884 -0
  113. package/deps/librdkafka/src/rdbuf.h +375 -0
  114. package/deps/librdkafka/src/rdcrc32.c +114 -0
  115. package/deps/librdkafka/src/rdcrc32.h +170 -0
  116. package/deps/librdkafka/src/rddl.c +179 -0
  117. package/deps/librdkafka/src/rddl.h +43 -0
  118. package/deps/librdkafka/src/rdendian.h +175 -0
  119. package/deps/librdkafka/src/rdfloat.h +67 -0
  120. package/deps/librdkafka/src/rdfnv1a.c +113 -0
  121. package/deps/librdkafka/src/rdfnv1a.h +35 -0
  122. package/deps/librdkafka/src/rdgz.c +120 -0
  123. package/deps/librdkafka/src/rdgz.h +46 -0
  124. package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
  125. package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
  126. package/deps/librdkafka/src/rdhttp.c +831 -0
  127. package/deps/librdkafka/src/rdhttp.h +101 -0
  128. package/deps/librdkafka/src/rdinterval.h +177 -0
  129. package/deps/librdkafka/src/rdkafka.c +7287 -0
  130. package/deps/librdkafka/src/rdkafka.h +11795 -0
  131. package/deps/librdkafka/src/rdkafka_admin.c +10165 -0
  132. package/deps/librdkafka/src/rdkafka_admin.h +658 -0
  133. package/deps/librdkafka/src/rdkafka_assignment.c +1282 -0
  134. package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
  135. package/deps/librdkafka/src/rdkafka_assignor.c +1800 -0
  136. package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
  137. package/deps/librdkafka/src/rdkafka_aux.c +409 -0
  138. package/deps/librdkafka/src/rdkafka_aux.h +174 -0
  139. package/deps/librdkafka/src/rdkafka_background.c +222 -0
  140. package/deps/librdkafka/src/rdkafka_broker.c +6736 -0
  141. package/deps/librdkafka/src/rdkafka_broker.h +851 -0
  142. package/deps/librdkafka/src/rdkafka_buf.c +543 -0
  143. package/deps/librdkafka/src/rdkafka_buf.h +1525 -0
  144. package/deps/librdkafka/src/rdkafka_cert.c +576 -0
  145. package/deps/librdkafka/src/rdkafka_cert.h +62 -0
  146. package/deps/librdkafka/src/rdkafka_cgrp.c +8310 -0
  147. package/deps/librdkafka/src/rdkafka_cgrp.h +589 -0
  148. package/deps/librdkafka/src/rdkafka_conf.c +5177 -0
  149. package/deps/librdkafka/src/rdkafka_conf.h +746 -0
  150. package/deps/librdkafka/src/rdkafka_confval.h +97 -0
  151. package/deps/librdkafka/src/rdkafka_coord.c +623 -0
  152. package/deps/librdkafka/src/rdkafka_coord.h +132 -0
  153. package/deps/librdkafka/src/rdkafka_error.c +228 -0
  154. package/deps/librdkafka/src/rdkafka_error.h +80 -0
  155. package/deps/librdkafka/src/rdkafka_event.c +502 -0
  156. package/deps/librdkafka/src/rdkafka_event.h +126 -0
  157. package/deps/librdkafka/src/rdkafka_feature.c +898 -0
  158. package/deps/librdkafka/src/rdkafka_feature.h +104 -0
  159. package/deps/librdkafka/src/rdkafka_fetcher.c +3820 -0
  160. package/deps/librdkafka/src/rdkafka_fetcher.h +62 -0
  161. package/deps/librdkafka/src/rdkafka_header.c +220 -0
  162. package/deps/librdkafka/src/rdkafka_header.h +76 -0
  163. package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
  164. package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
  165. package/deps/librdkafka/src/rdkafka_int.h +1505 -0
  166. package/deps/librdkafka/src/rdkafka_interceptor.c +842 -0
  167. package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
  168. package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
  169. package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
  170. package/deps/librdkafka/src/rdkafka_metadata.c +2347 -0
  171. package/deps/librdkafka/src/rdkafka_metadata.h +350 -0
  172. package/deps/librdkafka/src/rdkafka_metadata_cache.c +1183 -0
  173. package/deps/librdkafka/src/rdkafka_mock.c +4514 -0
  174. package/deps/librdkafka/src/rdkafka_mock.h +867 -0
  175. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1877 -0
  176. package/deps/librdkafka/src/rdkafka_mock_handlers.c +5255 -0
  177. package/deps/librdkafka/src/rdkafka_mock_int.h +1005 -0
  178. package/deps/librdkafka/src/rdkafka_mock_sharegrp.c +1207 -0
  179. package/deps/librdkafka/src/rdkafka_msg.c +2619 -0
  180. package/deps/librdkafka/src/rdkafka_msg.h +629 -0
  181. package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
  182. package/deps/librdkafka/src/rdkafka_msgset.h +105 -0
  183. package/deps/librdkafka/src/rdkafka_msgset_reader.c +2099 -0
  184. package/deps/librdkafka/src/rdkafka_msgset_writer.c +1474 -0
  185. package/deps/librdkafka/src/rdkafka_offset.c +1565 -0
  186. package/deps/librdkafka/src/rdkafka_offset.h +150 -0
  187. package/deps/librdkafka/src/rdkafka_op.c +1219 -0
  188. package/deps/librdkafka/src/rdkafka_op.h +1065 -0
  189. package/deps/librdkafka/src/rdkafka_partition.c +5109 -0
  190. package/deps/librdkafka/src/rdkafka_partition.h +1215 -0
  191. package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
  192. package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
  193. package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
  194. package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
  195. package/deps/librdkafka/src/rdkafka_proto.h +739 -0
  196. package/deps/librdkafka/src/rdkafka_protocol.h +131 -0
  197. package/deps/librdkafka/src/rdkafka_queue.c +1351 -0
  198. package/deps/librdkafka/src/rdkafka_queue.h +1235 -0
  199. package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
  200. package/deps/librdkafka/src/rdkafka_request.c +7298 -0
  201. package/deps/librdkafka/src/rdkafka_request.h +761 -0
  202. package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
  203. package/deps/librdkafka/src/rdkafka_sasl.c +589 -0
  204. package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
  205. package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
  206. package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
  207. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1833 -0
  208. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
  209. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1827 -0
  210. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +52 -0
  211. package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
  212. package/deps/librdkafka/src/rdkafka_sasl_scram.c +858 -0
  213. package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
  214. package/deps/librdkafka/src/rdkafka_share_acknowledgement.c +1445 -0
  215. package/deps/librdkafka/src/rdkafka_share_acknowledgement.h +373 -0
  216. package/deps/librdkafka/src/rdkafka_ssl.c +2235 -0
  217. package/deps/librdkafka/src/rdkafka_ssl.h +86 -0
  218. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4785 -0
  219. package/deps/librdkafka/src/rdkafka_subscription.c +411 -0
  220. package/deps/librdkafka/src/rdkafka_telemetry.c +761 -0
  221. package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
  222. package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1307 -0
  223. package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
  224. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +1309 -0
  225. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +459 -0
  226. package/deps/librdkafka/src/rdkafka_timer.c +407 -0
  227. package/deps/librdkafka/src/rdkafka_timer.h +117 -0
  228. package/deps/librdkafka/src/rdkafka_topic.c +2382 -0
  229. package/deps/librdkafka/src/rdkafka_topic.h +369 -0
  230. package/deps/librdkafka/src/rdkafka_transport.c +1309 -0
  231. package/deps/librdkafka/src/rdkafka_transport.h +99 -0
  232. package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
  233. package/deps/librdkafka/src/rdkafka_txnmgr.c +3256 -0
  234. package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
  235. package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
  236. package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
  237. package/deps/librdkafka/src/rdlist.c +593 -0
  238. package/deps/librdkafka/src/rdlist.h +444 -0
  239. package/deps/librdkafka/src/rdlog.c +89 -0
  240. package/deps/librdkafka/src/rdlog.h +41 -0
  241. package/deps/librdkafka/src/rdmap.c +508 -0
  242. package/deps/librdkafka/src/rdmap.h +492 -0
  243. package/deps/librdkafka/src/rdmurmur2.c +167 -0
  244. package/deps/librdkafka/src/rdmurmur2.h +35 -0
  245. package/deps/librdkafka/src/rdports.c +61 -0
  246. package/deps/librdkafka/src/rdports.h +38 -0
  247. package/deps/librdkafka/src/rdposix.h +250 -0
  248. package/deps/librdkafka/src/rdrand.c +151 -0
  249. package/deps/librdkafka/src/rdrand.h +72 -0
  250. package/deps/librdkafka/src/rdregex.c +156 -0
  251. package/deps/librdkafka/src/rdregex.h +43 -0
  252. package/deps/librdkafka/src/rdsignal.h +57 -0
  253. package/deps/librdkafka/src/rdstring.c +645 -0
  254. package/deps/librdkafka/src/rdstring.h +98 -0
  255. package/deps/librdkafka/src/rdsysqueue.h +404 -0
  256. package/deps/librdkafka/src/rdtime.h +356 -0
  257. package/deps/librdkafka/src/rdtypes.h +86 -0
  258. package/deps/librdkafka/src/rdunittest.c +564 -0
  259. package/deps/librdkafka/src/rdunittest.h +232 -0
  260. package/deps/librdkafka/src/rdunittest_acknowledge.c +1177 -0
  261. package/deps/librdkafka/src/rdunittest_fetcher.c +1211 -0
  262. package/deps/librdkafka/src/rdunittest_msgset_errors.c +1521 -0
  263. package/deps/librdkafka/src/rdvarint.c +134 -0
  264. package/deps/librdkafka/src/rdvarint.h +165 -0
  265. package/deps/librdkafka/src/rdwin32.h +382 -0
  266. package/deps/librdkafka/src/rdxxhash.c +1030 -0
  267. package/deps/librdkafka/src/rdxxhash.h +328 -0
  268. package/deps/librdkafka/src/regexp.c +1352 -0
  269. package/deps/librdkafka/src/regexp.h +41 -0
  270. package/deps/librdkafka/src/snappy.c +1866 -0
  271. package/deps/librdkafka/src/snappy.h +62 -0
  272. package/deps/librdkafka/src/snappy_compat.h +138 -0
  273. package/deps/librdkafka/src/statistics_schema.json +444 -0
  274. package/deps/librdkafka/src/tinycthread.c +932 -0
  275. package/deps/librdkafka/src/tinycthread.h +503 -0
  276. package/deps/librdkafka/src/tinycthread_extra.c +210 -0
  277. package/deps/librdkafka/src/tinycthread_extra.h +218 -0
  278. package/deps/librdkafka/src/win32_config.h +58 -0
  279. package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
  280. package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
  281. package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
  282. package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
  283. package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
  284. package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
  285. package/deps/librdkafka/src-cpp/Makefile +55 -0
  286. package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
  287. package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
  288. package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
  289. package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
  290. package/deps/librdkafka/src-cpp/README.md +16 -0
  291. package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
  292. package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
  293. package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
  294. package/deps/librdkafka/src-cpp/rdkafkacpp.h +3797 -0
  295. package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
  296. package/deps/librdkafka/tests/0000-unittests.c +72 -0
  297. package/deps/librdkafka/tests/0001-multiobj.c +102 -0
  298. package/deps/librdkafka/tests/0002-unkpart.c +244 -0
  299. package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
  300. package/deps/librdkafka/tests/0004-conf.c +934 -0
  301. package/deps/librdkafka/tests/0005-order.c +133 -0
  302. package/deps/librdkafka/tests/0006-symbols.c +163 -0
  303. package/deps/librdkafka/tests/0007-autotopic.c +136 -0
  304. package/deps/librdkafka/tests/0008-reqacks.c +179 -0
  305. package/deps/librdkafka/tests/0009-mock_cluster.c +272 -0
  306. package/deps/librdkafka/tests/0011-produce_batch.c +753 -0
  307. package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
  308. package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
  309. package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
  310. package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
  311. package/deps/librdkafka/tests/0016-client_swname.c +181 -0
  312. package/deps/librdkafka/tests/0017-compression.c +140 -0
  313. package/deps/librdkafka/tests/0018-cgrp_term.c +444 -0
  314. package/deps/librdkafka/tests/0019-list_groups.c +289 -0
  315. package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
  316. package/deps/librdkafka/tests/0021-rkt_destroy.c +72 -0
  317. package/deps/librdkafka/tests/0022-consume_batch.c +331 -0
  318. package/deps/librdkafka/tests/0025-timers.c +147 -0
  319. package/deps/librdkafka/tests/0026-consume_pause.c +547 -0
  320. package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
  321. package/deps/librdkafka/tests/0029-assign_offset.c +202 -0
  322. package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
  323. package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
  324. package/deps/librdkafka/tests/0033-regex_subscribe.c +536 -0
  325. package/deps/librdkafka/tests/0034-offset_reset.c +398 -0
  326. package/deps/librdkafka/tests/0035-api_version.c +73 -0
  327. package/deps/librdkafka/tests/0036-partial_fetch.c +87 -0
  328. package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
  329. package/deps/librdkafka/tests/0038-performance.c +121 -0
  330. package/deps/librdkafka/tests/0039-event.c +284 -0
  331. package/deps/librdkafka/tests/0040-io_event.c +257 -0
  332. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +97 -0
  333. package/deps/librdkafka/tests/0042-many_topics.c +252 -0
  334. package/deps/librdkafka/tests/0043-no_connection.c +77 -0
  335. package/deps/librdkafka/tests/0044-partition_cnt.c +94 -0
  336. package/deps/librdkafka/tests/0045-subscribe_update.c +1010 -0
  337. package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
  338. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +98 -0
  339. package/deps/librdkafka/tests/0048-partitioner.c +283 -0
  340. package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
  341. package/deps/librdkafka/tests/0050-subscribe_adds.c +145 -0
  342. package/deps/librdkafka/tests/0051-assign_adds.c +126 -0
  343. package/deps/librdkafka/tests/0052-msg_timestamps.c +238 -0
  344. package/deps/librdkafka/tests/0053-stats_cb.cpp +527 -0
  345. package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
  346. package/deps/librdkafka/tests/0055-producer_latency.c +539 -0
  347. package/deps/librdkafka/tests/0056-balanced_group_mt.c +315 -0
  348. package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
  349. package/deps/librdkafka/tests/0058-log.cpp +123 -0
  350. package/deps/librdkafka/tests/0059-bsearch.cpp +241 -0
  351. package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
  352. package/deps/librdkafka/tests/0061-consumer_lag.cpp +295 -0
  353. package/deps/librdkafka/tests/0062-stats_event.c +126 -0
  354. package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
  355. package/deps/librdkafka/tests/0064-interceptors.c +529 -0
  356. package/deps/librdkafka/tests/0065-yield.cpp +140 -0
  357. package/deps/librdkafka/tests/0066-plugins.cpp +143 -0
  358. package/deps/librdkafka/tests/0067-empty_topic.cpp +151 -0
  359. package/deps/librdkafka/tests/0068-produce_timeout.c +136 -0
  360. package/deps/librdkafka/tests/0069-consumer_add_parts.c +119 -0
  361. package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
  362. package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
  363. package/deps/librdkafka/tests/0073-headers.c +381 -0
  364. package/deps/librdkafka/tests/0074-producev.c +87 -0
  365. package/deps/librdkafka/tests/0075-retry.c +290 -0
  366. package/deps/librdkafka/tests/0076-produce_retry.c +452 -0
  367. package/deps/librdkafka/tests/0077-compaction.c +366 -0
  368. package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
  369. package/deps/librdkafka/tests/0079-fork.c +93 -0
  370. package/deps/librdkafka/tests/0080-admin_ut.c +3095 -0
  371. package/deps/librdkafka/tests/0081-admin.c +5633 -0
  372. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +137 -0
  373. package/deps/librdkafka/tests/0083-cb_event.c +233 -0
  374. package/deps/librdkafka/tests/0084-destroy_flags.c +208 -0
  375. package/deps/librdkafka/tests/0085-headers.cpp +392 -0
  376. package/deps/librdkafka/tests/0086-purge.c +368 -0
  377. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
  378. package/deps/librdkafka/tests/0089-max_poll_interval.c +511 -0
  379. package/deps/librdkafka/tests/0090-idempotence.c +171 -0
  380. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +295 -0
  381. package/deps/librdkafka/tests/0092-mixed_msgver.c +103 -0
  382. package/deps/librdkafka/tests/0093-holb.c +200 -0
  383. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +231 -0
  384. package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
  385. package/deps/librdkafka/tests/0097-ssl_verify.cpp +674 -0
  386. package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
  387. package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
  388. package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
  389. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
  390. package/deps/librdkafka/tests/0102-static_group_rebalance.c +836 -0
  391. package/deps/librdkafka/tests/0103-transactions.c +1383 -0
  392. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +625 -0
  393. package/deps/librdkafka/tests/0105-transactions_mock.c +3930 -0
  394. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +318 -0
  395. package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
  396. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +278 -0
  397. package/deps/librdkafka/tests/0110-batch_size.cpp +182 -0
  398. package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
  399. package/deps/librdkafka/tests/0112-assign_unknown_part.c +87 -0
  400. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3473 -0
  401. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
  402. package/deps/librdkafka/tests/0115-producer_auth.cpp +182 -0
  403. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +216 -0
  404. package/deps/librdkafka/tests/0117-mock_errors.c +331 -0
  405. package/deps/librdkafka/tests/0118-commit_rebalance.c +154 -0
  406. package/deps/librdkafka/tests/0119-consumer_auth.cpp +167 -0
  407. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +185 -0
  408. package/deps/librdkafka/tests/0121-clusterid.c +115 -0
  409. package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
  410. package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
  411. package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
  412. package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
  413. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +1164 -0
  414. package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
  415. package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +217 -0
  416. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +79 -0
  417. package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
  418. package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
  419. package/deps/librdkafka/tests/0132-strategy_ordering.c +179 -0
  420. package/deps/librdkafka/tests/0133-ssl_keys.c +150 -0
  421. package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
  422. package/deps/librdkafka/tests/0135-sasl_credentials.cpp +279 -0
  423. package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
  424. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +752 -0
  425. package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
  426. package/deps/librdkafka/tests/0139-offset_validation_mock.c +950 -0
  427. package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
  428. package/deps/librdkafka/tests/0142-reauthentication.c +931 -0
  429. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +552 -0
  430. package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
  431. package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
  432. package/deps/librdkafka/tests/0146-metadata_mock.c +505 -0
  433. package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +1210 -0
  434. package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +569 -0
  435. package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
  436. package/deps/librdkafka/tests/0150-telemetry_mock.c +651 -0
  437. package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
  438. package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
  439. package/deps/librdkafka/tests/0153-memberid.c +128 -0
  440. package/deps/librdkafka/tests/0155-share_group_heartbeat_mock.c +2695 -0
  441. package/deps/librdkafka/tests/0156-share_consumer_fetch_mock.c +1551 -0
  442. package/deps/librdkafka/tests/0157-share_consumer_ack_mock.c +1788 -0
  443. package/deps/librdkafka/tests/0158-share_consumer_transactions_mock.c +467 -0
  444. package/deps/librdkafka/tests/0170-share_consumer_subscription.c +2192 -0
  445. package/deps/librdkafka/tests/0171-share_consumer_consume.c +2150 -0
  446. package/deps/librdkafka/tests/0172-share_consumer_acknowledge.c +1919 -0
  447. package/deps/librdkafka/tests/0173-share_consumer_commit_async.c +2735 -0
  448. package/deps/librdkafka/tests/0174-share_consumer_concurrency.c +1434 -0
  449. package/deps/librdkafka/tests/0175-share_consumer_groups.c +574 -0
  450. package/deps/librdkafka/tests/0176-share_consumer_commit_sync.c +2986 -0
  451. package/deps/librdkafka/tests/0177-share_consumer_transactions.c +1815 -0
  452. package/deps/librdkafka/tests/0178-share_consumer_close.c +2102 -0
  453. package/deps/librdkafka/tests/0179-share_consumer_destroy.c +2482 -0
  454. package/deps/librdkafka/tests/0180-share_consumer_config.c +1677 -0
  455. package/deps/librdkafka/tests/0181-share_consumer_topic_delete.c +354 -0
  456. package/deps/librdkafka/tests/0182-share_consumer_error_handling_mock.c +3358 -0
  457. package/deps/librdkafka/tests/0183-share_consumer_leader_change_mock.c +1234 -0
  458. package/deps/librdkafka/tests/0184-share_consumer_topic_recreate.c +1356 -0
  459. package/deps/librdkafka/tests/0185-share_consumer_max_poll_interval.c +557 -0
  460. package/deps/librdkafka/tests/0186-share_consumer_fatal_error.c +360 -0
  461. package/deps/librdkafka/tests/0190-share_consumer_telemetry.c +387 -0
  462. package/deps/librdkafka/tests/1000-unktopic.c +164 -0
  463. package/deps/librdkafka/tests/8000-idle.cpp +60 -0
  464. package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
  465. package/deps/librdkafka/tests/CMakeLists.txt +193 -0
  466. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +291 -0
  467. package/deps/librdkafka/tests/Makefile +182 -0
  468. package/deps/librdkafka/tests/README.md +514 -0
  469. package/deps/librdkafka/tests/autotest.sh +33 -0
  470. package/deps/librdkafka/tests/backtrace.gdb +30 -0
  471. package/deps/librdkafka/tests/broker_version_tests.py +315 -0
  472. package/deps/librdkafka/tests/buildbox.sh +17 -0
  473. package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
  474. package/deps/librdkafka/tests/cluster_testing.py +203 -0
  475. package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
  476. package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -0
  477. package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
  478. package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
  479. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.intermediate.p12 +0 -0
  480. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  481. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
  482. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +50 -0
  483. package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
  484. package/deps/librdkafka/tests/fixtures/ssl/client2.key +46 -0
  485. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +168 -0
  486. package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
  487. package/deps/librdkafka/tests/fuzzers/README.md +31 -0
  488. package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
  489. package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
  490. package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
  491. package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
  492. package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
  493. package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
  494. package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
  495. package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
  496. package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
  497. package/deps/librdkafka/tests/java/Makefile +13 -0
  498. package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
  499. package/deps/librdkafka/tests/java/README.md +14 -0
  500. package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
  501. package/deps/librdkafka/tests/java/run-class.sh +11 -0
  502. package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
  503. package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
  504. package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
  505. package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
  506. package/deps/librdkafka/tests/performance_plot.py +115 -0
  507. package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
  508. package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
  509. package/deps/librdkafka/tests/requirements.txt +2 -0
  510. package/deps/librdkafka/tests/run-all-tests.sh +81 -0
  511. package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
  512. package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
  513. package/deps/librdkafka/tests/run-test-batches.py +157 -0
  514. package/deps/librdkafka/tests/run-test.sh +141 -0
  515. package/deps/librdkafka/tests/rusage.c +249 -0
  516. package/deps/librdkafka/tests/sasl_test.py +289 -0
  517. package/deps/librdkafka/tests/scenarios/README.md +6 -0
  518. package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
  519. package/deps/librdkafka/tests/scenarios/default.json +5 -0
  520. package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
  521. package/deps/librdkafka/tests/share_telemetry_verify/share-otel-collector-config.yaml +28 -0
  522. package/deps/librdkafka/tests/sockem.c +801 -0
  523. package/deps/librdkafka/tests/sockem.h +85 -0
  524. package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
  525. package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
  526. package/deps/librdkafka/tests/test.c +8376 -0
  527. package/deps/librdkafka/tests/test.conf.example +27 -0
  528. package/deps/librdkafka/tests/test.h +1150 -0
  529. package/deps/librdkafka/tests/testcpp.cpp +131 -0
  530. package/deps/librdkafka/tests/testcpp.h +388 -0
  531. package/deps/librdkafka/tests/testshared.h +416 -0
  532. package/deps/librdkafka/tests/tools/README.md +4 -0
  533. package/deps/librdkafka/tests/tools/stats/README.md +21 -0
  534. package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
  535. package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
  536. package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
  537. package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
  538. package/deps/librdkafka/tests/trivup/trivup-0.15.0.tar.gz +0 -0
  539. package/deps/librdkafka/tests/until-fail.sh +87 -0
  540. package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
  541. package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
  542. package/deps/librdkafka/vcpkg.json +23 -0
  543. package/deps/librdkafka/win32/README.md +5 -0
  544. package/deps/librdkafka/win32/build-package.bat +3 -0
  545. package/deps/librdkafka/win32/build.bat +19 -0
  546. package/deps/librdkafka/win32/common.vcxproj +84 -0
  547. package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
  548. package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
  549. package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
  550. package/deps/librdkafka/win32/librdkafka.sln +226 -0
  551. package/deps/librdkafka/win32/librdkafka.vcxproj +282 -0
  552. package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
  553. package/deps/librdkafka/win32/msbuild.ps1 +58 -0
  554. package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
  555. package/deps/librdkafka/win32/package-zip.ps1 +46 -0
  556. package/deps/librdkafka/win32/packages/repositories.config +4 -0
  557. package/deps/librdkafka/win32/push-package.bat +4 -0
  558. package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
  559. package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
  560. package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
  561. package/deps/librdkafka/win32/setup-msys2.ps1 +47 -0
  562. package/deps/librdkafka/win32/setup-vcpkg.ps1 +34 -0
  563. package/deps/librdkafka/win32/tests/test.conf.example +25 -0
  564. package/deps/librdkafka/win32/tests/tests.vcxproj +278 -0
  565. package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
  566. package/deps/librdkafka/win32/wingetopt.c +564 -0
  567. package/deps/librdkafka/win32/wingetopt.h +101 -0
  568. package/deps/librdkafka/win32/wintime.h +33 -0
  569. package/deps/librdkafka.gyp +83 -0
  570. package/deps/windows-install.py +80 -0
  571. package/index.d.ts +3 -0
  572. package/lib/admin.js +732 -0
  573. package/lib/client.js +679 -0
  574. package/lib/error.js +501 -0
  575. package/lib/index.js +8 -0
  576. package/lib/kafka-consumer-stream.js +399 -0
  577. package/lib/kafka-consumer.js +798 -0
  578. package/lib/kafkajs/_admin.js +1052 -0
  579. package/lib/kafkajs/_common.js +887 -0
  580. package/lib/kafkajs/_consumer.js +2156 -0
  581. package/lib/kafkajs/_consumer_cache.js +310 -0
  582. package/lib/kafkajs/_error.js +298 -0
  583. package/lib/kafkajs/_kafka.js +125 -0
  584. package/lib/kafkajs/_linked-list.js +220 -0
  585. package/lib/kafkajs/_producer.js +863 -0
  586. package/lib/kafkajs/index.js +5 -0
  587. package/lib/producer/high-level-producer.js +400 -0
  588. package/lib/producer-stream.js +337 -0
  589. package/lib/producer.js +405 -0
  590. package/lib/rdkafka.js +44 -0
  591. package/lib/tools/ref-counter.js +53 -0
  592. package/lib/topic-partition.js +91 -0
  593. package/lib/topic.js +43 -0
  594. package/lib/util.js +55 -0
  595. package/librdkafka.js +12 -0
  596. package/package.json +85 -0
  597. package/shim/source_location +54 -0
  598. package/src/admin.cc +1597 -0
  599. package/src/admin.h +112 -0
  600. package/src/binding.cc +76 -0
  601. package/src/binding.h +25 -0
  602. package/src/callbacks.cc +676 -0
  603. package/src/callbacks.h +302 -0
  604. package/src/common.cc +1628 -0
  605. package/src/common.h +192 -0
  606. package/src/config.cc +219 -0
  607. package/src/config.h +61 -0
  608. package/src/connection.cc +703 -0
  609. package/src/connection.h +117 -0
  610. package/src/errors.cc +119 -0
  611. package/src/errors.h +60 -0
  612. package/src/kafka-consumer.cc +1539 -0
  613. package/src/kafka-consumer.h +147 -0
  614. package/src/producer.cc +917 -0
  615. package/src/producer.h +124 -0
  616. package/src/topic.cc +173 -0
  617. package/src/topic.h +54 -0
  618. package/src/workers.cc +1714 -0
  619. package/src/workers.h +690 -0
  620. package/types/config.d.ts +1269 -0
  621. package/types/errors.d.ts +373 -0
  622. package/types/kafkajs.d.ts +568 -0
  623. package/types/rdkafka.d.ts +571 -0
  624. package/util/configure.js +32 -0
  625. package/util/generate-docs.sh +18 -0
  626. package/util/get-env.js +6 -0
  627. package/util/test-compile.js +11 -0
  628. package/util/test-producer-delivery.js +100 -0
@@ -0,0 +1,552 @@
1
+ /*
2
+ * librdkafka - Apache Kafka C library
3
+ *
4
+ * Copyright (c) 2023, Confluent Inc.
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
+ #include "test.h"
30
+ #include "../src/rdkafka_proto.h"
31
+ #include "../src/rdkafka_mock.h"
32
+
33
+ const int32_t retry_ms = 100;
34
+ const int32_t retry_max_ms = 1000;
35
+
36
+ /**
37
+ * @brief find_coordinator test
38
+ * We fail the request with RD_KAFKA_RESP_ERR_GROUP_COORDINATOR_NOT_AVAILABLE,
39
+ * so that the request is tried via the intervalled mechanism. The intervalling
40
+ * is done at 500 ms, with a 20% jitter. However, the actual code to retry the
41
+ * request runs inside rd_kafka_cgrp_serve that is called every one second,
42
+ * hence, the retry actually happens always in 1 second, no matter what the
43
+ * jitter is. This will be fixed once rd_kafka_cgrp_serve is timer triggered.
44
+ * The exponential backoff does not apply in this case we just apply the jitter
45
+ * to the backoff of intervalled query The retry count is non - deterministic as
46
+ * fresh request spawned on its own.
47
+ */
48
+ static void test_find_coordinator(rd_kafka_mock_cluster_t *mcluster,
49
+ const char *topic,
50
+ rd_kafka_conf_t *conf) {
51
+ rd_kafka_mock_request_t **requests = NULL;
52
+ size_t request_cnt = 0;
53
+ int64_t previous_request_ts = -1;
54
+ int32_t retry_count = 0;
55
+ int32_t num_retries = 4;
56
+ const int32_t low = 1000;
57
+ int32_t buffer = 200; // 200 ms buffer added
58
+ rd_kafka_t *consumer;
59
+ rd_kafka_message_t *rkm;
60
+ size_t i;
61
+
62
+ SUB_TEST();
63
+ test_conf_set(conf, "auto.offset.reset", "earliest");
64
+ test_conf_set(conf, "enable.auto.commit", "false");
65
+
66
+ consumer = test_create_consumer(topic, NULL, conf, NULL);
67
+
68
+ rd_kafka_mock_push_request_errors(
69
+ mcluster, RD_KAFKAP_FindCoordinator, num_retries,
70
+ RD_KAFKA_RESP_ERR_GROUP_COORDINATOR_NOT_AVAILABLE,
71
+ RD_KAFKA_RESP_ERR_GROUP_COORDINATOR_NOT_AVAILABLE,
72
+ RD_KAFKA_RESP_ERR_GROUP_COORDINATOR_NOT_AVAILABLE,
73
+ RD_KAFKA_RESP_ERR_GROUP_COORDINATOR_NOT_AVAILABLE);
74
+ /* This will trigger a find_coordinator request */
75
+ rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
76
+ if (rkm)
77
+ rd_kafka_message_destroy(rkm);
78
+ rd_sleep(4);
79
+ requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
80
+ for (i = 0; (i < request_cnt) && (retry_count < num_retries); i++) {
81
+ TEST_SAY("Broker Id : %d API Key : %d Timestamp : %" PRId64
82
+ "\n",
83
+ rd_kafka_mock_request_id(requests[i]),
84
+ rd_kafka_mock_request_api_key(requests[i]),
85
+ rd_kafka_mock_request_timestamp(requests[i]));
86
+
87
+ if (rd_kafka_mock_request_api_key(requests[i]) !=
88
+ RD_KAFKAP_FindCoordinator)
89
+ continue;
90
+
91
+ if (previous_request_ts != -1) {
92
+ int64_t time_difference =
93
+ (rd_kafka_mock_request_timestamp(requests[i]) -
94
+ previous_request_ts) /
95
+ 1000;
96
+ TEST_ASSERT(((time_difference > low - buffer) &&
97
+ (time_difference < low + buffer)),
98
+ "Time difference should be close "
99
+ "to 1 second, it is %" PRId64
100
+ " ms instead.\n",
101
+ time_difference);
102
+ retry_count++;
103
+ }
104
+ previous_request_ts =
105
+ rd_kafka_mock_request_timestamp(requests[i]);
106
+ }
107
+ rd_kafka_destroy(consumer);
108
+ rd_kafka_mock_request_destroy_array(requests, request_cnt);
109
+ rd_kafka_mock_clear_requests(mcluster);
110
+ SUB_TEST_PASS();
111
+ }
112
+
113
+ /** @brief Max Jitter is 20 percent each side so buffer chosen
114
+ * is +- a fixed error to account for latency delays. */
115
+ static void check_time_difference(int64_t time_difference, int retry_count) {
116
+ int32_t error = retry_ms / 2;
117
+ int64_t low = (1 << retry_count) * retry_ms * 0.8 - error;
118
+ int64_t high = (1 << retry_count) * retry_ms * 1.2 + error;
119
+ if (high > (retry_max_ms * 1.2 + error))
120
+ high = retry_max_ms * 1.2 + error;
121
+ if (low > (retry_max_ms * 0.8 - error))
122
+ low = retry_max_ms * 0.8 - error;
123
+ TEST_ASSERT((time_difference < high) && (time_difference > low),
124
+ "Time difference is not respected, should "
125
+ "be between %" PRId64 " and %" PRId64
126
+ " where time difference is %" PRId64 "\n",
127
+ low, high, time_difference);
128
+ }
129
+
130
+ /**
131
+ * Exponential Backoff needs to be checked for the request_type. Also the
132
+ * request_type should only be retried if one previous has failed for correct
133
+ * execution.
134
+ */
135
+ static void helper_exponential_backoff(rd_kafka_mock_cluster_t *mcluster,
136
+ int32_t request_type) {
137
+ rd_kafka_mock_request_t **requests = NULL;
138
+ size_t request_cnt = 0;
139
+ int64_t previous_request_ts = -1;
140
+ int32_t retry_count = 0;
141
+ size_t i;
142
+ requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
143
+ for (i = 0; i < request_cnt; i++) {
144
+ TEST_SAY("Broker Id : %d API Key : %d Timestamp : %" PRId64
145
+ "\n",
146
+ rd_kafka_mock_request_id(requests[i]),
147
+ rd_kafka_mock_request_api_key(requests[i]),
148
+ rd_kafka_mock_request_timestamp(requests[i]));
149
+
150
+ if (rd_kafka_mock_request_api_key(requests[i]) != request_type)
151
+ continue;
152
+
153
+ if (previous_request_ts != -1) {
154
+ int64_t time_difference =
155
+ (rd_kafka_mock_request_timestamp(requests[i]) -
156
+ previous_request_ts) /
157
+ 1000;
158
+ check_time_difference(time_difference, retry_count);
159
+ retry_count++;
160
+ }
161
+ previous_request_ts =
162
+ rd_kafka_mock_request_timestamp(requests[i]);
163
+ }
164
+ rd_kafka_mock_request_destroy_array(requests, request_cnt);
165
+ }
166
+ /**
167
+ * @brief offset_commit test
168
+ * We fail the request with RD_KAFKA_RESP_ERR_COORDINATOR_LOAD_IN_PROGRESS so
169
+ * that the request is retried with the exponential backoff. The max retries
170
+ * allowed is 2 for offset_commit. The RPC calls rd_kafka_buf_retry for its
171
+ * retry attempt so this tests all such RPCs which depend on it for retrying.
172
+ * The retry number of request is deterministic i.e no fresh requests are
173
+ * spawned on its own. Also the max retries is 2 for Offset Commit.
174
+ */
175
+ static void test_offset_commit(rd_kafka_mock_cluster_t *mcluster,
176
+ const char *topic,
177
+ rd_kafka_conf_t *conf) {
178
+ rd_kafka_t *consumer;
179
+ rd_kafka_message_t *rkm;
180
+ rd_kafka_topic_partition_list_t *offsets;
181
+ rd_kafka_topic_partition_t *rktpar;
182
+ SUB_TEST();
183
+ test_conf_set(conf, "auto.offset.reset", "earliest");
184
+ test_conf_set(conf, "enable.auto.commit", "false");
185
+
186
+ consumer = test_create_consumer(topic, NULL, conf, NULL);
187
+ test_consumer_subscribe(consumer, topic);
188
+ rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
189
+ if (rkm)
190
+ rd_kafka_message_destroy(rkm);
191
+ rd_sleep(4);
192
+ rd_kafka_mock_push_request_errors(
193
+ mcluster, RD_KAFKAP_OffsetCommit, 2,
194
+ RD_KAFKA_RESP_ERR_COORDINATOR_LOAD_IN_PROGRESS,
195
+ RD_KAFKA_RESP_ERR_COORDINATOR_LOAD_IN_PROGRESS);
196
+
197
+ offsets = rd_kafka_topic_partition_list_new(1);
198
+ rktpar = rd_kafka_topic_partition_list_add(offsets, topic, 0);
199
+ /* Setting Offset to an arbitrary number */
200
+ rktpar->offset = 4;
201
+ /* rd_kafka_commit will trigger OffsetCommit RPC call */
202
+ rd_kafka_commit(consumer, offsets, 0);
203
+ rd_kafka_topic_partition_list_destroy(offsets);
204
+ rd_sleep(3);
205
+
206
+ helper_exponential_backoff(mcluster, RD_KAFKAP_OffsetCommit);
207
+
208
+
209
+ rd_kafka_destroy(consumer);
210
+ rd_kafka_mock_clear_requests(mcluster);
211
+ SUB_TEST_PASS();
212
+ }
213
+
214
+ /**
215
+ * @brief produce test
216
+ * We fail the request with RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS so
217
+ * that the request is retried with the exponential backoff. The exponential
218
+ * backoff is capped at retry_max_ms with jitter. The retry number of request is
219
+ * deterministic i.e no fresh requests are spawned on its own.
220
+ */
221
+ static void test_produce(rd_kafka_mock_cluster_t *mcluster,
222
+ const char *topic,
223
+ rd_kafka_conf_t *conf) {
224
+ rd_kafka_t *producer;
225
+ rd_kafka_topic_t *rkt;
226
+ SUB_TEST();
227
+ rd_kafka_conf_set_dr_msg_cb(conf, test_dr_msg_cb);
228
+
229
+ producer = test_create_handle(RD_KAFKA_PRODUCER, conf);
230
+ rkt = test_create_producer_topic(producer, topic, NULL);
231
+ test_wait_topic_exists(producer, topic, 5000);
232
+
233
+ rd_kafka_mock_push_request_errors(
234
+ mcluster, RD_KAFKAP_Produce, 7,
235
+ RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
236
+ RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
237
+ RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
238
+ RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
239
+ RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
240
+ RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
241
+ RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS);
242
+
243
+ test_produce_msgs(producer, rkt, 0, RD_KAFKA_PARTITION_UA, 0, 1,
244
+ "hello", 5);
245
+ rd_sleep(3);
246
+
247
+ helper_exponential_backoff(mcluster, RD_KAFKAP_Produce);
248
+
249
+
250
+ rd_kafka_topic_destroy(rkt);
251
+ rd_kafka_destroy(producer);
252
+ rd_kafka_mock_clear_requests(mcluster);
253
+ SUB_TEST_PASS();
254
+ }
255
+
256
+ /**
257
+ * Helper function for find coordinator trigger with the given request_type, the
258
+ * find coordinator request should be triggered after a failing request of
259
+ * request_type.
260
+ */
261
+ static void helper_find_coordinator_trigger(rd_kafka_mock_cluster_t *mcluster,
262
+ int32_t request_type) {
263
+ rd_kafka_mock_request_t **requests = NULL;
264
+ size_t request_cnt = 0;
265
+ int32_t num_request = 0;
266
+ size_t i;
267
+ requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
268
+ for (i = 0; i < request_cnt; i++) {
269
+ TEST_SAY("Broker Id : %d API Key : %d Timestamp : %" PRId64
270
+ "\n",
271
+ rd_kafka_mock_request_id(requests[i]),
272
+ rd_kafka_mock_request_api_key(requests[i]),
273
+ rd_kafka_mock_request_timestamp(requests[i]));
274
+ if (num_request == 0) {
275
+ if (rd_kafka_mock_request_api_key(requests[i]) ==
276
+ request_type) {
277
+ num_request++;
278
+ }
279
+ } else if (num_request == 1) {
280
+ if (rd_kafka_mock_request_api_key(requests[i]) ==
281
+ RD_KAFKAP_FindCoordinator) {
282
+ TEST_SAY(
283
+ "FindCoordinator request made after "
284
+ "failing request with NOT_COORDINATOR "
285
+ "error.\n");
286
+ break;
287
+ } else if (rd_kafka_mock_request_api_key(requests[i]) ==
288
+ request_type) {
289
+ num_request++;
290
+ TEST_FAIL(
291
+ "Second request made without any "
292
+ "FindCoordinator request.");
293
+ }
294
+ }
295
+ }
296
+ rd_kafka_mock_request_destroy_array(requests, request_cnt);
297
+ if (num_request != 1)
298
+ TEST_FAIL("No request was made.");
299
+ }
300
+ /**
301
+ * @brief heartbeat-find_coordinator test
302
+ * We fail the request with RD_KAFKA_RESP_ERR_NOT_COORDINATOR_FOR_GROUP so that
303
+ * the FindCoordinator request is triggered.
304
+ */
305
+ static void test_heartbeat_find_coordinator(rd_kafka_mock_cluster_t *mcluster,
306
+ const char *topic,
307
+ rd_kafka_conf_t *conf) {
308
+ rd_kafka_t *consumer;
309
+ rd_kafka_message_t *rkm;
310
+ int ApiKey;
311
+ SUB_TEST();
312
+ test_conf_set(conf, "auto.offset.reset", "earliest");
313
+ test_conf_set(conf, "enable.auto.commit", "false");
314
+
315
+ consumer = test_create_consumer(topic, NULL, conf, NULL);
316
+
317
+ if (test_consumer_group_protocol_classic()) {
318
+ ApiKey = RD_KAFKAP_Heartbeat;
319
+ } else {
320
+ ApiKey = RD_KAFKAP_ConsumerGroupHeartbeat;
321
+ }
322
+ rd_kafka_mock_push_request_errors(
323
+ mcluster, ApiKey, 1, RD_KAFKA_RESP_ERR_NOT_COORDINATOR_FOR_GROUP);
324
+
325
+ rd_kafka_mock_clear_requests(mcluster);
326
+ test_consumer_subscribe(consumer, topic);
327
+ /* This will trigger a find_coordinator request */
328
+ rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
329
+ if (rkm)
330
+ rd_kafka_message_destroy(rkm);
331
+ rd_sleep(6);
332
+
333
+
334
+ helper_find_coordinator_trigger(mcluster, ApiKey);
335
+
336
+
337
+ rd_kafka_destroy(consumer);
338
+ rd_kafka_mock_clear_requests(mcluster);
339
+ SUB_TEST_PASS();
340
+ }
341
+
342
+ /**
343
+ * @brief joingroup-find_coordinator test
344
+ * We fail the request with RD_KAFKA_RESP_ERR_NOT_COORDINATOR_FOR_GROUP so that
345
+ * the FindCoordinator request is triggered.
346
+ */
347
+ static void test_joingroup_find_coordinator(rd_kafka_mock_cluster_t *mcluster,
348
+ const char *topic,
349
+ rd_kafka_conf_t *conf) {
350
+ rd_kafka_t *consumer;
351
+ rd_kafka_message_t *rkm;
352
+ SUB_TEST();
353
+ test_conf_set(conf, "auto.offset.reset", "earliest");
354
+ test_conf_set(conf, "enable.auto.commit", "false");
355
+
356
+ consumer = test_create_consumer(topic, NULL, conf, NULL);
357
+ rd_kafka_mock_push_request_errors(
358
+ mcluster, RD_KAFKAP_JoinGroup, 1,
359
+ RD_KAFKA_RESP_ERR_NOT_COORDINATOR_FOR_GROUP);
360
+ rd_kafka_mock_clear_requests(mcluster);
361
+ test_consumer_subscribe(consumer, topic);
362
+ /* This will trigger a find_coordinator request */
363
+ rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
364
+ if (rkm)
365
+ rd_kafka_message_destroy(rkm);
366
+ rd_sleep(4);
367
+
368
+ helper_find_coordinator_trigger(mcluster, RD_KAFKAP_JoinGroup);
369
+
370
+ rd_kafka_destroy(consumer);
371
+ rd_kafka_mock_clear_requests(mcluster);
372
+ SUB_TEST_PASS();
373
+ }
374
+
375
+ /**
376
+ * @brief produce-fast_leader_query test
377
+ * We fail a Produce request with RD_KAFKA_RESP_ERR_NOT_LEADER_OR_FOLLOWER, so
378
+ * that it triggers a fast leader query (a Metadata request). We don't update
379
+ * the leader in this test, so the Metadata is always stale from the client's
380
+ * perspective, and the fast leader query carries on, being backed off
381
+ * exponentially until the max retry time is reached. The retry number of
382
+ * request is non deterministic as it will keep retrying till the leader change.
383
+ */
384
+ static void test_produce_fast_leader_query(rd_kafka_mock_cluster_t *mcluster,
385
+ const char *topic,
386
+ rd_kafka_conf_t *conf) {
387
+ rd_kafka_mock_request_t **requests = NULL;
388
+ size_t request_cnt = 0;
389
+ int64_t previous_request_ts = -1;
390
+ int32_t retry_count = 0;
391
+ rd_bool_t produced = rd_false;
392
+ rd_kafka_t *producer;
393
+ rd_kafka_topic_t *rkt;
394
+ size_t i;
395
+ SUB_TEST();
396
+ rd_kafka_conf_set_dr_msg_cb(conf, test_dr_msg_cb);
397
+
398
+ producer = test_create_handle(RD_KAFKA_PRODUCER, conf);
399
+ rkt = test_create_producer_topic(producer, topic, NULL);
400
+ test_wait_topic_exists(producer, topic, 5000);
401
+
402
+ rd_kafka_mock_push_request_errors(
403
+ mcluster, RD_KAFKAP_Produce, 1,
404
+ RD_KAFKA_RESP_ERR_NOT_LEADER_OR_FOLLOWER);
405
+ rd_kafka_mock_clear_requests(mcluster);
406
+ test_produce_msgs(producer, rkt, 0, RD_KAFKA_PARTITION_UA, 0, 1,
407
+ "hello", 1);
408
+ rd_sleep(10);
409
+ requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
410
+
411
+ for (i = 0; i < request_cnt; i++) {
412
+ TEST_SAY("Broker Id : %d API Key : %d Timestamp : %" PRId64
413
+ "\n",
414
+ rd_kafka_mock_request_id(requests[i]),
415
+ rd_kafka_mock_request_api_key(requests[i]),
416
+ rd_kafka_mock_request_timestamp(requests[i]));
417
+
418
+ if (!produced && rd_kafka_mock_request_api_key(requests[i]) ==
419
+ RD_KAFKAP_Produce)
420
+ produced = rd_true;
421
+ else if (rd_kafka_mock_request_api_key(requests[i]) ==
422
+ RD_KAFKAP_Metadata &&
423
+ produced) {
424
+ if (previous_request_ts != -1) {
425
+ int64_t time_difference =
426
+ (rd_kafka_mock_request_timestamp(
427
+ requests[i]) -
428
+ previous_request_ts) /
429
+ 1000;
430
+ check_time_difference(time_difference,
431
+ retry_count);
432
+ retry_count++;
433
+ }
434
+ previous_request_ts =
435
+ rd_kafka_mock_request_timestamp(requests[i]);
436
+ }
437
+ }
438
+ rd_kafka_topic_destroy(rkt);
439
+ rd_kafka_destroy(producer);
440
+ rd_kafka_mock_request_destroy_array(requests, request_cnt);
441
+ rd_kafka_mock_clear_requests(mcluster);
442
+ SUB_TEST_PASS();
443
+ }
444
+
445
+ /**
446
+ * @brief fetch-fast_leader_query test
447
+ * We fail a Fetch request by causing a leader change (the leader is the same,
448
+ * but with a different leader epoch). It triggers fast leader query (Metadata
449
+ * request). The request is able to obtain an updated leader, and hence, the
450
+ * fast leader query terminates after one Metadata request.
451
+ */
452
+ static void test_fetch_fast_leader_query(rd_kafka_mock_cluster_t *mcluster,
453
+ const char *topic,
454
+ rd_kafka_conf_t *conf) {
455
+ rd_kafka_mock_request_t **requests = NULL;
456
+ size_t request_cnt = 0;
457
+ rd_bool_t previous_request_was_Fetch = rd_false;
458
+ rd_bool_t Metadata_after_Fetch = rd_false;
459
+ rd_kafka_t *consumer;
460
+ rd_kafka_message_t *rkm;
461
+ size_t i;
462
+ SUB_TEST();
463
+ test_conf_set(conf, "auto.offset.reset", "earliest");
464
+ test_conf_set(conf, "enable.auto.commit", "false");
465
+
466
+ consumer = test_create_consumer(topic, NULL, conf, NULL);
467
+
468
+ test_consumer_subscribe(consumer, topic);
469
+ rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
470
+
471
+ if (rkm)
472
+ rd_kafka_message_destroy(rkm);
473
+ rd_kafka_mock_clear_requests(mcluster);
474
+
475
+ rd_kafka_mock_partition_set_leader(mcluster, topic, 0, 1);
476
+ rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
477
+ if (rkm)
478
+ rd_kafka_message_destroy(rkm);
479
+ rd_sleep(3);
480
+ requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
481
+ for (i = 0; i < request_cnt; i++) {
482
+ TEST_SAY("Broker Id : %d API Key : %d Timestamp : %" PRId64
483
+ "\n",
484
+ rd_kafka_mock_request_id(requests[i]),
485
+ rd_kafka_mock_request_api_key(requests[i]),
486
+ rd_kafka_mock_request_timestamp(requests[i]));
487
+
488
+ if (rd_kafka_mock_request_api_key(requests[i]) ==
489
+ RD_KAFKAP_Fetch)
490
+ previous_request_was_Fetch = rd_true;
491
+ else if (rd_kafka_mock_request_api_key(requests[i]) ==
492
+ RD_KAFKAP_Metadata &&
493
+ previous_request_was_Fetch) {
494
+ Metadata_after_Fetch = rd_true;
495
+ break;
496
+ } else if (rd_kafka_mock_request_api_key(requests[i]) !=
497
+ RD_KAFKAP_ConsumerGroupHeartbeat)
498
+ previous_request_was_Fetch = rd_false;
499
+ }
500
+ rd_kafka_destroy(consumer);
501
+ rd_kafka_mock_request_destroy_array(requests, request_cnt);
502
+ rd_kafka_mock_clear_requests(mcluster);
503
+ TEST_ASSERT(
504
+ Metadata_after_Fetch,
505
+ "Metadata Request should have been made after fetch atleast once.");
506
+ SUB_TEST_PASS();
507
+ }
508
+
509
+ /**
510
+ * @brief Exponential Backoff (KIP 580)
511
+ * We test all the pipelines which affect the retry mechanism for both
512
+ * intervalled queries where jitter is added and backed off queries where both
513
+ * jitter and exponential backoff is applied with the max being retry_max_ms.
514
+ */
515
+ int main_0143_exponential_backoff_mock(int argc, char **argv) {
516
+ const char *topic = test_mk_topic_name("topic", 1);
517
+ rd_kafka_mock_cluster_t *mcluster;
518
+ rd_kafka_conf_t *conf;
519
+ const char *bootstraps;
520
+
521
+ TEST_SKIP_MOCK_CLUSTER(0);
522
+
523
+ mcluster = test_mock_cluster_new(1, &bootstraps);
524
+ rd_kafka_mock_start_request_tracking(mcluster);
525
+ rd_kafka_mock_topic_create(mcluster, topic, 1, 1);
526
+
527
+ test_conf_init(&conf, NULL, 30);
528
+ /* This test may be slower when running with CI or Helgrind,
529
+ * restart the timeout. */
530
+ test_timeout_set(100);
531
+ test_conf_set(conf, "bootstrap.servers", bootstraps);
532
+ test_conf_set(conf, "topic.metadata.refresh.interval.ms", "-1");
533
+
534
+ test_produce(mcluster, topic, rd_kafka_conf_dup(conf));
535
+ test_find_coordinator(mcluster, topic, rd_kafka_conf_dup(conf));
536
+ test_offset_commit(mcluster, topic, rd_kafka_conf_dup(conf));
537
+ test_heartbeat_find_coordinator(mcluster, topic,
538
+ rd_kafka_conf_dup(conf));
539
+ test_fetch_fast_leader_query(mcluster, topic, rd_kafka_conf_dup(conf));
540
+ test_produce_fast_leader_query(mcluster, topic,
541
+ rd_kafka_conf_dup(conf));
542
+
543
+ /* No JoinGroup RPC in KIP 848 protocol. */
544
+ if (test_consumer_group_protocol_classic()) {
545
+ test_joingroup_find_coordinator(mcluster, topic,
546
+ rd_kafka_conf_dup(conf));
547
+ }
548
+
549
+ test_mock_cluster_destroy(mcluster);
550
+ rd_kafka_conf_destroy(conf);
551
+ return 0;
552
+ }