couchbase 3.8.2 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/CMakeLists.txt +16 -1
  4. data/ext/cache/cpm/{CPM_0.42.0.cmake → CPM_0.43.1.cmake} +18 -2
  5. data/ext/cache/extconf_include.rb +6 -6
  6. data/ext/cache/mozilla-ca-bundle.crt +121 -55
  7. data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
  8. data/ext/couchbase/CMakeLists.txt +130 -21
  9. data/ext/couchbase/cmake/APKBUILD.in +25 -4
  10. data/ext/couchbase/cmake/Bundler.cmake +143 -34
  11. data/ext/couchbase/cmake/CPM.cmake +126 -12
  12. data/ext/couchbase/cmake/Cache.cmake +7 -1
  13. data/ext/couchbase/cmake/CompilerOptions.cmake +1 -1
  14. data/ext/couchbase/cmake/CompilerWarnings.cmake +17 -6
  15. data/ext/couchbase/cmake/GrpcProtobuf.cmake +481 -0
  16. data/ext/couchbase/cmake/OpenSSL.cmake +10 -3
  17. data/ext/couchbase/cmake/Packaging.cmake +519 -65
  18. data/ext/couchbase/cmake/Protostellar.cmake +250 -0
  19. data/ext/couchbase/cmake/Sanitizers.cmake +61 -50
  20. data/ext/couchbase/cmake/StaticAnalyzers.cmake +16 -5
  21. data/ext/couchbase/cmake/TestFramework.cmake +283 -0
  22. data/ext/couchbase/cmake/TestFrameworkAddTests.cmake +51 -0
  23. data/ext/couchbase/cmake/Testing.cmake +27 -9
  24. data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +141 -8
  25. data/ext/couchbase/cmake/VersionInfo.cmake +50 -0
  26. data/ext/couchbase/cmake/build_config.hxx.in +2 -1
  27. data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +101 -23
  28. data/ext/couchbase/cmake/couchbase_cxx_client_static-config.cmake.in +7 -0
  29. data/ext/couchbase/cmake/couchbase_cxx_client_static.pc.in +2 -0
  30. data/ext/couchbase/cmake/gRPC_Generate.cmake +58 -0
  31. data/ext/couchbase/cmake/protobuf_Generate.cmake +69 -0
  32. data/ext/couchbase/cmake/require-git-checkout.cmake +25 -0
  33. data/ext/couchbase/cmake/tarball_glob.txt +49 -0
  34. data/ext/couchbase/core/agent_group.cxx +0 -8
  35. data/ext/couchbase/core/agent_group.hxx +0 -4
  36. data/ext/couchbase/core/analytics_stream.cxx +314 -0
  37. data/ext/couchbase/core/analytics_stream.hxx +129 -0
  38. data/ext/couchbase/core/analytics_stream_component.cxx +245 -0
  39. data/ext/couchbase/core/analytics_stream_component.hxx +67 -0
  40. data/ext/couchbase/core/app_telemetry_meter.cxx +25 -3
  41. data/ext/couchbase/core/app_telemetry_meter.hxx +77 -0
  42. data/ext/couchbase/core/app_telemetry_reporter.cxx +7 -6
  43. data/ext/couchbase/core/bucket.cxx +381 -87
  44. data/ext/couchbase/core/bucket.hxx +105 -25
  45. data/ext/couchbase/core/bucket_unit_test_api.hxx +57 -0
  46. data/ext/couchbase/core/capella.hxx +91 -0
  47. data/ext/couchbase/core/cluster.cxx +1554 -398
  48. data/ext/couchbase/core/cluster.hxx +39 -8
  49. data/ext/couchbase/core/cluster_agent.cxx +0 -8
  50. data/ext/couchbase/core/cluster_agent.hxx +0 -4
  51. data/ext/couchbase/core/cluster_options.hxx +26 -3
  52. data/ext/couchbase/core/collections_component.cxx +39 -15
  53. data/ext/couchbase/core/config_profiles.cxx +1 -1
  54. data/ext/couchbase/core/crud_component.cxx +2 -2
  55. data/ext/couchbase/core/crud_options.hxx +34 -0
  56. data/ext/couchbase/core/crypto/cbcrypto.cc +18 -13
  57. data/ext/couchbase/core/document_id_redaction.hxx +81 -0
  58. data/ext/couchbase/core/error_context/base_error_context.hxx +7 -6
  59. data/ext/couchbase/core/error_context/key_value.cxx +25 -2
  60. data/ext/couchbase/core/error_context/key_value.hxx +60 -33
  61. data/ext/couchbase/core/error_context/key_value_error_context.hxx +16 -15
  62. data/ext/couchbase/core/error_context/search.hxx +5 -0
  63. data/ext/couchbase/core/error_context/search_json.hxx +3 -0
  64. data/ext/couchbase/core/error_context/subdocument_error_context.hxx +19 -18
  65. data/ext/couchbase/core/error_context/view.hxx +5 -0
  66. data/ext/couchbase/core/free_form_http_request.cxx +237 -4
  67. data/ext/couchbase/core/free_form_http_request.hxx +41 -8
  68. data/ext/couchbase/core/http_component.cxx +300 -284
  69. data/ext/couchbase/core/http_component.hxx +0 -4
  70. data/ext/couchbase/core/impl/analytics.cxx +38 -5
  71. data/ext/couchbase/core/impl/analytics.hxx +34 -0
  72. data/ext/couchbase/core/impl/bootstrap_error.hxx +0 -3
  73. data/ext/couchbase/core/impl/collection.cxx +215 -202
  74. data/ext/couchbase/core/impl/collection_manager.cxx +1 -1
  75. data/ext/couchbase/core/impl/dns_srv_tracker.cxx +45 -18
  76. data/ext/couchbase/core/impl/error.cxx +22 -2
  77. data/ext/couchbase/core/impl/internal_analytics_stream_result.hxx +111 -0
  78. data/ext/couchbase/core/impl/internal_query_stream_result.hxx +110 -0
  79. data/ext/couchbase/core/impl/invoke_with_node_id.hxx +15 -7
  80. data/ext/couchbase/core/impl/key_value_error_category.cxx +6 -0
  81. data/ext/couchbase/core/impl/lookup_in_replica.cxx +10 -10
  82. data/ext/couchbase/core/impl/lookup_in_replica.hxx +4 -4
  83. data/ext/couchbase/core/impl/node_id.cxx +49 -13
  84. data/ext/couchbase/core/impl/observability_recorder.cxx +12 -2
  85. data/ext/couchbase/core/impl/observe_poll.cxx +63 -23
  86. data/ext/couchbase/core/impl/public_analytics_stream_result.cxx +372 -0
  87. data/ext/couchbase/core/impl/public_bucket.cxx +48 -2
  88. data/ext/couchbase/core/impl/public_cluster.cxx +229 -42
  89. data/ext/couchbase/core/impl/public_query_stream_result.cxx +380 -0
  90. data/ext/couchbase/core/impl/public_transaction_get_multi_replicas_from_preferred_server_group_result.cxx +42 -0
  91. data/ext/couchbase/core/impl/public_transaction_get_multi_result.cxx +42 -0
  92. data/ext/couchbase/core/impl/query.cxx +76 -7
  93. data/ext/couchbase/core/impl/query.hxx +36 -0
  94. data/ext/couchbase/core/impl/query_index_manager.cxx +54 -1
  95. data/ext/couchbase/core/impl/replica_utils.cxx +101 -0
  96. data/ext/couchbase/core/impl/replica_utils.hxx +64 -0
  97. data/ext/couchbase/core/impl/resolve_node_id.hxx +125 -0
  98. data/ext/couchbase/core/impl/scope.cxx +70 -0
  99. data/ext/couchbase/core/impl/search.cxx +31 -1
  100. data/ext/couchbase/core/impl/transactions.cxx +130 -0
  101. data/ext/couchbase/core/impl/wait_until_ready.cxx +439 -0
  102. data/ext/couchbase/core/impl/wait_until_ready.hxx +110 -0
  103. data/ext/couchbase/core/impl/with_bucket_config_or_timeout.hxx +180 -0
  104. data/ext/couchbase/core/impl/with_cancellation.hxx +11 -3
  105. data/ext/couchbase/core/io/configuration_belongs_to_session.hxx +1 -2
  106. data/ext/couchbase/core/io/dns_client.cxx +122 -45
  107. data/ext/couchbase/core/io/dns_codec.hxx +21 -21
  108. data/ext/couchbase/core/io/dns_config.cxx +21 -6
  109. data/ext/couchbase/core/io/http_command.hxx +149 -121
  110. data/ext/couchbase/core/io/http_error.hxx +107 -0
  111. data/ext/couchbase/core/io/http_parser.cxx +4 -0
  112. data/ext/couchbase/core/io/http_session.cxx +606 -154
  113. data/ext/couchbase/core/io/http_session.hxx +147 -30
  114. data/ext/couchbase/core/io/http_session_manager.hxx +329 -382
  115. data/ext/couchbase/core/io/http_streaming_parser.cxx +4 -0
  116. data/ext/couchbase/core/io/http_streaming_response.cxx +328 -43
  117. data/ext/couchbase/core/io/http_streaming_response.hxx +37 -3
  118. data/ext/couchbase/core/io/mcbp_buffer_pool.hxx +122 -0
  119. data/ext/couchbase/core/io/mcbp_command.hxx +150 -51
  120. data/ext/couchbase/core/io/mcbp_command_id.hxx +45 -0
  121. data/ext/couchbase/core/io/mcbp_message.cxx +9 -1
  122. data/ext/couchbase/core/io/mcbp_message.hxx +19 -0
  123. data/ext/couchbase/core/io/mcbp_output_queue.hxx +150 -0
  124. data/ext/couchbase/core/io/mcbp_parser.cxx +24 -7
  125. data/ext/couchbase/core/io/mcbp_session.cxx +309 -301
  126. data/ext/couchbase/core/io/mcbp_session.hxx +27 -18
  127. data/ext/couchbase/core/io/opaque_ring_table.hxx +145 -0
  128. data/ext/couchbase/core/io/retry_orchestrator.hxx +6 -5
  129. data/ext/couchbase/core/io/stream_deadline.hxx +50 -0
  130. data/ext/couchbase/core/io/streams.cxx +151 -21
  131. data/ext/couchbase/core/io/streams.hxx +48 -1
  132. data/ext/couchbase/core/logger/logger.cxx +36 -0
  133. data/ext/couchbase/core/logger/logger.hxx +46 -6
  134. data/ext/couchbase/core/logger/redaction.hxx +503 -0
  135. data/ext/couchbase/core/management/eventing_status.hxx +10 -0
  136. data/ext/couchbase/core/management/eventing_status_json.hxx +4 -0
  137. data/ext/couchbase/core/mcbp/big_endian.cxx +1 -1
  138. data/ext/couchbase/core/mcbp/codec.cxx +27 -18
  139. data/ext/couchbase/core/mcbp/operation_queue.cxx +2 -2
  140. data/ext/couchbase/core/mcbp/packet.hxx +2 -2
  141. data/ext/couchbase/core/mcbp/queue_request.cxx +23 -6
  142. data/ext/couchbase/core/mcbp/queue_request.hxx +21 -0
  143. data/ext/couchbase/core/meta/features.hxx +13 -0
  144. data/ext/couchbase/core/meta/version.cxx +6 -3
  145. data/ext/couchbase/core/metrics/logging_meter.cxx +5 -10
  146. data/ext/couchbase/core/metrics/meter_wrapper.cxx +63 -33
  147. data/ext/couchbase/core/metrics/meter_wrapper.hxx +55 -3
  148. data/ext/couchbase/core/operations/analytics_response_parsing.cxx +177 -0
  149. data/ext/couchbase/core/operations/analytics_response_parsing.hxx +55 -0
  150. data/ext/couchbase/core/operations/document_analytics.cxx +48 -130
  151. data/ext/couchbase/core/operations/document_analytics.hxx +14 -2
  152. data/ext/couchbase/core/operations/document_get_all_replicas.hxx +15 -7
  153. data/ext/couchbase/core/operations/document_get_any_replica.hxx +19 -8
  154. data/ext/couchbase/core/operations/document_get_projected.cxx +1 -1
  155. data/ext/couchbase/core/{impl/get_replica.cxx → operations/document_get_replica.cxx} +21 -3
  156. data/ext/couchbase/core/{impl/get_replica.hxx → operations/document_get_replica.hxx} +31 -4
  157. data/ext/couchbase/core/operations/document_lookup_in.cxx +10 -10
  158. data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +228 -198
  159. data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +215 -217
  160. data/ext/couchbase/core/operations/document_query.cxx +108 -221
  161. data/ext/couchbase/core/operations/document_query.hxx +18 -4
  162. data/ext/couchbase/core/operations/document_search.cxx +52 -8
  163. data/ext/couchbase/core/operations/document_search.hxx +3 -0
  164. data/ext/couchbase/core/operations/document_view.cxx +3 -3
  165. data/ext/couchbase/core/operations/management/analytics_dataset_create.cxx +15 -8
  166. data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +4 -0
  167. data/ext/couchbase/core/operations/management/analytics_dataset_drop.cxx +11 -6
  168. data/ext/couchbase/core/operations/management/analytics_dataset_get_all.cxx +3 -2
  169. data/ext/couchbase/core/operations/management/analytics_dataverse_create.cxx +10 -5
  170. data/ext/couchbase/core/operations/management/analytics_dataverse_drop.cxx +10 -5
  171. data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.cxx +2 -1
  172. data/ext/couchbase/core/operations/management/analytics_index_create.cxx +33 -8
  173. data/ext/couchbase/core/operations/management/analytics_index_drop.cxx +12 -7
  174. data/ext/couchbase/core/operations/management/analytics_index_get_all.cxx +3 -2
  175. data/ext/couchbase/core/operations/management/analytics_link_connect.cxx +11 -6
  176. data/ext/couchbase/core/operations/management/analytics_link_create.cxx +3 -3
  177. data/ext/couchbase/core/operations/management/analytics_link_disconnect.cxx +10 -4
  178. data/ext/couchbase/core/operations/management/analytics_link_drop.cxx +6 -4
  179. data/ext/couchbase/core/operations/management/analytics_link_get_all.cxx +4 -3
  180. data/ext/couchbase/core/operations/management/analytics_link_replace.cxx +3 -3
  181. data/ext/couchbase/core/operations/management/analytics_link_utils.hxx +1 -1
  182. data/ext/couchbase/core/operations/management/change_password.cxx +2 -0
  183. data/ext/couchbase/core/operations/management/collection_drop.cxx +5 -1
  184. data/ext/couchbase/core/operations/management/error_utils.cxx +59 -5
  185. data/ext/couchbase/core/operations/management/error_utils.hxx +29 -1
  186. data/ext/couchbase/core/operations/management/eventing_deploy_function.cxx +9 -3
  187. data/ext/couchbase/core/operations/management/eventing_drop_function.cxx +8 -3
  188. data/ext/couchbase/core/operations/management/eventing_get_all_functions.cxx +4 -2
  189. data/ext/couchbase/core/operations/management/eventing_get_function.cxx +5 -3
  190. data/ext/couchbase/core/operations/management/eventing_get_status.cxx +4 -2
  191. data/ext/couchbase/core/operations/management/eventing_pause_function.cxx +9 -3
  192. data/ext/couchbase/core/operations/management/eventing_resume_function.cxx +9 -3
  193. data/ext/couchbase/core/operations/management/eventing_undeploy_function.cxx +9 -3
  194. data/ext/couchbase/core/operations/management/eventing_upsert_function.cxx +9 -3
  195. data/ext/couchbase/core/operations/management/group_drop.cxx +3 -1
  196. data/ext/couchbase/core/operations/management/group_get.cxx +3 -1
  197. data/ext/couchbase/core/operations/management/group_upsert.cxx +11 -8
  198. data/ext/couchbase/core/operations/management/query_index_build.cxx +5 -2
  199. data/ext/couchbase/core/operations/management/query_index_create.cxx +9 -3
  200. data/ext/couchbase/core/operations/management/query_index_drop.cxx +11 -4
  201. data/ext/couchbase/core/operations/management/query_index_get_all.cxx +1 -1
  202. data/ext/couchbase/core/operations/management/query_index_get_all_deferred.cxx +1 -1
  203. data/ext/couchbase/core/operations/management/scope_drop.cxx +5 -1
  204. data/ext/couchbase/core/operations/management/scope_get_all.cxx +6 -1
  205. data/ext/couchbase/core/operations/management/search_get_stats.cxx +10 -0
  206. data/ext/couchbase/core/operations/management/search_index_analyze_document.cxx +3 -2
  207. data/ext/couchbase/core/operations/management/search_index_control_ingest.cxx +4 -3
  208. data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.cxx +4 -3
  209. data/ext/couchbase/core/operations/management/search_index_control_query.cxx +4 -3
  210. data/ext/couchbase/core/operations/management/search_index_drop.cxx +2 -2
  211. data/ext/couchbase/core/operations/management/search_index_get.cxx +2 -2
  212. data/ext/couchbase/core/operations/management/search_index_get_documents_count.cxx +3 -2
  213. data/ext/couchbase/core/operations/management/search_index_get_stats.cxx +3 -1
  214. data/ext/couchbase/core/operations/management/search_index_upsert.cxx +2 -2
  215. data/ext/couchbase/core/operations/management/user_drop.cxx +3 -1
  216. data/ext/couchbase/core/operations/management/user_get.cxx +3 -1
  217. data/ext/couchbase/core/operations/management/user_upsert.cxx +12 -9
  218. data/ext/couchbase/core/operations/management/view_index_drop.cxx +1 -1
  219. data/ext/couchbase/core/operations/management/view_index_get.cxx +1 -1
  220. data/ext/couchbase/core/operations/management/view_index_upsert.cxx +1 -1
  221. data/ext/couchbase/core/operations/operation_traits.hxx +18 -0
  222. data/ext/couchbase/core/operations/query_response_parsing.cxx +211 -0
  223. data/ext/couchbase/core/operations/query_response_parsing.hxx +60 -0
  224. data/ext/couchbase/core/operations_fwd.hxx +3 -3
  225. data/ext/couchbase/core/origin.cxx +54 -26
  226. data/ext/couchbase/core/origin.hxx +12 -0
  227. data/ext/couchbase/core/orphan_reporter.cxx +2 -1
  228. data/ext/couchbase/core/platform/random.cc +7 -7
  229. data/ext/couchbase/core/protocol/client_request.cxx +2 -2
  230. data/ext/couchbase/core/protocol/client_request.hxx +38 -21
  231. data/ext/couchbase/core/protocol/client_response.cxx +11 -3
  232. data/ext/couchbase/core/protocol/client_response.hxx +27 -6
  233. data/ext/couchbase/core/protocol/cmd_append.cxx +2 -2
  234. data/ext/couchbase/core/protocol/cmd_cluster_map_change_notification.cxx +2 -2
  235. data/ext/couchbase/core/protocol/cmd_decrement.cxx +6 -6
  236. data/ext/couchbase/core/protocol/cmd_get.cxx +1 -1
  237. data/ext/couchbase/core/protocol/cmd_get_and_lock.cxx +2 -2
  238. data/ext/couchbase/core/protocol/cmd_get_and_touch.cxx +2 -2
  239. data/ext/couchbase/core/protocol/cmd_get_cluster_config.cxx +6 -4
  240. data/ext/couchbase/core/protocol/cmd_get_collection_id.cxx +2 -2
  241. data/ext/couchbase/core/protocol/cmd_get_error_map.cxx +1 -1
  242. data/ext/couchbase/core/protocol/cmd_get_meta.cxx +4 -4
  243. data/ext/couchbase/core/protocol/cmd_get_replica.cxx +1 -1
  244. data/ext/couchbase/core/protocol/cmd_hello.cxx +1 -1
  245. data/ext/couchbase/core/protocol/cmd_increment.cxx +6 -6
  246. data/ext/couchbase/core/protocol/cmd_insert.cxx +4 -4
  247. data/ext/couchbase/core/protocol/cmd_lookup_in.cxx +4 -3
  248. data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +4 -3
  249. data/ext/couchbase/core/protocol/cmd_mutate_in.cxx +10 -9
  250. data/ext/couchbase/core/protocol/cmd_mutate_in.hxx +10 -10
  251. data/ext/couchbase/core/protocol/cmd_observe_seqno.cxx +7 -7
  252. data/ext/couchbase/core/protocol/cmd_prepend.cxx +2 -2
  253. data/ext/couchbase/core/protocol/cmd_remove.cxx +2 -2
  254. data/ext/couchbase/core/protocol/cmd_replace.cxx +4 -4
  255. data/ext/couchbase/core/protocol/cmd_touch.cxx +1 -1
  256. data/ext/couchbase/core/protocol/cmd_upsert.cxx +4 -4
  257. data/ext/couchbase/core/protocol/datatype.hxx +118 -1
  258. data/ext/couchbase/core/protocol/frame_info_utils.cxx +1 -1
  259. data/ext/couchbase/core/protocol/magic.hxx +4 -0
  260. data/ext/couchbase/core/protocol/magic_fmt.hxx +3 -0
  261. data/ext/couchbase/core/protocol/server_request.hxx +3 -1
  262. data/ext/couchbase/core/protocol/status.cxx +1 -1
  263. data/ext/couchbase/core/protostellar/analytics_converter.hxx +171 -0
  264. data/ext/couchbase/core/protostellar/bucket_admin_converter.hxx +301 -0
  265. data/ext/couchbase/core/protostellar/collection_admin_converter.hxx +92 -0
  266. data/ext/couchbase/core/protostellar/component.cxx +2445 -0
  267. data/ext/couchbase/core/protostellar/component.hxx +391 -0
  268. data/ext/couchbase/core/{columnar/bootstrap_notification_subscriber.hxx → protostellar/compression_settings.hxx} +11 -10
  269. data/ext/couchbase/core/protostellar/credentials.cxx +233 -0
  270. data/ext/couchbase/core/protostellar/credentials.hxx +88 -0
  271. data/ext/couchbase/core/protostellar/dispatcher.cxx +57 -0
  272. data/ext/couchbase/core/protostellar/dispatcher.hxx +482 -0
  273. data/ext/couchbase/core/protostellar/error_utils.cxx +293 -0
  274. data/ext/couchbase/core/protostellar/error_utils.hxx +97 -0
  275. data/ext/couchbase/core/protostellar/json_payload.hxx +49 -0
  276. data/ext/couchbase/core/protostellar/kv_converter.cxx +70 -0
  277. data/ext/couchbase/core/protostellar/kv_converter.hxx +600 -0
  278. data/ext/couchbase/core/protostellar/query_converter.hxx +265 -0
  279. data/ext/couchbase/core/protostellar/query_index_admin_converter.hxx +291 -0
  280. data/ext/couchbase/core/protostellar/query_proto.hxx +73 -0
  281. data/ext/couchbase/core/protostellar/search_converter.hxx +244 -0
  282. data/ext/couchbase/core/protostellar/search_index_admin_converter.hxx +156 -0
  283. data/ext/couchbase/core/protostellar/view_converter.hxx +158 -0
  284. data/ext/couchbase/core/query_stream.cxx +447 -0
  285. data/ext/couchbase/core/query_stream.hxx +141 -0
  286. data/ext/couchbase/core/query_stream_component.cxx +243 -0
  287. data/ext/couchbase/core/query_stream_component.hxx +68 -0
  288. data/ext/couchbase/core/range_scan_load_balancer.cxx +15 -8
  289. data/ext/couchbase/core/range_scan_orchestrator.cxx +15 -3
  290. data/ext/couchbase/core/response_handler.hxx +41 -4
  291. data/ext/couchbase/core/row_streamer.cxx +332 -46
  292. data/ext/couchbase/core/row_streamer.hxx +31 -1
  293. data/ext/couchbase/core/row_streamer_options.hxx +55 -0
  294. data/ext/couchbase/core/sasl/client.h +3 -0
  295. data/ext/couchbase/core/search_scoring.hxx +66 -0
  296. data/ext/couchbase/core/stream_error_details.hxx +69 -0
  297. data/ext/couchbase/core/timeout_defaults.hxx +0 -1
  298. data/ext/couchbase/core/topology/capabilities.hxx +6 -0
  299. data/ext/couchbase/core/topology/capabilities_fmt.hxx +3 -0
  300. data/ext/couchbase/core/topology/configuration.cxx +21 -6
  301. data/ext/couchbase/core/topology/configuration.hxx +29 -8
  302. data/ext/couchbase/core/topology/configuration_json.hxx +3 -0
  303. data/ext/couchbase/core/topology/error_map_json.hxx +3 -1
  304. data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +70 -4
  305. data/ext/couchbase/core/tracing/threshold_logging_tracer.hxx +10 -0
  306. data/ext/couchbase/core/transactions/active_transaction_record.cxx +0 -34
  307. data/ext/couchbase/core/transactions/attempt_context_impl.cxx +108 -63
  308. data/ext/couchbase/core/transactions/attempt_context_impl.hxx +19 -2
  309. data/ext/couchbase/core/transactions/error_list.hxx +2 -2
  310. data/ext/couchbase/core/transactions/get_multi_fetch.hxx +160 -0
  311. data/ext/couchbase/core/transactions/get_multi_orchestrator.cxx +326 -125
  312. data/ext/couchbase/core/transactions/get_multi_transaction_id.hxx +62 -0
  313. data/ext/couchbase/core/transactions/internal/atr_entry.hxx +22 -2
  314. data/ext/couchbase/core/transactions/internal/transaction_context.hxx +2 -2
  315. data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +23 -1
  316. data/ext/couchbase/core/transactions/internal/utils.hxx +50 -14
  317. data/ext/couchbase/core/transactions/staged_mutation.cxx +23 -18
  318. data/ext/couchbase/core/transactions/staged_mutation.hxx +15 -4
  319. data/ext/couchbase/core/transactions/transaction_context.cxx +55 -40
  320. data/ext/couchbase/core/transactions/transaction_get_result.hxx +16 -0
  321. data/ext/couchbase/core/transactions/transactions.cxx +3 -55
  322. data/ext/couchbase/core/transactions/transactions_cleanup.cxx +165 -72
  323. data/ext/couchbase/core/transactions/transactions_config.cxx +0 -11
  324. data/ext/couchbase/core/transactions/utils.cxx +10 -0
  325. data/ext/couchbase/core/transactions/waitable_op_list.hxx +2 -2
  326. data/ext/couchbase/core/transactions.hxx +9 -9
  327. data/ext/couchbase/core/utils/byteswap.hxx +166 -9
  328. data/ext/couchbase/core/utils/connection_string.cxx +50 -85
  329. data/ext/couchbase/core/utils/connection_string.hxx +15 -0
  330. data/ext/couchbase/core/{columnar/backoff_calculator.hxx → utils/deadline.hxx} +13 -13
  331. data/ext/couchbase/core/utils/duration_parser.cxx +1 -1
  332. data/ext/couchbase/core/utils/json_streaming_lexer.cxx +48 -5
  333. data/ext/couchbase/core/utils/json_streaming_lexer.hxx +4 -1
  334. data/ext/couchbase/core/utils/movable_function.hxx +301 -52
  335. data/ext/couchbase/core/utils/name_codec.hxx +154 -11
  336. data/ext/couchbase/core/{columnar/retry_info.hxx → utils/process_id.hxx} +18 -13
  337. data/ext/couchbase/core/utils/url_codec.cxx +12 -51
  338. data/ext/couchbase/core/websocket_codec.cxx +3 -29
  339. data/ext/couchbase/couchbase/analytics_options.hxx +21 -10
  340. data/ext/couchbase/couchbase/analytics_row.hxx +105 -0
  341. data/ext/couchbase/couchbase/analytics_stream_result.hxx +266 -0
  342. data/ext/couchbase/couchbase/boolean_query.hxx +3 -3
  343. data/ext/couchbase/couchbase/bucket.hxx +57 -0
  344. data/ext/couchbase/couchbase/cluster.hxx +183 -5
  345. data/ext/couchbase/{core/columnar/security_options.hxx → couchbase/cluster_state.hxx} +18 -14
  346. data/ext/couchbase/couchbase/codec/lenient_json_transcoder.hxx +69 -0
  347. data/ext/couchbase/couchbase/collection.hxx +234 -14
  348. data/ext/couchbase/couchbase/common_durability_options.hxx +18 -3
  349. data/ext/couchbase/couchbase/conjunction_query.hxx +1 -1
  350. data/ext/couchbase/couchbase/create_dataset_analytics_options.hxx +6 -1
  351. data/ext/couchbase/couchbase/date_range_query.hxx +2 -2
  352. data/ext/couchbase/couchbase/decrement_options.hxx +1 -1
  353. data/ext/couchbase/couchbase/disjunction_query.hxx +1 -1
  354. data/ext/couchbase/couchbase/error.hxx +32 -0
  355. data/ext/couchbase/couchbase/error_codes.hxx +32 -0
  356. data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +1 -1
  357. data/ext/couchbase/couchbase/geo_distance_query.hxx +1 -1
  358. data/ext/couchbase/couchbase/geo_polygon_query.hxx +1 -1
  359. data/ext/couchbase/couchbase/get_replica_options.hxx +68 -0
  360. data/ext/couchbase/couchbase/get_replica_result.hxx +5 -3
  361. data/ext/couchbase/couchbase/get_replica_strategy.hxx +161 -0
  362. data/ext/couchbase/couchbase/get_result.hxx +1 -0
  363. data/ext/couchbase/couchbase/increment_options.hxx +1 -1
  364. data/ext/couchbase/couchbase/insert_options.hxx +1 -1
  365. data/ext/couchbase/couchbase/match_phrase_query.hxx +1 -1
  366. data/ext/couchbase/couchbase/match_query.hxx +1 -1
  367. data/ext/couchbase/couchbase/mutate_in_options.hxx +3 -3
  368. data/ext/couchbase/couchbase/network_options.hxx +1 -1
  369. data/ext/couchbase/couchbase/node_id.hxx +42 -14
  370. data/ext/couchbase/couchbase/node_id_for_options.hxx +7 -1
  371. data/ext/couchbase/couchbase/node_ids_options.hxx +8 -2
  372. data/ext/couchbase/couchbase/numeric_range_query.hxx +1 -1
  373. data/ext/couchbase/couchbase/phrase_query.hxx +1 -1
  374. data/ext/couchbase/couchbase/prefix_query.hxx +1 -1
  375. data/ext/couchbase/couchbase/query_options.hxx +23 -12
  376. data/ext/couchbase/couchbase/query_row.hxx +111 -0
  377. data/ext/couchbase/couchbase/query_stream_result.hxx +302 -0
  378. data/ext/couchbase/couchbase/query_string_query.hxx +3 -3
  379. data/ext/couchbase/couchbase/regexp_query.hxx +1 -1
  380. data/ext/couchbase/couchbase/replace_options.hxx +3 -3
  381. data/ext/couchbase/couchbase/result.hxx +14 -3
  382. data/ext/couchbase/couchbase/scan_result_item.hxx +1 -0
  383. data/ext/couchbase/couchbase/scope.hxx +85 -2
  384. data/ext/couchbase/couchbase/search_options.hxx +58 -8
  385. data/ext/couchbase/couchbase/search_scoring.hxx +94 -0
  386. data/ext/couchbase/couchbase/search_scoring_none.hxx +51 -0
  387. data/ext/couchbase/couchbase/search_scoring_reciprocal_rank_fusion.hxx +88 -0
  388. data/ext/couchbase/couchbase/search_scoring_relative_score_fusion.hxx +70 -0
  389. data/ext/couchbase/couchbase/term_range_query.hxx +1 -1
  390. data/ext/couchbase/couchbase/tracing/request_span.hxx +46 -0
  391. data/ext/couchbase/couchbase/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx +23 -21
  392. data/ext/couchbase/couchbase/transactions/transaction_get_multi_result.hxx +24 -19
  393. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +17 -3
  394. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +4 -2
  395. data/ext/couchbase/couchbase/transactions.hxx +27 -18
  396. data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
  397. data/ext/couchbase/couchbase/vector_query.hxx +1 -1
  398. data/ext/couchbase/couchbase/wait_until_ready_options.hxx +111 -0
  399. data/ext/couchbase/couchbase/wildcard_query.hxx +1 -1
  400. data/ext/extconf.rb +15 -10
  401. data/ext/rcb_analytics.cxx +82 -102
  402. data/ext/rcb_backend.cxx +42 -36
  403. data/ext/rcb_backend.hxx +2 -0
  404. data/ext/rcb_buckets.cxx +47 -59
  405. data/ext/rcb_collections.cxx +42 -52
  406. data/ext/rcb_crud.cxx +345 -224
  407. data/ext/rcb_diagnostics.cxx +117 -27
  408. data/ext/rcb_exceptions.cxx +152 -99
  409. data/ext/rcb_exceptions.hxx +25 -0
  410. data/ext/rcb_extras.cxx +18 -19
  411. data/ext/rcb_hdr_histogram.cxx +19 -4
  412. data/ext/rcb_logger.cxx +202 -27
  413. data/ext/rcb_logger.hxx +12 -0
  414. data/ext/rcb_multi.cxx +40 -40
  415. data/ext/rcb_observability.cxx +7 -5
  416. data/ext/rcb_query.cxx +99 -142
  417. data/ext/rcb_range_scan.cxx +41 -35
  418. data/ext/rcb_search.cxx +98 -99
  419. data/ext/rcb_users.cxx +36 -56
  420. data/ext/rcb_utils.cxx +100 -37
  421. data/ext/rcb_utils.hxx +287 -33
  422. data/ext/rcb_version.cxx +1 -1
  423. data/ext/rcb_views.cxx +55 -51
  424. data/lib/active_support/cache/couchbase_store.rb +77 -12
  425. data/lib/couchbase/bucket.rb +20 -0
  426. data/lib/couchbase/cluster.rb +17 -0
  427. data/lib/couchbase/collection.rb +36 -1
  428. data/lib/couchbase/errors.rb +18 -0
  429. data/lib/couchbase/fork_hooks.rb +16 -7
  430. data/lib/couchbase/get_replica_strategy.rb +89 -0
  431. data/lib/couchbase/logger.rb +1 -1
  432. data/lib/couchbase/management/analytics_index_manager.rb +15 -15
  433. data/lib/couchbase/management/bucket_manager.rb +6 -6
  434. data/lib/couchbase/management/collection_manager.rb +6 -6
  435. data/lib/couchbase/management/query_index_manager.rb +7 -7
  436. data/lib/couchbase/management/search_index_manager.rb +13 -13
  437. data/lib/couchbase/management/user_manager.rb +10 -10
  438. data/lib/couchbase/management/view_index_manager.rb +5 -5
  439. data/lib/couchbase/options.rb +174 -42
  440. data/lib/couchbase/protostellar/bucket.rb +4 -0
  441. data/lib/couchbase/protostellar/cluster.rb +4 -0
  442. data/lib/couchbase/protostellar/collection.rb +4 -0
  443. data/lib/couchbase/protostellar/error_handling.rb +2 -1
  444. data/lib/couchbase/protostellar/request.rb +1 -0
  445. data/lib/couchbase/protostellar/request_generator/kv.rb +16 -2
  446. data/lib/couchbase/protostellar/request_generator/search.rb +17 -1
  447. data/lib/couchbase/protostellar/retry/orchestrator.rb +3 -2
  448. data/lib/couchbase/protostellar/retry/strategies/fail_fast.rb +33 -0
  449. data/lib/couchbase/protostellar/retry/strategies.rb +1 -0
  450. data/lib/couchbase/search_options.rb +95 -6
  451. data/lib/couchbase/version.rb +1 -1
  452. metadata +91 -33
  453. data/ext/0001-fix-build-for-mingw-w64-ucrt-x86_64-toolchain.patch +0 -40
  454. data/ext/couchbase/core/columnar/agent.hxx +0 -71
  455. data/ext/couchbase/core/columnar/agent_config.hxx +0 -59
  456. data/ext/couchbase/core/columnar/background_bootstrap_listener.hxx +0 -42
  457. data/ext/couchbase/core/columnar/backoff_calculator.cxx +0 -62
  458. data/ext/couchbase/core/columnar/columnar_agent.cxx +0 -147
  459. data/ext/couchbase/core/columnar/columnar_agent_config.cxx +0 -48
  460. data/ext/couchbase/core/columnar/columnar_error.cxx +0 -51
  461. data/ext/couchbase/core/columnar/database_management_options.hxx +0 -56
  462. data/ext/couchbase/core/columnar/error.hxx +0 -51
  463. data/ext/couchbase/core/columnar/error_codes.cxx +0 -107
  464. data/ext/couchbase/core/columnar/error_codes.hxx +0 -75
  465. data/ext/couchbase/core/columnar/management_component.cxx +0 -300
  466. data/ext/couchbase/core/columnar/management_component.hxx +0 -56
  467. data/ext/couchbase/core/columnar/query_component.cxx +0 -523
  468. data/ext/couchbase/core/columnar/query_component.hxx +0 -57
  469. data/ext/couchbase/core/columnar/query_options.hxx +0 -59
  470. data/ext/couchbase/core/columnar/query_result.cxx +0 -130
  471. data/ext/couchbase/core/columnar/query_result.hxx +0 -78
  472. data/ext/couchbase/core/io/config_tracker.cxx +0 -687
  473. data/ext/couchbase/core/io/config_tracker.hxx +0 -123
@@ -47,6 +47,56 @@ if(NOT COUCHBASE_CXX_CLIENT_BUILD_TIMESTAMP)
47
47
  endif()
48
48
  endif()
49
49
 
50
+ # SOURCE_DATE_EPOCH is the single, timezone-free anchor for every embedded date (the source
51
+ # tarball mtime, the Debian changelog / RPM %changelog dates, and the .apk mtimes). It is derived
52
+ # from the most recent tag's commit time (git %ct) -- or HEAD's commit time for an untagged commit
53
+ # -- frozen into TarballRelease.cmake at tarball creation, and reused unchanged when packages are
54
+ # later built from the tarball (which has no .git).
55
+ # Use DEFINED/empty rather than truthiness: the valid epoch 0 (1970-01-01) is CMake-falsey and
56
+ # would otherwise be treated as unset and overwritten, breaking reproducibility.
57
+ if(NOT DEFINED COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH OR COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH STREQUAL "")
58
+ if(DEFINED ENV{SOURCE_DATE_EPOCH})
59
+ set(COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH "$ENV{SOURCE_DATE_EPOCH}")
60
+ elseif(GIT)
61
+ # Prefer the most recent tag's commit time; if no tag is reachable (untagged commit) fall back
62
+ # to HEAD's commit time -- still deterministic per commit -- rather than the wall clock.
63
+ execute_process(
64
+ COMMAND git describe --tags --abbrev=0 HEAD
65
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
66
+ RESULT_VARIABLE _sde_tag_result
67
+ OUTPUT_STRIP_TRAILING_WHITESPACE
68
+ OUTPUT_VARIABLE _sde_last_tag)
69
+ if(_sde_tag_result EQUAL 0)
70
+ set(_sde_ref "${_sde_last_tag}")
71
+ else()
72
+ set(_sde_ref "HEAD")
73
+ endif()
74
+ execute_process(
75
+ COMMAND git log --max-count=1 --no-patch --format=%ct ${_sde_ref}
76
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
77
+ OUTPUT_STRIP_TRAILING_WHITESPACE
78
+ OUTPUT_VARIABLE COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH)
79
+ endif()
80
+ if(NOT DEFINED COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH OR COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH STREQUAL "")
81
+ string(TIMESTAMP COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH "%s" UTC)
82
+ endif()
83
+ endif()
84
+
85
+ # Fail early with an actionable message if the epoch is not a decimal integer: it is threaded
86
+ # into tar (--mtime=@...), rpm/dpkg/abuild, and the rootless mock wrapper, where a bad value
87
+ # would otherwise surface as a cryptic downstream error.
88
+ if(NOT COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH MATCHES "^[0-9]+$")
89
+ message(FATAL_ERROR
90
+ "COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH must be a decimal integer (seconds since the Unix "
91
+ "epoch), but is '${COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH}'. Check the SOURCE_DATE_EPOCH "
92
+ "environment variable.")
93
+ endif()
94
+
95
+ # Anchor it in the environment so every string(TIMESTAMP ...) evaluated afterwards (here and in
96
+ # Packaging.cmake) formats this frozen instant instead of the wall clock, and so child build tools
97
+ # (dpkg-buildpackage, rpmbuild, abuild) that honor SOURCE_DATE_EPOCH inherit the same value.
98
+ set(ENV{SOURCE_DATE_EPOCH} "${COUCHBASE_CXX_CLIENT_SOURCE_DATE_EPOCH}")
99
+
50
100
  string(REGEX REPLACE "T.*" "" COUCHBASE_CXX_CLIENT_BUILD_DATE "${COUCHBASE_CXX_CLIENT_BUILD_TIMESTAMP}")
51
101
 
52
102
  # set(couchbase_cxx_client_BUILD_NUMBER 142)
@@ -23,6 +23,7 @@
23
23
  #cmakedefine COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_SHA256 "@COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_SHA256@"
24
24
  #cmakedefine COUCHBASE_CXX_CLIENT_BORINGSSL_SHA "@COUCHBASE_CXX_CLIENT_BORINGSSL_SHA@"
25
25
  #cmakedefine COUCHBASE_CXX_CLIENT_STATIC_BORINGSSL
26
- #cmakedefine COUCHBASE_CXX_CLIENT_COLUMNAR
26
+ #cmakedefine COUCHBASE_CXX_CLIENT_BUILD_COUCHBASE2
27
27
  #cmakedefine COUCHBASE_CXX_CLIENT_CREATE_OPERATION_SPAN_IN_CORE
28
28
  #cmakedefine COUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY
29
+
@@ -1,3 +1,36 @@
1
+ # Reproducibility: derive SOURCE_DATE_EPOCH from the (frozen) %changelog date and clamp file
2
+ # mtimes to it, and pin the recorded build host, so RPMs are byte-identical across build machines.
3
+ # These are redhat-rpm-config knobs, effective on Fedora/EL9+ (and on by default there); we set
4
+ # them explicitly so the intent is applied wherever supported. On toolchains that predate them or
5
+ # do not implement them (e.g. EL8, Amazon Linux) an
6
+ # unrecognized global macro is simply ignored, so mtime/buildhost reproducibility is not guaranteed
7
+ # there.
8
+ %global source_date_epoch_from_changelog 1
9
+ %global clamp_mtime_to_source_date_epoch 1
10
+ %global _buildhost couchbase-reproducible-build
11
+
12
+ # gRPC support gate (grpc_supported).
13
+ #
14
+ # gRPC, Protobuf, Abseil, re2 and c-ares are built from source (cmake/GrpcProtobuf.cmake) and
15
+ # embedded statically, so this gate no longer tracks what the distribution packages. Linking the
16
+ # platform's gRPC would pull in the platform's OpenSSL alongside the BoringSSL this package already
17
+ # links statically -- two TLS stacks in one address space -- and would couple the build to the
18
+ # distribution's protobuf version. Neither is acceptable for a redistributable binary, so the
19
+ # packages are not installed and the from-source path is the only one taken.
20
+ #
21
+ # What the gate now tracks is whether the toolchain has been verified to compile gRPC v1.65.5 and
22
+ # the Abseil it vendors. EL8 (gcc 8) is excluded because that combination is untested there, not
23
+ # because of a known incompatibility -- gRPC itself only asks for cxx_std_14. EL8 already opts out
24
+ # of OpenTelemetry below for related toolchain-age reasons. To add it, build the mock root and
25
+ # confirm before flipping this test.
26
+ #
27
+ # The gate matches any Amazon Linux; the only amzn build root is amazonlinux-2023. A tighter
28
+ # "amzn >= 2023" test is deliberately avoided: RPM's conditional expression parser treats the
29
+ # leading-zero form (02023) as octal, so that comparison is false on AL2023.
30
+ %if 0%{?fedora} > 0 || 0%{?rhel} >= 9 || 0%{?amzn}
31
+ %global grpc_supported 1
32
+ %endif
33
+
1
34
  Name: couchbase-cxx-client
2
35
  Summary: Couchbase C++ SDK
3
36
  Version: @COUCHBASE_CXX_CLIENT_PACKAGE_VERSION@
@@ -6,24 +39,26 @@ Vendor: Couchbase, Inc.
6
39
  Packager: Couchbase SDK Team <support@couchbase.com>
7
40
  License: ASL 2.0
8
41
  URL: https://docs.couchbase.com/cxx-sdk/current/hello-world/overview.html
9
- %if 0%{?suse_version} == 1500
10
- BuildRequires: gcc13, gcc13-c++
11
- %else
12
42
  BuildRequires: gcc, gcc-c++
13
- %endif
14
43
  BuildRequires: cmake >= 3.19
15
- %if 0%{?suse_version} > 0
16
- BuildRequires: libcurl-devel
17
- BuildRequires: protobuf-devel
18
- BuildRequires: nlohmann_json-devel
19
- %else
44
+ # OpenTelemetry's OTLP/HTTP exporter -- linked by cbc, not by the SDK library, which uses only the
45
+ # header-only opentelemetry_api -- needs libcurl and nlohmann-json. curl is built from source here
46
+ # and linked against this package's BoringSSL, so the platform's libcurl (and the OpenSSL behind it)
47
+ # stays out of the picture entirely; only nlohmann-json, which is header-only and therefore
48
+ # duplicates nothing, is taken from the distribution. Protobuf is deliberately absent: OpenTelemetry
49
+ # reuses the protobuf that the from-source gRPC builds.
20
50
  %if 0%{?amzn} == 0 && (0%{?rhel} >= 9 || 0%{?fedora} > 0)
21
- BuildRequires: curl-devel
22
- BuildRequires: protobuf-devel
23
51
  BuildRequires: json-devel
24
52
  %else
25
53
  # CentOS 8 / Rocky 8 - skip these packages (no OpenTelemetry)
26
54
  %endif
55
+ %if 0%{?grpc_supported}
56
+ # gRPC links zlib, and it is the one gRPC dependency taken from the system
57
+ # (gRPC_ZLIB_PROVIDER=package). zlib is a distribution shared library that other libraries loaded
58
+ # alongside this one already use, so bundling gRPC's copy would add a second one rather than remove
59
+ # a dependency. Previously satisfied only as a transitive dependency of grpc-devel, which is no
60
+ # longer installed.
61
+ BuildRequires: zlib-devel
27
62
  %endif
28
63
  Source0: @COUCHBASE_CXX_CLIENT_TARBALL_NAME@.tar.gz
29
64
 
@@ -36,39 +71,57 @@ Source0: @COUCHBASE_CXX_CLIENT_TARBALL_NAME@.tar.gz
36
71
  %description
37
72
  This is the client and protocol library for Couchbase project.
38
73
 
74
+ # No dependency on the library package: cbc links the static library, because it needs protobuf in
75
+ # its own right (through OpenTelemetry's OTLP exporter) and would otherwise load a second copy
76
+ # alongside the one inside libcouchbase_cxx_client.so.
39
77
  %package tools
40
78
  Summary: Couchbase C++ SDK, command line tools
41
- Requires: %{name}%{?_isa} = %{version}-%{release}
42
79
  %description -n %{name}-tools
43
80
  CLI tools from the Couchbase C++ SDK.
44
81
 
82
+ # zlib-devel because the installed CMake config for the static library emits find_dependency(ZLIB):
83
+ # the archive carries gRPC objects that call it, and BuildRequires do not reach consumers.
45
84
  %package devel
46
85
  Summary: Couchbase C++ SDK, development files
47
86
  Requires: %{name}%{?_isa} = %{version}-%{release}
87
+ Requires: zlib-devel
48
88
  %description devel
49
89
  Development files for the Couchbase C++ SDK.
50
90
 
91
+ %if 0%{?grpc_supported}
92
+ %package fit-performer
93
+ Summary: Couchbase C++ SDK, FIT performer
94
+ %description fit-performer
95
+ FIT integration-test performer built against the Couchbase C++ SDK. It is
96
+ packaged separately so that nothing depends on it automatically; install it on
97
+ demand to run integration verification against the production SDK packages.
98
+ %endif
99
+
51
100
  %prep
52
101
  %autosetup -p1 -n@COUCHBASE_CXX_CLIENT_TARBALL_NAME@
53
102
  %cmake \
54
103
  %if 0%{?rhel} == 8 || 0%{?rocky} == 8 || 0%{?ol} == 8
55
104
  -S "." -B "redhat-linux-build" \
56
- %endif
57
- %if 0%{?suse_version} == 1500
58
- -DCMAKE_C_COMPILER=gcc-13 \
59
- -DCMAKE_CXX_COMPILER=g++-13 \
60
105
  %endif
61
106
  -DBUILD_SHARED_LIBS=OFF \
62
107
  -DCOUCHBASE_CXX_CLIENT_INSTALL=ON \
63
108
  -DCOUCHBASE_CXX_CLIENT_STATIC_BORINGSSL=ON \
109
+ -DCOUCHBASE_CXX_CLIENT_PACKAGE_BUILD=ON \
64
110
  -DCOUCHBASE_CXX_CLIENT_BUILD_EXAMPLES=OFF \
65
111
  -DCOUCHBASE_CXX_CLIENT_BUILD_TESTS=OFF \
66
- %if 0%{?amzn} == 0 && (0%{?rhel} >= 9 || 0%{?fedora} > 0 || 0%{?suse_version} > 0)
112
+ %if 0%{?amzn} == 0 && (0%{?rhel} >= 9 || 0%{?fedora} > 0)
67
113
  -DCOUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY=ON \
68
114
  %else
69
115
  -DCOUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY=OFF \
70
116
  %endif
71
117
  -DCOUCHBASE_CXX_CLIENT_BUILD_TOOLS=ON \
118
+ %if 0%{?grpc_supported}
119
+ -DCOUCHBASE_CXX_CLIENT_BUILD_FIT_PERFORMER=ON \
120
+ -DCOUCHBASE_CXX_CLIENT_BUILD_COUCHBASE2=ON \
121
+ %else
122
+ -DCOUCHBASE_CXX_CLIENT_BUILD_FIT_PERFORMER=OFF \
123
+ -DCOUCHBASE_CXX_CLIENT_BUILD_COUCHBASE2=OFF \
124
+ %endif
72
125
  -DCOUCHBASE_CXX_CLIENT_BUILD_STATIC=ON \
73
126
  -DCOUCHBASE_CXX_CLIENT_BUILD_SHARED=ON
74
127
 
@@ -76,9 +129,6 @@ Development files for the Couchbase C++ SDK.
76
129
  %if 0%{?rhel} == 8 || 0%{?rocky} == 8 || 0%{?ol} == 8
77
130
  /usr/bin/cmake --build "redhat-linux-build" -j${RPM_BUILD_NCPUS} --verbose
78
131
  %else
79
- %if 0%{?suse_version} == 1500
80
- cd build
81
- %endif
82
132
  %cmake_build
83
133
  %endif
84
134
 
@@ -88,17 +138,33 @@ DESTDIR="%{buildroot}" /usr/bin/cmake --install "redhat-linux-build"
88
138
  %else
89
139
  %cmake_install
90
140
  %endif
91
- %if 0%{?suse_version} == 1500
92
- %__mv %{buildroot}%{_docdir}/../tao %{buildroot}%{_docdir}/tao
93
- %endif
141
+ # The vendored gRPC installs its headers, pkg-config files and etc/roots.pem regardless of
142
+ # gRPC_INSTALL. cmake/GrpcProtobuf.cmake redirects all of them under this one prefix so they can be
143
+ # dropped together; nothing packaged here comes from it.
144
+ rm -rf "%{buildroot}%{_prefix}/vendored-not-installed"
94
145
 
95
146
  %files
96
147
  %license %{_docdir}/couchbase*/LICENSE.txt
97
148
  %license %{_docdir}/tao/pegtl/LICENSE
98
149
  %license %{_docdir}/tao/json/LICENSE
150
+ # Notices for the dependencies compiled into this binary. Vendoring moved them out of distribution
151
+ # packages that carried their own terms, so the terms ship here instead. rpm permits several
152
+ # subpackages to own these paths because each stages the identical file from one buildroot.
153
+ %license %{_docdir}/couchbase*/third_party/*/*
99
154
  %{_libdir}/libcouchbase_cxx_client.so.*
100
155
 
156
+ # The licence files are repeated here rather than inherited: this package no longer requires the
157
+ # base package, and cbc carries the SDK and taocpp code inside the binary, so installing it alone
158
+ # must still install the terms that code ships under. rpm accepts the same path in several
159
+ # subpackages because every one of them stages the identical file out of the same buildroot.
101
160
  %files tools
161
+ %license %{_docdir}/couchbase*/LICENSE.txt
162
+ %license %{_docdir}/tao/pegtl/LICENSE
163
+ %license %{_docdir}/tao/json/LICENSE
164
+ # Notices for the dependencies compiled into this binary. Vendoring moved them out of distribution
165
+ # packages that carried their own terms, so the terms ship here instead. rpm permits several
166
+ # subpackages to own these paths because each stages the identical file from one buildroot.
167
+ %license %{_docdir}/couchbase*/third_party/*/*
102
168
  %{_bindir}/cbc
103
169
 
104
170
  %files devel
@@ -110,6 +176,18 @@ DESTDIR="%{buildroot}" /usr/bin/cmake --install "redhat-linux-build"
110
176
  %{_libdir}/pkgconfig/couchbase_cxx_client.pc
111
177
  %{_libdir}/pkgconfig/couchbase_cxx_client_static.pc
112
178
 
179
+ %if 0%{?grpc_supported}
180
+ %files fit-performer
181
+ %license %{_docdir}/couchbase*/LICENSE.txt
182
+ %license %{_docdir}/tao/pegtl/LICENSE
183
+ %license %{_docdir}/tao/json/LICENSE
184
+ # Notices for the dependencies compiled into this binary. Vendoring moved them out of distribution
185
+ # packages that carried their own terms, so the terms ship here instead. rpm permits several
186
+ # subpackages to own these paths because each stages the identical file from one buildroot.
187
+ %license %{_docdir}/couchbase*/third_party/*/*
188
+ %{_bindir}/fit_performer
189
+ %endif
190
+
113
191
  %changelog
114
192
  * @COUCHBASE_CXX_CLIENT_RPM_DATE@ Couchbase SDK Team <support@couchbase.com> - @COUCHBASE_CXX_CLIENT_PACKAGE_VERSION@-@COUCHBASE_CXX_CLIENT_PACKAGE_RELEASE@
115
193
  - Automated build.
@@ -1,9 +1,16 @@
1
1
  @PACKAGE_INIT@
2
2
 
3
+ include(CMakeFindDependencyMacro)
4
+ @couchbase_cxx_client_static_FIND_DEPENDENCIES@
5
+
3
6
  add_library(couchbase_cxx_client::couchbase_cxx_client_static STATIC IMPORTED GLOBAL)
4
7
 
8
+ # The archive holds every vendored dependency, but not the platform libraries their objects still
9
+ # reference; see cmake/Packaging.cmake for which and why.
5
10
  set_target_properties(couchbase_cxx_client::couchbase_cxx_client_static PROPERTIES
6
11
  IMPORTED_LOCATION "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/libcouchbase_cxx_client_static.a"
12
+ INTERFACE_LINK_LIBRARIES "@couchbase_cxx_client_static_LINK_LIBRARIES@"
13
+ INTERFACE_LINK_OPTIONS "@couchbase_cxx_client_static_LINK_OPTIONS@"
7
14
  )
8
15
 
9
16
  set(COUCHBASE_CXX_CLIENT_STATIC_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@")
@@ -7,4 +7,6 @@ Name: couchbase_cxx_client_static-@COUCHBASE_CXX_CLIENT_PKGCONFIG_VERSION@
7
7
  Description: Couchbase C++ SDK (static)
8
8
  Version: @COUCHBASE_CXX_CLIENT_PKGCONFIG_VERSION@
9
9
  Libs: -L${libdir} -lcouchbase_cxx_client_static
10
+ Requires.private: @couchbase_cxx_client_static_PC_REQUIRES_PRIVATE@
11
+ Libs.private: @couchbase_cxx_client_static_PC_LIBS_PRIVATE@
10
12
  Cflags: -I${includedir}
@@ -0,0 +1,58 @@
1
+ function(GRPC_GENERATE_CPP SRCS HDRS DEST)
2
+ if(TARGET gRPC::grpc_cpp_plugin)
3
+ set(GRPC_CPP_PLUGIN $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
4
+ else()
5
+ find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin)
6
+ endif()
7
+ if(NOT ARGN)
8
+ message(SEND_ERROR "Error: GRPC_GENERATE_CPP() called without any proto files")
9
+ return()
10
+ endif()
11
+
12
+ if(GRPC_GENERATE_CPP_APPEND_PATH)
13
+ # Create an include path for each file specified
14
+ foreach(FIL ${ARGN})
15
+ get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
16
+ get_filename_component(ABS_PATH ${ABS_FIL} PATH)
17
+ list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
18
+ if(${_contains_already} EQUAL -1)
19
+ list(APPEND _protobuf_include_path -I ${ABS_PATH})
20
+ endif()
21
+ endforeach()
22
+ else()
23
+ set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
24
+ endif()
25
+
26
+ if(DEFINED PROTOBUF_IMPORT_DIRS)
27
+ foreach(DIR ${PROTOBUF_IMPORT_DIRS})
28
+ get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
29
+ list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
30
+ if(${_contains_already} EQUAL -1)
31
+ list(APPEND _protobuf_include_path -I ${ABS_PATH})
32
+ endif()
33
+ endforeach()
34
+ endif()
35
+
36
+ set(${SRCS})
37
+ set(${HDRS})
38
+ foreach(FIL ${ARGN})
39
+ get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
40
+ get_filename_component(FIL_WLE ${FIL} NAME_WLE)
41
+
42
+ list(APPEND ${SRCS} "${DEST}/${FIL_WLE}.grpc.pb.cc")
43
+ list(APPEND ${HDRS} "${DEST}/${FIL_WLE}.grpc.pb.h")
44
+
45
+ add_custom_command(
46
+ OUTPUT "${DEST}/${FIL_WLE}.grpc.pb.cc"
47
+ "${DEST}/${FIL_WLE}.grpc.pb.h"
48
+ COMMAND protobuf::protoc
49
+ ARGS --grpc_out ${DEST} ${_protobuf_include_path} --plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN} ${ABS_FIL} --experimental_allow_proto3_optional
50
+ DEPENDS ${ABS_FIL} protobuf::protoc gRPC::grpc_cpp_plugin
51
+ COMMENT "Running C++ gRPC compiler (with --experimental_allow_proto3_optional) on ${FIL}"
52
+ VERBATIM )
53
+ endforeach()
54
+
55
+ set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
56
+ set(${SRCS} ${${SRCS}} PARENT_SCOPE)
57
+ set(${HDRS} ${${HDRS}} PARENT_SCOPE)
58
+ endfunction()
@@ -0,0 +1,69 @@
1
+ #
2
+ # Generates C++ sources from the .proto files
3
+ #
4
+ # protobuf_generate_cpp (<SRCS> <HDRS> <DEST> [<ARGN>...])
5
+ #
6
+ # SRCS - variable to define with autogenerated source files
7
+ # HDRS - variable to define with autogenerated header files
8
+ # DEST - directory where the source files will be created
9
+ # ARGN - .proto files
10
+ #
11
+ function(PROTOBUF_GENERATE_CPP_OPTIONAL SRCS HDRS DEST)
12
+ if(NOT ARGN)
13
+ message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
14
+ return()
15
+ endif()
16
+
17
+ if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
18
+ # Create an include path for each file specified
19
+ foreach(FIL ${ARGN})
20
+ get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
21
+ get_filename_component(ABS_PATH ${ABS_FIL} PATH)
22
+ list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
23
+ if(${_contains_already} EQUAL -1)
24
+ list(APPEND _protobuf_include_path -I ${ABS_PATH})
25
+ endif()
26
+ endforeach()
27
+ else()
28
+ set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
29
+ endif()
30
+
31
+ if(DEFINED PROTOBUF_IMPORT_DIRS)
32
+ foreach(DIR ${PROTOBUF_IMPORT_DIRS})
33
+ get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
34
+ list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
35
+ if(${_contains_already} EQUAL -1)
36
+ list(APPEND _protobuf_include_path -I ${ABS_PATH})
37
+ endif()
38
+ endforeach()
39
+ endif()
40
+
41
+ set(${SRCS})
42
+ set(${HDRS})
43
+ foreach(FIL ${ARGN})
44
+ get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
45
+ get_filename_component(FIL_WLE ${FIL} NAME_WLE)
46
+
47
+ list(APPEND ${SRCS} "${DEST}/${FIL_WLE}.pb.cc")
48
+ list(APPEND ${HDRS} "${DEST}/${FIL_WLE}.pb.h")
49
+
50
+ add_custom_command(
51
+ OUTPUT "${DEST}/${FIL_WLE}.pb.cc"
52
+ "${DEST}/${FIL_WLE}.pb.h"
53
+ COMMAND protobuf::protoc
54
+ ARGS --cpp_out ${DEST} ${_protobuf_include_path} ${ABS_FIL} --experimental_allow_proto3_optional
55
+ DEPENDS ${ABS_FIL} protobuf::protoc
56
+ COMMENT "Running C++ protocol buffer compiler (with --experimental_allow_proto3_optional) on ${FIL}"
57
+ VERBATIM )
58
+ endforeach()
59
+
60
+ set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
61
+ set(${SRCS} ${${SRCS}} PARENT_SCOPE)
62
+ set(${HDRS} ${${HDRS}} PARENT_SCOPE)
63
+ endfunction()
64
+
65
+ # By default have PROTOBUF_GENERATE_CPP macro pass -I to protoc
66
+ # for each directory where a proto file is referenced.
67
+ if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
68
+ set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
69
+ endif()
@@ -0,0 +1,25 @@
1
+ # Fail loudly, at the first step of any package build, if this is not a git
2
+ # checkout. The source manifest is generated with `git ls-files`; a bare
3
+ # jujutsu (jj) workspace has no .git, which would otherwise produce an empty
4
+ # manifest and a silently broken (empty) source tarball.
5
+ # Run via: cmake -P require-git-checkout.cmake (cwd = source tree)
6
+ # Distinguish "git missing" from "not a work tree" so each fails with an accurate message.
7
+ find_program(_git_executable git)
8
+ if(NOT _git_executable)
9
+ message(FATAL_ERROR
10
+ "git was not found in PATH. Package builds generate the source manifest with 'git ls-files', "
11
+ "so git must be installed.")
12
+ endif()
13
+
14
+ execute_process(
15
+ COMMAND "${_git_executable}" rev-parse --is-inside-work-tree
16
+ RESULT_VARIABLE _git_result
17
+ OUTPUT_QUIET
18
+ ERROR_QUIET)
19
+ if(NOT _git_result EQUAL 0)
20
+ message(FATAL_ERROR
21
+ "Package builds require a git checkout: the source manifest is generated with "
22
+ "'git ls-files'. If you use jujutsu (jj), build packages from the co-located git "
23
+ "checkout (the workspace that has .git) or a git worktree -- not a bare jj workspace, "
24
+ "which has no .git.")
25
+ endif()
@@ -27,6 +27,7 @@ cli11/*/cli11/single-include/CMakeLists.txt
27
27
  cli11/*/cli11/src/*
28
28
  cli11/*/cli11/src/**/*
29
29
  cpm/*.cmake
30
+ fit_protocol/*/fit_protocol/operational/*.proto
30
31
  fmt/*/fmt/CMakeLists.txt
31
32
  fmt/*/fmt/ChangeLog.md
32
33
  fmt/*/fmt/LICENSE
@@ -100,3 +101,51 @@ opentelemetry/*/opentelemetry/**/LICENSE
100
101
  opentelemetry/*/opentelemetry/**/*.h
101
102
  opentelemetry/*/opentelemetry/**/*.cc
102
103
  opentelemetry/*/opentelemetry/third_party/opentelemetry-proto/opentelemetry/proto/**/*.proto
104
+ grpc/*/grpc/CMakeLists.txt
105
+ grpc/*/grpc/LICENSE
106
+ grpc/*/grpc/NOTICE.txt
107
+ grpc/*/grpc/**/CMakeLists.txt
108
+ grpc/*/grpc/**/LICENSE*
109
+ grpc/*/grpc/**/*.c
110
+ grpc/*/grpc/**/*.cc
111
+ grpc/*/grpc/**/*.h
112
+ grpc/*/grpc/**/*.hpp
113
+ grpc/*/grpc/**/*.h.in
114
+ grpc/*/grpc/**/*.inc
115
+ grpc/*/grpc/**/*.proto
116
+ grpc/*/grpc/**/*.cmake
117
+ grpc/*/grpc/**/*.cmake.in
118
+ grpc/*/grpc/**/*.pc.in
119
+ grpc/*/grpc/**/*.def
120
+ grpc/*/grpc/**/*.map
121
+ grpc/*/grpc/**/version.json
122
+ grpc/*/grpc/**/README*
123
+ grpc/*/grpc/etc/*.pem
124
+ grpc/*/grpc/**/*.cmakein
125
+ grpc/*/grpc/**/*.rc
126
+ grpc/*/grpc/**/*.rc.in
127
+ curl/*/curl/CMakeLists.txt
128
+ curl/*/curl/COPYING*
129
+ curl/*/curl/**/CMakeLists.txt
130
+ curl/*/curl/CMake/*
131
+ curl/*/curl/CMake/**/*
132
+ # These are `find -wholename` patterns, in which `**/` still requires an intervening path segment:
133
+ # it matches lib/vtls/openssl.c but NOT lib/urldata.c or the curl-config.in at the top of the tree.
134
+ # Each extension therefore needs both spellings.
135
+ curl/*/curl/*.c
136
+ curl/*/curl/*.h
137
+ curl/*/curl/*.in
138
+ curl/*/curl/*.inc
139
+ curl/*/curl/**/*.c
140
+ curl/*/curl/**/*.h
141
+ curl/*/curl/**/*.in
142
+ curl/*/curl/**/*.inc
143
+ curl/*/curl/*.rc
144
+ curl/*/curl/**/*.rc
145
+ curl/*/curl/**/*.cmake
146
+ # Read by the install rules of curl from its source tree, so a tarball without it fails the install
147
+ # step of every package build even though nothing links it.
148
+ curl/*/curl/scripts/mk-ca-bundle.pl
149
+ protostellar/*/protostellar/**/*.proto
150
+ api_common_protos/*/api_common_protos/google/rpc/*.proto
151
+ api_common_protos/*/api_common_protos/LICENSE*
@@ -132,11 +132,7 @@ public:
132
132
 
133
133
  auto free_form_http_request(const http_request& request,
134
134
  free_form_http_request_callback&& callback)
135
- #ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
136
- -> tl::expected<std::shared_ptr<pending_operation>, error_union>
137
- #else
138
135
  -> tl::expected<std::shared_ptr<pending_operation>, std::error_code>
139
- #endif
140
136
  {
141
137
  return cluster_agent_.free_form_http_request(request, std::move(callback));
142
138
  }
@@ -225,11 +221,7 @@ agent_group::search_query(const search_query_options& options, search_query_call
225
221
  auto
226
222
  agent_group::free_form_http_request(const http_request& request,
227
223
  free_form_http_request_callback&& callback)
228
- #ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
229
- -> tl::expected<std::shared_ptr<pending_operation>, error_union>
230
- #else
231
224
  -> tl::expected<std::shared_ptr<pending_operation>, std::error_code>
232
- #endif
233
225
  {
234
226
  return impl_->free_form_http_request(request, std::move(callback));
235
227
  }
@@ -70,11 +70,7 @@ public:
70
70
 
71
71
  auto free_form_http_request(const http_request& request,
72
72
  free_form_http_request_callback&& callback)
73
- #ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
74
- -> tl::expected<std::shared_ptr<pending_operation>, error_union>;
75
- #else
76
73
  -> tl::expected<std::shared_ptr<pending_operation>, std::error_code>;
77
- #endif
78
74
 
79
75
  auto wait_until_ready(std::chrono::milliseconds timeout,
80
76
  const wait_until_ready_options& options,