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
@@ -17,7 +17,9 @@
17
17
 
18
18
  #pragma once
19
19
 
20
+ #include "deprecation_utils.hxx"
20
21
  #include "diagnostics.hxx"
22
+ #include "error.hxx"
21
23
  #include "operations_fwd.hxx"
22
24
  #include "origin.hxx"
23
25
  #include "topology/configuration.hxx"
@@ -37,6 +39,17 @@ namespace couchbase::core
37
39
  {
38
40
  class crud_component;
39
41
  class cluster_impl;
42
+ class cluster_label_listener;
43
+
44
+ namespace tracing
45
+ {
46
+ class tracer_wrapper;
47
+ } // namespace tracing
48
+
49
+ namespace metrics
50
+ {
51
+ class meter_wrapper;
52
+ } // namespace metrics
40
53
 
41
54
  namespace mcbp
42
55
  {
@@ -80,6 +93,8 @@ public:
80
93
  utils::movable_function<void(std::error_code, std::shared_ptr<topology::configuration>)>&&
81
94
  handler) const;
82
95
 
96
+ [[nodiscard]] auto update_credentials(const core::cluster_credentials& auth) const -> core::error;
97
+
83
98
  void execute(o::analytics_request request, mf<void(o::analytics_response)>&& handler) const;
84
99
  void execute(o::append_request request, mf<void(o::append_response)>&& handler) const;
85
100
  void execute(o::decrement_request request, mf<void(o::decrement_response)>&& handler) const;
@@ -129,6 +144,10 @@ public:
129
144
  void execute(o::replace_request_with_legacy_durability request,
130
145
  mf<void(o::replace_response)>&& handler) const;
131
146
 
147
+ COUCHBASE_DEPRECATED(
148
+ "1.3.0",
149
+ "Views are deprecated in Couchbase Server 7.0+. Instead of views, use the Query "
150
+ "Service (SQL++).")
132
151
  void execute(o::document_view_request request,
133
152
  mf<void(o::document_view_response)>&& handler) const;
134
153
  void execute(o::http_noop_request request, mf<void(o::http_noop_response)>&& handler) const;
@@ -273,6 +292,14 @@ public:
273
292
  void execute(impl::observe_seqno_request request,
274
293
  mf<void(impl::observe_seqno_response)>&& handler) const;
275
294
 
295
+ void execute(o::get_replica_request_with_cancellation request,
296
+ mf<void(impl::get_replica_response)>&& handler) const;
297
+ void execute(o::get_request_with_cancellation request, mf<void(o::get_response)>&& handler) const;
298
+ void execute(o::lookup_in_request_with_cancellation request,
299
+ mf<void(o::lookup_in_response)>&& handler) const;
300
+ void execute(o::lookup_in_replica_request_with_cancellation request,
301
+ mf<void(impl::lookup_in_replica_response)>&& handler) const;
302
+
276
303
  void execute(
277
304
  om::analytics_link_replace_request<management::analytics::azure_blob_external_link> request,
278
305
  mf<void(om::analytics_link_replace_response)>&& handler) const;
@@ -312,6 +339,11 @@ public:
312
339
 
313
340
  [[nodiscard]] auto to_string() const -> std::string;
314
341
 
342
+ [[nodiscard]] auto tracer() const -> const std::shared_ptr<tracing::tracer_wrapper>&;
343
+ [[nodiscard]] auto meter() const -> const std::shared_ptr<metrics::meter_wrapper>&;
344
+ [[nodiscard]] auto cluster_label_listener() const
345
+ -> const std::shared_ptr<cluster_label_listener>&;
346
+
315
347
  private:
316
348
  std::shared_ptr<cluster_impl> impl_;
317
349
  };
@@ -24,4 +24,29 @@ cluster_credentials::uses_certificate() const -> bool
24
24
  {
25
25
  return !certificate_path.empty();
26
26
  }
27
+
28
+ auto
29
+ cluster_credentials::requires_tls() const -> bool
30
+ {
31
+ return uses_certificate() || uses_jwt();
32
+ }
33
+
34
+ auto
35
+ cluster_credentials::uses_jwt() const -> bool
36
+ {
37
+ return !jwt_token.empty();
38
+ }
39
+
40
+ auto
41
+ cluster_credentials::uses_password() const -> bool
42
+ {
43
+ return !username.empty() && !password.empty();
44
+ }
45
+
46
+ auto
47
+ cluster_credentials::is_same_type(const cluster_credentials& other) const -> bool
48
+ {
49
+ return uses_certificate() == other.uses_certificate() && uses_jwt() == other.uses_jwt() &&
50
+ uses_password() == other.uses_password();
51
+ }
27
52
  } // namespace couchbase::core
@@ -28,9 +28,14 @@ struct cluster_credentials {
28
28
  std::string password{};
29
29
  std::string certificate_path{};
30
30
  std::string key_path{};
31
+ std::string jwt_token{};
31
32
  std::optional<std::vector<std::string>> allowed_sasl_mechanisms{};
32
33
 
33
34
  [[nodiscard]] auto uses_certificate() const -> bool;
35
+ [[nodiscard]] auto requires_tls() const -> bool;
36
+ [[nodiscard]] auto uses_jwt() const -> bool;
37
+ [[nodiscard]] auto uses_password() const -> bool;
38
+ [[nodiscard]] auto is_same_type(const cluster_credentials& other) const -> bool;
34
39
  };
35
40
 
36
41
  } // namespace couchbase::core
@@ -0,0 +1,72 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2025-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include "cluster_label_listener.hxx"
19
+
20
+ #include <mutex>
21
+ #include <shared_mutex>
22
+
23
+ namespace couchbase::core
24
+ {
25
+ class cluster_label_listener_impl
26
+ {
27
+ public:
28
+ cluster_label_listener_impl() = default;
29
+
30
+ void update_config(topology::configuration config)
31
+ {
32
+ const std::scoped_lock lock(mutex_);
33
+ if (config.cluster_name.has_value() && (cluster_name_ != config.cluster_name)) {
34
+ cluster_name_ = std::move(config.cluster_name);
35
+ }
36
+ if (config.cluster_uuid.has_value() && (cluster_uuid_ != config.cluster_uuid)) {
37
+ cluster_uuid_ = std::move(config.cluster_uuid);
38
+ }
39
+ }
40
+
41
+ auto cluster_labels() -> cluster_label_listener::labels
42
+ {
43
+ const std::shared_lock lock(mutex_);
44
+ return cluster_label_listener::labels{
45
+ cluster_name_,
46
+ cluster_uuid_,
47
+ };
48
+ }
49
+
50
+ private:
51
+ std::shared_mutex mutex_{};
52
+ std::optional<std::string> cluster_name_{};
53
+ std::optional<std::string> cluster_uuid_{};
54
+ };
55
+
56
+ cluster_label_listener::cluster_label_listener()
57
+ : impl_{ std::make_shared<cluster_label_listener_impl>() }
58
+ {
59
+ }
60
+
61
+ void
62
+ cluster_label_listener::update_config(topology::configuration config)
63
+ {
64
+ impl_->update_config(std::move(config));
65
+ }
66
+
67
+ auto
68
+ cluster_label_listener::cluster_labels() const -> labels
69
+ {
70
+ return impl_->cluster_labels();
71
+ }
72
+ } // namespace couchbase::core
@@ -0,0 +1,46 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2025-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include "config_listener.hxx"
21
+
22
+ #include <memory>
23
+ #include <optional>
24
+ #include <string>
25
+
26
+ namespace couchbase::core
27
+ {
28
+ class cluster_label_listener_impl;
29
+
30
+ class cluster_label_listener : public config_listener
31
+ {
32
+ public:
33
+ cluster_label_listener();
34
+ void update_config(topology::configuration config) override;
35
+
36
+ struct labels {
37
+ std::optional<std::string> cluster_name;
38
+ std::optional<std::string> cluster_uuid;
39
+ };
40
+
41
+ [[nodiscard]] auto cluster_labels() const -> labels;
42
+
43
+ private:
44
+ std::shared_ptr<cluster_label_listener_impl> impl_;
45
+ };
46
+ } // namespace couchbase::core
@@ -21,6 +21,7 @@
21
21
  #include "core/io/dns_config.hxx"
22
22
  #include "core/io/ip_protocol.hxx"
23
23
  #include "core/metrics/logging_meter_options.hxx"
24
+ #include "core/orphan_reporter.hxx"
24
25
  #include "core/tracing/threshold_logging_options.hxx"
25
26
  #include "service_type.hxx"
26
27
  #include "timeout_defaults.hxx"
@@ -72,9 +73,11 @@ public:
72
73
  bool enable_compression{ true };
73
74
  bool enable_tracing{ true };
74
75
  bool enable_metrics{ true };
76
+ bool enable_orphan_reporting{ true };
75
77
  std::string network{ "auto" };
76
78
  tracing::threshold_logging_options tracing_options{};
77
79
  metrics::logging_meter_options metrics_options{};
80
+ orphan_reporter_options orphan_options{};
78
81
  tls_verify_mode tls_verify{ tls_verify_mode::peer };
79
82
  std::shared_ptr<couchbase::tracing::request_tracer> tracer{ nullptr };
80
83
  std::shared_ptr<couchbase::metrics::meter> meter{ nullptr };
@@ -110,6 +113,7 @@ public:
110
113
  };
111
114
  bool preserve_bootstrap_nodes_order{ false };
112
115
  bool allow_enterprise_analytics{ false };
116
+ bool enable_lazy_connections{ false };
113
117
  };
114
118
 
115
119
  } // namespace couchbase::core
@@ -0,0 +1,26 @@
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
+ #ifndef COUCHBASE_DEPRECATED
21
+ #ifdef COUCHBASE_CXX_CLIENT_IGNORE_CORE_DEPRECATIONS
22
+ #define COUCHBASE_DEPRECATED(version, msg)
23
+ #else
24
+ #define COUCHBASE_DEPRECATED(version, msg) [[deprecated("Since SDK " version ". " msg)]]
25
+ #endif
26
+ #endif
@@ -0,0 +1,27 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2022-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
6
+ * except in compliance with the License. You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software distributed under
11
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
12
+ * ANY KIND, either express or implied. See the License for the specific language governing
13
+ * permissions and limitations under the License.
14
+ */
15
+
16
+ #pragma once
17
+
18
+ #include <string>
19
+ #include <system_error>
20
+
21
+ namespace couchbase::core
22
+ {
23
+ struct error {
24
+ std::error_code ec;
25
+ std::string message;
26
+ };
27
+ } // namespace couchbase::core
@@ -48,8 +48,6 @@ public:
48
48
  std::string method{};
49
49
  std::string endpoint{};
50
50
  std::string path{};
51
- std::string username{};
52
- std::string password{};
53
51
  std::string body{};
54
52
  std::map<std::string, std::string> headers{};
55
53
  std::string content_type{};
@@ -444,23 +444,11 @@ public:
444
444
  }
445
445
  session_manager = std::move(sm);
446
446
  }
447
-
448
- cluster_credentials credentials;
449
- if (request.username.empty() && request.password.empty()) {
450
- auto [ec, origin] = shim_.cluster.origin();
451
- if (ec) {
452
- return tl::unexpected(ec);
453
- }
454
- credentials = origin.credentials();
455
- } else {
456
- credentials = cluster_credentials{ request.username, request.password };
457
- }
458
-
459
447
  #ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
460
448
  auto op =
461
449
  std::make_shared<pending_http_operation>(io_, request, session_manager->dispatch_timeout());
462
450
  if (!session_manager->is_configured()) {
463
- auto err = defer_command(op, session_manager, credentials, std::move(callback));
451
+ auto err = defer_command(op, session_manager, std::move(callback));
464
452
  if (!std::holds_alternative<std::monostate>(err)) {
465
453
  return tl::unexpected{ err };
466
454
  }
@@ -470,7 +458,7 @@ public:
470
458
  auto op = std::make_shared<pending_http_operation>(io_, request);
471
459
  #endif
472
460
 
473
- send_http_operation(op, session_manager, credentials, std::move(callback));
461
+ send_http_operation(op, session_manager, std::move(callback));
474
462
  return op;
475
463
  }
476
464
 
@@ -487,22 +475,11 @@ public:
487
475
  session_manager = std::move(sm);
488
476
  }
489
477
 
490
- cluster_credentials credentials;
491
- if (request.username.empty() && request.password.empty()) {
492
- auto [ec, origin] = shim_.cluster.origin();
493
- if (ec) {
494
- return tl::unexpected(ec);
495
- }
496
- credentials = origin.credentials();
497
- } else {
498
- credentials = cluster_credentials{ request.username, request.password };
499
- }
500
-
501
478
  #ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
502
479
  auto op = std::make_shared<pending_buffered_http_operation>(
503
480
  io_, request, session_manager->dispatch_timeout());
504
481
  if (!session_manager->is_configured()) {
505
- auto err = defer_command(op, session_manager, credentials, std::move(callback));
482
+ auto err = defer_command(op, session_manager, std::move(callback));
506
483
  if (!std::holds_alternative<std::monostate>(err)) {
507
484
  auto ec = std::holds_alternative<impl::bootstrap_error>(err)
508
485
  ? std::get<impl::bootstrap_error>(err).ec
@@ -515,14 +492,13 @@ public:
515
492
  auto op = std::make_shared<pending_buffered_http_operation>(io_, request);
516
493
  #endif
517
494
 
518
- send_http_operation(op, session_manager, credentials, std::move(callback));
495
+ send_http_operation(op, session_manager, std::move(callback));
519
496
  return op;
520
497
  }
521
498
 
522
499
  private:
523
500
  void send_http_operation(const std::shared_ptr<pending_http_operation>& op,
524
501
  const std::shared_ptr<io::http_session_manager>& session_manager,
525
- const couchbase::core::cluster_credentials& credentials,
526
502
  free_form_http_request_callback&& callback)
527
503
  {
528
504
  #ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
@@ -541,11 +517,8 @@ private:
541
517
  #endif
542
518
  std::shared_ptr<io::http_session> session;
543
519
  {
544
- auto [check_out_ec, s] =
545
- session_manager->check_out(op->request().service,
546
- credentials,
547
- op->request().endpoint,
548
- op->request().internal.undesired_endpoint);
520
+ auto [check_out_ec, s] = session_manager->check_out(
521
+ op->request().service, op->request().endpoint, op->request().internal.undesired_endpoint);
549
522
  if (check_out_ec) {
550
523
  return op->invoke_response_handler(check_out_ec, {});
551
524
  }
@@ -576,16 +549,12 @@ private:
576
549
 
577
550
  void send_http_operation(const std::shared_ptr<pending_buffered_http_operation>& op,
578
551
  const std::shared_ptr<io::http_session_manager>& session_manager,
579
- const couchbase::core::cluster_credentials& credentials,
580
552
  buffered_free_form_http_request_callback&& callback)
581
553
  {
582
554
  std::shared_ptr<io::http_session> session;
583
555
  {
584
- auto [check_out_ec, s] =
585
- session_manager->check_out(op->request().service,
586
- credentials,
587
- op->request().endpoint,
588
- op->request().internal.undesired_endpoint);
556
+ auto [check_out_ec, s] = session_manager->check_out(
557
+ op->request().service, op->request().endpoint, op->request().internal.undesired_endpoint);
589
558
  if (check_out_ec) {
590
559
  return op->invoke_response_handler(check_out_ec, {});
591
560
  }
@@ -621,7 +590,6 @@ private:
621
590
  template<typename Callback, typename PendingHttpOp>
622
591
  auto defer_command(std::shared_ptr<PendingHttpOp> pending_op,
623
592
  const std::shared_ptr<io::http_session_manager>& session_manager,
624
- const couchbase::core::cluster_credentials& credentials,
625
593
  Callback&& callback) -> error_union
626
594
  {
627
595
  if (auto last_error = session_manager->last_bootstrap_error(); last_error.has_value()) {
@@ -634,23 +602,20 @@ private:
634
602
  session_manager->add_to_deferred_queue([this,
635
603
  callback = std::forward<Callback>(callback),
636
604
  op = std::move(pending_op),
637
- session_manager,
638
- credentials](error_union err) mutable {
605
+ session_manager](error_union err) mutable {
639
606
  if (!std::holds_alternative<std::monostate>(err)) {
640
607
  // The deferred operation was cancelled - currently this can happen due to closing the
641
608
  // cluster
642
609
  return callback({}, err);
643
610
  }
644
611
 
645
- return send_http_operation(
646
- op, session_manager, credentials, std::forward<Callback>(callback));
612
+ return send_http_operation(op, session_manager, std::forward<Callback>(callback));
647
613
  });
648
614
  return std::monostate{};
649
615
  }
650
616
 
651
617
  auto defer_command(std::shared_ptr<pending_buffered_http_operation> pending_op,
652
618
  const std::shared_ptr<io::http_session_manager>& session_manager,
653
- const couchbase::core::cluster_credentials& credentials,
654
619
  buffered_free_form_http_request_callback&& callback) -> error_union
655
620
  {
656
621
  if (auto last_error = session_manager->last_bootstrap_error(); last_error.has_value()) {
@@ -663,8 +628,7 @@ private:
663
628
  session_manager->add_to_deferred_queue([this,
664
629
  callback = std::move(callback),
665
630
  op = std::move(pending_op),
666
- session_manager,
667
- credentials](error_union err) mutable {
631
+ session_manager](error_union err) mutable {
668
632
  if (!std::holds_alternative<std::monostate>(err)) {
669
633
  auto ec = std::holds_alternative<impl::bootstrap_error>(err)
670
634
  ? std::get<impl::bootstrap_error>(err).ec
@@ -674,7 +638,7 @@ private:
674
638
  return callback({}, ec);
675
639
  }
676
640
 
677
- return send_http_operation(op, session_manager, credentials, std::move(callback));
641
+ return send_http_operation(op, session_manager, std::move(callback));
678
642
  });
679
643
  return std::monostate{};
680
644
  }
@@ -149,7 +149,8 @@ auto
149
149
  build_analytics_request(std::string statement,
150
150
  analytics_options::built options,
151
151
  std::optional<std::string> bucket_name,
152
- std::optional<std::string> scope_name)
152
+ std::optional<std::string> scope_name,
153
+ std::shared_ptr<couchbase::tracing::request_span> op_span)
153
154
  -> core::operations::analytics_request
154
155
  {
155
156
  core::operations::analytics_request request{
@@ -167,7 +168,7 @@ build_analytics_request(std::string statement,
167
168
  std::move(options.client_context_id),
168
169
  options.timeout,
169
170
  };
170
- request.parent_span = options.parent_span;
171
+ request.parent_span = std::move(op_span);
171
172
  if (!options.raw.empty()) {
172
173
  for (auto& [name, value] : options.raw) {
173
174
  request.raw[name] = std::move(value);
@@ -33,6 +33,7 @@ auto
33
33
  build_analytics_request(std::string statement,
34
34
  analytics_options::built options,
35
35
  std::optional<std::string> bucket_name,
36
- std::optional<std::string> scope_name)
36
+ std::optional<std::string> scope_name,
37
+ std::shared_ptr<couchbase::tracing::request_span> op_span)
37
38
  -> core::operations::analytics_request;
38
39
  } // namespace couchbase::core::impl