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
@@ -19,6 +19,8 @@
19
19
 
20
20
  #include "core/cluster.hxx"
21
21
  #include "core/impl/error.hxx"
22
+ #include "core/impl/invoke_with_node_id.hxx"
23
+ #include "core/impl/observability_recorder.hxx"
22
24
  #include "core/operations/document_append.hxx"
23
25
  #include "core/operations/document_decrement.hxx"
24
26
  #include "core/operations/document_increment.hxx"
@@ -28,6 +30,9 @@
28
30
  #include "core/operations/document_remove.hxx"
29
31
  #include "core/operations/document_replace.hxx"
30
32
  #include "core/operations/document_upsert.hxx"
33
+ #include "core/tracing/attribute_helpers.hxx"
34
+ #include "core/tracing/constants.hxx"
35
+ #include "core/tracing/tracer_wrapper.hxx"
31
36
  #include "observe_poll.hxx"
32
37
 
33
38
  #include <couchbase/append_options.hxx>
@@ -49,6 +54,8 @@
49
54
 
50
55
  namespace couchbase
51
56
  {
57
+ using core::impl::invoke_with_node_id;
58
+
52
59
  class binary_collection_impl : public std::enable_shared_from_this<binary_collection_impl>
53
60
  {
54
61
  public:
@@ -83,6 +90,9 @@ public:
83
90
  append_options::built options,
84
91
  append_handler&& handler) const
85
92
  {
93
+ auto obs_rec = create_observability_recorder(
94
+ core::tracing::operation::mcbp_append, options.parent_span, options.durability_level);
95
+
86
96
  auto id = core::document_id{
87
97
  bucket_name_,
88
98
  scope_name_,
@@ -90,23 +100,29 @@ public:
90
100
  std::move(document_key),
91
101
  };
92
102
  if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
103
+ core::operations::append_request request{
104
+ std::move(id),
105
+ std::move(data),
106
+ {},
107
+ {},
108
+ options.cas,
109
+ options.durability_level,
110
+ options.timeout,
111
+ { options.retry_strategy },
112
+ obs_rec->operation_span(),
113
+ };
93
114
  return core_.execute(
94
- core::operations::append_request{
95
- std::move(id),
96
- std::move(data),
97
- {},
98
- {},
99
- options.cas,
100
- options.durability_level,
101
- options.timeout,
102
- { options.retry_strategy },
103
- },
104
- [handler = std::move(handler)](auto&& resp) mutable {
115
+ std::move(request),
116
+ [obs_rec = std::move(obs_rec), handler = std::move(handler)](auto&& resp) mutable {
117
+ obs_rec->finish(resp.ctx.retry_attempts(), resp.ctx.ec());
105
118
  if (resp.ctx.ec()) {
106
- return handler(core::impl::make_error(std::move(resp.ctx)), mutation_result{});
119
+ invoke_with_node_id(
120
+ std::move(handler), core::impl::make_error(std::move(resp.ctx)), mutation_result{});
121
+ return;
107
122
  }
108
- return handler(core::impl::make_error(std::move(resp.ctx)),
109
- mutation_result{ resp.cas, std::move(resp.token) });
123
+ invoke_with_node_id(std::move(handler),
124
+ core::impl::make_error(std::move(resp.ctx)),
125
+ mutation_result{ resp.cas, std::move(resp.token) });
110
126
  });
111
127
  }
112
128
 
@@ -119,34 +135,46 @@ public:
119
135
  durability_level::none,
120
136
  options.timeout,
121
137
  { options.retry_strategy },
138
+ obs_rec->operation_span(),
122
139
  };
123
- return core_.execute(std::move(request),
124
- [core = core_, id = std::move(id), options, handler = std::move(handler)](
125
- auto&& resp) mutable {
126
- if (resp.ctx.ec()) {
127
- return handler(core::impl::make_error(std::move(resp.ctx)),
128
- mutation_result{ resp.cas, std::move(resp.token) });
129
- }
130
-
131
- auto token = resp.token;
132
- core::impl::initiate_observe_poll(
133
- core,
134
- std::move(id),
135
- token,
136
- options.timeout,
137
- options.persist_to,
138
- options.replicate_to,
139
- [resp = std::forward<decltype(resp)>(resp),
140
- handler = std::move(handler)](std::error_code ec) mutable {
141
- if (ec) {
142
- resp.ctx.override_ec(ec);
143
- return handler(core::impl::make_error(std::move(resp.ctx)),
144
- mutation_result{});
145
- }
146
- return handler(core::impl::make_error(std::move(resp.ctx)),
147
- mutation_result{ resp.cas, std::move(resp.token) });
148
- });
149
- });
140
+ return core_.execute(
141
+ std::move(request),
142
+ [core = core_,
143
+ id = std::move(id),
144
+ options,
145
+ obs_rec = std::move(obs_rec),
146
+ handler = std::move(handler)](auto&& resp) mutable {
147
+ if (resp.ctx.ec()) {
148
+ obs_rec->finish(resp.ctx.retry_attempts(), resp.ctx.ec());
149
+ invoke_with_node_id(std::move(handler),
150
+ core::impl::make_error(std::move(resp.ctx)),
151
+ mutation_result{ resp.cas, std::move(resp.token) });
152
+ return;
153
+ }
154
+
155
+ auto token = resp.token;
156
+ core::impl::initiate_observe_poll(
157
+ core,
158
+ std::move(id),
159
+ token,
160
+ options.timeout,
161
+ options.persist_to,
162
+ options.replicate_to,
163
+ [obs_rec = std::move(obs_rec),
164
+ resp = std::forward<decltype(resp)>(resp),
165
+ handler = std::move(handler)](std::error_code ec) mutable {
166
+ obs_rec->finish(resp.ctx.retry_attempts(), ec);
167
+ if (ec) {
168
+ resp.ctx.override_ec(ec);
169
+ invoke_with_node_id(
170
+ std::move(handler), core::impl::make_error(std::move(resp.ctx)), mutation_result{});
171
+ return;
172
+ }
173
+ invoke_with_node_id(std::move(handler),
174
+ core::impl::make_error(std::move(resp.ctx)),
175
+ mutation_result{ resp.cas, std::move(resp.token) });
176
+ });
177
+ });
150
178
  }
151
179
 
152
180
  void prepend(std::string document_key,
@@ -154,6 +182,9 @@ public:
154
182
  prepend_options::built options,
155
183
  prepend_handler&& handler) const
156
184
  {
185
+ auto obs_rec = create_observability_recorder(
186
+ core::tracing::operation::mcbp_prepend, options.parent_span, options.durability_level);
187
+
157
188
  auto id = core::document_id{
158
189
  bucket_name_,
159
190
  scope_name_,
@@ -161,23 +192,29 @@ public:
161
192
  std::move(document_key),
162
193
  };
163
194
  if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
195
+ core::operations::prepend_request request{
196
+ std::move(id),
197
+ std::move(data),
198
+ {},
199
+ {},
200
+ options.cas,
201
+ options.durability_level,
202
+ options.timeout,
203
+ { options.retry_strategy },
204
+ obs_rec->operation_span(),
205
+ };
164
206
  return core_.execute(
165
- core::operations::prepend_request{
166
- std::move(id),
167
- std::move(data),
168
- {},
169
- {},
170
- options.cas,
171
- options.durability_level,
172
- options.timeout,
173
- { options.retry_strategy },
174
- },
175
- [handler = std::move(handler)](auto&& resp) mutable {
207
+ std::move(request),
208
+ [obs_rec = std::move(obs_rec), handler = std::move(handler)](auto&& resp) mutable {
209
+ obs_rec->finish(resp.ctx.retry_attempts(), resp.ctx.ec());
176
210
  if (resp.ctx.ec()) {
177
- return handler(core::impl::make_error(std::move(resp.ctx)), mutation_result{});
211
+ invoke_with_node_id(
212
+ std::move(handler), core::impl::make_error(std::move(resp.ctx)), mutation_result{});
213
+ return;
178
214
  }
179
- return handler(core::impl::make_error(std::move(resp.ctx)),
180
- mutation_result{ resp.cas, std::move(resp.token) });
215
+ invoke_with_node_id(std::move(handler),
216
+ core::impl::make_error(std::move(resp.ctx)),
217
+ mutation_result{ resp.cas, std::move(resp.token) });
181
218
  });
182
219
  }
183
220
 
@@ -190,40 +227,55 @@ public:
190
227
  durability_level::none,
191
228
  options.timeout,
192
229
  { options.retry_strategy },
230
+ obs_rec->operation_span(),
193
231
  };
194
- return core_.execute(std::move(request),
195
- [core = core_, id = std::move(id), options, handler = std::move(handler)](
196
- auto&& resp) mutable {
197
- if (resp.ctx.ec()) {
198
- return handler(core::impl::make_error(std::move(resp.ctx)),
199
- mutation_result{ resp.cas, std::move(resp.token) });
200
- }
201
-
202
- auto token = resp.token;
203
- core::impl::initiate_observe_poll(
204
- core,
205
- std::move(id),
206
- token,
207
- options.timeout,
208
- options.persist_to,
209
- options.replicate_to,
210
- [resp = std::forward<decltype(resp)>(resp),
211
- handler = std::move(handler)](std::error_code ec) mutable {
212
- if (ec) {
213
- resp.ctx.override_ec(ec);
214
- return handler(core::impl::make_error(std::move(resp.ctx)),
215
- mutation_result{});
216
- }
217
- return handler(core::impl::make_error(std::move(resp.ctx)),
218
- mutation_result{ resp.cas, std::move(resp.token) });
219
- });
220
- });
232
+ return core_.execute(
233
+ std::move(request),
234
+ [obs_rec = std::move(obs_rec),
235
+ core = core_,
236
+ id = std::move(id),
237
+ options,
238
+ handler = std::move(handler)](auto&& resp) mutable {
239
+ if (resp.ctx.ec()) {
240
+ obs_rec->finish(resp.ctx.retry_attempts(), resp.ctx.ec());
241
+ invoke_with_node_id(std::move(handler),
242
+ core::impl::make_error(std::move(resp.ctx)),
243
+ mutation_result{ resp.cas, std::move(resp.token) });
244
+ return;
245
+ }
246
+
247
+ auto token = resp.token;
248
+ core::impl::initiate_observe_poll(
249
+ core,
250
+ std::move(id),
251
+ token,
252
+ options.timeout,
253
+ options.persist_to,
254
+ options.replicate_to,
255
+ [obs_rec = std::move(obs_rec),
256
+ resp = std::forward<decltype(resp)>(resp),
257
+ handler = std::move(handler)](std::error_code ec) mutable {
258
+ obs_rec->finish(resp.ctx.retry_attempts(), ec);
259
+ if (ec) {
260
+ resp.ctx.override_ec(ec);
261
+ invoke_with_node_id(
262
+ std::move(handler), core::impl::make_error(std::move(resp.ctx)), mutation_result{});
263
+ return;
264
+ }
265
+ invoke_with_node_id(std::move(handler),
266
+ core::impl::make_error(std::move(resp.ctx)),
267
+ mutation_result{ resp.cas, std::move(resp.token) });
268
+ });
269
+ });
221
270
  }
222
271
 
223
272
  void decrement(std::string document_key,
224
273
  decrement_options::built options,
225
274
  decrement_handler&& handler) const
226
275
  {
276
+ auto obs_rec = create_observability_recorder(
277
+ core::tracing::operation::mcbp_decrement, options.parent_span, options.durability_level);
278
+
227
279
  auto id = core::document_id{
228
280
  bucket_name_,
229
281
  scope_name_,
@@ -231,24 +283,31 @@ public:
231
283
  std::move(document_key),
232
284
  };
233
285
  if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
286
+ core::operations::decrement_request request{
287
+ std::move(id),
288
+ {},
289
+ {},
290
+ options.expiry,
291
+ options.delta,
292
+ options.initial_value,
293
+ options.durability_level,
294
+ options.timeout,
295
+ { options.retry_strategy },
296
+ obs_rec->operation_span(),
297
+ };
234
298
  return core_.execute(
235
- core::operations::decrement_request{
236
- std::move(id),
237
- {},
238
- {},
239
- options.expiry,
240
- options.delta,
241
- options.initial_value,
242
- options.durability_level,
243
- options.timeout,
244
- { options.retry_strategy },
245
- },
246
- [handler = std::move(handler)](auto&& resp) mutable {
299
+ std::move(request),
300
+ [obs_rec = std::move(obs_rec), handler = std::move(handler)](auto&& resp) mutable {
301
+ obs_rec->finish(resp.ctx.retry_attempts(), resp.ctx.ec());
302
+
247
303
  if (resp.ctx.ec()) {
248
- return handler(core::impl::make_error(std::move(resp.ctx)), counter_result{});
304
+ invoke_with_node_id(
305
+ std::move(handler), core::impl::make_error(std::move(resp.ctx)), counter_result{});
306
+ return;
249
307
  }
250
- return handler(core::impl::make_error(std::move(resp.ctx)),
251
- counter_result{ resp.cas, std::move(resp.token), resp.content });
308
+ invoke_with_node_id(std::move(handler),
309
+ core::impl::make_error(std::move(resp.ctx)),
310
+ counter_result{ resp.cas, std::move(resp.token), resp.content });
252
311
  });
253
312
  }
254
313
 
@@ -262,14 +321,21 @@ public:
262
321
  durability_level::none,
263
322
  options.timeout,
264
323
  { options.retry_strategy },
324
+ obs_rec->operation_span(),
265
325
  };
266
326
  return core_.execute(
267
327
  std::move(request),
268
- [core = core_, id = std::move(id), options, handler = std::move(handler)](
269
- auto&& resp) mutable {
328
+ [obs_rec = std::move(obs_rec),
329
+ core = core_,
330
+ id = std::move(id),
331
+ options,
332
+ handler = std::move(handler)](auto&& resp) mutable {
270
333
  if (resp.ctx.ec()) {
271
- return handler(core::impl::make_error(std::move(resp.ctx)),
272
- counter_result{ resp.cas, std::move(resp.token), resp.content });
334
+ obs_rec->finish(resp.ctx.retry_attempts(), resp.ctx.ec());
335
+ invoke_with_node_id(std::move(handler),
336
+ core::impl::make_error(std::move(resp.ctx)),
337
+ counter_result{ resp.cas, std::move(resp.token), resp.content });
338
+ return;
273
339
  }
274
340
 
275
341
  auto token = resp.token;
@@ -280,14 +346,19 @@ public:
280
346
  options.timeout,
281
347
  options.persist_to,
282
348
  options.replicate_to,
283
- [resp = std::forward<decltype(resp)>(resp),
349
+ [obs_rec = std::move(obs_rec),
350
+ resp = std::forward<decltype(resp)>(resp),
284
351
  handler = std::move(handler)](std::error_code ec) mutable {
352
+ obs_rec->finish(resp.ctx.retry_attempts(), ec);
285
353
  if (ec) {
286
354
  resp.ctx.override_ec(ec);
287
- return handler(core::impl::make_error(std::move(resp.ctx)), counter_result{});
355
+ invoke_with_node_id(
356
+ std::move(handler), core::impl::make_error(std::move(resp.ctx)), counter_result{});
357
+ return;
288
358
  }
289
- return handler(core::impl::make_error(std::move(resp.ctx)),
290
- counter_result{ resp.cas, std::move(resp.token), resp.content });
359
+ invoke_with_node_id(std::move(handler),
360
+ core::impl::make_error(std::move(resp.ctx)),
361
+ counter_result{ resp.cas, std::move(resp.token), resp.content });
291
362
  });
292
363
  });
293
364
  }
@@ -296,6 +367,9 @@ public:
296
367
  increment_options::built options,
297
368
  increment_handler&& handler) const
298
369
  {
370
+ auto obs_rec = create_observability_recorder(
371
+ core::tracing::operation::mcbp_increment, options.parent_span, options.durability_level);
372
+
299
373
  auto id = core::document_id{
300
374
  bucket_name_,
301
375
  scope_name_,
@@ -303,24 +377,30 @@ public:
303
377
  std::move(document_key),
304
378
  };
305
379
  if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
380
+ core::operations::increment_request request{
381
+ std::move(id),
382
+ {},
383
+ {},
384
+ options.expiry,
385
+ options.delta,
386
+ options.initial_value,
387
+ options.durability_level,
388
+ options.timeout,
389
+ { options.retry_strategy },
390
+ obs_rec->operation_span(),
391
+ };
306
392
  return core_.execute(
307
- core::operations::increment_request{
308
- std::move(id),
309
- {},
310
- {},
311
- options.expiry,
312
- options.delta,
313
- options.initial_value,
314
- options.durability_level,
315
- options.timeout,
316
- { options.retry_strategy },
317
- },
318
- [handler = std::move(handler)](auto&& resp) mutable {
393
+ std::move(request),
394
+ [obs_rec = std::move(obs_rec), handler = std::move(handler)](auto&& resp) mutable {
395
+ obs_rec->finish(resp.ctx.retry_attempts(), resp.ctx.ec());
319
396
  if (resp.ctx.ec()) {
320
- return handler(core::impl::make_error(std::move(resp.ctx)), counter_result{});
397
+ invoke_with_node_id(
398
+ std::move(handler), core::impl::make_error(std::move(resp.ctx)), counter_result{});
399
+ return;
321
400
  }
322
- return handler(core::impl::make_error(std::move(resp.ctx)),
323
- counter_result{ resp.cas, std::move(resp.token), resp.content });
401
+ invoke_with_node_id(std::move(handler),
402
+ core::impl::make_error(std::move(resp.ctx)),
403
+ counter_result{ resp.cas, std::move(resp.token), resp.content });
324
404
  });
325
405
  }
326
406
 
@@ -334,14 +414,21 @@ public:
334
414
  durability_level::none,
335
415
  options.timeout,
336
416
  { options.retry_strategy },
417
+ obs_rec->operation_span(),
337
418
  };
338
419
  return core_.execute(
339
420
  std::move(request),
340
- [core = core_, id = std::move(id), options, handler = std::move(handler)](
341
- auto&& resp) mutable {
421
+ [obs_rec = std::move(obs_rec),
422
+ core = core_,
423
+ id = std::move(id),
424
+ options,
425
+ handler = std::move(handler)](auto&& resp) mutable {
342
426
  if (resp.ctx.ec()) {
343
- return handler(core::impl::make_error(std::move(resp.ctx)),
344
- counter_result{ resp.cas, std::move(resp.token), resp.content });
427
+ obs_rec->finish(resp.ctx.retry_attempts(), resp.ctx.ec());
428
+ invoke_with_node_id(std::move(handler),
429
+ core::impl::make_error(std::move(resp.ctx)),
430
+ counter_result{ resp.cas, std::move(resp.token), resp.content });
431
+ return;
345
432
  }
346
433
 
347
434
  auto token = resp.token;
@@ -352,19 +439,43 @@ public:
352
439
  options.timeout,
353
440
  options.persist_to,
354
441
  options.replicate_to,
355
- [resp = std::forward<decltype(resp)>(resp),
442
+ [obs_rec = std::move(obs_rec),
443
+ resp = std::forward<decltype(resp)>(resp),
356
444
  handler = std::move(handler)](std::error_code ec) mutable {
445
+ obs_rec->finish(resp.ctx.retry_attempts(), ec);
357
446
  if (ec) {
358
447
  resp.ctx.override_ec(ec);
359
- return handler(core::impl::make_error(std::move(resp.ctx)), counter_result{});
448
+ invoke_with_node_id(
449
+ std::move(handler), core::impl::make_error(std::move(resp.ctx)), counter_result{});
450
+ return;
360
451
  }
361
- return handler(core::impl::make_error(std::move(resp.ctx)),
362
- counter_result{ resp.cas, std::move(resp.token), resp.content });
452
+ invoke_with_node_id(std::move(handler),
453
+ core::impl::make_error(std::move(resp.ctx)),
454
+ counter_result{ resp.cas, std::move(resp.token), resp.content });
363
455
  });
364
456
  });
365
457
  }
366
458
 
367
459
  private:
460
+ auto create_observability_recorder(const std::string& operation_name,
461
+ const std::shared_ptr<tracing::request_span>& parent_span,
462
+ const std::optional<durability_level> durability = {}) const
463
+ -> std::unique_ptr<core::impl::observability_recorder>
464
+ {
465
+ auto rec = core::impl::observability_recorder::create(
466
+ operation_name, parent_span, core_.tracer(), core_.meter());
467
+
468
+ rec->with_service(core::tracing::service::key_value);
469
+ rec->with_bucket_name(bucket_name_);
470
+ rec->with_scope_name(scope_name_);
471
+ rec->with_collection_name(name_);
472
+ if (durability.has_value()) {
473
+ rec->with_durability(durability.value());
474
+ }
475
+
476
+ return rec;
477
+ }
478
+
368
479
  core::cluster core_;
369
480
  std::string bucket_name_;
370
481
  std::string scope_name_;