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