couchbase 3.7.0 → 3.8.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 (286) 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 -93
  6. data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
  7. data/ext/couchbase/CMakeLists.txt +24 -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/free_form_http_request.hxx +0 -2
  33. data/ext/couchbase/core/http_component.cxx +12 -48
  34. data/ext/couchbase/core/impl/analytics.cxx +3 -2
  35. data/ext/couchbase/core/impl/analytics.hxx +2 -1
  36. data/ext/couchbase/core/impl/analytics_index_manager.cxx +249 -137
  37. data/ext/couchbase/core/impl/binary_collection.cxx +134 -58
  38. data/ext/couchbase/core/impl/bucket_manager.cxx +87 -35
  39. data/ext/couchbase/core/impl/collection.cxx +560 -245
  40. data/ext/couchbase/core/impl/collection_manager.cxx +89 -49
  41. data/ext/couchbase/core/impl/dns_srv_tracker.cxx +4 -4
  42. data/ext/couchbase/core/impl/error.cxx +20 -13
  43. data/ext/couchbase/core/impl/error.hxx +15 -10
  44. data/ext/couchbase/core/impl/get_all_replicas.hxx +1 -1
  45. data/ext/couchbase/core/impl/get_any_replica.hxx +2 -1
  46. data/ext/couchbase/core/impl/get_replica.hxx +2 -0
  47. data/ext/couchbase/core/impl/lookup_in_replica.hxx +1 -1
  48. data/ext/couchbase/core/impl/observability_recorder.cxx +161 -0
  49. data/ext/couchbase/core/impl/observability_recorder.hxx +77 -0
  50. data/ext/couchbase/core/impl/observe_seqno.hxx +2 -0
  51. data/ext/couchbase/core/impl/public_bucket.cxx +31 -7
  52. data/ext/couchbase/core/impl/public_cluster.cxx +107 -19
  53. data/ext/couchbase/core/impl/query.cxx +6 -3
  54. data/ext/couchbase/core/impl/query.hxx +3 -1
  55. data/ext/couchbase/core/impl/query_index_manager.cxx +267 -102
  56. data/ext/couchbase/core/impl/scope.cxx +53 -11
  57. data/ext/couchbase/core/impl/search.cxx +8 -4
  58. data/ext/couchbase/core/impl/search.hxx +6 -2
  59. data/ext/couchbase/core/impl/search_index_manager.cxx +131 -41
  60. data/ext/couchbase/core/impl/with_cancellation.hxx +75 -0
  61. data/ext/couchbase/core/io/config_tracker.cxx +9 -9
  62. data/ext/couchbase/core/io/config_tracker.hxx +2 -1
  63. data/ext/couchbase/core/io/http_command.hxx +98 -49
  64. data/ext/couchbase/core/io/http_context.hxx +2 -0
  65. data/ext/couchbase/core/io/http_session.cxx +23 -10
  66. data/ext/couchbase/core/io/http_session.hxx +17 -9
  67. data/ext/couchbase/core/io/http_session_manager.hxx +163 -228
  68. data/ext/couchbase/core/io/http_traits.hxx +0 -7
  69. data/ext/couchbase/core/io/mcbp_command.hxx +123 -44
  70. data/ext/couchbase/core/io/mcbp_session.cxx +251 -26
  71. data/ext/couchbase/core/io/mcbp_session.hxx +9 -1
  72. data/ext/couchbase/core/io/mcbp_traits.hxx +0 -8
  73. data/ext/couchbase/core/io/streams.cxx +3 -3
  74. data/ext/couchbase/core/io/streams.hxx +3 -2
  75. data/ext/couchbase/core/meta/features.hxx +15 -0
  76. data/ext/couchbase/core/meta/version.cxx +13 -0
  77. data/ext/couchbase/core/meta/version.hxx +3 -0
  78. data/ext/couchbase/core/metrics/constants.hxx +23 -0
  79. data/ext/couchbase/core/metrics/logging_meter.cxx +5 -5
  80. data/ext/couchbase/core/metrics/meter_wrapper.cxx +65 -63
  81. data/ext/couchbase/core/metrics/meter_wrapper.hxx +12 -10
  82. data/ext/couchbase/core/operations/document_analytics.hxx +0 -5
  83. data/ext/couchbase/core/operations/document_append.hxx +0 -4
  84. data/ext/couchbase/core/operations/document_decrement.hxx +0 -5
  85. data/ext/couchbase/core/operations/document_exists.hxx +0 -7
  86. data/ext/couchbase/core/operations/document_get.hxx +0 -7
  87. data/ext/couchbase/core/operations/document_get_all_replicas.hxx +77 -27
  88. data/ext/couchbase/core/operations/document_get_and_lock.hxx +0 -9
  89. data/ext/couchbase/core/operations/document_get_and_touch.hxx +0 -9
  90. data/ext/couchbase/core/operations/document_get_any_replica.hxx +83 -2
  91. data/ext/couchbase/core/operations/document_get_projected.hxx +0 -9
  92. data/ext/couchbase/core/operations/document_increment.hxx +0 -5
  93. data/ext/couchbase/core/operations/document_insert.hxx +0 -4
  94. data/ext/couchbase/core/operations/document_lookup_in.hxx +0 -9
  95. data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +46 -4
  96. data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +121 -43
  97. data/ext/couchbase/core/operations/document_mutate_in.hxx +0 -5
  98. data/ext/couchbase/core/operations/document_prepend.hxx +0 -4
  99. data/ext/couchbase/core/operations/document_query.hxx +0 -4
  100. data/ext/couchbase/core/operations/document_remove.hxx +0 -4
  101. data/ext/couchbase/core/operations/document_replace.hxx +0 -4
  102. data/ext/couchbase/core/operations/document_search.hxx +0 -7
  103. data/ext/couchbase/core/operations/document_touch.hxx +0 -7
  104. data/ext/couchbase/core/operations/document_unlock.hxx +0 -6
  105. data/ext/couchbase/core/operations/document_upsert.hxx +0 -4
  106. data/ext/couchbase/core/operations/document_view.cxx +2 -0
  107. data/ext/couchbase/core/operations/document_view.hxx +10 -13
  108. data/ext/couchbase/core/operations/http_noop.hxx +2 -0
  109. data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +2 -0
  110. data/ext/couchbase/core/operations/management/analytics_dataset_drop.hxx +2 -0
  111. data/ext/couchbase/core/operations/management/analytics_dataset_get_all.hxx +2 -0
  112. data/ext/couchbase/core/operations/management/analytics_dataverse_create.hxx +2 -0
  113. data/ext/couchbase/core/operations/management/analytics_dataverse_drop.hxx +2 -0
  114. data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.hxx +2 -0
  115. data/ext/couchbase/core/operations/management/analytics_index_create.hxx +2 -0
  116. data/ext/couchbase/core/operations/management/analytics_index_drop.hxx +2 -0
  117. data/ext/couchbase/core/operations/management/analytics_index_get_all.hxx +2 -0
  118. data/ext/couchbase/core/operations/management/analytics_link_connect.hxx +2 -0
  119. data/ext/couchbase/core/operations/management/analytics_link_create.hxx +2 -0
  120. data/ext/couchbase/core/operations/management/analytics_link_disconnect.hxx +2 -0
  121. data/ext/couchbase/core/operations/management/analytics_link_drop.hxx +2 -0
  122. data/ext/couchbase/core/operations/management/analytics_link_get_all.hxx +2 -0
  123. data/ext/couchbase/core/operations/management/analytics_link_replace.hxx +2 -0
  124. data/ext/couchbase/core/operations/management/bucket_create.hxx +2 -0
  125. data/ext/couchbase/core/operations/management/bucket_describe.hxx +2 -0
  126. data/ext/couchbase/core/operations/management/bucket_drop.hxx +2 -0
  127. data/ext/couchbase/core/operations/management/bucket_flush.hxx +2 -0
  128. data/ext/couchbase/core/operations/management/bucket_get.hxx +2 -0
  129. data/ext/couchbase/core/operations/management/bucket_get_all.hxx +2 -0
  130. data/ext/couchbase/core/operations/management/bucket_update.hxx +2 -0
  131. data/ext/couchbase/core/operations/management/change_password.hxx +2 -0
  132. data/ext/couchbase/core/operations/management/cluster_describe.hxx +2 -0
  133. data/ext/couchbase/core/operations/management/cluster_developer_preview_enable.hxx +2 -0
  134. data/ext/couchbase/core/operations/management/collection_create.hxx +2 -0
  135. data/ext/couchbase/core/operations/management/collection_drop.hxx +2 -0
  136. data/ext/couchbase/core/operations/management/collection_update.hxx +2 -0
  137. data/ext/couchbase/core/operations/management/collections_manifest_get.hxx +2 -0
  138. data/ext/couchbase/core/operations/management/error_utils.cxx +4 -1
  139. data/ext/couchbase/core/operations/management/eventing_deploy_function.hxx +2 -0
  140. data/ext/couchbase/core/operations/management/eventing_drop_function.hxx +2 -0
  141. data/ext/couchbase/core/operations/management/eventing_get_all_functions.hxx +2 -0
  142. data/ext/couchbase/core/operations/management/eventing_get_function.hxx +2 -0
  143. data/ext/couchbase/core/operations/management/eventing_get_status.hxx +2 -0
  144. data/ext/couchbase/core/operations/management/eventing_pause_function.hxx +2 -0
  145. data/ext/couchbase/core/operations/management/eventing_resume_function.hxx +2 -0
  146. data/ext/couchbase/core/operations/management/eventing_undeploy_function.hxx +2 -0
  147. data/ext/couchbase/core/operations/management/eventing_upsert_function.hxx +2 -0
  148. data/ext/couchbase/core/operations/management/freeform.hxx +2 -0
  149. data/ext/couchbase/core/operations/management/group_drop.hxx +2 -0
  150. data/ext/couchbase/core/operations/management/group_get.hxx +2 -0
  151. data/ext/couchbase/core/operations/management/group_get_all.hxx +2 -0
  152. data/ext/couchbase/core/operations/management/group_upsert.hxx +2 -0
  153. data/ext/couchbase/core/operations/management/query_index_build.hxx +2 -0
  154. data/ext/couchbase/core/operations/management/query_index_build_deferred.hxx +68 -30
  155. data/ext/couchbase/core/operations/management/query_index_create.hxx +2 -0
  156. data/ext/couchbase/core/operations/management/query_index_drop.hxx +2 -0
  157. data/ext/couchbase/core/operations/management/query_index_get_all.hxx +4 -3
  158. data/ext/couchbase/core/operations/management/query_index_get_all_deferred.hxx +2 -1
  159. data/ext/couchbase/core/operations/management/role_get_all.hxx +2 -0
  160. data/ext/couchbase/core/operations/management/scope_create.hxx +2 -0
  161. data/ext/couchbase/core/operations/management/scope_drop.hxx +2 -0
  162. data/ext/couchbase/core/operations/management/scope_get_all.hxx +2 -0
  163. data/ext/couchbase/core/operations/management/search_get_stats.hxx +2 -0
  164. data/ext/couchbase/core/operations/management/search_index_analyze_document.hxx +2 -0
  165. data/ext/couchbase/core/operations/management/search_index_control_ingest.hxx +2 -0
  166. data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.hxx +2 -0
  167. data/ext/couchbase/core/operations/management/search_index_control_query.hxx +2 -0
  168. data/ext/couchbase/core/operations/management/search_index_drop.hxx +2 -0
  169. data/ext/couchbase/core/operations/management/search_index_get.hxx +2 -0
  170. data/ext/couchbase/core/operations/management/search_index_get_all.hxx +2 -0
  171. data/ext/couchbase/core/operations/management/search_index_get_documents_count.hxx +2 -0
  172. data/ext/couchbase/core/operations/management/search_index_get_stats.hxx +2 -0
  173. data/ext/couchbase/core/operations/management/search_index_upsert.hxx +2 -0
  174. data/ext/couchbase/core/operations/management/user_drop.hxx +2 -0
  175. data/ext/couchbase/core/operations/management/user_get.hxx +2 -0
  176. data/ext/couchbase/core/operations/management/user_get_all.hxx +2 -0
  177. data/ext/couchbase/core/operations/management/user_upsert.hxx +2 -0
  178. data/ext/couchbase/core/operations/management/view_index_drop.hxx +2 -0
  179. data/ext/couchbase/core/operations/management/view_index_get.hxx +2 -0
  180. data/ext/couchbase/core/operations/management/view_index_get_all.hxx +2 -0
  181. data/ext/couchbase/core/operations/management/view_index_upsert.hxx +2 -0
  182. data/ext/couchbase/core/operations/operation_traits.hxx +6 -0
  183. data/ext/couchbase/core/operations.hxx +0 -1
  184. data/ext/couchbase/core/operations_fwd.hxx +8 -0
  185. data/ext/couchbase/core/origin.cxx +67 -12
  186. data/ext/couchbase/core/origin.hxx +13 -8
  187. data/ext/couchbase/core/orphan_reporter.cxx +164 -0
  188. data/ext/couchbase/core/orphan_reporter.hxx +65 -0
  189. data/ext/couchbase/core/sasl/CMakeLists.txt +1 -0
  190. data/ext/couchbase/core/sasl/client.cc +6 -0
  191. data/ext/couchbase/core/sasl/mechanism.cc +2 -1
  192. data/ext/couchbase/core/sasl/mechanism.h +2 -1
  193. data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.cc +41 -0
  194. data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.h +47 -0
  195. data/ext/couchbase/core/tls_context_provider.cxx +44 -0
  196. data/ext/couchbase/core/tls_context_provider.hxx +44 -0
  197. data/ext/couchbase/core/tracing/attribute_helpers.hxx +45 -0
  198. data/ext/couchbase/core/tracing/constants.hxx +148 -68
  199. data/ext/couchbase/core/tracing/threshold_logging_options.hxx +0 -3
  200. data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +122 -170
  201. data/ext/couchbase/core/tracing/tracer_wrapper.cxx +17 -24
  202. data/ext/couchbase/core/tracing/tracer_wrapper.hxx +8 -10
  203. data/ext/couchbase/core/tracing/wrapper_sdk_tracer.cxx +114 -0
  204. data/ext/couchbase/core/tracing/wrapper_sdk_tracer.hxx +85 -0
  205. data/ext/couchbase/core/transactions/attempt_context_impl.cxx +16 -14
  206. data/ext/couchbase/core/transactions/attempt_context_impl.hxx +4 -4
  207. data/ext/couchbase/core/transactions/transactions.cxx +1 -1
  208. data/ext/couchbase/core/transactions/transactions_cleanup.cxx +1 -2
  209. data/ext/couchbase/core/utils/byteswap.hxx +12 -0
  210. data/ext/couchbase/core/utils/concurrent_fixed_priority_queue.hxx +102 -0
  211. data/ext/couchbase/core/utils/connection_string.cxx +2 -0
  212. data/ext/couchbase/couchbase/certificate_authenticator.hxx +1 -0
  213. data/ext/couchbase/couchbase/cluster.hxx +47 -0
  214. data/ext/couchbase/couchbase/cluster_options.hxx +16 -0
  215. data/ext/couchbase/couchbase/collection.hxx +60 -15
  216. data/ext/couchbase/couchbase/error_codes.hxx +48 -48
  217. data/ext/couchbase/couchbase/jwt_authenticator.hxx +52 -0
  218. data/ext/couchbase/couchbase/metrics/meter.hxx +2 -1
  219. data/ext/couchbase/couchbase/metrics/otel_meter.hxx +75 -80
  220. data/ext/couchbase/couchbase/network_options.hxx +19 -0
  221. data/ext/couchbase/couchbase/password_authenticator.hxx +1 -0
  222. data/ext/couchbase/couchbase/tracing/otel_tracer.hxx +15 -17
  223. data/ext/couchbase/couchbase/tracing/request_span.hxx +2 -2
  224. data/ext/couchbase.cxx +4 -0
  225. data/ext/extconf.rb +1 -0
  226. data/ext/rcb_analytics.cxx +157 -47
  227. data/ext/rcb_backend.cxx +118 -71
  228. data/ext/rcb_buckets.cxx +39 -16
  229. data/ext/rcb_collections.cxx +36 -12
  230. data/ext/rcb_crud.cxx +587 -294
  231. data/ext/rcb_hdr_histogram.cxx +219 -0
  232. data/ext/rcb_hdr_histogram.hxx +28 -0
  233. data/ext/rcb_multi.cxx +142 -59
  234. data/ext/rcb_observability.cxx +132 -0
  235. data/ext/rcb_observability.hxx +49 -0
  236. data/ext/rcb_query.cxx +77 -27
  237. data/ext/rcb_search.cxx +92 -31
  238. data/ext/rcb_users.cxx +69 -26
  239. data/ext/rcb_utils.cxx +91 -0
  240. data/ext/rcb_utils.hxx +141 -168
  241. data/ext/rcb_views.cxx +36 -12
  242. data/lib/active_support/cache/couchbase_store.rb +6 -6
  243. data/lib/couchbase/authenticator.rb +14 -0
  244. data/lib/couchbase/binary_collection.rb +37 -22
  245. data/lib/couchbase/bucket.rb +46 -31
  246. data/lib/couchbase/cluster.rb +146 -61
  247. data/lib/couchbase/collection.rb +257 -186
  248. data/lib/couchbase/datastructures/couchbase_list.rb +81 -50
  249. data/lib/couchbase/datastructures/couchbase_map.rb +86 -50
  250. data/lib/couchbase/datastructures/couchbase_queue.rb +64 -38
  251. data/lib/couchbase/datastructures/couchbase_set.rb +57 -41
  252. data/lib/couchbase/deprecations.rb +1 -1
  253. data/lib/couchbase/diagnostics.rb +8 -8
  254. data/lib/couchbase/errors.rb +6 -0
  255. data/lib/couchbase/management/analytics_index_manager.rb +90 -59
  256. data/lib/couchbase/management/bucket_manager.rb +73 -45
  257. data/lib/couchbase/management/collection_manager.rb +86 -43
  258. data/lib/couchbase/management/collection_query_index_manager.rb +56 -33
  259. data/lib/couchbase/management/query_index_manager.rb +88 -36
  260. data/lib/couchbase/management/scope_search_index_manager.rb +119 -52
  261. data/lib/couchbase/management/search_index_manager.rb +401 -178
  262. data/lib/couchbase/management/user_manager.rb +343 -174
  263. data/lib/couchbase/management/view_index_manager.rb +166 -73
  264. data/lib/couchbase/metrics/logging_meter.rb +108 -0
  265. data/lib/couchbase/metrics/logging_value_recorder.rb +50 -0
  266. data/lib/couchbase/metrics/meter.rb +27 -0
  267. data/lib/couchbase/metrics/noop_meter.rb +30 -0
  268. data/lib/couchbase/metrics/noop_value_recorder.rb +27 -0
  269. data/lib/couchbase/metrics/value_recorder.rb +25 -0
  270. data/lib/couchbase/options.rb +69 -3
  271. data/lib/couchbase/protostellar/cluster.rb +3 -0
  272. data/lib/couchbase/scope.rb +62 -48
  273. data/lib/couchbase/search_options.rb +18 -18
  274. data/lib/couchbase/tracing/noop_span.rb +29 -0
  275. data/lib/couchbase/tracing/noop_tracer.rb +29 -0
  276. data/lib/couchbase/tracing/request_span.rb +34 -0
  277. data/lib/couchbase/tracing/request_tracer.rb +28 -0
  278. data/lib/couchbase/tracing/threshold_logging_span.rb +112 -0
  279. data/lib/couchbase/tracing/threshold_logging_tracer.rb +231 -0
  280. data/lib/couchbase/utils/hdr_histogram.rb +55 -0
  281. data/lib/couchbase/utils/observability.rb +257 -0
  282. data/lib/couchbase/utils/observability_constants.rb +200 -0
  283. data/lib/couchbase/utils/stdlib_logger_adapter.rb +1 -3
  284. data/lib/couchbase/version.rb +1 -1
  285. data/lib/couchbase.rb +2 -2
  286. metadata +58 -6
@@ -0,0 +1,49 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2025-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
+ #ifndef COUCHBASE_RUBY_RCB_OBSERVABILITY_HXX
19
+ #define COUCHBASE_RUBY_RCB_OBSERVABILITY_HXX
20
+
21
+ #include <core/tracing/wrapper_sdk_tracer.hxx>
22
+
23
+ #include <ruby.h>
24
+
25
+ #include <memory>
26
+
27
+ namespace couchbase::ruby
28
+ {
29
+ template<typename Request>
30
+ inline auto
31
+ cb_create_parent_span(Request& req, VALUE backend)
32
+ -> std::shared_ptr<couchbase::core::tracing::wrapper_sdk_span>
33
+ {
34
+ // TODO(Tracing): Conditionally set the parent span only if tracing is enabled
35
+ auto span = std::make_shared<couchbase::core::tracing::wrapper_sdk_span>();
36
+ req.parent_span = span;
37
+ return span;
38
+ }
39
+
40
+ void
41
+ cb_add_core_spans(VALUE observability_handler,
42
+ std::shared_ptr<couchbase::core::tracing::wrapper_sdk_span> parent_span,
43
+ std::size_t retry_attempts);
44
+
45
+ void
46
+ init_observability(VALUE cBackend);
47
+ } // namespace couchbase::ruby
48
+
49
+ #endif // COUCHBASE_RUBY_RCB_OBSERVABILITY_HXX
data/ext/rcb_query.cxx CHANGED
@@ -30,6 +30,7 @@
30
30
  #include <ruby.h>
31
31
 
32
32
  #include "rcb_backend.hxx"
33
+ #include "rcb_observability.hxx"
33
34
  #include "rcb_utils.hxx"
34
35
 
35
36
  namespace couchbase::ruby
@@ -37,7 +38,10 @@ namespace couchbase::ruby
37
38
  namespace
38
39
  {
39
40
  VALUE
40
- cb_Backend_query_index_get_all(VALUE self, VALUE bucket_name, VALUE options)
41
+ cb_Backend_query_index_get_all(VALUE self,
42
+ VALUE bucket_name,
43
+ VALUE options,
44
+ VALUE observability_handler)
41
45
  {
42
46
  auto cluster = cb_backend_to_core_api_cluster(self);
43
47
 
@@ -60,12 +64,14 @@ cb_Backend_query_index_get_all(VALUE self, VALUE bucket_name, VALUE options)
60
64
  req.collection_name = cb_string_new(collection_name);
61
65
  }
62
66
  }
67
+ auto parent_span = cb_create_parent_span(req, self);
63
68
  std::promise<core::operations::management::query_index_get_all_response> promise;
64
69
  auto f = promise.get_future();
65
70
  cluster.execute(req, [promise = std::move(promise)](auto&& resp) mutable {
66
71
  promise.set_value(std::forward<decltype(resp)>(resp));
67
72
  });
68
73
  auto resp = cb_wait_for_future(f);
74
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
69
75
  if (resp.ctx.ec) {
70
76
  cb_throw_error(
71
77
  resp.ctx,
@@ -120,7 +126,8 @@ cb_Backend_query_index_create(VALUE self,
120
126
  VALUE bucket_name,
121
127
  VALUE index_name,
122
128
  VALUE keys,
123
- VALUE options)
129
+ VALUE options,
130
+ VALUE observability_handler)
124
131
  {
125
132
  auto cluster = cb_backend_to_core_api_cluster(self);
126
133
 
@@ -173,6 +180,7 @@ cb_Backend_query_index_create(VALUE self,
173
180
  req.collection_name = cb_string_new(collection_name);
174
181
  }
175
182
  }
183
+ auto parent_span = cb_create_parent_span(req, self);
176
184
 
177
185
  std::promise<core::operations::management::query_index_create_response> promise;
178
186
  auto f = promise.get_future();
@@ -180,6 +188,7 @@ cb_Backend_query_index_create(VALUE self,
180
188
  promise.set_value(std::forward<decltype(resp)>(resp));
181
189
  });
182
190
  auto resp = cb_wait_for_future(f);
191
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
183
192
  if (resp.ctx.ec) {
184
193
  if (!resp.errors.empty()) {
185
194
  const auto& first_error = resp.errors.front();
@@ -219,7 +228,11 @@ cb_Backend_query_index_create(VALUE self,
219
228
  }
220
229
 
221
230
  VALUE
222
- cb_Backend_query_index_drop(VALUE self, VALUE bucket_name, VALUE index_name, VALUE options)
231
+ cb_Backend_query_index_drop(VALUE self,
232
+ VALUE bucket_name,
233
+ VALUE index_name,
234
+ VALUE options,
235
+ VALUE observability_handler)
223
236
  {
224
237
  auto cluster = cb_backend_to_core_api_cluster(self);
225
238
 
@@ -252,6 +265,7 @@ cb_Backend_query_index_drop(VALUE self, VALUE bucket_name, VALUE index_name, VAL
252
265
  req.collection_name = cb_string_new(collection_name);
253
266
  }
254
267
  }
268
+ auto parent_span = cb_create_parent_span(req, self);
255
269
 
256
270
  std::promise<core::operations::management::query_index_drop_response> promise;
257
271
  auto f = promise.get_future();
@@ -259,6 +273,7 @@ cb_Backend_query_index_drop(VALUE self, VALUE bucket_name, VALUE index_name, VAL
259
273
  promise.set_value(std::forward<decltype(resp)>(resp));
260
274
  });
261
275
  auto resp = cb_wait_for_future(f);
276
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
262
277
  if (resp.ctx.ec) {
263
278
  if (!resp.errors.empty()) {
264
279
  const auto& first_error = resp.errors.front();
@@ -298,7 +313,10 @@ cb_Backend_query_index_drop(VALUE self, VALUE bucket_name, VALUE index_name, VAL
298
313
  }
299
314
 
300
315
  VALUE
301
- cb_Backend_query_index_create_primary(VALUE self, VALUE bucket_name, VALUE options)
316
+ cb_Backend_query_index_create_primary(VALUE self,
317
+ VALUE bucket_name,
318
+ VALUE options,
319
+ VALUE observability_handler)
302
320
  {
303
321
  auto cluster = cb_backend_to_core_api_cluster(self);
304
322
 
@@ -342,6 +360,7 @@ cb_Backend_query_index_create_primary(VALUE self, VALUE bucket_name, VALUE optio
342
360
  req.collection_name = cb_string_new(collection_name);
343
361
  }
344
362
  }
363
+ auto parent_span = cb_create_parent_span(req, self);
345
364
 
346
365
  std::promise<core::operations::management::query_index_create_response> promise;
347
366
  auto f = promise.get_future();
@@ -349,6 +368,7 @@ cb_Backend_query_index_create_primary(VALUE self, VALUE bucket_name, VALUE optio
349
368
  promise.set_value(std::forward<decltype(resp)>(resp));
350
369
  });
351
370
  auto resp = cb_wait_for_future(f);
371
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
352
372
  if (resp.ctx.ec) {
353
373
  if (!resp.errors.empty()) {
354
374
  const auto& first_error = resp.errors.front();
@@ -387,7 +407,10 @@ cb_Backend_query_index_create_primary(VALUE self, VALUE bucket_name, VALUE optio
387
407
  }
388
408
 
389
409
  VALUE
390
- cb_Backend_query_index_drop_primary(VALUE self, VALUE bucket_name, VALUE options)
410
+ cb_Backend_query_index_drop_primary(VALUE self,
411
+ VALUE bucket_name,
412
+ VALUE options,
413
+ VALUE observability_handler)
391
414
  {
392
415
  auto cluster = cb_backend_to_core_api_cluster(self);
393
416
 
@@ -424,6 +447,7 @@ cb_Backend_query_index_drop_primary(VALUE self, VALUE bucket_name, VALUE options
424
447
  req.collection_name = cb_string_new(collection_name);
425
448
  }
426
449
  }
450
+ auto parent_span = cb_create_parent_span(req, self);
427
451
 
428
452
  std::promise<core::operations::management::query_index_drop_response> promise;
429
453
  auto f = promise.get_future();
@@ -431,6 +455,7 @@ cb_Backend_query_index_drop_primary(VALUE self, VALUE bucket_name, VALUE options
431
455
  promise.set_value(std::forward<decltype(resp)>(resp));
432
456
  });
433
457
  auto resp = cb_wait_for_future(f);
458
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
434
459
  if (resp.ctx.ec) {
435
460
  if (!resp.errors.empty()) {
436
461
  const auto& first_error = resp.errors.front();
@@ -468,7 +493,10 @@ cb_Backend_query_index_drop_primary(VALUE self, VALUE bucket_name, VALUE options
468
493
  }
469
494
 
470
495
  VALUE
471
- cb_Backend_query_index_build_deferred(VALUE self, VALUE bucket_name, VALUE options)
496
+ cb_Backend_query_index_build_deferred(VALUE self,
497
+ VALUE bucket_name,
498
+ VALUE options,
499
+ VALUE observability_handler)
472
500
  {
473
501
  auto cluster = cb_backend_to_core_api_cluster(self);
474
502
 
@@ -492,6 +520,7 @@ cb_Backend_query_index_build_deferred(VALUE self, VALUE bucket_name, VALUE optio
492
520
  req.collection_name = cb_string_new(collection_name);
493
521
  }
494
522
  }
523
+ auto parent_span = cb_create_parent_span(req, self);
495
524
 
496
525
  std::promise<core::operations::management::query_index_build_deferred_response> promise;
497
526
  auto f = promise.get_future();
@@ -500,14 +529,15 @@ cb_Backend_query_index_build_deferred(VALUE self, VALUE bucket_name, VALUE optio
500
529
  promise.set_value(std::forward<decltype(resp)>(resp));
501
530
  });
502
531
  auto resp = cb_wait_for_future(f);
532
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
503
533
  if (resp.ctx.ec) {
504
534
  if (!resp.errors.empty()) {
505
535
  const auto& first_error = resp.errors.front();
506
536
  cb_throw_error(
507
537
  resp.ctx,
508
538
  fmt::format(R"(unable to build deferred indexes on the bucket "{}" ({}: {}))",
539
+ req.bucket_name,
509
540
  first_error.code,
510
-
511
541
  first_error.message));
512
542
  } else {
513
543
  cb_throw_error(
@@ -568,7 +598,7 @@ cb_for_each_raw_param(VALUE key, VALUE value, VALUE arg)
568
598
  }
569
599
 
570
600
  VALUE
571
- cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
601
+ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options, VALUE observability_handler)
572
602
  {
573
603
  auto cluster = cb_backend_to_core_api_cluster(self);
574
604
 
@@ -679,6 +709,7 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
679
709
  // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
680
710
  rb_hash_foreach(raw_params, cb_for_each_raw_param, reinterpret_cast<VALUE>(&req));
681
711
  }
712
+ auto parent_span = cb_create_parent_span(req, self);
682
713
 
683
714
  std::promise<core::operations::query_response> promise;
684
715
  auto f = promise.get_future();
@@ -686,6 +717,7 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
686
717
  promise.set_value(std::forward<decltype(resp)>(resp));
687
718
  });
688
719
  auto resp = cb_wait_for_future(f);
720
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
689
721
  if (resp.ctx.ec) {
690
722
  if (resp.meta.errors && !resp.meta.errors->empty()) {
691
723
  const auto& first_error = resp.meta.errors->front();
@@ -757,7 +789,8 @@ cb_Backend_collection_query_index_get_all(VALUE self,
757
789
  VALUE bucket_name,
758
790
  VALUE scope_name,
759
791
  VALUE collection_name,
760
- VALUE options)
792
+ VALUE options,
793
+ VALUE observability_handler)
761
794
  {
762
795
  auto cluster = cb_backend_to_core_api_cluster(self);
763
796
 
@@ -774,12 +807,14 @@ cb_Backend_collection_query_index_get_all(VALUE self,
774
807
  req.scope_name = cb_string_new(scope_name);
775
808
  req.collection_name = cb_string_new(collection_name);
776
809
  cb_extract_timeout(req, options);
810
+ auto parent_span = cb_create_parent_span(req, self);
777
811
  std::promise<core::operations::management::query_index_get_all_response> promise;
778
812
  auto f = promise.get_future();
779
813
  cluster.execute(req, [promise = std::move(promise)](auto&& resp) mutable {
780
814
  promise.set_value(std::forward<decltype(resp)>(resp));
781
815
  });
782
816
  auto resp = cb_wait_for_future(f);
817
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
783
818
  if (resp.ctx.ec) {
784
819
  cb_throw_error(resp.ctx,
785
820
  fmt::format("unable to get list of the indexes of the collection \"{}\"",
@@ -836,7 +871,8 @@ cb_Backend_collection_query_index_create(VALUE self,
836
871
  VALUE collection_name,
837
872
  VALUE index_name,
838
873
  VALUE keys,
839
- VALUE options)
874
+ VALUE options,
875
+ VALUE observability_handler)
840
876
  {
841
877
  auto cluster = cb_backend_to_core_api_cluster(self);
842
878
  Check_Type(bucket_name, T_STRING);
@@ -892,6 +928,7 @@ cb_Backend_collection_query_index_create(VALUE self,
892
928
  req.collection_name = cb_string_new(collection_name);
893
929
  }
894
930
  }
931
+ auto parent_span = cb_create_parent_span(req, self);
895
932
 
896
933
  std::promise<core::operations::management::query_index_create_response> promise;
897
934
  auto f = promise.get_future();
@@ -899,6 +936,7 @@ cb_Backend_collection_query_index_create(VALUE self,
899
936
  promise.set_value(std::forward<decltype(resp)>(resp));
900
937
  });
901
938
  auto resp = cb_wait_for_future(f);
939
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
902
940
  if (resp.ctx.ec) {
903
941
  if (!resp.errors.empty()) {
904
942
  const auto& first_error = resp.errors.front();
@@ -943,7 +981,8 @@ cb_Backend_collection_query_index_drop(VALUE self,
943
981
  VALUE scope_name,
944
982
  VALUE collection_name,
945
983
  VALUE index_name,
946
- VALUE options)
984
+ VALUE options,
985
+ VALUE observability_handler)
947
986
  {
948
987
  auto cluster = cb_backend_to_core_api_cluster(self);
949
988
 
@@ -979,6 +1018,7 @@ cb_Backend_collection_query_index_drop(VALUE self,
979
1018
  req.collection_name = cb_string_new(collection_name);
980
1019
  }
981
1020
  }
1021
+ auto parent_span = cb_create_parent_span(req, self);
982
1022
 
983
1023
  std::promise<core::operations::management::query_index_drop_response> promise;
984
1024
  auto f = promise.get_future();
@@ -986,6 +1026,7 @@ cb_Backend_collection_query_index_drop(VALUE self,
986
1026
  promise.set_value(std::forward<decltype(resp)>(resp));
987
1027
  });
988
1028
  auto resp = cb_wait_for_future(f);
1029
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
989
1030
  if (resp.ctx.ec) {
990
1031
  if (!resp.errors.empty()) {
991
1032
  const auto& first_error = resp.errors.front();
@@ -1030,7 +1071,8 @@ cb_Backend_collection_query_index_create_primary(VALUE self,
1030
1071
  VALUE bucket_name,
1031
1072
  VALUE scope_name,
1032
1073
  VALUE collection_name,
1033
- VALUE options)
1074
+ VALUE options,
1075
+ VALUE observability_handler)
1034
1076
  {
1035
1077
  auto cluster = cb_backend_to_core_api_cluster(self);
1036
1078
 
@@ -1078,6 +1120,7 @@ cb_Backend_collection_query_index_create_primary(VALUE self,
1078
1120
  req.collection_name = cb_string_new(collection_name);
1079
1121
  }
1080
1122
  }
1123
+ auto parent_span = cb_create_parent_span(req, self);
1081
1124
 
1082
1125
  std::promise<core::operations::management::query_index_create_response> promise;
1083
1126
  auto f = promise.get_future();
@@ -1085,6 +1128,7 @@ cb_Backend_collection_query_index_create_primary(VALUE self,
1085
1128
  promise.set_value(std::forward<decltype(resp)>(resp));
1086
1129
  });
1087
1130
  auto resp = cb_wait_for_future(f);
1131
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
1088
1132
  if (resp.ctx.ec) {
1089
1133
  if (!resp.errors.empty()) {
1090
1134
  const auto& first_error = resp.errors.front();
@@ -1127,7 +1171,8 @@ cb_Backend_collection_query_index_drop_primary(VALUE self,
1127
1171
  VALUE bucket_name,
1128
1172
  VALUE scope_name,
1129
1173
  VALUE collection_name,
1130
- VALUE options)
1174
+ VALUE options,
1175
+ VALUE observability_handler)
1131
1176
  {
1132
1177
  auto cluster = cb_backend_to_core_api_cluster(self);
1133
1178
 
@@ -1168,6 +1213,7 @@ cb_Backend_collection_query_index_drop_primary(VALUE self,
1168
1213
  req.collection_name = cb_string_new(collection_name);
1169
1214
  }
1170
1215
  }
1216
+ auto parent_span = cb_create_parent_span(req, self);
1171
1217
 
1172
1218
  std::promise<core::operations::management::query_index_drop_response> promise;
1173
1219
  auto f = promise.get_future();
@@ -1175,6 +1221,7 @@ cb_Backend_collection_query_index_drop_primary(VALUE self,
1175
1221
  promise.set_value(std::forward<decltype(resp)>(resp));
1176
1222
  });
1177
1223
  auto resp = cb_wait_for_future(f);
1224
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
1178
1225
  if (resp.ctx.ec) {
1179
1226
  if (!resp.errors.empty()) {
1180
1227
  const auto& first_error = resp.errors.front();
@@ -1217,7 +1264,8 @@ cb_Backend_collection_query_index_build_deferred(VALUE self,
1217
1264
  VALUE bucket_name,
1218
1265
  VALUE scope_name,
1219
1266
  VALUE collection_name,
1220
- VALUE options)
1267
+ VALUE options,
1268
+ VALUE observability_handler)
1221
1269
  {
1222
1270
  auto cluster = cb_backend_to_core_api_cluster(self);
1223
1271
 
@@ -1234,6 +1282,7 @@ cb_Backend_collection_query_index_build_deferred(VALUE self,
1234
1282
  req.bucket_name = cb_string_new(bucket_name);
1235
1283
  req.scope_name = cb_string_new(scope_name);
1236
1284
  req.collection_name = cb_string_new(collection_name);
1285
+ auto parent_span = cb_create_parent_span(req, self);
1237
1286
 
1238
1287
  std::promise<core::operations::management::query_index_build_deferred_response> promise;
1239
1288
  auto f = promise.get_future();
@@ -1241,6 +1290,7 @@ cb_Backend_collection_query_index_build_deferred(VALUE self,
1241
1290
  promise.set_value(std::forward<decltype(resp)>(resp));
1242
1291
  });
1243
1292
  auto resp = cb_wait_for_future(f);
1293
+ cb_add_core_spans(observability_handler, std::move(parent_span), resp.ctx.retry_attempts);
1244
1294
  if (resp.ctx.ec) {
1245
1295
  if (!resp.errors.empty()) {
1246
1296
  const auto& first_error = resp.errors.front();
@@ -1283,34 +1333,34 @@ cb_Backend_collection_query_index_build_deferred(VALUE self,
1283
1333
  void
1284
1334
  init_query(VALUE cBackend)
1285
1335
  {
1286
- rb_define_method(cBackend, "document_query", cb_Backend_document_query, 2);
1336
+ rb_define_method(cBackend, "document_query", cb_Backend_document_query, 3);
1287
1337
 
1288
- rb_define_method(cBackend, "query_index_get_all", cb_Backend_query_index_get_all, 2);
1289
- rb_define_method(cBackend, "query_index_create", cb_Backend_query_index_create, 4);
1338
+ rb_define_method(cBackend, "query_index_get_all", cb_Backend_query_index_get_all, 3);
1339
+ rb_define_method(cBackend, "query_index_create", cb_Backend_query_index_create, 5);
1290
1340
  rb_define_method(
1291
- cBackend, "query_index_create_primary", cb_Backend_query_index_create_primary, 2);
1292
- rb_define_method(cBackend, "query_index_drop", cb_Backend_query_index_drop, 3);
1293
- rb_define_method(cBackend, "query_index_drop_primary", cb_Backend_query_index_drop_primary, 2);
1341
+ cBackend, "query_index_create_primary", cb_Backend_query_index_create_primary, 3);
1342
+ rb_define_method(cBackend, "query_index_drop", cb_Backend_query_index_drop, 4);
1343
+ rb_define_method(cBackend, "query_index_drop_primary", cb_Backend_query_index_drop_primary, 3);
1294
1344
  rb_define_method(
1295
- cBackend, "query_index_build_deferred", cb_Backend_query_index_build_deferred, 2);
1345
+ cBackend, "query_index_build_deferred", cb_Backend_query_index_build_deferred, 3);
1296
1346
 
1297
1347
  rb_define_method(
1298
- cBackend, "collection_query_index_get_all", cb_Backend_collection_query_index_get_all, 4);
1348
+ cBackend, "collection_query_index_get_all", cb_Backend_collection_query_index_get_all, 5);
1299
1349
  rb_define_method(
1300
- cBackend, "collection_query_index_create", cb_Backend_collection_query_index_create, 6);
1350
+ cBackend, "collection_query_index_create", cb_Backend_collection_query_index_create, 7);
1301
1351
  rb_define_method(cBackend,
1302
1352
  "collection_query_index_create_primary",
1303
1353
  cb_Backend_collection_query_index_create_primary,
1304
- 4);
1354
+ 5);
1305
1355
  rb_define_method(
1306
- cBackend, "collection_query_index_drop", cb_Backend_collection_query_index_drop, 5);
1356
+ cBackend, "collection_query_index_drop", cb_Backend_collection_query_index_drop, 6);
1307
1357
  rb_define_method(cBackend,
1308
1358
  "collection_query_index_drop_primary",
1309
1359
  cb_Backend_collection_query_index_drop_primary,
1310
- 4);
1360
+ 5);
1311
1361
  rb_define_method(cBackend,
1312
1362
  "collection_query_index_build_deferred",
1313
1363
  cb_Backend_collection_query_index_build_deferred,
1314
- 4);
1364
+ 5);
1315
1365
  }
1316
1366
  } // namespace couchbase::ruby