@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,898 @@
1
+ /*
2
+ * librdkafka - Apache Kafka C library
3
+ *
4
+ * Copyright (c) 2016-2022, Magnus Edenhill
5
+ * 2023, Confluent Inc.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are met:
10
+ *
11
+ * 1. Redistributions of source code must retain the above copyright notice,
12
+ * this list of conditions and the following disclaimer.
13
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
14
+ * this list of conditions and the following disclaimer in the documentation
15
+ * and/or other materials provided with the distribution.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
+ * POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+
31
+ #include "rdkafka_int.h"
32
+ #include "rdkafka_feature.h"
33
+ #include "rdunittest.h"
34
+
35
+ #include <stdlib.h>
36
+
37
+ static const char *rd_kafka_feature_names[] = {"MsgVer1",
38
+ "ApiVersion",
39
+ "BrokerBalancedConsumer",
40
+ "ThrottleTime",
41
+ "Sasl",
42
+ "SaslHandshake",
43
+ "BrokerGroupCoordinator",
44
+ "LZ4",
45
+ "OffsetTime",
46
+ "MsgVer2",
47
+ "IdempotentProducer",
48
+ "ZSTD",
49
+ "SaslAuthReq",
50
+ "UnitTest",
51
+ NULL};
52
+
53
+
54
+ static const struct rd_kafka_feature_map {
55
+ /* RD_KAFKA_FEATURE_... */
56
+ int feature;
57
+
58
+ /* Depends on the following ApiVersions overlapping with
59
+ * what the broker supports: */
60
+ struct rd_kafka_ApiVersion depends[RD_KAFKAP__NUM];
61
+
62
+ } rd_kafka_feature_map[] = {
63
+ /**
64
+ * @brief List of features and the ApiVersions they depend on.
65
+ *
66
+ * The dependency list consists of the ApiKey followed by this
67
+ * client's supported minimum and maximum API versions.
68
+ * As long as this list and its versions overlaps with the
69
+ * broker supported API versions the feature will be enabled.
70
+ */
71
+ {
72
+
73
+ /* @brief >=0.10.0: Message.MagicByte version 1:
74
+ * Relative offsets (KIP-31) and message timestamps (KIP-32). */
75
+ .feature = RD_KAFKA_FEATURE_MSGVER1,
76
+ .depends =
77
+ {
78
+ {RD_KAFKAP_Produce, 2, RD_KAFKAP_RPC_VERSION_MAX},
79
+ {RD_KAFKAP_Fetch, 2, RD_KAFKAP_RPC_VERSION_MAX},
80
+ {-1},
81
+ },
82
+ },
83
+ {
84
+ /* @brief >=0.11.0: Message.MagicByte version 2 */
85
+ .feature = RD_KAFKA_FEATURE_MSGVER2,
86
+ .depends =
87
+ {
88
+ {RD_KAFKAP_Produce, 3, RD_KAFKAP_RPC_VERSION_MAX},
89
+ {RD_KAFKAP_Fetch, 4, RD_KAFKAP_RPC_VERSION_MAX},
90
+ {-1},
91
+ },
92
+ },
93
+ {
94
+ /* @brief >=0.10.0: ApiVersionQuery support.
95
+ * @remark This is a bit of chicken-and-egg problem but needs to be
96
+ * set by feature_check() to avoid the feature being cleared
97
+ * even when broker supports it. */
98
+ .feature = RD_KAFKA_FEATURE_APIVERSION,
99
+ .depends =
100
+ {
101
+ {RD_KAFKAP_ApiVersion, 0, RD_KAFKAP_RPC_VERSION_MAX},
102
+ {-1},
103
+ },
104
+ },
105
+ {
106
+ /* @brief >=0.8.2.0: Broker-based Group coordinator */
107
+ .feature = RD_KAFKA_FEATURE_BROKER_GROUP_COORD,
108
+ .depends =
109
+ {
110
+ {RD_KAFKAP_FindCoordinator, 0, RD_KAFKAP_RPC_VERSION_MAX},
111
+ {-1},
112
+ },
113
+ },
114
+ {
115
+ /* @brief >=0.9.0: Broker-based balanced consumer groups (classic). */
116
+ .feature = RD_KAFKA_FEATURE_BROKER_BALANCED_CONSUMER,
117
+ .depends =
118
+ {
119
+ {RD_KAFKAP_FindCoordinator, 0, RD_KAFKAP_RPC_VERSION_MAX},
120
+ {RD_KAFKAP_OffsetCommit, 1, RD_KAFKAP_RPC_VERSION_MAX},
121
+ {RD_KAFKAP_OffsetFetch, 1, RD_KAFKAP_RPC_VERSION_MAX},
122
+ {RD_KAFKAP_JoinGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
123
+ {RD_KAFKAP_SyncGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
124
+ {RD_KAFKAP_Heartbeat, 0, RD_KAFKAP_RPC_VERSION_MAX},
125
+ {RD_KAFKAP_LeaveGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
126
+ {-1},
127
+ },
128
+ },
129
+ {
130
+ /* @brief Broker-based balanced consumer groups (KIP 848). */
131
+ .feature = RD_KAFKA_FEATURE_BROKER_BALANCED_CONSUMER,
132
+ .depends =
133
+ {
134
+ {RD_KAFKAP_ConsumerGroupHeartbeat, 0,
135
+ RD_KAFKAP_RPC_VERSION_MAX},
136
+ {RD_KAFKAP_OffsetCommit, 9, RD_KAFKAP_RPC_VERSION_MAX},
137
+ {RD_KAFKAP_OffsetFetch, 9, RD_KAFKAP_RPC_VERSION_MAX},
138
+ {-1},
139
+ },
140
+ },
141
+ {
142
+ /* @brief >=0.9.0: ThrottleTime */
143
+ .feature = RD_KAFKA_FEATURE_THROTTLETIME,
144
+ .depends =
145
+ {
146
+ {RD_KAFKAP_Produce, 1, RD_KAFKAP_RPC_VERSION_MAX},
147
+ {RD_KAFKAP_Fetch, 1, RD_KAFKAP_RPC_VERSION_MAX},
148
+ {-1},
149
+ },
150
+
151
+ },
152
+ {
153
+ /* @brief >=0.9.0: SASL (GSSAPI) authentication.
154
+ * Since SASL is not using the Kafka protocol
155
+ * we must use something else to map us to the
156
+ * proper broker version support:
157
+ * JoinGroup was released along with SASL in 0.9.0. */
158
+ .feature = RD_KAFKA_FEATURE_SASL_GSSAPI,
159
+ .depends =
160
+ {
161
+ {RD_KAFKAP_JoinGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
162
+ {-1},
163
+ },
164
+ },
165
+ {
166
+ /* @brief >=0.10.0: SASL (GSSAPI) authentication.
167
+ * Fallback in case JoinGroup is removed along with the
168
+ * "classic" consumer group protocol. */
169
+ .feature = RD_KAFKA_FEATURE_SASL_GSSAPI,
170
+ .depends =
171
+ {
172
+ {RD_KAFKAP_SaslHandshake, 0, RD_KAFKAP_RPC_VERSION_MAX},
173
+ {-1},
174
+ },
175
+ },
176
+ {
177
+ /* @brief >=0.10.0: SASL mechanism handshake (KIP-43)
178
+ * to automatically support other mechanisms
179
+ * than GSSAPI, such as PLAIN. */
180
+ .feature = RD_KAFKA_FEATURE_SASL_HANDSHAKE,
181
+ .depends =
182
+ {
183
+ {RD_KAFKAP_SaslHandshake, 0, RD_KAFKAP_RPC_VERSION_MAX},
184
+ {-1},
185
+ },
186
+ },
187
+ {
188
+ /* @brief >=0.8.2: LZ4 compression.
189
+ * Since LZ4 initially did not rely on a specific API
190
+ * type or version (it does in >=0.10.0)
191
+ * we must use something else to map us to the
192
+ * proper broker version support:
193
+ * GrooupCoordinator was released in 0.8.2 */
194
+ .feature = RD_KAFKA_FEATURE_LZ4,
195
+ .depends =
196
+ {
197
+ {RD_KAFKAP_FindCoordinator, 0, RD_KAFKAP_RPC_VERSION_MAX},
198
+ {-1},
199
+ },
200
+ },
201
+ {/* @brief >=0.10.1.0: Offset v1 (KIP-79)
202
+ * Time-based offset requests */
203
+ .feature = RD_KAFKA_FEATURE_OFFSET_TIME,
204
+ .depends =
205
+ {
206
+ {RD_KAFKAP_ListOffsets, 1, RD_KAFKAP_RPC_VERSION_MAX},
207
+ {-1},
208
+ }},
209
+ {/* @brief >=0.11.0.0: Idempotent Producer*/
210
+ .feature = RD_KAFKA_FEATURE_IDEMPOTENT_PRODUCER,
211
+ .depends =
212
+ {
213
+ {RD_KAFKAP_InitProducerId, 0, RD_KAFKAP_RPC_VERSION_MAX},
214
+ {-1},
215
+ }},
216
+ {
217
+ /* @brief >=2.1.0-IV2: Support ZStandard Compression Codec (KIP-110) */
218
+ .feature = RD_KAFKA_FEATURE_ZSTD,
219
+ .depends =
220
+ {
221
+ {RD_KAFKAP_Produce, 7, RD_KAFKAP_RPC_VERSION_MAX},
222
+ {RD_KAFKAP_Fetch, 10, RD_KAFKAP_RPC_VERSION_MAX},
223
+ {-1},
224
+ },
225
+ },
226
+ {
227
+ /* @brief >=1.0.0: SaslAuthenticateRequest */
228
+ .feature = RD_KAFKA_FEATURE_SASL_AUTH_REQ,
229
+ .depends =
230
+ {
231
+ {RD_KAFKAP_SaslHandshake, 1, RD_KAFKAP_RPC_VERSION_MAX},
232
+ {RD_KAFKAP_SaslAuthenticate, 0, RD_KAFKAP_RPC_VERSION_MAX},
233
+ {-1},
234
+ },
235
+ },
236
+ {.feature = 0}, /* sentinel */
237
+ };
238
+
239
+
240
+
241
+ /**
242
+ * @brief In absence of KIP-35 support in earlier broker versions we provide
243
+ * hardcoded lists that corresponds to older broker versions.
244
+ */
245
+
246
+ /* >= 0.10.0.0: dummy for all future versions that support ApiVersionRequest */
247
+ static struct rd_kafka_ApiVersion rd_kafka_ApiVersion_Queryable[] = {
248
+ {RD_KAFKAP_ApiVersion, 0, 0}};
249
+
250
+
251
+ /* =~ 0.9.0 */
252
+ static struct rd_kafka_ApiVersion rd_kafka_ApiVersion_0_9_0[] = {
253
+ {RD_KAFKAP_Produce, 0, 1}, {RD_KAFKAP_Fetch, 0, 1},
254
+ {RD_KAFKAP_ListOffsets, 0, 0}, {RD_KAFKAP_Metadata, 0, 0},
255
+ {RD_KAFKAP_OffsetCommit, 0, 2}, {RD_KAFKAP_OffsetFetch, 0, 1},
256
+ {RD_KAFKAP_FindCoordinator, 0, 0}, {RD_KAFKAP_JoinGroup, 0, 0},
257
+ {RD_KAFKAP_Heartbeat, 0, 0}, {RD_KAFKAP_LeaveGroup, 0, 0},
258
+ {RD_KAFKAP_SyncGroup, 0, 0}, {RD_KAFKAP_DescribeGroups, 0, 0},
259
+ {RD_KAFKAP_ListGroups, 0, 0}};
260
+
261
+ /* =~ 0.8.2 */
262
+ static struct rd_kafka_ApiVersion rd_kafka_ApiVersion_0_8_2[] = {
263
+ {RD_KAFKAP_Produce, 0, 0}, {RD_KAFKAP_Fetch, 0, 0},
264
+ {RD_KAFKAP_ListOffsets, 0, 0}, {RD_KAFKAP_Metadata, 0, 0},
265
+ {RD_KAFKAP_OffsetCommit, 0, 1}, {RD_KAFKAP_OffsetFetch, 0, 1},
266
+ {RD_KAFKAP_FindCoordinator, 0, 0}};
267
+
268
+ /* =~ 0.8.1 */
269
+ static struct rd_kafka_ApiVersion rd_kafka_ApiVersion_0_8_1[] = {
270
+ {RD_KAFKAP_Produce, 0, 0}, {RD_KAFKAP_Fetch, 0, 0},
271
+ {RD_KAFKAP_ListOffsets, 0, 0}, {RD_KAFKAP_Metadata, 0, 0},
272
+ {RD_KAFKAP_OffsetCommit, 0, 1}, {RD_KAFKAP_OffsetFetch, 0, 0}};
273
+
274
+ /* =~ 0.8.0 */
275
+ static struct rd_kafka_ApiVersion rd_kafka_ApiVersion_0_8_0[] = {
276
+ {RD_KAFKAP_Produce, 0, 0},
277
+ {RD_KAFKAP_Fetch, 0, 0},
278
+ {RD_KAFKAP_ListOffsets, 0, 0},
279
+ {RD_KAFKAP_Metadata, 0, 0}};
280
+
281
+
282
+ /**
283
+ * @brief Returns the ApiVersion list for legacy broker versions that do not
284
+ * support the ApiVersionQuery request. E.g., brokers <0.10.0.
285
+ *
286
+ * @param broker_version Broker version to match (longest prefix matching).
287
+ * @param use_default If no match is found return the default APIs (but return
288
+ * 0).
289
+ *
290
+ * @returns 1 if \p broker_version was recognized: \p *apisp will point to
291
+ * the ApiVersion list and *api_cntp will be set to its element count.
292
+ * 0 if \p broker_version was not recognized: \p *apisp remains
293
+ * unchanged.
294
+ *
295
+ */
296
+ int rd_kafka_get_legacy_ApiVersions(const char *broker_version,
297
+ struct rd_kafka_ApiVersion **apisp,
298
+ size_t *api_cntp,
299
+ const char *fallback) {
300
+ #define _VERMAP(PFX, APIS) \
301
+ { PFX, APIS, RD_ARRAYSIZE(APIS) }
302
+ static const struct {
303
+ const char *pfx;
304
+ struct rd_kafka_ApiVersion *apis;
305
+ size_t api_cnt;
306
+ } vermap[] = {_VERMAP("0.9.0", rd_kafka_ApiVersion_0_9_0),
307
+ _VERMAP("0.8.2", rd_kafka_ApiVersion_0_8_2),
308
+ _VERMAP("0.8.1", rd_kafka_ApiVersion_0_8_1),
309
+ _VERMAP("0.8.0", rd_kafka_ApiVersion_0_8_0),
310
+ {"0.7.", NULL}, /* Unsupported */
311
+ {"0.6.", NULL}, /* Unsupported */
312
+ _VERMAP("", rd_kafka_ApiVersion_Queryable),
313
+ {NULL}};
314
+ int i;
315
+ int fallback_i = -1;
316
+ int ret = 0;
317
+
318
+ *apisp = NULL;
319
+ *api_cntp = 0;
320
+
321
+ for (i = 0; vermap[i].pfx; i++) {
322
+ if (!strncmp(vermap[i].pfx, broker_version,
323
+ strlen(vermap[i].pfx))) {
324
+ if (!vermap[i].apis)
325
+ return 0;
326
+ *apisp = vermap[i].apis;
327
+ *api_cntp = vermap[i].api_cnt;
328
+ ret = 1;
329
+ break;
330
+ } else if (fallback && !strcmp(vermap[i].pfx, fallback))
331
+ fallback_i = i;
332
+ }
333
+
334
+ if (!*apisp && fallback) {
335
+ rd_kafka_assert(NULL, fallback_i != -1);
336
+ *apisp = vermap[fallback_i].apis;
337
+ *api_cntp = vermap[fallback_i].api_cnt;
338
+ }
339
+
340
+ return ret;
341
+ }
342
+
343
+
344
+ /**
345
+ * @returns 1 if the provided broker version (probably)
346
+ * supports api.version.request.
347
+ */
348
+ int rd_kafka_ApiVersion_is_queryable(const char *broker_version) {
349
+ struct rd_kafka_ApiVersion *apis;
350
+ size_t api_cnt;
351
+
352
+
353
+ if (!rd_kafka_get_legacy_ApiVersions(broker_version, &apis, &api_cnt,
354
+ 0))
355
+ return 0;
356
+
357
+ return apis == rd_kafka_ApiVersion_Queryable;
358
+ }
359
+
360
+
361
+
362
+ /**
363
+ * @brief Check if match's versions overlaps with \p apis.
364
+ *
365
+ * @returns 1 if true, else 0.
366
+ * @remark \p apis must be sorted using rd_kafka_ApiVersion_key_cmp()
367
+ */
368
+ static RD_INLINE int
369
+ rd_kafka_ApiVersion_check(const struct rd_kafka_ApiVersion *apis,
370
+ size_t api_cnt,
371
+ const struct rd_kafka_ApiVersion *match) {
372
+ const struct rd_kafka_ApiVersion *api;
373
+
374
+ api = bsearch(match, apis, api_cnt, sizeof(*apis),
375
+ rd_kafka_ApiVersion_key_cmp);
376
+ if (unlikely(!api))
377
+ return 0;
378
+
379
+ return match->MinVer <= api->MaxVer && api->MinVer <= match->MaxVer;
380
+ }
381
+
382
+
383
+ /**
384
+ * @brief Compare broker's supported API versions to our feature request map
385
+ * and enable/disable features accordingly.
386
+ *
387
+ * @param broker_apis Broker's supported APIs. If NULL the
388
+ * \p broker.version.fallback configuration property will specify a
389
+ * default legacy version to use.
390
+ * @param broker_api_cnt Number of elements in \p broker_apis
391
+ *
392
+ * @returns the supported features (bitmask) to enable.
393
+ */
394
+ int rd_kafka_features_check(rd_kafka_broker_t *rkb,
395
+ struct rd_kafka_ApiVersion *broker_apis,
396
+ size_t broker_api_cnt) {
397
+ int features = 0;
398
+ int i;
399
+
400
+ /* Scan through features. */
401
+ for (i = 0; rd_kafka_feature_map[i].feature != 0; i++) {
402
+ const struct rd_kafka_ApiVersion *match;
403
+ int fails = 0;
404
+
405
+ /* For each feature check that all its API dependencies
406
+ * can be fullfilled. */
407
+
408
+ for (match = &rd_kafka_feature_map[i].depends[0];
409
+ match->ApiKey != -1; match++) {
410
+ int r;
411
+
412
+ r = rd_kafka_ApiVersion_check(broker_apis,
413
+ broker_api_cnt, match);
414
+
415
+ rd_rkb_dbg(rkb, FEATURE, "APIVERSION",
416
+ " Feature %s: %s (%hd..%hd) "
417
+ "%ssupported by broker",
418
+ rd_kafka_features2str(
419
+ rd_kafka_feature_map[i].feature),
420
+ rd_kafka_ApiKey2str(match->ApiKey),
421
+ match->MinVer, match->MaxVer,
422
+ r ? "" : "NOT ");
423
+
424
+ fails += !r;
425
+ }
426
+
427
+ rd_rkb_dbg(
428
+ rkb, FEATURE, "APIVERSION", "%s feature %s",
429
+ fails ? "Disabling" : "Enabling",
430
+ rd_kafka_features2str(rd_kafka_feature_map[i].feature));
431
+
432
+
433
+ if (!fails)
434
+ features |= rd_kafka_feature_map[i].feature;
435
+ }
436
+
437
+ return features;
438
+ }
439
+
440
+
441
+
442
+ /**
443
+ * @brief Make an allocated and sorted copy of \p src.
444
+ */
445
+ void rd_kafka_ApiVersions_copy(const struct rd_kafka_ApiVersion *src,
446
+ size_t src_cnt,
447
+ struct rd_kafka_ApiVersion **dstp,
448
+ size_t *dst_cntp) {
449
+ *dstp = rd_memdup(src, sizeof(*src) * src_cnt);
450
+ *dst_cntp = src_cnt;
451
+ qsort(*dstp, *dst_cntp, sizeof(**dstp), rd_kafka_ApiVersion_key_cmp);
452
+ }
453
+
454
+
455
+
456
+ /**
457
+ * @returns a human-readable feature flag string.
458
+ */
459
+ const char *rd_kafka_features2str(int features) {
460
+ static RD_TLS char ret[4][256];
461
+ size_t of = 0;
462
+ static RD_TLS int reti = 0;
463
+ int i;
464
+
465
+ reti = (reti + 1) % 4;
466
+
467
+ *ret[reti] = '\0';
468
+ for (i = 0; rd_kafka_feature_names[i]; i++) {
469
+ int r;
470
+ if (!(features & (1 << i)))
471
+ continue;
472
+
473
+ r = rd_snprintf(ret[reti] + of, sizeof(ret[reti]) - of, "%s%s",
474
+ of == 0 ? "" : ",", rd_kafka_feature_names[i]);
475
+ if ((size_t)r > sizeof(ret[reti]) - of) {
476
+ /* Out of space */
477
+ memcpy(&ret[reti][sizeof(ret[reti]) - 3], "..", 3);
478
+ break;
479
+ }
480
+
481
+ of += r;
482
+ }
483
+
484
+ return ret[reti];
485
+ }
486
+
487
+ int rd_ut_features_check_assert_features(const char *testname,
488
+ int features,
489
+ rd_bool_t all_enabled) {
490
+ int i;
491
+ for (i = 0; rd_kafka_feature_map[i].feature != 0; i++) {
492
+ rd_bool_t enabled =
493
+ (features & rd_kafka_feature_map[i].feature) > 0;
494
+ RD_UT_ASSERT(
495
+ enabled == all_enabled,
496
+ "%s: Feature \"%s\" should %sbe enabled", testname,
497
+ rd_kafka_features2str(rd_kafka_feature_map[i].feature),
498
+ all_enabled ? "" : "not ");
499
+ }
500
+ return 0;
501
+ }
502
+
503
+ int rd_ut_features_check(void) {
504
+ rd_kafka_t rk = RD_ZERO_INIT;
505
+ rd_kafka_broker_t rkb = RD_ZERO_INIT;
506
+ rkb.rkb_rk = &rk;
507
+ int features;
508
+ int fails = 0;
509
+
510
+ /* ApiVersions must be sorted in these structs */
511
+
512
+ /* No ApiVersions for testing matching no feature */
513
+ struct rd_kafka_ApiVersion api_versions_none[] = {0};
514
+
515
+ /* ApiVersions removed in KIP-896 */
516
+ struct rd_kafka_ApiVersion api_versions_kip_896[] = {
517
+ {
518
+ .ApiKey = RD_KAFKAP_Produce,
519
+ .MinVer = 3,
520
+ .MaxVer = 12,
521
+ },
522
+ {
523
+ .ApiKey = RD_KAFKAP_Fetch,
524
+ .MinVer = 4,
525
+ .MaxVer = 17,
526
+ },
527
+ {
528
+ .ApiKey = RD_KAFKAP_ListOffsets,
529
+ .MinVer = 1,
530
+ .MaxVer = 10,
531
+ },
532
+ {
533
+ .ApiKey = RD_KAFKAP_Metadata,
534
+ .MinVer = 0,
535
+ .MaxVer = 13,
536
+ },
537
+ {
538
+ .ApiKey = RD_KAFKAP_OffsetCommit,
539
+ .MinVer = 2,
540
+ .MaxVer = 9,
541
+ },
542
+ {
543
+ .ApiKey = RD_KAFKAP_OffsetFetch,
544
+ .MinVer = 1,
545
+ .MaxVer = 9,
546
+ },
547
+ {
548
+ .ApiKey = RD_KAFKAP_FindCoordinator,
549
+ .MinVer = 0,
550
+ .MaxVer = 6,
551
+ },
552
+ {
553
+ .ApiKey = RD_KAFKAP_JoinGroup,
554
+ .MinVer = 2,
555
+ .MaxVer = 9,
556
+ },
557
+ {
558
+ .ApiKey = RD_KAFKAP_Heartbeat,
559
+ .MinVer = 0,
560
+ .MaxVer = 4,
561
+ },
562
+ {
563
+ .ApiKey = RD_KAFKAP_LeaveGroup,
564
+ .MinVer = 0,
565
+ .MaxVer = 5,
566
+ },
567
+ {
568
+ .ApiKey = RD_KAFKAP_SyncGroup,
569
+ .MinVer = 0,
570
+ .MaxVer = 5,
571
+ },
572
+ {
573
+ .ApiKey = RD_KAFKAP_SaslHandshake,
574
+ .MinVer = 0,
575
+ .MaxVer = 1,
576
+ },
577
+ {
578
+ .ApiKey = RD_KAFKAP_ApiVersion,
579
+ .MinVer = 0,
580
+ .MaxVer = 4,
581
+ },
582
+ {
583
+ .ApiKey = RD_KAFKAP_InitProducerId,
584
+ .MinVer = 0,
585
+ .MaxVer = 5,
586
+ },
587
+ {
588
+ .ApiKey = RD_KAFKAP_SaslAuthenticate,
589
+ .MinVer = 0,
590
+ .MaxVer = 2,
591
+ },
592
+ };
593
+
594
+ /* ApiVersions to remove in next Apache Kafka version
595
+ * (see baseline in KIP-896) */
596
+ struct rd_kafka_ApiVersion api_versions_next_apache_kafka_next[] = {
597
+ {
598
+ .ApiKey = RD_KAFKAP_Produce,
599
+ .MinVer = 7,
600
+ .MaxVer = 12,
601
+ },
602
+ {
603
+ .ApiKey = RD_KAFKAP_Fetch,
604
+ .MinVer = 10,
605
+ .MaxVer = 17,
606
+ },
607
+ {
608
+ .ApiKey = RD_KAFKAP_ListOffsets,
609
+ .MinVer = 4,
610
+ .MaxVer = 10,
611
+ },
612
+ {
613
+ .ApiKey = RD_KAFKAP_Metadata,
614
+ .MinVer = 7,
615
+ .MaxVer = 13,
616
+ },
617
+ {
618
+ .ApiKey = RD_KAFKAP_OffsetCommit,
619
+ .MinVer = 6,
620
+ .MaxVer = 9,
621
+ },
622
+ {
623
+ .ApiKey = RD_KAFKAP_OffsetFetch,
624
+ .MinVer = 5,
625
+ .MaxVer = 9,
626
+ },
627
+ {
628
+ .ApiKey = RD_KAFKAP_FindCoordinator,
629
+ .MinVer = 2,
630
+ .MaxVer = 6,
631
+ },
632
+ {
633
+ .ApiKey = RD_KAFKAP_JoinGroup,
634
+ .MinVer = 3,
635
+ .MaxVer = 9,
636
+ },
637
+ {
638
+ .ApiKey = RD_KAFKAP_Heartbeat,
639
+ .MinVer = 2,
640
+ .MaxVer = 4,
641
+ },
642
+ {
643
+ .ApiKey = RD_KAFKAP_LeaveGroup,
644
+ .MinVer = 2,
645
+ .MaxVer = 5,
646
+ },
647
+ {
648
+ .ApiKey = RD_KAFKAP_SyncGroup,
649
+ .MinVer = 2,
650
+ .MaxVer = 5,
651
+ },
652
+ {
653
+ .ApiKey = RD_KAFKAP_SaslHandshake,
654
+ .MinVer = 1,
655
+ .MaxVer = 1,
656
+ },
657
+ {
658
+ .ApiKey = RD_KAFKAP_ApiVersion,
659
+ .MinVer = 2,
660
+ .MaxVer = 4,
661
+ },
662
+ {
663
+ .ApiKey = RD_KAFKAP_InitProducerId,
664
+ .MinVer = 1,
665
+ .MaxVer = 5,
666
+ },
667
+ {
668
+ .ApiKey = RD_KAFKAP_SaslAuthenticate,
669
+ .MinVer = 0,
670
+ .MaxVer = 2,
671
+ },
672
+ };
673
+
674
+ /* ApiVersions don't overlap with those enabling the feature.
675
+ * At least one condition isn't matching */
676
+ struct rd_kafka_ApiVersion api_versions_no_overlap[] = {
677
+ {
678
+ .ApiKey = RD_KAFKAP_Produce,
679
+ .MinVer = 2,
680
+ .MaxVer = 2,
681
+ },
682
+ {
683
+ .ApiKey = RD_KAFKAP_Fetch,
684
+ .MinVer = 0,
685
+ .MaxVer = 0,
686
+ },
687
+ {
688
+ .ApiKey = RD_KAFKAP_ListOffsets,
689
+ .MinVer = 0,
690
+ .MaxVer = 0,
691
+ },
692
+ {
693
+ .ApiKey = RD_KAFKAP_Metadata,
694
+ .MinVer = 7,
695
+ .MaxVer = 13,
696
+ },
697
+ {
698
+ .ApiKey = RD_KAFKAP_OffsetCommit,
699
+ .MinVer = 6,
700
+ .MaxVer = 9,
701
+ },
702
+ {
703
+ .ApiKey = RD_KAFKAP_OffsetFetch,
704
+ .MinVer = 5,
705
+ .MaxVer = 8,
706
+ },
707
+ {
708
+ .ApiKey = RD_KAFKAP_Heartbeat,
709
+ .MinVer = 2,
710
+ .MaxVer = 4,
711
+ },
712
+ {
713
+ .ApiKey = RD_KAFKAP_LeaveGroup,
714
+ .MinVer = 2,
715
+ .MaxVer = 5,
716
+ },
717
+ {
718
+ .ApiKey = RD_KAFKAP_SyncGroup,
719
+ .MinVer = 2,
720
+ .MaxVer = 5,
721
+ },
722
+ {
723
+ .ApiKey = RD_KAFKAP_SaslAuthenticate,
724
+ .MinVer = 0,
725
+ .MaxVer = 2,
726
+ },
727
+ };
728
+
729
+ /* ApiVersions where the maximum version corresponds to
730
+ * the minimum version necessary for enabling all features. */
731
+ struct rd_kafka_ApiVersion api_versions_overlap_by_one[] = {
732
+ {
733
+ .ApiKey = RD_KAFKAP_Produce,
734
+ .MinVer = 3,
735
+ .MaxVer = 7,
736
+ },
737
+ {
738
+ .ApiKey = RD_KAFKAP_Fetch,
739
+ .MinVer = 4,
740
+ .MaxVer = 10,
741
+ },
742
+ {
743
+ .ApiKey = RD_KAFKAP_ListOffsets,
744
+ .MinVer = 1,
745
+ .MaxVer = 1,
746
+ },
747
+ {
748
+ .ApiKey = RD_KAFKAP_Metadata,
749
+ .MinVer = 0,
750
+ .MaxVer = 13,
751
+ },
752
+ {
753
+ .ApiKey = RD_KAFKAP_OffsetCommit,
754
+ .MinVer = 2,
755
+ .MaxVer = 9,
756
+ },
757
+ {
758
+ .ApiKey = RD_KAFKAP_OffsetFetch,
759
+ .MinVer = 1,
760
+ .MaxVer = 9,
761
+ },
762
+ {
763
+ .ApiKey = RD_KAFKAP_FindCoordinator,
764
+ .MinVer = 0,
765
+ .MaxVer = 0,
766
+ },
767
+ {
768
+ .ApiKey = RD_KAFKAP_JoinGroup,
769
+ .MinVer = 0,
770
+ .MaxVer = 0,
771
+ },
772
+ {
773
+ .ApiKey = RD_KAFKAP_Heartbeat,
774
+ .MinVer = 0,
775
+ .MaxVer = 0,
776
+ },
777
+ {
778
+ .ApiKey = RD_KAFKAP_LeaveGroup,
779
+ .MinVer = 0,
780
+ .MaxVer = 0,
781
+ },
782
+ {
783
+ .ApiKey = RD_KAFKAP_SyncGroup,
784
+ .MinVer = 0,
785
+ .MaxVer = 0,
786
+ },
787
+ {
788
+ .ApiKey = RD_KAFKAP_SaslHandshake,
789
+ .MinVer = 0,
790
+ .MaxVer = 1,
791
+ },
792
+ {
793
+ .ApiKey = RD_KAFKAP_ApiVersion,
794
+ .MinVer = 0,
795
+ .MaxVer = 0,
796
+ },
797
+ {
798
+ .ApiKey = RD_KAFKAP_InitProducerId,
799
+ .MinVer = 0,
800
+ .MaxVer = 0,
801
+ },
802
+ {
803
+ .ApiKey = RD_KAFKAP_SaslAuthenticate,
804
+ .MinVer = 0,
805
+ .MaxVer = 0,
806
+ },
807
+ };
808
+
809
+ /* ApiVersions where the classic way of enabling SASL_GSSAPI
810
+ * or BROKER_BALANCED_CONSUMER was removed. */
811
+ struct rd_kafka_ApiVersion api_versions_kip_848[] = {
812
+ {
813
+ .ApiKey = RD_KAFKAP_OffsetCommit,
814
+ .MinVer = 6,
815
+ .MaxVer = 9,
816
+ },
817
+ {
818
+ .ApiKey = RD_KAFKAP_OffsetFetch,
819
+ .MinVer = 5,
820
+ .MaxVer = 9,
821
+ },
822
+ {
823
+ .ApiKey = RD_KAFKAP_SaslHandshake,
824
+ .MinVer = 0,
825
+ .MaxVer = 1,
826
+ },
827
+ {
828
+ .ApiKey = RD_KAFKAP_ConsumerGroupHeartbeat,
829
+ .MinVer = 0,
830
+ .MaxVer = 1,
831
+ },
832
+ };
833
+
834
+ /* With empty ApiVersions. */
835
+ features = rd_kafka_features_check(&rkb, api_versions_none,
836
+ RD_ARRAY_SIZE(api_versions_none));
837
+ fails += rd_ut_features_check_assert_features("no API versions",
838
+ features, rd_false);
839
+
840
+ /* Without KIP-896 removed versions. */
841
+ features = rd_kafka_features_check(&rkb, api_versions_kip_896,
842
+ RD_ARRAY_SIZE(api_versions_kip_896));
843
+ fails += rd_ut_features_check_assert_features("KIP-896 API versions",
844
+ features, rd_true);
845
+
846
+ /* Without versions to remove in next Apache Kafka major version. */
847
+ features = rd_kafka_features_check(
848
+ &rkb, api_versions_next_apache_kafka_next,
849
+ RD_ARRAY_SIZE(api_versions_next_apache_kafka_next));
850
+ fails += rd_ut_features_check_assert_features(
851
+ "next Apache Kafka API versions", features, rd_true);
852
+
853
+ /* With a RPC version range non overlapping with the one necessary
854
+ * for the feature. */
855
+ features =
856
+ rd_kafka_features_check(&rkb, api_versions_no_overlap,
857
+ RD_ARRAY_SIZE(api_versions_no_overlap));
858
+ fails += rd_ut_features_check_assert_features(
859
+ "not overlapping API versions", features, rd_false);
860
+
861
+ /* Only a single RPC version is overlapping with broker
862
+ * supported ones. */
863
+ features =
864
+ rd_kafka_features_check(&rkb, api_versions_overlap_by_one,
865
+ RD_ARRAY_SIZE(api_versions_overlap_by_one));
866
+ fails += rd_ut_features_check_assert_features(
867
+ "overlapping API versions by one version", features, rd_true);
868
+
869
+ /* Even when removing the classic protocol and its APIs,
870
+ * these features must be enabled. */
871
+ features = rd_kafka_features_check(&rkb, api_versions_kip_848,
872
+ RD_ARRAY_SIZE(api_versions_kip_848));
873
+ if (!(features & RD_KAFKA_FEATURE_BROKER_BALANCED_CONSUMER) ||
874
+ !(features & RD_KAFKA_FEATURE_SASL_GSSAPI)) {
875
+ fails++;
876
+ }
877
+
878
+
879
+ if (fails)
880
+ return fails;
881
+
882
+ RD_UT_PASS();
883
+ }
884
+
885
+ /**
886
+ * @name Unit tests
887
+ * @{
888
+ *
889
+ */
890
+ int unittest_feature(void) {
891
+ int fails = 0;
892
+
893
+ fails += rd_ut_features_check();
894
+
895
+ return fails;
896
+ }
897
+
898
+ /**@}*/