couchbase 3.7.0 → 3.8.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 (349) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/ext/CMakeLists.txt +4 -1
  4. data/ext/cache/extconf_include.rb +4 -3
  5. data/ext/cache/mozilla-ca-bundle.crt +66 -665
  6. data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
  7. data/ext/couchbase/CMakeLists.txt +26 -11
  8. data/ext/couchbase/cmake/APKBUILD.in +17 -1
  9. data/ext/couchbase/cmake/Bundler.cmake +9 -1
  10. data/ext/couchbase/cmake/Cache.cmake +48 -19
  11. data/ext/couchbase/cmake/CompilerOptions.cmake +3 -1
  12. data/ext/couchbase/cmake/OpenSSL.cmake +10 -2
  13. data/ext/couchbase/cmake/Packaging.cmake +48 -8
  14. data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +43 -1
  15. data/ext/couchbase/cmake/build_config.hxx.in +2 -0
  16. data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +18 -0
  17. data/ext/couchbase/cmake/tarball_glob.txt +10 -0
  18. data/ext/couchbase/core/app_telemetry_meter.cxx +1 -0
  19. data/ext/couchbase/core/app_telemetry_reporter.cxx +45 -43
  20. data/ext/couchbase/core/app_telemetry_reporter.hxx +4 -3
  21. data/ext/couchbase/core/bucket.cxx +128 -13
  22. data/ext/couchbase/core/bucket.hxx +12 -2
  23. data/ext/couchbase/core/cluster.cxx +304 -152
  24. data/ext/couchbase/core/cluster.hxx +32 -0
  25. data/ext/couchbase/core/cluster_credentials.cxx +25 -0
  26. data/ext/couchbase/core/cluster_credentials.hxx +5 -0
  27. data/ext/couchbase/core/cluster_label_listener.cxx +72 -0
  28. data/ext/couchbase/core/cluster_label_listener.hxx +46 -0
  29. data/ext/couchbase/core/cluster_options.hxx +4 -0
  30. data/ext/couchbase/core/deprecation_utils.hxx +26 -0
  31. data/ext/couchbase/core/error.hxx +27 -0
  32. data/ext/couchbase/core/error_context/base_error_context.hxx +32 -0
  33. data/ext/couchbase/core/error_context/key_value.cxx +1 -0
  34. data/ext/couchbase/core/error_context/key_value.hxx +23 -0
  35. data/ext/couchbase/core/error_context/key_value_error_context.hxx +35 -0
  36. data/ext/couchbase/core/error_context/subdocument_error_context.hxx +41 -0
  37. data/ext/couchbase/core/free_form_http_request.hxx +0 -2
  38. data/ext/couchbase/core/http_component.cxx +12 -48
  39. data/ext/couchbase/core/impl/analytics.cxx +3 -2
  40. data/ext/couchbase/core/impl/analytics.hxx +2 -1
  41. data/ext/couchbase/core/impl/analytics_index_manager.cxx +249 -137
  42. data/ext/couchbase/core/impl/binary_collection.cxx +239 -128
  43. data/ext/couchbase/core/impl/bucket_manager.cxx +87 -35
  44. data/ext/couchbase/core/impl/collection.cxx +914 -372
  45. data/ext/couchbase/core/impl/collection_manager.cxx +89 -49
  46. data/ext/couchbase/core/impl/dns_srv_tracker.cxx +4 -4
  47. data/ext/couchbase/core/impl/error.cxx +49 -17
  48. data/ext/couchbase/core/impl/error.hxx +15 -10
  49. data/ext/couchbase/core/impl/get_all_replicas.hxx +1 -1
  50. data/ext/couchbase/core/impl/get_any_replica.hxx +2 -1
  51. data/ext/couchbase/core/impl/get_replica.hxx +2 -0
  52. data/ext/couchbase/core/impl/invoke_with_node_id.hxx +44 -0
  53. data/ext/couchbase/core/impl/lookup_in_replica.hxx +1 -1
  54. data/ext/couchbase/core/impl/node_id.cxx +110 -0
  55. data/ext/couchbase/core/impl/node_id.hxx +40 -0
  56. data/ext/couchbase/core/impl/observability_recorder.cxx +161 -0
  57. data/ext/couchbase/core/impl/observability_recorder.hxx +77 -0
  58. data/ext/couchbase/core/impl/observe_seqno.hxx +2 -0
  59. data/ext/couchbase/core/impl/public_bucket.cxx +31 -7
  60. data/ext/couchbase/core/impl/public_cluster.cxx +107 -19
  61. data/ext/couchbase/core/impl/query.cxx +6 -3
  62. data/ext/couchbase/core/impl/query.hxx +3 -1
  63. data/ext/couchbase/core/impl/query_index_manager.cxx +267 -102
  64. data/ext/couchbase/core/impl/scope.cxx +53 -11
  65. data/ext/couchbase/core/impl/search.cxx +8 -4
  66. data/ext/couchbase/core/impl/search.hxx +6 -2
  67. data/ext/couchbase/core/impl/search_index_manager.cxx +131 -41
  68. data/ext/couchbase/core/impl/with_cancellation.hxx +75 -0
  69. data/ext/couchbase/core/io/config_tracker.cxx +9 -9
  70. data/ext/couchbase/core/io/config_tracker.hxx +2 -1
  71. data/ext/couchbase/core/io/http_command.hxx +98 -49
  72. data/ext/couchbase/core/io/http_context.hxx +2 -0
  73. data/ext/couchbase/core/io/http_session.cxx +23 -10
  74. data/ext/couchbase/core/io/http_session.hxx +17 -9
  75. data/ext/couchbase/core/io/http_session_manager.hxx +245 -270
  76. data/ext/couchbase/core/io/http_traits.hxx +0 -7
  77. data/ext/couchbase/core/io/mcbp_command.hxx +123 -44
  78. data/ext/couchbase/core/io/mcbp_session.cxx +251 -26
  79. data/ext/couchbase/core/io/mcbp_session.hxx +9 -1
  80. data/ext/couchbase/core/io/mcbp_traits.hxx +0 -8
  81. data/ext/couchbase/core/io/streams.cxx +3 -3
  82. data/ext/couchbase/core/io/streams.hxx +3 -2
  83. data/ext/couchbase/core/meta/features.hxx +15 -0
  84. data/ext/couchbase/core/meta/version.cxx +13 -0
  85. data/ext/couchbase/core/meta/version.hxx +3 -0
  86. data/ext/couchbase/core/metrics/constants.hxx +23 -0
  87. data/ext/couchbase/core/metrics/logging_meter.cxx +5 -5
  88. data/ext/couchbase/core/metrics/meter_wrapper.cxx +65 -63
  89. data/ext/couchbase/core/metrics/meter_wrapper.hxx +12 -10
  90. data/ext/couchbase/core/operations/document_analytics.hxx +0 -5
  91. data/ext/couchbase/core/operations/document_append.hxx +0 -4
  92. data/ext/couchbase/core/operations/document_decrement.hxx +0 -5
  93. data/ext/couchbase/core/operations/document_exists.hxx +0 -7
  94. data/ext/couchbase/core/operations/document_get.hxx +0 -7
  95. data/ext/couchbase/core/operations/document_get_all_replicas.hxx +89 -29
  96. data/ext/couchbase/core/operations/document_get_and_lock.hxx +0 -9
  97. data/ext/couchbase/core/operations/document_get_and_touch.hxx +0 -9
  98. data/ext/couchbase/core/operations/document_get_any_replica.hxx +83 -2
  99. data/ext/couchbase/core/operations/document_get_projected.cxx +3 -4
  100. data/ext/couchbase/core/operations/document_get_projected.hxx +0 -9
  101. data/ext/couchbase/core/operations/document_increment.hxx +0 -5
  102. data/ext/couchbase/core/operations/document_insert.hxx +0 -4
  103. data/ext/couchbase/core/operations/document_lookup_in.hxx +0 -9
  104. data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +50 -4
  105. data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +121 -43
  106. data/ext/couchbase/core/operations/document_mutate_in.hxx +0 -5
  107. data/ext/couchbase/core/operations/document_prepend.hxx +0 -4
  108. data/ext/couchbase/core/operations/document_query.cxx +12 -12
  109. data/ext/couchbase/core/operations/document_query.hxx +0 -4
  110. data/ext/couchbase/core/operations/document_remove.hxx +0 -4
  111. data/ext/couchbase/core/operations/document_replace.hxx +0 -4
  112. data/ext/couchbase/core/operations/document_search.hxx +0 -7
  113. data/ext/couchbase/core/operations/document_touch.hxx +0 -7
  114. data/ext/couchbase/core/operations/document_unlock.hxx +0 -6
  115. data/ext/couchbase/core/operations/document_upsert.hxx +0 -4
  116. data/ext/couchbase/core/operations/document_view.cxx +2 -0
  117. data/ext/couchbase/core/operations/document_view.hxx +10 -13
  118. data/ext/couchbase/core/operations/http_noop.hxx +2 -0
  119. data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +2 -0
  120. data/ext/couchbase/core/operations/management/analytics_dataset_drop.hxx +2 -0
  121. data/ext/couchbase/core/operations/management/analytics_dataset_get_all.hxx +2 -0
  122. data/ext/couchbase/core/operations/management/analytics_dataverse_create.hxx +2 -0
  123. data/ext/couchbase/core/operations/management/analytics_dataverse_drop.hxx +2 -0
  124. data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.hxx +2 -0
  125. data/ext/couchbase/core/operations/management/analytics_index_create.hxx +2 -0
  126. data/ext/couchbase/core/operations/management/analytics_index_drop.hxx +2 -0
  127. data/ext/couchbase/core/operations/management/analytics_index_get_all.hxx +2 -0
  128. data/ext/couchbase/core/operations/management/analytics_link_connect.hxx +2 -0
  129. data/ext/couchbase/core/operations/management/analytics_link_create.hxx +2 -0
  130. data/ext/couchbase/core/operations/management/analytics_link_disconnect.hxx +2 -0
  131. data/ext/couchbase/core/operations/management/analytics_link_drop.hxx +2 -0
  132. data/ext/couchbase/core/operations/management/analytics_link_get_all.hxx +2 -0
  133. data/ext/couchbase/core/operations/management/analytics_link_replace.hxx +2 -0
  134. data/ext/couchbase/core/operations/management/bucket_create.hxx +2 -0
  135. data/ext/couchbase/core/operations/management/bucket_describe.hxx +2 -0
  136. data/ext/couchbase/core/operations/management/bucket_drop.hxx +2 -0
  137. data/ext/couchbase/core/operations/management/bucket_flush.hxx +2 -0
  138. data/ext/couchbase/core/operations/management/bucket_get.hxx +2 -0
  139. data/ext/couchbase/core/operations/management/bucket_get_all.hxx +2 -0
  140. data/ext/couchbase/core/operations/management/bucket_update.hxx +2 -0
  141. data/ext/couchbase/core/operations/management/change_password.hxx +2 -0
  142. data/ext/couchbase/core/operations/management/cluster_describe.hxx +2 -0
  143. data/ext/couchbase/core/operations/management/cluster_developer_preview_enable.hxx +2 -0
  144. data/ext/couchbase/core/operations/management/collection_create.cxx +11 -11
  145. data/ext/couchbase/core/operations/management/collection_create.hxx +2 -0
  146. data/ext/couchbase/core/operations/management/collection_drop.cxx +11 -11
  147. data/ext/couchbase/core/operations/management/collection_drop.hxx +2 -0
  148. data/ext/couchbase/core/operations/management/collection_update.cxx +11 -11
  149. data/ext/couchbase/core/operations/management/collection_update.hxx +2 -0
  150. data/ext/couchbase/core/operations/management/collections_manifest_get.hxx +2 -0
  151. data/ext/couchbase/core/operations/management/error_utils.cxx +13 -7
  152. data/ext/couchbase/core/operations/management/eventing_deploy_function.hxx +2 -0
  153. data/ext/couchbase/core/operations/management/eventing_drop_function.hxx +2 -0
  154. data/ext/couchbase/core/operations/management/eventing_get_all_functions.hxx +2 -0
  155. data/ext/couchbase/core/operations/management/eventing_get_function.hxx +2 -0
  156. data/ext/couchbase/core/operations/management/eventing_get_status.hxx +2 -0
  157. data/ext/couchbase/core/operations/management/eventing_pause_function.hxx +2 -0
  158. data/ext/couchbase/core/operations/management/eventing_resume_function.hxx +2 -0
  159. data/ext/couchbase/core/operations/management/eventing_undeploy_function.hxx +2 -0
  160. data/ext/couchbase/core/operations/management/eventing_upsert_function.hxx +2 -0
  161. data/ext/couchbase/core/operations/management/freeform.hxx +2 -0
  162. data/ext/couchbase/core/operations/management/group_drop.hxx +2 -0
  163. data/ext/couchbase/core/operations/management/group_get.hxx +2 -0
  164. data/ext/couchbase/core/operations/management/group_get_all.hxx +2 -0
  165. data/ext/couchbase/core/operations/management/group_upsert.hxx +2 -0
  166. data/ext/couchbase/core/operations/management/query_index_build.hxx +2 -0
  167. data/ext/couchbase/core/operations/management/query_index_build_deferred.hxx +68 -30
  168. data/ext/couchbase/core/operations/management/query_index_create.cxx +5 -4
  169. data/ext/couchbase/core/operations/management/query_index_create.hxx +2 -0
  170. data/ext/couchbase/core/operations/management/query_index_drop.cxx +7 -6
  171. data/ext/couchbase/core/operations/management/query_index_drop.hxx +2 -0
  172. data/ext/couchbase/core/operations/management/query_index_get_all.hxx +4 -3
  173. data/ext/couchbase/core/operations/management/query_index_get_all_deferred.hxx +2 -1
  174. data/ext/couchbase/core/operations/management/role_get_all.hxx +2 -0
  175. data/ext/couchbase/core/operations/management/scope_create.cxx +12 -13
  176. data/ext/couchbase/core/operations/management/scope_create.hxx +2 -0
  177. data/ext/couchbase/core/operations/management/scope_drop.cxx +8 -9
  178. data/ext/couchbase/core/operations/management/scope_drop.hxx +2 -0
  179. data/ext/couchbase/core/operations/management/scope_get_all.hxx +2 -0
  180. data/ext/couchbase/core/operations/management/search_get_stats.hxx +2 -0
  181. data/ext/couchbase/core/operations/management/search_index_analyze_document.hxx +2 -0
  182. data/ext/couchbase/core/operations/management/search_index_control_ingest.hxx +2 -0
  183. data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.hxx +2 -0
  184. data/ext/couchbase/core/operations/management/search_index_control_query.hxx +2 -0
  185. data/ext/couchbase/core/operations/management/search_index_drop.hxx +2 -0
  186. data/ext/couchbase/core/operations/management/search_index_get.hxx +2 -0
  187. data/ext/couchbase/core/operations/management/search_index_get_all.hxx +2 -0
  188. data/ext/couchbase/core/operations/management/search_index_get_documents_count.hxx +2 -0
  189. data/ext/couchbase/core/operations/management/search_index_get_stats.hxx +2 -0
  190. data/ext/couchbase/core/operations/management/search_index_upsert.hxx +2 -0
  191. data/ext/couchbase/core/operations/management/user_drop.hxx +2 -0
  192. data/ext/couchbase/core/operations/management/user_get.hxx +2 -0
  193. data/ext/couchbase/core/operations/management/user_get_all.hxx +2 -0
  194. data/ext/couchbase/core/operations/management/user_upsert.hxx +2 -0
  195. data/ext/couchbase/core/operations/management/view_index_drop.hxx +2 -0
  196. data/ext/couchbase/core/operations/management/view_index_get.hxx +2 -0
  197. data/ext/couchbase/core/operations/management/view_index_get_all.hxx +2 -0
  198. data/ext/couchbase/core/operations/management/view_index_upsert.hxx +2 -0
  199. data/ext/couchbase/core/operations/operation_traits.hxx +6 -0
  200. data/ext/couchbase/core/operations.hxx +0 -1
  201. data/ext/couchbase/core/operations_fwd.hxx +8 -0
  202. data/ext/couchbase/core/origin.cxx +67 -12
  203. data/ext/couchbase/core/origin.hxx +13 -8
  204. data/ext/couchbase/core/orphan_reporter.cxx +164 -0
  205. data/ext/couchbase/core/orphan_reporter.hxx +65 -0
  206. data/ext/couchbase/core/sasl/CMakeLists.txt +1 -0
  207. data/ext/couchbase/core/sasl/client.cc +6 -0
  208. data/ext/couchbase/core/sasl/mechanism.cc +2 -1
  209. data/ext/couchbase/core/sasl/mechanism.h +2 -1
  210. data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.cc +41 -0
  211. data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.h +47 -0
  212. data/ext/couchbase/core/tls_context_provider.cxx +44 -0
  213. data/ext/couchbase/core/tls_context_provider.hxx +44 -0
  214. data/ext/couchbase/core/topology/configuration.cxx +21 -0
  215. data/ext/couchbase/core/topology/configuration.hxx +28 -0
  216. data/ext/couchbase/core/tracing/attribute_helpers.hxx +45 -0
  217. data/ext/couchbase/core/tracing/constants.hxx +148 -68
  218. data/ext/couchbase/core/tracing/threshold_logging_options.hxx +0 -3
  219. data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +122 -170
  220. data/ext/couchbase/core/tracing/tracer_wrapper.cxx +17 -24
  221. data/ext/couchbase/core/tracing/tracer_wrapper.hxx +8 -10
  222. data/ext/couchbase/core/tracing/wrapper_sdk_tracer.cxx +114 -0
  223. data/ext/couchbase/core/tracing/wrapper_sdk_tracer.hxx +85 -0
  224. data/ext/couchbase/core/transactions/attempt_context_impl.cxx +16 -14
  225. data/ext/couchbase/core/transactions/attempt_context_impl.hxx +4 -4
  226. data/ext/couchbase/core/transactions/transactions.cxx +1 -1
  227. data/ext/couchbase/core/transactions/transactions_cleanup.cxx +1 -2
  228. data/ext/couchbase/core/utils/byteswap.hxx +12 -0
  229. data/ext/couchbase/core/utils/concurrent_fixed_priority_queue.hxx +102 -0
  230. data/ext/couchbase/core/utils/connection_string.cxx +2 -0
  231. data/ext/couchbase/core/utils/contains_string.cxx +61 -0
  232. data/ext/couchbase/core/utils/contains_string.hxx +26 -0
  233. data/ext/couchbase/couchbase/certificate_authenticator.hxx +1 -0
  234. data/ext/couchbase/couchbase/cluster.hxx +47 -0
  235. data/ext/couchbase/couchbase/cluster_options.hxx +16 -0
  236. data/ext/couchbase/couchbase/collection.hxx +133 -15
  237. data/ext/couchbase/couchbase/error.hxx +16 -0
  238. data/ext/couchbase/couchbase/error_codes.hxx +48 -48
  239. data/ext/couchbase/couchbase/jwt_authenticator.hxx +52 -0
  240. data/ext/couchbase/couchbase/metrics/meter.hxx +2 -1
  241. data/ext/couchbase/couchbase/metrics/otel_meter.hxx +75 -80
  242. data/ext/couchbase/couchbase/network_options.hxx +19 -0
  243. data/ext/couchbase/couchbase/node_id.hxx +123 -0
  244. data/ext/couchbase/couchbase/node_id_for_options.hxx +61 -0
  245. data/ext/couchbase/couchbase/node_ids_options.hxx +62 -0
  246. data/ext/couchbase/couchbase/password_authenticator.hxx +1 -0
  247. data/ext/couchbase/couchbase/result.hxx +42 -0
  248. data/ext/couchbase/couchbase/tracing/otel_tracer.hxx +15 -17
  249. data/ext/couchbase/couchbase/tracing/request_span.hxx +2 -2
  250. data/ext/couchbase.cxx +4 -0
  251. data/ext/extconf.rb +1 -0
  252. data/ext/rcb_analytics.cxx +157 -47
  253. data/ext/rcb_backend.cxx +118 -71
  254. data/ext/rcb_buckets.cxx +39 -16
  255. data/ext/rcb_collections.cxx +36 -12
  256. data/ext/rcb_crud.cxx +589 -294
  257. data/ext/rcb_hdr_histogram.cxx +219 -0
  258. data/ext/rcb_hdr_histogram.hxx +28 -0
  259. data/ext/rcb_logger.cxx +15 -17
  260. data/ext/rcb_multi.cxx +142 -59
  261. data/ext/rcb_observability.cxx +132 -0
  262. data/ext/rcb_observability.hxx +49 -0
  263. data/ext/rcb_query.cxx +77 -27
  264. data/ext/rcb_search.cxx +92 -31
  265. data/ext/rcb_users.cxx +69 -26
  266. data/ext/rcb_utils.cxx +91 -0
  267. data/ext/rcb_utils.hxx +141 -168
  268. data/ext/rcb_views.cxx +36 -12
  269. data/lib/active_support/cache/couchbase_store.rb +6 -6
  270. data/lib/couchbase/authenticator.rb +14 -0
  271. data/lib/couchbase/binary_collection.rb +37 -22
  272. data/lib/couchbase/bucket.rb +46 -31
  273. data/lib/couchbase/cluster.rb +146 -61
  274. data/lib/couchbase/collection.rb +257 -186
  275. data/lib/couchbase/datastructures/couchbase_list.rb +82 -50
  276. data/lib/couchbase/datastructures/couchbase_map.rb +87 -50
  277. data/lib/couchbase/datastructures/couchbase_queue.rb +65 -38
  278. data/lib/couchbase/datastructures/couchbase_set.rb +58 -41
  279. data/lib/couchbase/deprecations.rb +1 -1
  280. data/lib/couchbase/diagnostics.rb +8 -8
  281. data/lib/couchbase/errors.rb +7 -1
  282. data/lib/couchbase/json_transcoder.rb +1 -1
  283. data/lib/couchbase/management/analytics_index_manager.rb +90 -59
  284. data/lib/couchbase/management/bucket_manager.rb +73 -45
  285. data/lib/couchbase/management/collection_manager.rb +86 -43
  286. data/lib/couchbase/management/collection_query_index_manager.rb +56 -33
  287. data/lib/couchbase/management/query_index_manager.rb +88 -36
  288. data/lib/couchbase/management/scope_search_index_manager.rb +119 -52
  289. data/lib/couchbase/management/search_index_manager.rb +401 -178
  290. data/lib/couchbase/management/user_manager.rb +343 -174
  291. data/lib/couchbase/management/view_index_manager.rb +166 -73
  292. data/lib/couchbase/metrics/logging_meter.rb +108 -0
  293. data/lib/couchbase/metrics/logging_value_recorder.rb +50 -0
  294. data/lib/couchbase/metrics/meter.rb +27 -0
  295. data/lib/couchbase/metrics/noop_meter.rb +30 -0
  296. data/lib/couchbase/metrics/noop_value_recorder.rb +27 -0
  297. data/lib/couchbase/metrics/value_recorder.rb +25 -0
  298. data/lib/couchbase/options.rb +71 -5
  299. data/lib/couchbase/protostellar/client.rb +0 -2
  300. data/lib/couchbase/protostellar/cluster.rb +7 -0
  301. data/lib/couchbase/protostellar/generated/admin/analytics/v1/analytics_pb.rb +54 -0
  302. data/lib/couchbase/protostellar/generated/admin/analytics/v1/analytics_services_pb.rb +51 -0
  303. data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_pb.rb +5 -24
  304. data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_services_pb.rb +16 -0
  305. data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_pb.rb +5 -24
  306. data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_services_pb.rb +16 -0
  307. data/lib/couchbase/protostellar/generated/admin/query/v1/query_pb.rb +5 -24
  308. data/lib/couchbase/protostellar/generated/admin/query/v1/query_services_pb.rb +18 -0
  309. data/lib/couchbase/protostellar/generated/admin/search/v1/search_pb.rb +2 -23
  310. data/lib/couchbase/protostellar/generated/admin/search/v1/search_services_pb.rb +23 -0
  311. data/lib/couchbase/protostellar/generated/analytics/v1/analytics_pb.rb +4 -25
  312. data/lib/couchbase/protostellar/generated/analytics/v1/analytics_services_pb.rb +10 -0
  313. data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_pb.rb +6 -25
  314. data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_services_pb.rb +18 -0
  315. data/lib/couchbase/protostellar/generated/internal/xdcr/v1/xdcr_pb.rb +46 -0
  316. data/lib/couchbase/protostellar/generated/internal/xdcr/v1/xdcr_services_pb.rb +56 -0
  317. data/lib/couchbase/protostellar/generated/kv/v1/kv_pb.rb +3 -26
  318. data/lib/couchbase/protostellar/generated/kv/v1/kv_services_pb.rb +47 -0
  319. data/lib/couchbase/protostellar/generated/query/v1/query_pb.rb +4 -26
  320. data/lib/couchbase/protostellar/generated/query/v1/query_services_pb.rb +10 -0
  321. data/lib/couchbase/protostellar/generated/routing/v2/routing_pb.rb +26 -0
  322. data/lib/couchbase/protostellar/generated/routing/v2/routing_services_pb.rb +43 -0
  323. data/lib/couchbase/protostellar/generated/search/v1/search_pb.rb +5 -26
  324. data/lib/couchbase/protostellar/generated/search/v1/search_services_pb.rb +11 -0
  325. data/lib/couchbase/protostellar/generated/transactions/v1/transactions_pb.rb +2 -23
  326. data/lib/couchbase/protostellar/generated/transactions/v1/transactions_services_pb.rb +30 -0
  327. data/lib/couchbase/protostellar/generated/view/v1/view_pb.rb +2 -23
  328. data/lib/couchbase/protostellar/generated/view/v1/view_services_pb.rb +9 -0
  329. data/lib/couchbase/protostellar/request_generator/admin/collection.rb +4 -2
  330. data/lib/couchbase/protostellar/request_generator/admin/query.rb +2 -0
  331. data/lib/couchbase/protostellar/request_generator/kv.rb +1 -1
  332. data/lib/couchbase/protostellar/scope.rb +4 -0
  333. data/lib/couchbase/scope.rb +62 -48
  334. data/lib/couchbase/search_options.rb +18 -18
  335. data/lib/couchbase/tracing/noop_span.rb +29 -0
  336. data/lib/couchbase/tracing/noop_tracer.rb +29 -0
  337. data/lib/couchbase/tracing/request_span.rb +34 -0
  338. data/lib/couchbase/tracing/request_tracer.rb +28 -0
  339. data/lib/couchbase/tracing/threshold_logging_span.rb +112 -0
  340. data/lib/couchbase/tracing/threshold_logging_tracer.rb +231 -0
  341. data/lib/couchbase/utils/hdr_histogram.rb +55 -0
  342. data/lib/couchbase/utils/observability.rb +263 -0
  343. data/lib/couchbase/utils/observability_constants.rb +200 -0
  344. data/lib/couchbase/utils/stdlib_logger_adapter.rb +1 -3
  345. data/lib/couchbase/version.rb +1 -1
  346. data/lib/couchbase.rb +2 -2
  347. metadata +72 -8
  348. data/lib/couchbase/protostellar/generated/routing/v1/routing_pb.rb +0 -52
  349. data/lib/couchbase/protostellar/generated/routing/v1/routing_services_pb.rb +0 -30
@@ -17,75 +17,50 @@
17
17
 
18
18
  #pragma once
19
19
 
20
- #include "opentelemetry/sdk/metrics/meter.h"
21
20
  #include <couchbase/metrics/meter.hxx>
22
21
 
22
+ #include <opentelemetry/context/context.h>
23
+ #include <opentelemetry/metrics/meter.h>
24
+ #include <opentelemetry/metrics/sync_instruments.h>
25
+
23
26
  #include <algorithm>
24
- #include <iostream>
25
- #include <thread>
27
+ #include <memory>
28
+ #include <mutex>
29
+ #include <shared_mutex>
26
30
  #include <utility>
27
-
28
- using couchbase::metrics::meter;
29
- using couchbase::metrics::value_recorder;
30
-
31
- namespace nostd = opentelemetry::nostd;
32
- namespace metrics_api = opentelemetry::metrics;
33
- namespace metrics_sdk = opentelemetry::sdk::metrics;
31
+ #include <variant>
34
32
 
35
33
  namespace couchbase::metrics
36
34
  {
37
-
38
- class otel_sync_histogram
39
- {
40
- public:
41
- otel_sync_histogram(nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter)
42
- : histogram_counter_(histogram_counter)
43
- {
44
- }
45
-
46
- void record(std::uint64_t value,
47
- const opentelemetry::common::KeyValueIterable& tags,
48
- opentelemetry::context::Context& ctx)
49
- {
50
- histogram_counter_->Record(value, tags, ctx);
51
- }
52
-
53
- private:
54
- nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter_;
55
- std::mutex mutex_;
56
- };
57
-
35
+ template<typename T>
58
36
  class otel_value_recorder : public couchbase::metrics::value_recorder
59
37
  {
60
38
  public:
61
39
  explicit otel_value_recorder(
62
- nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter,
40
+ opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<T>> histogram,
63
41
  const std::map<std::string, std::string>& tags)
64
- : histogram_counter_(histogram_counter)
65
- , tags_(tags)
66
- {
67
- }
68
- void record_value(std::int64_t value) override
42
+ : histogram_{ std::move(histogram) }
43
+ , tags_{ tags }
69
44
  {
70
- value = std::max<int64_t>(value, 0);
71
- auto uvalue = static_cast<std::uint64_t>(value);
72
- histogram_counter_->Record(
73
- uvalue, opentelemetry::common::KeyValueIterableView<decltype(tags_)>{ tags_ }, context_);
45
+ tags_.erase("__unit");
74
46
  }
75
47
 
76
- const std::map<std::string, std::string> tags()
77
- {
78
- return tags_;
79
- }
80
-
81
- nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter()
48
+ void record_value(std::int64_t value) override
82
49
  {
83
- return histogram_counter_;
50
+ if constexpr (std::is_same_v<T, double>) {
51
+ auto value_in_seconds = static_cast<double>(value) / 1'000'000.0;
52
+ histogram_->Record(
53
+ value_in_seconds, opentelemetry::common::KeyValueIterableView{ tags_ }, context_);
54
+ } else {
55
+ value = std::max<int64_t>(value, 0);
56
+ auto uvalue = static_cast<std::uint64_t>(value);
57
+ histogram_->Record(uvalue, opentelemetry::common::KeyValueIterableView{ tags_ }, context_);
58
+ }
84
59
  }
85
60
 
86
61
  private:
87
- nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter_;
88
- const std::map<std::string, std::string> tags_;
62
+ opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<T>> histogram_;
63
+ std::map<std::string, std::string> tags_{};
89
64
  opentelemetry::context::Context context_{};
90
65
  std::mutex mutex_;
91
66
  };
@@ -93,47 +68,67 @@ private:
93
68
  class otel_meter : public couchbase::metrics::meter
94
69
  {
95
70
  public:
96
- explicit otel_meter(nostd::shared_ptr<metrics_api::Meter> meter)
97
- : meter_(meter)
71
+ explicit otel_meter(opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Meter> meter)
72
+ : meter_{ std::move(meter) }
98
73
  {
99
74
  }
100
75
 
101
76
  auto get_value_recorder(const std::string& name, const std::map<std::string, std::string>& tags)
102
77
  -> std::shared_ptr<value_recorder> override
103
78
  {
104
- // first look up the histogram, in case we already have it...
105
- std::scoped_lock<std::mutex> lock(mutex_);
106
- auto it = recorders_.equal_range(name);
107
- if (it.first == it.second) {
108
- // this name isn't associated with any histogram, so make one and return it.
109
- // Note we'd like to make one with more buckets than default, given the range of
110
- // response times we'd like to display (queries vs kv for instance), but otel
111
- // api doesn't seem to allow this.
112
- return recorders_
113
- .insert({ name,
114
- std::make_shared<otel_value_recorder>(
115
- meter_->CreateUInt64Histogram(name, "", "us"), tags) })
116
- ->second;
79
+ bool in_seconds{ false };
80
+ if (tags.count("__unit") > 0) {
81
+ if (tags.at("__unit") == "s") {
82
+ in_seconds = true;
83
+ }
117
84
  }
118
- // so it is already, lets see if we already have one with those tags, or need
119
- // to make a new one (using the histogram we already have).
120
- for (auto itr = it.first; itr != it.second; itr++) {
121
- if (tags == itr->second->tags()) {
122
- return itr->second;
85
+
86
+ {
87
+ // Check if we already have the histogram
88
+ std::shared_lock lock(mutex_);
89
+ if (in_seconds) {
90
+ if (const auto it = double_histograms_.find(name); it != double_histograms_.end()) {
91
+ return std::make_shared<otel_value_recorder<double>>(it->second, tags);
92
+ }
93
+ } else {
94
+ if (const auto it = uint_histograms_.find(name); it != uint_histograms_.end()) {
95
+ return std::make_shared<otel_value_recorder<std::uint64_t>>(it->second, tags);
96
+ }
97
+ }
98
+ }
99
+
100
+ {
101
+ // We have to check if we already have the histogram again, before creating it, in case
102
+ // another thread created it while we were waiting for the exclusive lock
103
+ std::scoped_lock lock(mutex_);
104
+ if (in_seconds) {
105
+ if (const auto it = double_histograms_.find(name); it != double_histograms_.end()) {
106
+ return std::make_shared<otel_value_recorder<double>>(it->second, tags);
107
+ }
108
+ // Not found, we have to create it
109
+ auto histogram = meter_->CreateDoubleHistogram(name, "", "s");
110
+ double_histograms_.emplace(name, std::move(histogram));
111
+ return std::make_shared<otel_value_recorder<double>>(double_histograms_.at(name), tags);
112
+ } else {
113
+ if (const auto it = uint_histograms_.find(name); it != uint_histograms_.end()) {
114
+ return std::make_shared<otel_value_recorder<std::uint64_t>>(it->second, tags);
115
+ }
116
+ // Not found, we have to create it
117
+ auto histogram = meter_->CreateUInt64Histogram(name);
118
+ uint_histograms_.emplace(name, std::move(histogram));
119
+ return std::make_shared<otel_value_recorder<std::uint64_t>>(uint_histograms_.at(name),
120
+ tags);
123
121
  }
124
122
  }
125
- // if you are here, we need to add one with these tags and the histogram associated with the
126
- // name.
127
- return recorders_
128
- .insert(
129
- { name,
130
- std::make_shared<otel_value_recorder>(it.first->second->histogram_counter(), tags) })
131
- ->second;
132
123
  }
133
124
 
134
125
  private:
135
- nostd::shared_ptr<metrics_api::Meter> meter_;
136
- std::mutex mutex_;
137
- std::multimap<std::string, std::shared_ptr<otel_value_recorder>> recorders_;
126
+ opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Meter> meter_;
127
+ std::shared_mutex mutex_;
128
+ std::map<std::string, opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<double>>>
129
+ double_histograms_;
130
+ std::map<std::string,
131
+ opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<std::uint64_t>>>
132
+ uint_histograms_;
138
133
  };
139
134
  } // namespace couchbase::metrics
@@ -114,6 +114,22 @@ public:
114
114
  return *this;
115
115
  }
116
116
 
117
+ /**
118
+ * Enables or disables lazy connection of data endpoints.
119
+ *
120
+ * When enabled, connections are established only when the first operation for a given endpoint is
121
+ * scheduled, rather than at cluster object construction time.
122
+ *
123
+ * @volatile This option is considered unstable and may change in future releases.
124
+ *
125
+ * @since 1.3.0
126
+ */
127
+ auto enable_lazy_connections(bool enable) -> network_options&
128
+ {
129
+ enable_lazy_connections_ = enable;
130
+ return *this;
131
+ }
132
+
117
133
  struct built {
118
134
  std::string network;
119
135
  std::string server_group;
@@ -123,6 +139,7 @@ public:
123
139
  std::chrono::milliseconds config_poll_interval;
124
140
  std::chrono::milliseconds idle_http_connection_timeout;
125
141
  std::optional<std::size_t> max_http_connections;
142
+ bool enable_lazy_connections;
126
143
  };
127
144
 
128
145
  [[nodiscard]] auto build() const -> built
@@ -136,6 +153,7 @@ public:
136
153
  config_poll_interval_,
137
154
  idle_http_connection_timeout_,
138
155
  max_http_connections_,
156
+ enable_lazy_connections_,
139
157
  };
140
158
  }
141
159
 
@@ -149,5 +167,6 @@ private:
149
167
  std::chrono::milliseconds config_poll_floor_{ default_config_poll_floor };
150
168
  std::chrono::milliseconds idle_http_connection_timeout_{ default_idle_http_connection_timeout };
151
169
  std::optional<std::size_t> max_http_connections_{};
170
+ bool enable_lazy_connections_{ false };
152
171
  };
153
172
  } // namespace couchbase
@@ -0,0 +1,123 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2024-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <cstdint>
21
+ #include <functional>
22
+ #include <string>
23
+
24
+ namespace couchbase
25
+ {
26
+
27
+ /**
28
+ * Uniquely identifies a cluster node.
29
+ *
30
+ * On Couchbase Server 8.0.1+ the identifier is the server-assigned node UUID.
31
+ * On older releases, a stable opaque token is derived from the node's hostname
32
+ * and management port.
33
+ *
34
+ * The type is equality-comparable, ordered, and hashable.
35
+ *
36
+ * @since 1.3.2
37
+ * @uncommitted
38
+ */
39
+ class node_id
40
+ {
41
+ public:
42
+ /**
43
+ * Creates an empty (invalid) node_id.
44
+ *
45
+ * @since 1.3.2
46
+ * @uncommitted
47
+ */
48
+ node_id() = default;
49
+
50
+ /**
51
+ * User-facing identifier string.
52
+ *
53
+ * Returns node_uuid when the server provides one, otherwise a stable
54
+ * hex-encoded hash derived from hostname and management port.
55
+ *
56
+ * @return opaque identifier string (empty for default-constructed instances)
57
+ *
58
+ * @since 1.3.2
59
+ * @uncommitted
60
+ */
61
+ [[nodiscard]] auto id() const -> const std::string&;
62
+
63
+ /**
64
+ * The server-assigned node UUID (empty on servers before 8.0.1).
65
+ *
66
+ * @since 1.3.2
67
+ * @uncommitted
68
+ */
69
+ [[nodiscard]] auto node_uuid() const -> const std::string&;
70
+
71
+ /**
72
+ * The hostname of the node.
73
+ *
74
+ * @since 1.3.2
75
+ * @uncommitted
76
+ */
77
+ [[nodiscard]] auto hostname() const -> const std::string&;
78
+
79
+ /**
80
+ * The port of the node's key-value service.
81
+ *
82
+ * This reflects the port actually used by the client: the TLS port when the
83
+ * cluster connection is TLS-enabled, otherwise the plain port.
84
+ *
85
+ * @since 1.3.2
86
+ * @uncommitted
87
+ */
88
+ [[nodiscard]] auto port() const -> std::uint16_t;
89
+
90
+ /**
91
+ * Returns true when the node_id was properly initialized (not default-constructed).
92
+ *
93
+ * @since 1.3.2
94
+ * @uncommitted
95
+ */
96
+ explicit operator bool() const;
97
+
98
+ auto operator==(const node_id& other) const -> bool;
99
+ auto operator!=(const node_id& other) const -> bool;
100
+ auto operator<(const node_id& other) const -> bool;
101
+
102
+ private:
103
+ friend class internal_node_id;
104
+
105
+ node_id(std::string node_uuid, std::string hostname, std::uint16_t port);
106
+
107
+ std::string node_uuid_{};
108
+ std::string hostname_{};
109
+ std::uint16_t port_{ 0 };
110
+ // Computed once at construction: node_uuid_ if non-empty, otherwise a
111
+ // deterministic hex-encoded CRC32 hash of "hostname:port".
112
+ std::string id_{};
113
+ };
114
+
115
+ } // namespace couchbase
116
+
117
+ template<>
118
+ struct std::hash<couchbase::node_id> {
119
+ auto operator()(const couchbase::node_id& nid) const noexcept -> std::size_t
120
+ {
121
+ return std::hash<std::string>{}(nid.id());
122
+ }
123
+ };
@@ -0,0 +1,61 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2024-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/common_options.hxx>
21
+ #include <couchbase/error.hxx>
22
+ #include <couchbase/node_id.hxx>
23
+
24
+ #include <functional>
25
+
26
+ namespace couchbase
27
+ {
28
+
29
+ /**
30
+ * Options for @ref collection#node_id_for().
31
+ *
32
+ * @since 1.3.2
33
+ * @uncommitted
34
+ */
35
+ struct node_id_for_options : public common_options<node_id_for_options> {
36
+ /**
37
+ * Immutable value object representing consistent options.
38
+ *
39
+ * @since 1.3.2
40
+ * @internal
41
+ */
42
+ struct built : public common_options<node_id_for_options>::built {
43
+ };
44
+
45
+ /**
46
+ * Validates options and returns them as an immutable value.
47
+ *
48
+ * @return consistent options as an immutable value
49
+ *
50
+ * @since 1.3.2
51
+ * @internal
52
+ */
53
+ [[nodiscard]] auto build() const -> built
54
+ {
55
+ return { build_common_options() };
56
+ }
57
+ };
58
+
59
+ using node_id_for_handler = std::function<void(error, node_id)>;
60
+
61
+ } // namespace couchbase
@@ -0,0 +1,62 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2024-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/common_options.hxx>
21
+ #include <couchbase/error.hxx>
22
+ #include <couchbase/node_id.hxx>
23
+
24
+ #include <functional>
25
+ #include <vector>
26
+
27
+ namespace couchbase
28
+ {
29
+
30
+ /**
31
+ * Options for @ref collection#node_ids().
32
+ *
33
+ * @since 1.3.2
34
+ * @uncommitted
35
+ */
36
+ struct node_ids_options : public common_options<node_ids_options> {
37
+ /**
38
+ * Immutable value object representing consistent options.
39
+ *
40
+ * @since 1.3.2
41
+ * @internal
42
+ */
43
+ struct built : public common_options<node_ids_options>::built {
44
+ };
45
+
46
+ /**
47
+ * Validates options and returns them as an immutable value.
48
+ *
49
+ * @return consistent options as an immutable value
50
+ *
51
+ * @since 1.3.2
52
+ * @internal
53
+ */
54
+ [[nodiscard]] auto build() const -> built
55
+ {
56
+ return { build_common_options() };
57
+ }
58
+ };
59
+
60
+ using node_ids_handler = std::function<void(error, std::vector<node_id>)>;
61
+
62
+ } // namespace couchbase
@@ -43,5 +43,6 @@ private:
43
43
  bool ldap_compatible_{ false };
44
44
 
45
45
  friend class cluster_options;
46
+ friend class cluster;
46
47
  };
47
48
  } // namespace couchbase
@@ -18,6 +18,9 @@
18
18
  #pragma once
19
19
 
20
20
  #include <couchbase/cas.hxx>
21
+ #include <couchbase/node_id.hxx>
22
+
23
+ #include <utility>
21
24
 
22
25
  namespace couchbase
23
26
  {
@@ -48,6 +51,19 @@ public:
48
51
  {
49
52
  }
50
53
 
54
+ /**
55
+ * @param cas
56
+ * @param node_id identity of the node that served the request
57
+ *
58
+ * @since 1.3.2
59
+ * @uncommitted
60
+ */
61
+ result(couchbase::cas cas, couchbase::node_id node_id)
62
+ : cas_(cas)
63
+ , node_id_(std::move(node_id))
64
+ {
65
+ }
66
+
51
67
  /**
52
68
  * @return
53
69
  *
@@ -59,8 +75,34 @@ public:
59
75
  return cas_;
60
76
  }
61
77
 
78
+ /**
79
+ * Returns the identity of the cluster node that served this request.
80
+ *
81
+ * The returned node_id is default-constructed (falsy) when the node
82
+ * could not be determined.
83
+ *
84
+ * @return identity of the serving node
85
+ *
86
+ * @since 1.3.2
87
+ * @uncommitted
88
+ */
89
+ [[nodiscard]] auto node_id() const -> const couchbase::node_id&
90
+ {
91
+ return node_id_;
92
+ }
93
+
94
+ /**
95
+ * @since 1.3.2
96
+ * @internal
97
+ */
98
+ void node_id(couchbase::node_id id)
99
+ {
100
+ node_id_ = std::move(id);
101
+ }
102
+
62
103
  private:
63
104
  couchbase::cas cas_{ 0U };
105
+ couchbase::node_id node_id_{};
64
106
  };
65
107
 
66
108
  } // namespace couchbase
@@ -18,18 +18,15 @@
18
18
  #pragma once
19
19
 
20
20
  #include <couchbase/tracing/request_tracer.hxx>
21
- #include <opentelemetry/exporters/ostream/span_exporter.h>
22
- #include <opentelemetry/sdk/trace/simple_processor.h>
23
- #include <opentelemetry/sdk/trace/tracer_provider.h>
21
+
24
22
  #include <opentelemetry/trace/tracer.h>
25
23
 
26
- namespace nostd = opentelemetry::nostd;
27
24
  namespace couchbase::tracing
28
25
  {
29
26
  class otel_request_span : public couchbase::tracing::request_span
30
27
  {
31
28
  public:
32
- explicit otel_request_span(nostd::shared_ptr<opentelemetry::trace::Span> span)
29
+ explicit otel_request_span(opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span)
33
30
  : span_(std::move(span))
34
31
  {
35
32
  }
@@ -45,42 +42,43 @@ public:
45
42
  {
46
43
  span_->End();
47
44
  }
48
- nostd::shared_ptr<opentelemetry::trace::Span> wrapped_span()
45
+ auto wrapped_span() -> opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span>
49
46
  {
50
47
  return span_;
51
48
  }
52
49
 
53
50
  private:
54
- nostd::shared_ptr<opentelemetry::trace::Span> span_;
51
+ opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span_;
55
52
  };
56
53
 
57
54
  class otel_request_tracer : public couchbase::tracing::request_tracer
58
55
  {
59
56
  public:
60
- otel_request_tracer(nostd::shared_ptr<opentelemetry::trace::Tracer> tracer)
57
+ explicit otel_request_tracer(
58
+ opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> tracer)
61
59
  : tracer_(std::move(tracer))
62
60
  {
63
61
  }
64
62
 
65
- auto start_span(std::string name, std::shared_ptr<couchbase::tracing::request_span> parent = {})
63
+ auto start_span(std::string name, std::shared_ptr<couchbase::tracing::request_span> parent)
66
64
  -> std::shared_ptr<couchbase::tracing::request_span> override
67
65
  {
68
- auto wrapped_parent = std::dynamic_pointer_cast<otel_request_span>(parent);
66
+ const auto wrapped_parent = std::dynamic_pointer_cast<otel_request_span>(parent);
67
+ opentelemetry::trace::StartSpanOptions opts;
68
+ opts.kind = opentelemetry::trace::SpanKind::kClient;
69
69
  if (wrapped_parent) {
70
- opentelemetry::trace::StartSpanOptions opts;
71
70
  opts.parent = wrapped_parent->wrapped_span()->GetContext();
72
- return std::make_shared<otel_request_span>(tracer_->StartSpan(name, opts));
73
71
  }
74
- return std::make_shared<otel_request_span>(tracer_->StartSpan(name));
72
+ return std::make_shared<otel_request_span>(tracer_->StartSpan(name, opts));
75
73
  }
76
74
 
77
- auto wrap_span(nostd::shared_ptr<opentelemetry::trace::Span> span)
75
+ auto wrap_span(opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span)
78
76
  -> std::shared_ptr<couchbase::tracing::otel_request_span>
79
77
  {
80
- return std::make_shared<couchbase::tracing::otel_request_span>(span);
78
+ return std::make_shared<couchbase::tracing::otel_request_span>(std::move(span));
81
79
  }
82
80
 
83
81
  private:
84
- nostd::shared_ptr<opentelemetry::trace::Tracer> tracer_;
82
+ opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> tracer_;
85
83
  };
86
- } // namespace couchbase::tracing
84
+ } // namespace couchbase::tracing
@@ -51,12 +51,12 @@ public:
51
51
  return name_;
52
52
  }
53
53
 
54
- [[nodiscard]] auto parent() const -> std::shared_ptr<request_span>
54
+ [[nodiscard]] virtual auto parent() const -> std::shared_ptr<request_span>
55
55
  {
56
56
  return parent_;
57
57
  }
58
58
 
59
- virtual auto uses_tags() const -> bool
59
+ [[nodiscard]] virtual auto uses_tags() const -> bool
60
60
  {
61
61
  return true;
62
62
  }
data/ext/couchbase.cxx CHANGED
@@ -25,8 +25,10 @@
25
25
  #include "rcb_diagnostics.hxx"
26
26
  #include "rcb_exceptions.hxx"
27
27
  #include "rcb_extras.hxx"
28
+ #include "rcb_hdr_histogram.hxx"
28
29
  #include "rcb_logger.hxx"
29
30
  #include "rcb_multi.hxx"
31
+ #include "rcb_observability.hxx"
30
32
  #include "rcb_query.hxx"
31
33
  #include "rcb_range_scan.hxx"
32
34
  #include "rcb_search.hxx"
@@ -64,5 +66,7 @@ Init_libcouchbase(void)
64
66
  couchbase::ruby::init_diagnostics(cBackend);
65
67
  couchbase::ruby::init_extras(cBackend);
66
68
  couchbase::ruby::init_logger_methods(cBackend);
69
+ couchbase::ruby::init_hdr_histogram(mCouchbase);
70
+ couchbase::ruby::init_observability(cBackend);
67
71
  }
68
72
  }
data/ext/extconf.rb CHANGED
@@ -97,6 +97,7 @@ cmake_flags = [
97
97
  "-DCOUCHBASE_CXX_CLIENT_BUILD_TOOLS=OFF",
98
98
  "-DCOUCHBASE_CXX_CLIENT_BUILD_EXAMPLES=OFF",
99
99
  "-DCOUCHBASE_CXX_CLIENT_INSTALL=OFF",
100
+ "-DCOUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY=OFF",
100
101
  ]
101
102
 
102
103
  if version.start_with?("4")