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
@@ -37,6 +37,8 @@ module Couchbase
37
37
  @collection = collection
38
38
  @options = options
39
39
  @cas = 0
40
+ @observability = @collection.instance_variable_get(:@observability)
41
+ @observability = Observability::Wrapper.new if @observability.nil?
40
42
  end
41
43
 
42
44
  # Calls the given block once for each element in the list, passing that element as a parameter.
@@ -44,38 +46,45 @@ module Couchbase
44
46
  # @yieldparam [Object] item
45
47
  #
46
48
  # @return [CouchbaseList, Enumerable]
47
- def each(&)
49
+ def each(parent_span: nil, &)
48
50
  if block_given?
49
- begin
50
- result = @collection.get(@id, @options.get_options)
51
- current = result.content
52
- @cas = result.cas
53
- rescue Error::DocumentNotFound
54
- current = []
55
- @cas = 0
56
- end
51
+ current =
52
+ @observability.record_operation(Observability::OP_LIST_EACH, parent_span, self) do |obs_handler|
53
+ options = @options.get_options.clone
54
+ options.parent_span = obs_handler.op_span
55
+ result = @collection.get(@id, options)
56
+ @cas = result.cas
57
+ result.content
58
+ rescue Error::DocumentNotFound
59
+ @cas = 0
60
+ []
61
+ end
57
62
  current.each(&)
58
63
  self
59
64
  else
60
- enum_for(:each)
65
+ enum_for(:each, parent_span: parent_span)
61
66
  end
62
67
  end
63
68
 
64
69
  # @return [Integer] returns the number of elements in the list.
65
- def length
66
- result = @collection.lookup_in(@id, [
67
- LookupInSpec.count(""),
68
- ], @options.lookup_in_options)
69
- result.content(0)
70
- rescue Error::DocumentNotFound
71
- 0
70
+ def length(parent_span: nil)
71
+ @observability.record_operation(Observability::OP_LIST_LENGTH, parent_span, self) do |obs_handler|
72
+ options = @options.lookup_in_options.clone
73
+ options.parent_span = obs_handler.op_span
74
+ result = @collection.lookup_in(@id, [
75
+ LookupInSpec.count(""),
76
+ ], options)
77
+ result.content(0)
78
+ rescue Error::DocumentNotFound
79
+ 0
80
+ end
72
81
  end
73
82
 
74
83
  alias size length
75
84
 
76
85
  # @return [Boolean] returns true if list is empty
77
- def empty?
78
- size.zero?
86
+ def empty?(parent_span: nil)
87
+ size(parent_span: parent_span).zero?
79
88
  end
80
89
 
81
90
  # Appends the given object(s) on to the end of this error. This expression returns the array itself, so several
@@ -83,10 +92,14 @@ module Couchbase
83
92
  #
84
93
  # @param [Object...] obj object(s) to append
85
94
  # @return [CouchbaseList]
86
- def push(*obj)
87
- @collection.mutate_in(@id, [
88
- MutateInSpec.array_append("", obj),
89
- ], @options.mutate_in_options)
95
+ def push(*obj, parent_span: nil)
96
+ @observability.record_operation(Observability::OP_LIST_PUSH, parent_span, self) do |obs_handler|
97
+ options = @options.mutate_in_options.clone
98
+ options.parent_span = obs_handler.op_span
99
+ @collection.mutate_in(@id, [
100
+ MutateInSpec.array_append("", obj),
101
+ ], options)
102
+ end
90
103
  self
91
104
  end
92
105
 
@@ -96,10 +109,14 @@ module Couchbase
96
109
  #
97
110
  # @param [Object...] obj object(s) to prepend
98
111
  # @return [CouchbaseList]
99
- def unshift(*obj)
100
- @collection.mutate_in(@id, [
101
- MutateInSpec.array_prepend("", obj),
102
- ], @options.mutate_in_options)
112
+ def unshift(*obj, parent_span: nil)
113
+ @observability.record_operation(Observability::OP_LIST_UNSHIFT, parent_span, self) do |obs_handler|
114
+ options = @options.mutate_in_options.clone
115
+ options.parent_span = obs_handler.op_span
116
+ @collection.mutate_in(@id, [
117
+ MutateInSpec.array_prepend("", obj),
118
+ ], options)
119
+ end
103
120
  self
104
121
  end
105
122
 
@@ -110,10 +127,14 @@ module Couchbase
110
127
  # @param [Integer] index
111
128
  # @param [Object...] obj object(s) to insert
112
129
  # @return [CouchbaseList]
113
- def insert(index, *obj)
114
- @collection.mutate_in(@id, [
115
- MutateInSpec.array_insert("[#{index.to_i}]", obj),
116
- ])
130
+ def insert(index, *obj, parent_span: nil)
131
+ @observability.record_operation(Observability::OP_LIST_INSERT, parent_span, self) do |obs_handler|
132
+ options = @options.mutate_in_options.clone
133
+ options.parent_span = obs_handler.op_span
134
+ @collection.mutate_in(@id, [
135
+ MutateInSpec.array_insert("[#{index.to_i}]", obj),
136
+ ])
137
+ end
117
138
  self
118
139
  end
119
140
 
@@ -121,13 +142,17 @@ module Couchbase
121
142
  #
122
143
  # @param [Integer] index
123
144
  # @return [Object, nil]
124
- def at(index)
125
- result = @collection.lookup_in(@id, [
126
- LookupInSpec.get("[#{index.to_i}]"),
127
- ], @options.lookup_in_options)
128
- result.exists?(0) ? result.content(0) : nil
129
- rescue Error::DocumentNotFound
130
- nil
145
+ def at(index, parent_span: nil)
146
+ @observability.record_operation(Observability::OP_LIST_AT, parent_span, self) do |obs_handler|
147
+ options = @options.mutate_in_options.clone
148
+ options.parent_span = obs_handler.op_span
149
+ result = @collection.lookup_in(@id, [
150
+ LookupInSpec.get("[#{index.to_i}]"),
151
+ ], options)
152
+ result.exists?(0) ? result.content(0) : nil
153
+ rescue Error::DocumentNotFound
154
+ nil
155
+ end
131
156
  end
132
157
 
133
158
  alias [] at
@@ -136,21 +161,28 @@ module Couchbase
136
161
  #
137
162
  # @param [Integer] index
138
163
  # @return [CouchbaseList]
139
- def delete_at(index)
140
- @collection.mutate_in(@id, [
141
- MutateInSpec.remove("[#{index.to_i}]"),
142
- ])
143
- self
144
- rescue Error::DocumentNotFound
145
- self
164
+ def delete_at(index, parent_span: nil)
165
+ @observability.record_operation(Observability::OP_LIST_DELETE_AT, parent_span, self) do |obs_handler|
166
+ options = Options::MutateIn.new(parent_span: obs_handler.op_span)
167
+ @collection.mutate_in(@id, [
168
+ MutateInSpec.remove("[#{index.to_i}]"),
169
+ ], options)
170
+ self
171
+ rescue Error::DocumentNotFound
172
+ self
173
+ end
146
174
  end
147
175
 
148
176
  # Removes all elements from the list
149
- def clear
150
- @collection.remove(@id, @options.remove_options)
151
- nil
152
- rescue Error::DocumentNotFound
153
- nil
177
+ def clear(parent_span: nil)
178
+ @observability.record_operation(Observability::OP_LIST_CLEAR, parent_span, self) do |obs_handler|
179
+ options = @options.remove_options.clone
180
+ options.parent_span = obs_handler.op_span
181
+ @collection.remove(@id, options)
182
+ nil
183
+ rescue Error::DocumentNotFound
184
+ nil
185
+ end
154
186
  end
155
187
  end
156
188
 
@@ -37,6 +37,8 @@ module Couchbase
37
37
  @collection = collection
38
38
  @options = options
39
39
  @cas = 0
40
+ @observability = collection.instance_variable_get(:@observability)
41
+ @observability = Observability::Wrapper.new if @observability.nil?
40
42
  end
41
43
 
42
44
  # Calls the given block once for each element in the map, passing that element as a parameter.
@@ -44,46 +46,57 @@ module Couchbase
44
46
  # @yieldparam [Object] item
45
47
  #
46
48
  # @return [CouchbaseMap, Enumerable]
47
- def each(&)
49
+ def each(parent_span: nil, &)
48
50
  if block_given?
49
- begin
50
- result = @collection.get(@id, @options.get_options)
51
- current = result.content
52
- @cas = result.cas
53
- rescue Error::DocumentNotFound
54
- current = []
55
- @cas = 0
56
- end
51
+ current =
52
+ @observability.record_operation(Observability::OP_MAP_EACH, parent_span, self) do |obs_handler|
53
+ options = @options.get_options.clone
54
+ options.parent_span = obs_handler.op_span
55
+ result = @collection.get(@id, options)
56
+ @cas = result.cas
57
+ result.content
58
+ rescue Error::DocumentNotFound
59
+ @cas = 0
60
+ []
61
+ end
57
62
  current.each(&)
58
63
  self
59
64
  else
60
- enum_for(:each)
65
+ enum_for(:each, parent_span: parent_span)
61
66
  end
62
67
  end
63
68
 
64
69
  # @return [Integer] returns the number of elements in the map.
65
- def length
66
- result = @collection.lookup_in(@id, [
67
- LookupInSpec.count(""),
68
- ], @options.lookup_in_options)
69
- result.content(0)
70
- rescue Error::DocumentNotFound
71
- 0
70
+ def length(parent_span: nil)
71
+ @observability.record_operation(Observability::OP_MAP_LENGTH, parent_span, self) do |obs_handler|
72
+ options = @options.lookup_in_options.clone
73
+ options.parent_span = obs_handler.op_span
74
+ result = @collection.lookup_in(@id, [
75
+ LookupInSpec.count(""),
76
+ ], options)
77
+ result.content(0)
78
+ rescue Error::DocumentNotFound
79
+ 0
80
+ end
72
81
  end
73
82
 
74
83
  alias size length
75
84
 
76
85
  # @return [Boolean] returns true if map is empty
77
- def empty?
78
- size.zero?
86
+ def empty?(parent_span: nil)
87
+ size(parent_span: parent_span).zero?
79
88
  end
80
89
 
81
90
  # Removes all elements from the map
82
- def clear
83
- @collection.remove(@id, @options.remove_options)
84
- nil
85
- rescue Error::DocumentNotFound
86
- nil
91
+ def clear(parent_span: nil)
92
+ @observability.record_operation(Observability::OP_MAP_CLEAR, parent_span, self) do |obs_handler|
93
+ options = @options.remove_options.clone
94
+ options.parent_span = obs_handler.op_span
95
+ @collection.remove(@id, options)
96
+ nil
97
+ rescue Error::DocumentNotFound
98
+ nil
99
+ end
87
100
  end
88
101
 
89
102
  # Returns a value from the map for the given key.
@@ -109,16 +122,20 @@ module Couchbase
109
122
  # @yieldreturn [Object] the default value to return in case the key could not be found
110
123
  #
111
124
  # @return [Object]
112
- def fetch(key, *rest)
113
- result = @collection.lookup_in(@id, [
114
- LookupInSpec.get(key),
115
- ], @options.lookup_in_options)
116
- result.content(0)
117
- rescue Error::DocumentNotFound, Error::PathNotFound
118
- return yield if block_given?
119
- return rest.first unless rest.empty?
120
-
121
- raise KeyError, "key not found: #{key}"
125
+ def fetch(key, *rest, parent_span: nil)
126
+ @observability.record_operation(Observability::OP_MAP_FETCH, parent_span, self) do |obs_handler|
127
+ options = @options.lookup_in_options.clone
128
+ options.parent_span = obs_handler.op_span
129
+ result = @collection.lookup_in(@id, [
130
+ LookupInSpec.get(key),
131
+ ], options)
132
+ result.content(0)
133
+ rescue Error::DocumentNotFound, Error::PathNotFound
134
+ return yield if block_given?
135
+ return rest.first unless rest.empty?
136
+
137
+ raise KeyError, "key not found: #{key}"
138
+ end
122
139
  end
123
140
 
124
141
  # Returns a value from the map for the given key.
@@ -132,6 +149,22 @@ module Couchbase
132
149
  fetch(key, nil)
133
150
  end
134
151
 
152
+ # Associate the value given by +value+ with the key given by +key+.
153
+ #
154
+ # @param [String] key
155
+ # @param [Object] value
156
+ #
157
+ # @return [void]
158
+ def store(key, value, parent_span: nil)
159
+ @observability.record_operation(Observability::OP_MAP_STORE, parent_span, self) do |obs_handler|
160
+ options = @options.mutate_in_options.clone
161
+ options.parent_span = obs_handler.op_span
162
+ @collection.mutate_in(@id, [
163
+ MutateInSpec.upsert(key, value),
164
+ ], options)
165
+ end
166
+ end
167
+
135
168
  # Associate the value given by +value+ with the key given by +key+.
136
169
  #
137
170
  # @param [String] key
@@ -139,9 +172,7 @@ module Couchbase
139
172
  #
140
173
  # @return [void]
141
174
  def []=(key, value)
142
- @collection.mutate_in(@id, [
143
- MutateInSpec.upsert(key, value),
144
- ], @options.mutate_in_options)
175
+ store(key, value)
145
176
  end
146
177
 
147
178
  # Deletes the key-value pair from the map.
@@ -149,25 +180,31 @@ module Couchbase
149
180
  # @param [String] key
150
181
  #
151
182
  # @return void
152
- def delete(key)
153
- @collection.mutate_in(@id, [
154
- MutateInSpec.remove(key),
155
- ])
156
- rescue Error::DocumentNotFound, Error::PathNotFound
157
- nil
183
+ def delete(key, parent_span: nil)
184
+ @observability.record_operation(Observability::OP_MAP_DELETE, parent_span, self) do |obs_handler|
185
+ @collection.mutate_in(@id, [
186
+ MutateInSpec.remove(key),
187
+ ], Options::MutateIn.new(parent_span: obs_handler.op_span))
188
+ rescue Error::DocumentNotFound, Error::PathNotFound
189
+ nil
190
+ end
158
191
  end
159
192
 
160
193
  # Returns +true+ if the given key is present
161
194
  #
162
195
  # @param [String] key
163
196
  # @return [Boolean]
164
- def key?(key)
165
- result = @collection.lookup_in(@id, [
166
- LookupInSpec.exists(key),
167
- ], @options.lookup_in_options)
168
- result.exists?(0)
169
- rescue Error::DocumentNotFound, Error::PathNotFound
170
- false
197
+ def key?(key, parent_span: nil)
198
+ @observability.record_operation(Observability::OP_MAP_KEY_EXISTS, parent_span, self) do |obs_handler|
199
+ options = @options.lookup_in_options.clone
200
+ options.parent_span = obs_handler.op_span
201
+ result = @collection.lookup_in(@id, [
202
+ LookupInSpec.exists(key),
203
+ ], options)
204
+ result.exists?(0)
205
+ rescue Error::DocumentNotFound, Error::PathNotFound
206
+ false
207
+ end
171
208
  end
172
209
 
173
210
  alias member? key?
@@ -37,6 +37,8 @@ module Couchbase
37
37
  @collection = collection
38
38
  @options = options
39
39
  @cas = 0
40
+ @observability = @collection.instance_variable_get(:@observability)
41
+ @observability = Observability::Wrapper.new if @observability.nil?
40
42
  end
41
43
 
42
44
  # Calls the given block once for each element in the queue, passing that element as a parameter.
@@ -44,57 +46,69 @@ module Couchbase
44
46
  # @yieldparam [Object] item
45
47
  #
46
48
  # @return [CouchbaseQueue, Enumerable]
47
- def each(&)
49
+ def each(parent_span: nil, &)
48
50
  if block_given?
49
- begin
50
- result = @collection.get(@id, @options.get_options)
51
- current = result.content
51
+ current = @observability.record_operation(Observability::OP_QUEUE_EACH, parent_span, self) do |obs_handler|
52
+ options = @options.get_options.clone
53
+ options.parent_span = obs_handler.op_span
54
+ result = @collection.get(@id, options)
52
55
  @cas = result.cas
56
+ result.content
53
57
  rescue Error::DocumentNotFound
54
- current = []
55
58
  @cas = 0
59
+ []
56
60
  end
57
61
  current.each(&)
58
62
  self
59
63
  else
60
- enum_for(:each)
64
+ enum_for(:each, parent_span: parent_span)
61
65
  end
62
66
  end
63
67
 
64
68
  # @return [Integer] returns the number of elements in the queue.
65
- def length
66
- result = @collection.lookup_in(@id, [
67
- LookupInSpec.count(""),
68
- ], @options.lookup_in_options)
69
- result.content(0)
70
- rescue Error::DocumentNotFound
71
- 0
69
+ def length(parent_span: nil)
70
+ @observability.record_operation(Observability::OP_QUEUE_LENGTH, parent_span, self) do |obs_handler|
71
+ options = @options.lookup_in_options.clone
72
+ options.parent_span = obs_handler.op_span
73
+ result = @collection.lookup_in(@id, [
74
+ LookupInSpec.count(""),
75
+ ], options)
76
+ result.content(0)
77
+ rescue Error::DocumentNotFound
78
+ 0
79
+ end
72
80
  end
73
81
 
74
82
  alias size length
75
83
 
76
84
  # @return [Boolean] returns true if queue is empty
77
- def empty?
78
- size.zero?
85
+ def empty?(parent_span: nil)
86
+ size(parent_span: parent_span).zero?
79
87
  end
80
88
 
81
89
  # Removes all elements from the queue
82
- def clear
83
- @collection.remove(@id, @options.remove_options)
84
- nil
85
- rescue Error::DocumentNotFound
86
- nil
90
+ def clear(parent_span: nil)
91
+ @observability.record_operation(Observability::OP_QUEUE_CLEAR, parent_span, self) do |obs_handler|
92
+ options = @options.remove_options.clone
93
+ options.parent_span = obs_handler.op_span
94
+ @collection.remove(@id, options)
95
+ nil
96
+ rescue Error::DocumentNotFound
97
+ nil
98
+ end
87
99
  end
88
100
 
89
101
  # Adds the given value to the queue
90
102
  #
91
103
  # @param [Object] obj
92
104
  # @return [CouchbaseQueue]
93
- def push(obj)
94
- begin
105
+ def push(obj, parent_span: nil)
106
+ @observability.record_operation(Observability::OP_QUEUE_PUSH, parent_span, self) do |obs_handler|
107
+ options = @options.mutate_in_options.clone
108
+ options.parent_span = obs_handler.op_span
95
109
  @collection.mutate_in(@id, [
96
110
  MutateInSpec.array_prepend("", [obj]),
97
- ], @options.mutate_in_options)
111
+ ], options)
98
112
  rescue Error::PathExists
99
113
  # ignore
100
114
  end
@@ -107,21 +121,34 @@ module Couchbase
107
121
  # Retrieves object from the queue
108
122
  #
109
123
  # @return [Object, nil] queue entry or nil
110
- def pop
111
- result = @collection.lookup_in(@id, [
112
- LookupInSpec.get("[-1]"),
113
- ], @options.lookup_in_options)
114
- obj = result.exists?(0) ? result.content(0) : nil
115
- options = Options::MutateIn.new
116
- options.cas = result.cas
117
- @collection.mutate_in(@id, [
118
- MutateInSpec.remove("[-1]"),
119
- ], options)
120
- obj
121
- rescue Error::CasMismatch
122
- retry
123
- rescue Error::DocumentNotFound, Error::PathNotFound
124
- nil
124
+ def pop(parent_span: nil)
125
+ @observability.record_operation(Observability::OP_QUEUE_POP, parent_span, self) do |obs_handler|
126
+ obj, cas = begin
127
+ options = @options.lookup_in_options.clone
128
+ options.parent_span = obs_handler.op_span
129
+ result = @collection.lookup_in(@id, [
130
+ LookupInSpec.get("[-1]"),
131
+ ], @options.lookup_in_options)
132
+ [
133
+ result.exists?(0) ? result.content(0) : nil,
134
+ result.cas,
135
+ ]
136
+ end
137
+ begin
138
+ options = Options::MutateIn.new(
139
+ parent_span: obs_handler.op_span,
140
+ cas: cas,
141
+ )
142
+ @collection.mutate_in(@id, [
143
+ MutateInSpec.remove("[-1]"),
144
+ ], options)
145
+ end
146
+ obj
147
+ rescue Error::CasMismatch
148
+ retry
149
+ rescue Error::DocumentNotFound, Error::PathNotFound
150
+ nil
151
+ end
125
152
  end
126
153
 
127
154
  alias deq pop