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
@@ -35,6 +35,8 @@
35
35
  #include <couchbase/lookup_in_specs.hxx>
36
36
  #include <couchbase/mutate_in_options.hxx>
37
37
  #include <couchbase/mutate_in_specs.hxx>
38
+ #include <couchbase/node_id_for_options.hxx>
39
+ #include <couchbase/node_ids_options.hxx>
38
40
  #include <couchbase/query_options.hxx>
39
41
  #include <couchbase/remove_options.hxx>
40
42
  #include <couchbase/replace_options.hxx>
@@ -463,8 +465,10 @@ public:
463
465
  const upsert_options& options,
464
466
  upsert_handler&& handler) const
465
467
  {
466
- return upsert(
467
- std::move(document_id), encode_document<Transcoder>(document), options, std::move(handler));
468
+ return upsert(std::move(document_id),
469
+ create_encode_fn<Transcoder, Document>(std::move(document)),
470
+ options,
471
+ std::move(handler));
468
472
  }
469
473
 
470
474
  /**
@@ -506,11 +510,12 @@ public:
506
510
  */
507
511
  template<typename Transcoder = codec::default_json_transcoder, typename Document>
508
512
  [[nodiscard]] auto upsert(std::string document_id,
509
- const Document& document,
513
+ Document document,
510
514
  const upsert_options& options = {}) const
511
515
  -> std::future<std::pair<error, mutation_result>>
512
516
  {
513
- return upsert(std::move(document_id), encode_document<Transcoder>(document), options);
517
+ return upsert(
518
+ std::move(document_id), create_encode_fn<Transcoder, Document>(std::move(document)), options);
514
519
  }
515
520
 
516
521
  /**
@@ -559,8 +564,10 @@ public:
559
564
  const insert_options& options,
560
565
  insert_handler&& handler) const
561
566
  {
562
- return insert(
563
- std::move(document_id), encode_document<Transcoder>(document), options, std::move(handler));
567
+ return insert(std::move(document_id),
568
+ create_encode_fn<Transcoder, Document>(std::move(document)),
569
+ options,
570
+ std::move(handler));
564
571
  }
565
572
 
566
573
  /**
@@ -605,11 +612,12 @@ public:
605
612
  typename Document,
606
613
  std::enable_if_t<!std::is_same_v<codec::encoded_value, Document>, bool> = true>
607
614
  [[nodiscard]] auto insert(std::string document_id,
608
- const Document& document,
615
+ Document document,
609
616
  const insert_options& options = {}) const
610
617
  -> std::future<std::pair<error, mutation_result>>
611
618
  {
612
- return insert(std::move(document_id), encode_document<Transcoder>(document), options);
619
+ return insert(
620
+ std::move(document_id), create_encode_fn<Transcoder, Document>(std::move(document)), options);
613
621
  }
614
622
 
615
623
  /**
@@ -660,8 +668,10 @@ public:
660
668
  const replace_options& options,
661
669
  replace_handler&& handler) const
662
670
  {
663
- return replace(
664
- std::move(document_id), encode_document<Transcoder>(document), options, std::move(handler));
671
+ return replace(std::move(document_id),
672
+ create_encode_fn<Transcoder, Document>(std::move(document)),
673
+ options,
674
+ std::move(handler));
665
675
  }
666
676
 
667
677
  /**
@@ -708,11 +718,12 @@ public:
708
718
  typename Document,
709
719
  std::enable_if_t<!std::is_same_v<codec::encoded_value, Document>, bool> = true>
710
720
  [[nodiscard]] auto replace(std::string document_id,
711
- const Document& document,
721
+ Document document,
712
722
  const replace_options& options = {}) const
713
723
  -> std::future<std::pair<error, mutation_result>>
714
724
  {
715
- return replace(std::move(document_id), encode_document<Transcoder>(document), options);
725
+ return replace(
726
+ std::move(document_id), create_encode_fn<Transcoder, Document>(std::move(document)), options);
716
727
  }
717
728
 
718
729
  /**
@@ -1081,6 +1092,77 @@ public:
1081
1092
  [[nodiscard]] auto scan(const scan_type& scan_type, const scan_options& options = {}) const
1082
1093
  -> std::future<std::pair<error, scan_result>>;
1083
1094
 
1095
+ /**
1096
+ * Resolves a document key to the identity of the cluster node that currently
1097
+ * owns it, using the client-side vBucket map (no network round-trip).
1098
+ *
1099
+ * @param document_id the document id to resolve
1100
+ * @param options options to customize the request
1101
+ * @param handler the handler that receives the result
1102
+ *
1103
+ * @since 1.3.2
1104
+ * @uncommitted
1105
+ */
1106
+ void node_id_for(std::string document_id,
1107
+ const node_id_for_options& options,
1108
+ node_id_for_handler&& handler) const;
1109
+
1110
+ /**
1111
+ * Resolves a document key to the identity of the cluster node that currently
1112
+ * owns it, using the client-side vBucket map (no network round-trip).
1113
+ *
1114
+ * @param document_id the document id to resolve
1115
+ * @param options options to customize the request
1116
+ * @return future carrying the error (if any) and node_id
1117
+ *
1118
+ * @since 1.3.2
1119
+ * @uncommitted
1120
+ */
1121
+ [[nodiscard]] auto node_id_for(std::string document_id,
1122
+ const node_id_for_options& options = {}) const
1123
+ -> std::future<std::pair<error, node_id>>;
1124
+
1125
+ /**
1126
+ * Returns the set of cluster nodes that currently serve key-value
1127
+ * traffic for this collection's bucket, drawn from the client-side
1128
+ * topology snapshot (no network round-trip).
1129
+ *
1130
+ * Each entry corresponds to one cluster node and is the same node_id
1131
+ * the SDK reports on KV results and errors that touched that node, so
1132
+ * the returned set is directly comparable to the keys of any
1133
+ * application-side state that is keyed by node_id (e.g. a per-node
1134
+ * circuit breaker registry). A periodic sweep that diffs the
1135
+ * registry's keys against this set is the canonical way to retire
1136
+ * tracker state for a node that has been removed from the cluster
1137
+ * topology.
1138
+ *
1139
+ * Nodes that do not expose a key-value port for the configured
1140
+ * transport (TLS or plain) are excluded from the returned set, since
1141
+ * they do not serve KV operations and therefore have no meaningful
1142
+ * identity from the SDK's point of view.
1143
+ *
1144
+ * @param options options to customize the request
1145
+ * @param handler the handler that receives the result
1146
+ *
1147
+ * @since 1.3.2
1148
+ * @uncommitted
1149
+ */
1150
+ void node_ids(const node_ids_options& options, node_ids_handler&& handler) const;
1151
+
1152
+ /**
1153
+ * Returns the set of cluster nodes that currently serve key-value
1154
+ * traffic for this collection's bucket, drawn from the client-side
1155
+ * topology snapshot (no network round-trip).
1156
+ *
1157
+ * @param options options to customize the request
1158
+ * @return future carrying the error (if any) and the set of node_ids
1159
+ *
1160
+ * @since 1.3.2
1161
+ * @uncommitted
1162
+ */
1163
+ [[nodiscard]] auto node_ids(const node_ids_options& options = {}) const
1164
+ -> std::future<std::pair<error, std::vector<node_id>>>;
1165
+
1084
1166
  [[nodiscard]] auto query_indexes() const -> collection_query_index_manager;
1085
1167
 
1086
1168
  private:
@@ -1090,15 +1172,51 @@ private:
1090
1172
  [[nodiscard]] auto crypto_manager() const -> const std::shared_ptr<crypto::manager>&;
1091
1173
 
1092
1174
  template<typename Transcoder, typename Document>
1093
- [[nodiscard]] auto encode_document(const Document& document) const -> codec::encoded_value
1175
+ [[nodiscard]] auto create_encode_fn(Document document) const
1176
+ -> std::function<codec::encoded_value()>
1094
1177
  {
1095
1178
  if constexpr (codec::is_crypto_transcoder_v<Transcoder>) {
1096
- return Transcoder::encode(document, crypto_manager());
1179
+ return [crypto_manager = crypto_manager(),
1180
+ document = std::move(document)]() -> codec::encoded_value {
1181
+ return Transcoder::encode(document, crypto_manager);
1182
+ };
1097
1183
  } else {
1098
- return Transcoder::encode(document);
1184
+ return [document = std::move(document)]() -> codec::encoded_value {
1185
+ return Transcoder::encode(document);
1186
+ };
1099
1187
  }
1100
1188
  }
1101
1189
 
1190
+ void replace(std::string document_id,
1191
+ std::function<codec::encoded_value()> document_fn,
1192
+ const replace_options& options,
1193
+ replace_handler&& handler) const;
1194
+
1195
+ auto replace(std::string document_id,
1196
+ std::function<codec::encoded_value()> document_fn,
1197
+ const replace_options& options) const
1198
+ -> std::future<std::pair<error, mutation_result>>;
1199
+
1200
+ void upsert(std::string document_id,
1201
+ std::function<codec::encoded_value()> document_fn,
1202
+ const upsert_options& options,
1203
+ upsert_handler&& handler) const;
1204
+
1205
+ auto upsert(std::string document_id,
1206
+ std::function<codec::encoded_value()> document_fn,
1207
+ const upsert_options& options) const
1208
+ -> std::future<std::pair<error, mutation_result>>;
1209
+
1210
+ void insert(std::string document_id,
1211
+ std::function<codec::encoded_value()> document_fn,
1212
+ const insert_options& options,
1213
+ insert_handler&& handler) const;
1214
+
1215
+ auto insert(std::string document_id,
1216
+ std::function<codec::encoded_value()> document_fn,
1217
+ const insert_options& options) const
1218
+ -> std::future<std::pair<error, mutation_result>>;
1219
+
1102
1220
  collection(core::cluster core,
1103
1221
  std::string_view bucket_name,
1104
1222
  std::string_view scope_name,
@@ -18,6 +18,7 @@
18
18
  #pragma once
19
19
 
20
20
  #include <couchbase/error_context.hxx>
21
+ #include <couchbase/node_id.hxx>
21
22
 
22
23
  #include <memory>
23
24
  #include <optional>
@@ -32,12 +33,26 @@ public:
32
33
  error() = default;
33
34
  error(std::error_code ec, std::string message = {}, error_context ctx = {});
34
35
  error(std::error_code ec, std::string message, error_context ctx, error cause);
36
+ error(std::error_code ec, std::string message, error_context ctx, couchbase::node_id node_id);
35
37
 
36
38
  [[nodiscard]] auto ec() const -> std::error_code;
37
39
  [[nodiscard]] auto message() const -> const std::string&;
38
40
  [[nodiscard]] auto ctx() const -> const error_context&;
39
41
  [[nodiscard]] auto cause() const -> std::optional<error>;
40
42
 
43
+ /**
44
+ * Returns the identity of the cluster node where the error occurred.
45
+ *
46
+ * The returned node_id is default-constructed (falsy) when the node
47
+ * could not be determined (e.g. for non-KV errors).
48
+ *
49
+ * @return identity of the node that returned the error
50
+ *
51
+ * @since 1.3.2
52
+ * @uncommitted
53
+ */
54
+ [[nodiscard]] auto node_id() const -> const couchbase::node_id&;
55
+
41
56
  explicit operator bool() const;
42
57
  auto operator==(const error& other) const -> bool;
43
58
 
@@ -46,6 +61,7 @@ private:
46
61
  std::string message_{};
47
62
  error_context ctx_{};
48
63
  std::shared_ptr<error> cause_{};
64
+ couchbase::node_id node_id_{};
49
65
  };
50
66
 
51
67
  } // namespace couchbase
@@ -24,41 +24,41 @@ namespace couchbase
24
24
  #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
25
25
  namespace core::impl
26
26
  {
27
- const std::error_category&
28
- common_category() noexcept;
27
+ auto
28
+ common_category() noexcept -> const std::error_category&;
29
29
 
30
- const std::error_category&
31
- key_value_category() noexcept;
30
+ auto
31
+ key_value_category() noexcept -> const std::error_category&;
32
32
 
33
- const std::error_category&
34
- query_category() noexcept;
33
+ auto
34
+ query_category() noexcept -> const std::error_category&;
35
35
 
36
- const std::error_category&
37
- analytics_category() noexcept;
36
+ auto
37
+ analytics_category() noexcept -> const std::error_category&;
38
38
 
39
- const std::error_category&
40
- search_category() noexcept;
39
+ auto
40
+ search_category() noexcept -> const std::error_category&;
41
41
 
42
- const std::error_category&
43
- view_category() noexcept;
42
+ auto
43
+ view_category() noexcept -> const std::error_category&;
44
44
 
45
- const std::error_category&
46
- management_category() noexcept;
45
+ auto
46
+ management_category() noexcept -> const std::error_category&;
47
47
 
48
- const std::error_category&
49
- field_level_encryption_category() noexcept;
48
+ auto
49
+ field_level_encryption_category() noexcept -> const std::error_category&;
50
50
 
51
- const std::error_category&
52
- network_category() noexcept;
51
+ auto
52
+ network_category() noexcept -> const std::error_category&;
53
53
 
54
- const std::error_category&
55
- streaming_json_lexer_category() noexcept;
54
+ auto
55
+ streaming_json_lexer_category() noexcept -> const std::error_category&;
56
56
 
57
- const std::error_category&
58
- transaction_category() noexcept;
57
+ auto
58
+ transaction_category() noexcept -> const std::error_category&;
59
59
 
60
- const std::error_category&
61
- transaction_op_category() noexcept;
60
+ auto
61
+ transaction_op_category() noexcept -> const std::error_category&;
62
62
 
63
63
  } // namespace core::impl
64
64
  #endif
@@ -1151,74 +1151,74 @@ enum class transaction_op {
1151
1151
  };
1152
1152
 
1153
1153
  #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
1154
- inline std::error_code
1155
- make_error_code(common e) noexcept
1154
+ inline auto
1155
+ make_error_code(common e) noexcept -> std::error_code
1156
1156
  {
1157
1157
  return { static_cast<int>(e), core::impl::common_category() };
1158
1158
  }
1159
1159
 
1160
- inline std::error_code
1161
- make_error_code(key_value e)
1160
+ inline auto
1161
+ make_error_code(key_value e) -> std::error_code
1162
1162
  {
1163
1163
  return { static_cast<int>(e), core::impl::key_value_category() };
1164
1164
  }
1165
1165
 
1166
- inline std::error_code
1167
- make_error_code(query e)
1166
+ inline auto
1167
+ make_error_code(query e) -> std::error_code
1168
1168
  {
1169
1169
  return { static_cast<int>(e), core::impl::query_category() };
1170
1170
  }
1171
1171
 
1172
- inline std::error_code
1173
- make_error_code(search e)
1172
+ inline auto
1173
+ make_error_code(search e) -> std::error_code
1174
1174
  {
1175
1175
  return { static_cast<int>(e), core::impl::search_category() };
1176
1176
  }
1177
1177
 
1178
- inline std::error_code
1179
- make_error_code(view e)
1178
+ inline auto
1179
+ make_error_code(view e) -> std::error_code
1180
1180
  {
1181
1181
  return { static_cast<int>(e), core::impl::view_category() };
1182
1182
  }
1183
1183
 
1184
- inline std::error_code
1185
- make_error_code(analytics e)
1184
+ inline auto
1185
+ make_error_code(analytics e) -> std::error_code
1186
1186
  {
1187
1187
  return { static_cast<int>(e), core::impl::analytics_category() };
1188
1188
  }
1189
1189
 
1190
- inline std::error_code
1191
- make_error_code(management e)
1190
+ inline auto
1191
+ make_error_code(management e) -> std::error_code
1192
1192
  {
1193
1193
  return { static_cast<int>(e), core::impl::management_category() };
1194
1194
  }
1195
1195
 
1196
- inline std::error_code
1197
- make_error_code(network e)
1196
+ inline auto
1197
+ make_error_code(network e) -> std::error_code
1198
1198
  {
1199
1199
  return { static_cast<int>(e), core::impl::network_category() };
1200
1200
  }
1201
1201
 
1202
- inline std::error_code
1203
- make_error_code(field_level_encryption e)
1202
+ inline auto
1203
+ make_error_code(field_level_encryption e) -> std::error_code
1204
1204
  {
1205
1205
  return { static_cast<int>(e), core::impl::field_level_encryption_category() };
1206
1206
  }
1207
1207
 
1208
- inline std::error_code
1209
- make_error_code(streaming_json_lexer e)
1208
+ inline auto
1209
+ make_error_code(streaming_json_lexer e) -> std::error_code
1210
1210
  {
1211
1211
  return { static_cast<int>(e), core::impl::streaming_json_lexer_category() };
1212
1212
  }
1213
1213
 
1214
- inline std::error_code
1215
- make_error_code(transaction e)
1214
+ inline auto
1215
+ make_error_code(transaction e) -> std::error_code
1216
1216
  {
1217
1217
  return { static_cast<int>(e), core::impl::transaction_category() };
1218
1218
  }
1219
1219
 
1220
- inline std::error_code
1221
- make_error_code(transaction_op e)
1220
+ inline auto
1221
+ make_error_code(transaction_op e) -> std::error_code
1222
1222
  {
1223
1223
  return { static_cast<int>(e), core::impl::transaction_op_category() };
1224
1224
  }
@@ -0,0 +1,52 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <string>
21
+
22
+ namespace couchbase
23
+ {
24
+ /**
25
+ * A JWT authenticator which uses a JSON Web Token (JWT) to authenticate with the cluster.
26
+ *
27
+ * @since 1.3.0
28
+ * @uncommitted
29
+ */
30
+ class jwt_authenticator
31
+ {
32
+ public:
33
+ /**
34
+ * Creates a JWT authenticator with the provided token.
35
+ *
36
+ * @param token the JWT
37
+ *
38
+ * @since 1.3.0
39
+ * @uncommitted
40
+ */
41
+ explicit jwt_authenticator(std::string token)
42
+ : token_{ std::move(token) }
43
+ {
44
+ }
45
+
46
+ private:
47
+ std::string token_;
48
+
49
+ friend class cluster_options;
50
+ friend class cluster;
51
+ };
52
+ } // namespace couchbase
@@ -17,6 +17,7 @@
17
17
 
18
18
  #pragma once
19
19
 
20
+ #include <cstdint>
20
21
  #include <map>
21
22
  #include <memory>
22
23
  #include <string>
@@ -33,7 +34,7 @@ public:
33
34
  auto operator=(value_recorder&& other) -> value_recorder& = default;
34
35
  virtual ~value_recorder() = default;
35
36
 
36
- virtual void record_value(int64_t value) = 0;
37
+ virtual void record_value(std::int64_t value) = 0;
37
38
  };
38
39
 
39
40
  class meter