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
@@ -21,6 +21,7 @@
21
21
  #include "core/io/http_context.hxx"
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/platform/uuid.h"
24
+ #include "core/public_fwd.hxx"
24
25
  #include "core/timeout_defaults.hxx"
25
26
 
26
27
  namespace couchbase::core::operations::management
@@ -47,6 +48,7 @@ struct search_index_drop_request {
47
48
 
48
49
  std::optional<std::string> client_context_id{};
49
50
  std::optional<std::chrono::milliseconds> timeout{};
51
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
50
52
 
51
53
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
52
54
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/management/search_index.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -48,6 +49,7 @@ struct search_index_get_request {
48
49
 
49
50
  std::optional<std::string> client_context_id{};
50
51
  std::optional<std::chrono::milliseconds> timeout{};
52
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
51
53
 
52
54
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
53
55
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/management/search_index.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -47,6 +48,7 @@ struct search_index_get_all_request {
47
48
 
48
49
  std::optional<std::string> client_context_id{};
49
50
  std::optional<std::chrono::milliseconds> timeout{};
51
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
50
52
 
51
53
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
52
54
  http_context& context) const;
@@ -21,6 +21,7 @@
21
21
  #include "core/io/http_context.hxx"
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/platform/uuid.h"
24
+ #include "core/public_fwd.hxx"
24
25
  #include "core/timeout_defaults.hxx"
25
26
 
26
27
  namespace couchbase::core::operations::management
@@ -49,6 +50,7 @@ struct search_index_get_documents_count_request {
49
50
 
50
51
  std::optional<std::string> client_context_id{};
51
52
  std::optional<std::chrono::milliseconds> timeout{};
53
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
52
54
 
53
55
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
54
56
  http_context& context) const;
@@ -21,6 +21,7 @@
21
21
  #include "core/io/http_context.hxx"
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/platform/uuid.h"
24
+ #include "core/public_fwd.hxx"
24
25
  #include "core/timeout_defaults.hxx"
25
26
 
26
27
  namespace couchbase::core::operations::management
@@ -45,6 +46,7 @@ struct search_index_get_stats_request {
45
46
 
46
47
  std::optional<std::string> client_context_id{};
47
48
  std::optional<std::chrono::milliseconds> timeout{};
49
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
48
50
 
49
51
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
50
52
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/management/search_index.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -50,6 +51,7 @@ struct search_index_upsert_request {
50
51
 
51
52
  std::optional<std::string> client_context_id{};
52
53
  std::optional<std::chrono::milliseconds> timeout{};
54
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
53
55
 
54
56
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
55
57
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/management/rbac.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -46,6 +47,7 @@ struct user_drop_request {
46
47
 
47
48
  std::optional<std::string> client_context_id{};
48
49
  std::optional<std::chrono::milliseconds> timeout{};
50
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
49
51
 
50
52
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
51
53
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/management/rbac.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -47,6 +48,7 @@ struct user_get_request {
47
48
 
48
49
  std::optional<std::string> client_context_id{};
49
50
  std::optional<std::chrono::milliseconds> timeout{};
51
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
50
52
 
51
53
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
52
54
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/management/rbac.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -46,6 +47,7 @@ struct user_get_all_request {
46
47
 
47
48
  std::optional<std::string> client_context_id{};
48
49
  std::optional<std::chrono::milliseconds> timeout{};
50
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
49
51
 
50
52
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
51
53
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/management/rbac.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -47,6 +48,7 @@ struct user_upsert_request {
47
48
 
48
49
  std::optional<std::string> client_context_id{};
49
50
  std::optional<std::chrono::milliseconds> timeout{};
51
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
50
52
 
51
53
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
52
54
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_context.hxx"
23
23
  #include "core/io/http_message.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -45,6 +46,7 @@ struct view_index_drop_request {
45
46
 
46
47
  std::optional<std::string> client_context_id{};
47
48
  std::optional<std::chrono::milliseconds> timeout{};
49
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
48
50
 
49
51
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
50
52
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/management/design_document.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -46,6 +47,7 @@ struct view_index_get_request {
46
47
 
47
48
  std::optional<std::string> client_context_id{};
48
49
  std::optional<std::chrono::milliseconds> timeout{};
50
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
49
51
 
50
52
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
51
53
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/management/design_document.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -46,6 +47,7 @@ struct view_index_get_all_request {
46
47
 
47
48
  std::optional<std::string> client_context_id{};
48
49
  std::optional<std::chrono::milliseconds> timeout{};
50
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
49
51
 
50
52
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
51
53
  http_context& context) const;
@@ -22,6 +22,7 @@
22
22
  #include "core/io/http_message.hxx"
23
23
  #include "core/management/design_document.hxx"
24
24
  #include "core/platform/uuid.h"
25
+ #include "core/public_fwd.hxx"
25
26
  #include "core/timeout_defaults.hxx"
26
27
 
27
28
  namespace couchbase::core::operations::management
@@ -44,6 +45,7 @@ struct view_index_upsert_request {
44
45
 
45
46
  std::optional<std::string> client_context_id{};
46
47
  std::optional<std::chrono::milliseconds> timeout{};
48
+ std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
47
49
 
48
50
  [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded,
49
51
  http_context& context) const;
@@ -28,4 +28,10 @@ struct is_compound_operation : public std::false_type {
28
28
  template<typename T>
29
29
  inline constexpr bool is_compound_operation_v = is_compound_operation<T>::value;
30
30
 
31
+ template<typename T>
32
+ struct is_cancellable_operation : public std::false_type {
33
+ };
34
+
35
+ template<typename T>
36
+ inline constexpr bool is_cancellable_operation_v = is_cancellable_operation<T>::value;
31
37
  } // namespace couchbase::core::operations
@@ -41,5 +41,4 @@
41
41
  #include "core/operations/document_touch.hxx"
42
42
  #include "core/operations/document_unlock.hxx"
43
43
  #include "core/operations/document_upsert.hxx"
44
- #include "core/operations/document_view.hxx"
45
44
  #include "core/operations/http_noop.hxx"
@@ -36,6 +36,8 @@ struct observe_seqno_request;
36
36
  struct observe_seqno_response;
37
37
  template<typename mutation_request>
38
38
  struct with_legacy_durability;
39
+ template<typename kv_request>
40
+ struct with_cancellation;
39
41
  } // namespace impl
40
42
 
41
43
  namespace operations
@@ -103,6 +105,12 @@ using remove_request_with_legacy_durability = impl::with_legacy_durability<remov
103
105
  using replace_request_with_legacy_durability = impl::with_legacy_durability<replace_request>;
104
106
  using upsert_request_with_legacy_durability = impl::with_legacy_durability<upsert_request>;
105
107
 
108
+ using get_request_with_cancellation = impl::with_cancellation<get_request>;
109
+ using get_replica_request_with_cancellation = impl::with_cancellation<impl::get_replica_request>;
110
+ using lookup_in_request_with_cancellation = impl::with_cancellation<lookup_in_request>;
111
+ using lookup_in_replica_request_with_cancellation =
112
+ impl::with_cancellation<impl::lookup_in_replica_request>;
113
+
106
114
  namespace management
107
115
  {
108
116
  struct analytics_dataset_create_request;
@@ -26,6 +26,7 @@
26
26
 
27
27
  #include <tao/json.hpp>
28
28
 
29
+ #include <mutex>
29
30
  #include <random>
30
31
  #include <utility>
31
32
 
@@ -99,6 +100,19 @@ struct traits<couchbase::core::io::dns::dns_config> {
99
100
  }
100
101
  };
101
102
 
103
+ template<>
104
+ struct traits<couchbase::core::orphan_reporter_options> {
105
+ template<template<typename...> class Traits>
106
+ static void assign(tao::json::basic_value<Traits>& v,
107
+ const couchbase::core::orphan_reporter_options& o)
108
+ {
109
+ v = {
110
+ { "emit_interval", o.emit_interval },
111
+ { "sample_size", o.sample_size },
112
+ };
113
+ }
114
+ };
115
+
102
116
  template<>
103
117
  struct traits<couchbase::core::tracing::threshold_logging_options> {
104
118
  template<template<typename...> class Traits>
@@ -106,8 +120,6 @@ struct traits<couchbase::core::tracing::threshold_logging_options> {
106
120
  const couchbase::core::tracing::threshold_logging_options& o)
107
121
  {
108
122
  v = {
109
- { "orphaned_emit_interval", o.orphaned_emit_interval },
110
- { "orphaned_sample_size", o.orphaned_sample_size },
111
123
  { "threshold_emit_interval", o.threshold_emit_interval },
112
124
  { "threshold_sample_size", o.threshold_sample_size },
113
125
  { "key_value_threshold", o.key_value_threshold },
@@ -275,12 +287,14 @@ origin::to_json() const -> std::string
275
287
  { "enable_compression", options_.enable_compression },
276
288
  { "enable_tracing", options_.enable_tracing },
277
289
  { "enable_metrics", options_.enable_metrics },
290
+ { "enable_orphan_reporting", options_.enable_orphan_reporting },
278
291
  { "tcp_keep_alive_interval", options_.tcp_keep_alive_interval },
279
292
  { "config_idle_redial_timeout", options_.config_idle_redial_timeout },
280
293
  { "max_http_connections", options_.max_http_connections },
281
294
  { "idle_http_connection_timeout", options_.idle_http_connection_timeout },
282
295
  { "metrics_options", options_.metrics_options },
283
296
  { "tracing_options", options_.tracing_options },
297
+ { "orphan_reporter_options", options_.orphan_options },
284
298
  { "transactions_options", options_.transactions },
285
299
  { "server_group", options_.server_group },
286
300
  #endif
@@ -302,12 +316,36 @@ origin::to_json() const -> std::string
302
316
 
303
317
  } // namespace couchbase::core
304
318
 
319
+ couchbase::core::origin::origin(origin&& other) noexcept
320
+ : options_(std::move(other.options_))
321
+ , nodes_(std::move(other.nodes_))
322
+ , next_node_(other.next_node_)
323
+ , exhausted_(other.exhausted_)
324
+ , connection_string_(std::move(other.connection_string_))
325
+ , credentials_(std::move(other.credentials_))
326
+ {
327
+ }
328
+
329
+ auto
330
+ couchbase::core::origin::operator=(origin&& other) noexcept -> origin&
331
+ {
332
+ if (this != &other) {
333
+ options_ = std::move(other.options_);
334
+ nodes_ = std::move(other.nodes_);
335
+ next_node_ = other.next_node_;
336
+ exhausted_ = other.exhausted_;
337
+ connection_string_ = std::move(other.connection_string_);
338
+ credentials_ = std::move(other.credentials_);
339
+ }
340
+ return *this;
341
+ }
342
+
305
343
  couchbase::core::origin::origin(const couchbase::core::origin& other)
306
344
  : options_(other.options_)
307
- , credentials_(other.credentials_)
308
345
  , nodes_(other.nodes_)
309
346
  , next_node_(nodes_.begin())
310
347
  {
348
+ update_credentials(other.credentials());
311
349
  }
312
350
 
313
351
  couchbase::core::origin::origin(origin other, const topology::configuration& config)
@@ -321,9 +359,9 @@ couchbase::core::origin::origin(couchbase::core::cluster_credentials auth,
321
359
  std::uint16_t port,
322
360
  couchbase::core::cluster_options options)
323
361
  : options_(std::move(options))
324
- , credentials_(std::move(auth))
325
362
  , nodes_{ { hostname, std::to_string(port) } }
326
363
  , next_node_(nodes_.begin())
364
+ , credentials_(std::move(auth))
327
365
  {
328
366
  }
329
367
  couchbase::core::origin::origin(couchbase::core::cluster_credentials auth,
@@ -331,16 +369,16 @@ couchbase::core::origin::origin(couchbase::core::cluster_credentials auth,
331
369
  const std::string& port,
332
370
  couchbase::core::cluster_options options)
333
371
  : options_(std::move(options))
334
- , credentials_(std::move(auth))
335
372
  , nodes_{ { hostname, port } }
336
373
  , next_node_(nodes_.begin())
374
+ , credentials_(std::move(auth))
337
375
  {
338
376
  }
339
377
  couchbase::core::origin::origin(couchbase::core::cluster_credentials auth,
340
378
  const couchbase::core::utils::connection_string& connstr)
341
379
  : options_(connstr.options)
342
- , credentials_(std::move(auth))
343
380
  , connection_string_(connstr.input)
381
+ , credentials_(std::move(auth))
344
382
  {
345
383
  nodes_.reserve(connstr.bootstrap_nodes.size());
346
384
  for (const auto& node : connstr.bootstrap_nodes) {
@@ -358,7 +396,7 @@ couchbase::core::origin::operator=(const couchbase::core::origin& other) -> couc
358
396
  {
359
397
  if (this != &other) {
360
398
  options_ = other.options_;
361
- credentials_ = other.credentials_;
399
+ update_credentials(other.credentials());
362
400
  nodes_ = other.nodes_;
363
401
  next_node_ = nodes_.begin();
364
402
  exhausted_ = false;
@@ -371,26 +409,36 @@ couchbase::core::origin::connection_string() const -> const std::string&
371
409
  return connection_string_;
372
410
  }
373
411
  auto
374
- couchbase::core::origin::username() const -> const std::string&
412
+ couchbase::core::origin::username() const -> std::string
375
413
  {
414
+ const std::shared_lock lock(credentials_mutex_);
376
415
  return credentials_.username;
377
416
  }
378
417
  auto
379
- couchbase::core::origin::password() const -> const std::string&
418
+ couchbase::core::origin::password() const -> std::string
380
419
  {
420
+ const std::shared_lock lock(credentials_mutex_);
381
421
  return credentials_.password;
382
422
  }
383
423
  auto
384
- couchbase::core::origin::certificate_path() const -> const std::string&
424
+ couchbase::core::origin::certificate_path() const -> std::string
385
425
  {
426
+ const std::shared_lock lock(credentials_mutex_);
386
427
  return credentials_.certificate_path;
387
428
  }
388
429
  auto
389
- couchbase::core::origin::key_path() const -> const std::string&
430
+ couchbase::core::origin::key_path() const -> std::string
390
431
  {
432
+ const std::shared_lock lock(credentials_mutex_);
391
433
  return credentials_.key_path;
392
434
  }
393
435
  auto
436
+ couchbase::core::origin::jwt_token() const -> std::string
437
+ {
438
+ const std::shared_lock lock(credentials_mutex_);
439
+ return credentials_.jwt_token;
440
+ }
441
+ auto
394
442
  couchbase::core::origin::get_hostnames() const -> std::vector<std::string>
395
443
  {
396
444
  std::vector<std::string> res;
@@ -455,6 +503,12 @@ couchbase::core::origin::set_nodes_from_config(const topology::configuration& co
455
503
  }
456
504
  next_node_ = nodes_.begin();
457
505
  }
506
+ void
507
+ couchbase::core::origin::update_credentials(cluster_credentials auth)
508
+ {
509
+ const std::unique_lock lock(credentials_mutex_);
510
+ credentials_ = std::move(auth);
511
+ }
458
512
  auto
459
513
  couchbase::core::origin::next_address() -> std::pair<std::string, std::string>
460
514
  {
@@ -490,7 +544,8 @@ couchbase::core::origin::options() -> couchbase::core::cluster_options&
490
544
  return options_;
491
545
  }
492
546
  auto
493
- couchbase::core::origin::credentials() const -> const couchbase::core::cluster_credentials&
547
+ couchbase::core::origin::credentials() const -> couchbase::core::cluster_credentials
494
548
  {
549
+ const std::shared_lock lock(credentials_mutex_);
495
550
  return credentials_;
496
551
  }
@@ -20,6 +20,7 @@
20
20
  #include "cluster_credentials.hxx"
21
21
  #include "cluster_options.hxx"
22
22
 
23
+ #include <shared_mutex>
23
24
  #include <string>
24
25
  #include <utility>
25
26
  #include <vector>
@@ -43,7 +44,7 @@ struct origin {
43
44
  origin() = default;
44
45
  ~origin() = default;
45
46
 
46
- origin(origin&& other) = default;
47
+ origin(origin&& other) noexcept;
47
48
  origin(const origin& other);
48
49
  origin(origin other, const topology::configuration& config);
49
50
  origin(cluster_credentials auth,
@@ -55,14 +56,15 @@ struct origin {
55
56
  const std::string& port,
56
57
  cluster_options options);
57
58
  origin(cluster_credentials auth, const utils::connection_string& connstr);
58
- auto operator=(origin&& other) -> origin& = default;
59
+ auto operator=(origin&& other) noexcept -> origin&;
59
60
  auto operator=(const origin& other) -> origin&;
60
61
 
61
62
  [[nodiscard]] auto connection_string() const -> const std::string&;
62
- [[nodiscard]] auto username() const -> const std::string&;
63
- [[nodiscard]] auto password() const -> const std::string&;
64
- [[nodiscard]] auto certificate_path() const -> const std::string&;
65
- [[nodiscard]] auto key_path() const -> const std::string&;
63
+ [[nodiscard]] auto username() const -> std::string;
64
+ [[nodiscard]] auto password() const -> std::string;
65
+ [[nodiscard]] auto certificate_path() const -> std::string;
66
+ [[nodiscard]] auto key_path() const -> std::string;
67
+ [[nodiscard]] auto jwt_token() const -> std::string;
66
68
 
67
69
  [[nodiscard]] auto get_hostnames() const -> std::vector<std::string>;
68
70
  [[nodiscard]] auto get_nodes() const -> std::vector<std::string>;
@@ -71,6 +73,8 @@ struct origin {
71
73
  void set_nodes(node_list nodes);
72
74
  void set_nodes_from_config(const topology::configuration& config);
73
75
 
76
+ void update_credentials(cluster_credentials auth);
77
+
74
78
  [[nodiscard]] auto next_address() -> std::pair<std::string, std::string>;
75
79
 
76
80
  [[nodiscard]] auto exhausted() const -> bool;
@@ -79,16 +83,17 @@ struct origin {
79
83
 
80
84
  [[nodiscard]] auto options() const -> const couchbase::core::cluster_options&;
81
85
  [[nodiscard]] auto options() -> couchbase::core::cluster_options&;
82
- [[nodiscard]] auto credentials() const -> const couchbase::core::cluster_credentials&;
86
+ [[nodiscard]] auto credentials() const -> couchbase::core::cluster_credentials;
83
87
  [[nodiscard]] auto to_json() const -> std::string;
84
88
 
85
89
  private:
86
90
  couchbase::core::cluster_options options_{};
87
- cluster_credentials credentials_{};
88
91
  node_list nodes_{};
89
92
  node_list::iterator next_node_{};
90
93
  bool exhausted_{ false };
91
94
  std::string connection_string_{};
95
+ cluster_credentials credentials_{};
96
+ mutable std::shared_mutex credentials_mutex_{};
92
97
  };
93
98
 
94
99
  } // namespace couchbase::core