couchbase 4.6.1 → 4.7.0-dev.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 (312) hide show
  1. package/CMakeLists.txt +2 -1
  2. package/deps/couchbase-cxx-cache/mozilla-ca-bundle.crt +23 -5
  3. package/deps/couchbase-cxx-cache/mozilla-ca-bundle.sha256 +1 -1
  4. package/deps/couchbase-cxx-client/CMakeLists.txt +24 -11
  5. package/deps/couchbase-cxx-client/README.md +2 -2
  6. package/deps/couchbase-cxx-client/cmake/APKBUILD.in +17 -1
  7. package/deps/couchbase-cxx-client/cmake/Bundler.cmake +9 -1
  8. package/deps/couchbase-cxx-client/cmake/Cache.cmake +48 -19
  9. package/deps/couchbase-cxx-client/cmake/CompilerOptions.cmake +3 -1
  10. package/deps/couchbase-cxx-client/cmake/OpenSSL.cmake +10 -2
  11. package/deps/couchbase-cxx-client/cmake/Packaging.cmake +48 -8
  12. package/deps/couchbase-cxx-client/cmake/ThirdPartyDependencies.cmake +41 -0
  13. package/deps/couchbase-cxx-client/cmake/build_config.hxx.in +2 -0
  14. package/deps/couchbase-cxx-client/cmake/couchbase-cxx-client.spec.in +18 -0
  15. package/deps/couchbase-cxx-client/cmake/debian/control +6 -1
  16. package/deps/couchbase-cxx-client/cmake/debian/rules +1 -0
  17. package/deps/couchbase-cxx-client/cmake/tarball_glob.txt +10 -0
  18. package/deps/couchbase-cxx-client/core/app_telemetry_meter.cxx +1 -0
  19. package/deps/couchbase-cxx-client/core/app_telemetry_reporter.cxx +45 -43
  20. package/deps/couchbase-cxx-client/core/app_telemetry_reporter.hxx +4 -3
  21. package/deps/couchbase-cxx-client/core/bucket.cxx +128 -13
  22. package/deps/couchbase-cxx-client/core/bucket.hxx +12 -2
  23. package/deps/couchbase-cxx-client/core/cluster.cxx +304 -152
  24. package/deps/couchbase-cxx-client/core/cluster.hxx +32 -0
  25. package/deps/couchbase-cxx-client/core/cluster_credentials.cxx +25 -0
  26. package/deps/couchbase-cxx-client/core/cluster_credentials.hxx +5 -0
  27. package/deps/couchbase-cxx-client/core/cluster_label_listener.cxx +72 -0
  28. package/deps/couchbase-cxx-client/core/cluster_label_listener.hxx +46 -0
  29. package/deps/couchbase-cxx-client/core/cluster_options.hxx +4 -0
  30. package/deps/couchbase-cxx-client/core/deprecation_utils.hxx +26 -0
  31. package/deps/couchbase-cxx-client/core/error.hxx +27 -0
  32. package/deps/couchbase-cxx-client/core/free_form_http_request.hxx +0 -2
  33. package/deps/couchbase-cxx-client/core/http_component.cxx +12 -48
  34. package/deps/couchbase-cxx-client/core/impl/analytics.cxx +3 -2
  35. package/deps/couchbase-cxx-client/core/impl/analytics.hxx +2 -1
  36. package/deps/couchbase-cxx-client/core/impl/analytics_index_manager.cxx +249 -137
  37. package/deps/couchbase-cxx-client/core/impl/binary_collection.cxx +134 -58
  38. package/deps/couchbase-cxx-client/core/impl/bucket_manager.cxx +87 -35
  39. package/deps/couchbase-cxx-client/core/impl/collection.cxx +560 -245
  40. package/deps/couchbase-cxx-client/core/impl/collection_manager.cxx +89 -49
  41. package/deps/couchbase-cxx-client/core/impl/dns_srv_tracker.cxx +3 -3
  42. package/deps/couchbase-cxx-client/core/impl/error.cxx +20 -13
  43. package/deps/couchbase-cxx-client/core/impl/error.hxx +15 -10
  44. package/deps/couchbase-cxx-client/core/impl/get_all_replicas.hxx +1 -1
  45. package/deps/couchbase-cxx-client/core/impl/get_any_replica.hxx +2 -1
  46. package/deps/couchbase-cxx-client/core/impl/get_replica.hxx +2 -0
  47. package/deps/couchbase-cxx-client/core/impl/lookup_in_replica.hxx +1 -1
  48. package/deps/couchbase-cxx-client/core/impl/observability_recorder.cxx +161 -0
  49. package/deps/couchbase-cxx-client/core/impl/observability_recorder.hxx +77 -0
  50. package/deps/couchbase-cxx-client/core/impl/observe_seqno.hxx +2 -0
  51. package/deps/couchbase-cxx-client/core/impl/public_bucket.cxx +31 -7
  52. package/deps/couchbase-cxx-client/core/impl/public_cluster.cxx +107 -19
  53. package/deps/couchbase-cxx-client/core/impl/query.cxx +6 -3
  54. package/deps/couchbase-cxx-client/core/impl/query.hxx +3 -1
  55. package/deps/couchbase-cxx-client/core/impl/query_index_manager.cxx +267 -102
  56. package/deps/couchbase-cxx-client/core/impl/scope.cxx +53 -11
  57. package/deps/couchbase-cxx-client/core/impl/search.cxx +8 -4
  58. package/deps/couchbase-cxx-client/core/impl/search.hxx +6 -2
  59. package/deps/couchbase-cxx-client/core/impl/search_index_manager.cxx +131 -41
  60. package/deps/couchbase-cxx-client/core/impl/with_cancellation.hxx +75 -0
  61. package/deps/couchbase-cxx-client/core/io/config_tracker.cxx +9 -9
  62. package/deps/couchbase-cxx-client/core/io/config_tracker.hxx +2 -1
  63. package/deps/couchbase-cxx-client/core/io/http_command.hxx +98 -49
  64. package/deps/couchbase-cxx-client/core/io/http_context.hxx +2 -0
  65. package/deps/couchbase-cxx-client/core/io/http_session.cxx +23 -10
  66. package/deps/couchbase-cxx-client/core/io/http_session.hxx +17 -9
  67. package/deps/couchbase-cxx-client/core/io/http_session_manager.hxx +163 -228
  68. package/deps/couchbase-cxx-client/core/io/http_traits.hxx +0 -7
  69. package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +123 -44
  70. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +251 -26
  71. package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +9 -1
  72. package/deps/couchbase-cxx-client/core/io/mcbp_traits.hxx +0 -8
  73. package/deps/couchbase-cxx-client/core/io/streams.cxx +3 -3
  74. package/deps/couchbase-cxx-client/core/io/streams.hxx +3 -2
  75. package/deps/couchbase-cxx-client/core/meta/features.hxx +15 -0
  76. package/deps/couchbase-cxx-client/core/meta/version.cxx +13 -0
  77. package/deps/couchbase-cxx-client/core/meta/version.hxx +3 -0
  78. package/deps/couchbase-cxx-client/core/metrics/constants.hxx +23 -0
  79. package/deps/couchbase-cxx-client/core/metrics/logging_meter.cxx +5 -5
  80. package/deps/couchbase-cxx-client/core/metrics/meter_wrapper.cxx +65 -63
  81. package/deps/couchbase-cxx-client/core/metrics/meter_wrapper.hxx +12 -10
  82. package/deps/couchbase-cxx-client/core/operations/document_analytics.hxx +0 -5
  83. package/deps/couchbase-cxx-client/core/operations/document_append.hxx +0 -4
  84. package/deps/couchbase-cxx-client/core/operations/document_decrement.hxx +0 -5
  85. package/deps/couchbase-cxx-client/core/operations/document_exists.hxx +0 -7
  86. package/deps/couchbase-cxx-client/core/operations/document_get.hxx +0 -7
  87. package/deps/couchbase-cxx-client/core/operations/document_get_all_replicas.hxx +77 -27
  88. package/deps/couchbase-cxx-client/core/operations/document_get_and_lock.hxx +0 -9
  89. package/deps/couchbase-cxx-client/core/operations/document_get_and_touch.hxx +0 -9
  90. package/deps/couchbase-cxx-client/core/operations/document_get_any_replica.hxx +83 -2
  91. package/deps/couchbase-cxx-client/core/operations/document_get_projected.hxx +0 -9
  92. package/deps/couchbase-cxx-client/core/operations/document_increment.hxx +0 -5
  93. package/deps/couchbase-cxx-client/core/operations/document_insert.hxx +0 -4
  94. package/deps/couchbase-cxx-client/core/operations/document_lookup_in.hxx +0 -9
  95. package/deps/couchbase-cxx-client/core/operations/document_lookup_in_all_replicas.hxx +46 -4
  96. package/deps/couchbase-cxx-client/core/operations/document_lookup_in_any_replica.hxx +121 -43
  97. package/deps/couchbase-cxx-client/core/operations/document_mutate_in.hxx +0 -5
  98. package/deps/couchbase-cxx-client/core/operations/document_prepend.hxx +0 -4
  99. package/deps/couchbase-cxx-client/core/operations/document_query.hxx +0 -4
  100. package/deps/couchbase-cxx-client/core/operations/document_remove.hxx +0 -4
  101. package/deps/couchbase-cxx-client/core/operations/document_replace.hxx +0 -4
  102. package/deps/couchbase-cxx-client/core/operations/document_search.hxx +0 -7
  103. package/deps/couchbase-cxx-client/core/operations/document_touch.hxx +0 -7
  104. package/deps/couchbase-cxx-client/core/operations/document_unlock.hxx +0 -6
  105. package/deps/couchbase-cxx-client/core/operations/document_upsert.hxx +0 -4
  106. package/deps/couchbase-cxx-client/core/operations/document_view.cxx +2 -0
  107. package/deps/couchbase-cxx-client/core/operations/document_view.hxx +10 -13
  108. package/deps/couchbase-cxx-client/core/operations/http_noop.hxx +2 -0
  109. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_create.hxx +2 -0
  110. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_drop.hxx +2 -0
  111. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_get_all.hxx +2 -0
  112. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_create.hxx +2 -0
  113. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_drop.hxx +2 -0
  114. package/deps/couchbase-cxx-client/core/operations/management/analytics_get_pending_mutations.hxx +2 -0
  115. package/deps/couchbase-cxx-client/core/operations/management/analytics_index_create.hxx +2 -0
  116. package/deps/couchbase-cxx-client/core/operations/management/analytics_index_drop.hxx +2 -0
  117. package/deps/couchbase-cxx-client/core/operations/management/analytics_index_get_all.hxx +2 -0
  118. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_connect.hxx +2 -0
  119. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_create.hxx +2 -0
  120. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_disconnect.hxx +2 -0
  121. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_drop.hxx +2 -0
  122. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_get_all.hxx +2 -0
  123. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_replace.hxx +2 -0
  124. package/deps/couchbase-cxx-client/core/operations/management/bucket_create.hxx +2 -0
  125. package/deps/couchbase-cxx-client/core/operations/management/bucket_describe.hxx +2 -0
  126. package/deps/couchbase-cxx-client/core/operations/management/bucket_drop.hxx +2 -0
  127. package/deps/couchbase-cxx-client/core/operations/management/bucket_flush.hxx +2 -0
  128. package/deps/couchbase-cxx-client/core/operations/management/bucket_get.hxx +2 -0
  129. package/deps/couchbase-cxx-client/core/operations/management/bucket_get_all.hxx +2 -0
  130. package/deps/couchbase-cxx-client/core/operations/management/bucket_update.hxx +2 -0
  131. package/deps/couchbase-cxx-client/core/operations/management/change_password.hxx +2 -0
  132. package/deps/couchbase-cxx-client/core/operations/management/cluster_describe.hxx +2 -0
  133. package/deps/couchbase-cxx-client/core/operations/management/cluster_developer_preview_enable.hxx +2 -0
  134. package/deps/couchbase-cxx-client/core/operations/management/collection_create.hxx +2 -0
  135. package/deps/couchbase-cxx-client/core/operations/management/collection_drop.hxx +2 -0
  136. package/deps/couchbase-cxx-client/core/operations/management/collection_update.hxx +2 -0
  137. package/deps/couchbase-cxx-client/core/operations/management/collections_manifest_get.hxx +2 -0
  138. package/deps/couchbase-cxx-client/core/operations/management/error_utils.cxx +4 -1
  139. package/deps/couchbase-cxx-client/core/operations/management/eventing_deploy_function.hxx +2 -0
  140. package/deps/couchbase-cxx-client/core/operations/management/eventing_drop_function.hxx +2 -0
  141. package/deps/couchbase-cxx-client/core/operations/management/eventing_get_all_functions.hxx +2 -0
  142. package/deps/couchbase-cxx-client/core/operations/management/eventing_get_function.hxx +2 -0
  143. package/deps/couchbase-cxx-client/core/operations/management/eventing_get_status.hxx +2 -0
  144. package/deps/couchbase-cxx-client/core/operations/management/eventing_pause_function.hxx +2 -0
  145. package/deps/couchbase-cxx-client/core/operations/management/eventing_resume_function.hxx +2 -0
  146. package/deps/couchbase-cxx-client/core/operations/management/eventing_undeploy_function.hxx +2 -0
  147. package/deps/couchbase-cxx-client/core/operations/management/eventing_upsert_function.hxx +2 -0
  148. package/deps/couchbase-cxx-client/core/operations/management/freeform.hxx +2 -0
  149. package/deps/couchbase-cxx-client/core/operations/management/group_drop.hxx +2 -0
  150. package/deps/couchbase-cxx-client/core/operations/management/group_get.hxx +2 -0
  151. package/deps/couchbase-cxx-client/core/operations/management/group_get_all.hxx +2 -0
  152. package/deps/couchbase-cxx-client/core/operations/management/group_upsert.hxx +2 -0
  153. package/deps/couchbase-cxx-client/core/operations/management/query_index_build.hxx +2 -0
  154. package/deps/couchbase-cxx-client/core/operations/management/query_index_build_deferred.hxx +68 -30
  155. package/deps/couchbase-cxx-client/core/operations/management/query_index_create.hxx +2 -0
  156. package/deps/couchbase-cxx-client/core/operations/management/query_index_drop.hxx +2 -0
  157. package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.hxx +4 -3
  158. package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all_deferred.hxx +2 -1
  159. package/deps/couchbase-cxx-client/core/operations/management/role_get_all.hxx +2 -0
  160. package/deps/couchbase-cxx-client/core/operations/management/scope_create.hxx +2 -0
  161. package/deps/couchbase-cxx-client/core/operations/management/scope_drop.hxx +2 -0
  162. package/deps/couchbase-cxx-client/core/operations/management/scope_get_all.hxx +2 -0
  163. package/deps/couchbase-cxx-client/core/operations/management/search_get_stats.hxx +2 -0
  164. package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.hxx +2 -0
  165. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.hxx +2 -0
  166. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.hxx +2 -0
  167. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.hxx +2 -0
  168. package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.hxx +2 -0
  169. package/deps/couchbase-cxx-client/core/operations/management/search_index_get.hxx +2 -0
  170. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.hxx +2 -0
  171. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.hxx +2 -0
  172. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_stats.hxx +2 -0
  173. package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.hxx +2 -0
  174. package/deps/couchbase-cxx-client/core/operations/management/user_drop.hxx +2 -0
  175. package/deps/couchbase-cxx-client/core/operations/management/user_get.hxx +2 -0
  176. package/deps/couchbase-cxx-client/core/operations/management/user_get_all.hxx +2 -0
  177. package/deps/couchbase-cxx-client/core/operations/management/user_upsert.hxx +2 -0
  178. package/deps/couchbase-cxx-client/core/operations/management/view_index_drop.hxx +2 -0
  179. package/deps/couchbase-cxx-client/core/operations/management/view_index_get.hxx +2 -0
  180. package/deps/couchbase-cxx-client/core/operations/management/view_index_get_all.hxx +2 -0
  181. package/deps/couchbase-cxx-client/core/operations/management/view_index_upsert.hxx +2 -0
  182. package/deps/couchbase-cxx-client/core/operations/operation_traits.hxx +6 -0
  183. package/deps/couchbase-cxx-client/core/operations.hxx +0 -1
  184. package/deps/couchbase-cxx-client/core/operations_fwd.hxx +8 -0
  185. package/deps/couchbase-cxx-client/core/origin.cxx +67 -12
  186. package/deps/couchbase-cxx-client/core/origin.hxx +13 -8
  187. package/deps/couchbase-cxx-client/core/orphan_reporter.cxx +164 -0
  188. package/deps/couchbase-cxx-client/core/orphan_reporter.hxx +65 -0
  189. package/deps/couchbase-cxx-client/core/sasl/CMakeLists.txt +1 -0
  190. package/deps/couchbase-cxx-client/core/sasl/client.cc +6 -0
  191. package/deps/couchbase-cxx-client/core/sasl/mechanism.cc +2 -1
  192. package/deps/couchbase-cxx-client/core/sasl/mechanism.h +2 -1
  193. package/deps/couchbase-cxx-client/core/sasl/oauthbearer/oauthbearer.cc +41 -0
  194. package/deps/couchbase-cxx-client/core/sasl/oauthbearer/oauthbearer.h +47 -0
  195. package/deps/couchbase-cxx-client/core/tls_context_provider.cxx +44 -0
  196. package/deps/couchbase-cxx-client/core/tls_context_provider.hxx +44 -0
  197. package/deps/couchbase-cxx-client/core/tracing/attribute_helpers.hxx +45 -0
  198. package/deps/couchbase-cxx-client/core/tracing/constants.hxx +148 -68
  199. package/deps/couchbase-cxx-client/core/tracing/threshold_logging_options.hxx +0 -3
  200. package/deps/couchbase-cxx-client/core/tracing/threshold_logging_tracer.cxx +122 -170
  201. package/deps/couchbase-cxx-client/core/tracing/tracer_wrapper.cxx +17 -24
  202. package/deps/couchbase-cxx-client/core/tracing/tracer_wrapper.hxx +8 -10
  203. package/deps/couchbase-cxx-client/core/tracing/wrapper_sdk_tracer.cxx +114 -0
  204. package/deps/couchbase-cxx-client/core/tracing/wrapper_sdk_tracer.hxx +85 -0
  205. package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.cxx +16 -14
  206. package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.hxx +4 -4
  207. package/deps/couchbase-cxx-client/core/transactions/transactions.cxx +1 -1
  208. package/deps/couchbase-cxx-client/core/transactions/transactions_cleanup.cxx +1 -2
  209. package/deps/couchbase-cxx-client/core/utils/byteswap.hxx +12 -0
  210. package/deps/couchbase-cxx-client/core/utils/concurrent_fixed_priority_queue.hxx +102 -0
  211. package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +2 -0
  212. package/deps/couchbase-cxx-client/couchbase/certificate_authenticator.hxx +1 -0
  213. package/deps/couchbase-cxx-client/couchbase/cluster.hxx +47 -0
  214. package/deps/couchbase-cxx-client/couchbase/cluster_options.hxx +16 -0
  215. package/deps/couchbase-cxx-client/couchbase/collection.hxx +60 -15
  216. package/deps/couchbase-cxx-client/couchbase/error_codes.hxx +48 -48
  217. package/deps/couchbase-cxx-client/couchbase/jwt_authenticator.hxx +52 -0
  218. package/deps/couchbase-cxx-client/couchbase/metrics/meter.hxx +2 -1
  219. package/deps/couchbase-cxx-client/couchbase/metrics/otel_meter.hxx +75 -80
  220. package/deps/couchbase-cxx-client/couchbase/network_options.hxx +19 -0
  221. package/deps/couchbase-cxx-client/couchbase/password_authenticator.hxx +1 -0
  222. package/deps/couchbase-cxx-client/couchbase/tracing/otel_tracer.hxx +15 -17
  223. package/deps/couchbase-cxx-client/couchbase/tracing/request_span.hxx +2 -2
  224. package/dist/analyticsexecutor.d.ts +15 -0
  225. package/dist/analyticsexecutor.js +79 -50
  226. package/dist/analyticsindexmanager.d.ts +66 -0
  227. package/dist/analyticsindexmanager.js +404 -277
  228. package/dist/analyticstypes.d.ts +5 -0
  229. package/dist/authenticators.d.ts +34 -1
  230. package/dist/authenticators.js +19 -1
  231. package/dist/binarycollection.d.ts +17 -0
  232. package/dist/binding.d.ts +245 -228
  233. package/dist/bindingutilities.js +1 -1
  234. package/dist/bucket.d.ts +8 -0
  235. package/dist/bucket.js +8 -0
  236. package/dist/bucketmanager.d.ts +30 -0
  237. package/dist/bucketmanager.js +128 -69
  238. package/dist/cluster.d.ts +45 -0
  239. package/dist/cluster.js +133 -21
  240. package/dist/collection.d.ts +75 -2
  241. package/dist/collection.js +772 -551
  242. package/dist/collectionmanager.d.ts +34 -0
  243. package/dist/collectionmanager.js +172 -89
  244. package/dist/couchbase.d.ts +5 -0
  245. package/dist/couchbase.js +5 -0
  246. package/dist/datastructures.js +310 -97
  247. package/dist/errors.d.ts +8 -0
  248. package/dist/errors.js +12 -1
  249. package/dist/eventingfunctionmanager.d.ts +42 -0
  250. package/dist/eventingfunctionmanager.js +172 -100
  251. package/dist/logger.d.ts +192 -0
  252. package/dist/logger.js +213 -0
  253. package/dist/loggingmeter.d.ts +120 -0
  254. package/dist/loggingmeter.js +226 -0
  255. package/dist/metrics.d.ts +33 -0
  256. package/dist/metrics.js +5 -0
  257. package/dist/observability.d.ts +60 -0
  258. package/dist/observability.js +86 -0
  259. package/dist/observabilityhandler.d.ts +176 -0
  260. package/dist/observabilityhandler.js +733 -0
  261. package/dist/observabilitytypes.d.ts +320 -0
  262. package/dist/observabilitytypes.js +362 -0
  263. package/dist/observabilityutilities.d.ts +60 -0
  264. package/dist/observabilityutilities.js +175 -0
  265. package/dist/otelmeter.d.ts +51 -0
  266. package/dist/otelmeter.js +100 -0
  267. package/dist/oteltracer.d.ts +69 -0
  268. package/dist/oteltracer.js +141 -0
  269. package/dist/queryexecutor.d.ts +16 -0
  270. package/dist/queryexecutor.js +128 -86
  271. package/dist/queryindexmanager.d.ts +29 -0
  272. package/dist/queryindexmanager.js +277 -150
  273. package/dist/querytypes.d.ts +5 -0
  274. package/dist/scope.js +2 -2
  275. package/dist/scopeeventingfunctionmanager.d.ts +5 -0
  276. package/dist/scopeeventingfunctionmanager.js +217 -119
  277. package/dist/scopesearchindexmanager.d.ts +5 -0
  278. package/dist/scopesearchindexmanager.js +295 -166
  279. package/dist/sdspecs.js +6 -1
  280. package/dist/searchexecutor.d.ts +15 -0
  281. package/dist/searchexecutor.js +54 -26
  282. package/dist/searchindexmanager.d.ts +54 -0
  283. package/dist/searchindexmanager.js +235 -142
  284. package/dist/searchtypes.d.ts +5 -0
  285. package/dist/thresholdlogging.d.ts +301 -0
  286. package/dist/thresholdlogging.js +657 -0
  287. package/dist/tracing.d.ts +55 -0
  288. package/dist/tracing.js +2 -0
  289. package/dist/usermanager.d.ts +46 -0
  290. package/dist/usermanager.js +199 -118
  291. package/dist/utilities.d.ts +4 -0
  292. package/dist/utilities.js +11 -1
  293. package/dist/version.d.ts +2 -0
  294. package/dist/version.js +7 -0
  295. package/dist/viewexecutor.d.ts +15 -0
  296. package/dist/viewexecutor.js +54 -29
  297. package/dist/viewindexmanager.d.ts +30 -0
  298. package/dist/viewindexmanager.js +129 -100
  299. package/dist/viewtypes.d.ts +5 -0
  300. package/package.json +19 -9
  301. package/scripts/prebuilds.js +1 -1
  302. package/scripts/updateVersion.js +26 -0
  303. package/src/connection.cpp +79 -98
  304. package/src/connection.hpp +46 -38
  305. package/src/connection_autogen.cpp +1236 -292
  306. package/src/jstocbpp_autogen.hpp +1117 -313
  307. package/src/jstocbpp_basic.hpp +73 -0
  308. package/src/jstocbpp_defs.hpp +37 -9
  309. package/src/jstocbpp_errors.hpp +37 -11
  310. package/tools/gen-bindings-js.js +100 -22
  311. package/tools/gen-bindings-json.py +40 -6
  312. package/src/transcoder.hpp +0 -96
@@ -83,7 +83,7 @@ public:
83
83
  static auto dial(app_telemetry_address address,
84
84
  cluster_options options,
85
85
  asio::io_context& ctx,
86
- asio::ssl::context& tls,
86
+ tls_context_provider& tls,
87
87
  std::shared_ptr<connection_state_listener>&& handler)
88
88
  -> std::shared_ptr<telemetry_dialer>
89
89
  {
@@ -96,7 +96,7 @@ public:
96
96
  telemetry_dialer(app_telemetry_address address,
97
97
  cluster_options options,
98
98
  asio::io_context& ctx,
99
- asio::ssl::context& tls,
99
+ tls_context_provider& tls,
100
100
  std::shared_ptr<connection_state_listener>&& handler)
101
101
  : address_{ std::move(address) }
102
102
  , options_{ std::move(options) }
@@ -223,7 +223,7 @@ private:
223
223
  app_telemetry_address address_;
224
224
  cluster_options options_;
225
225
  asio::io_context& ctx_;
226
- asio::ssl::context& tls_;
226
+ tls_context_provider& tls_;
227
227
  asio::steady_timer resolve_deadline_;
228
228
  asio::steady_timer connect_deadline_;
229
229
  asio::ip::tcp::resolver resolver_;
@@ -426,9 +426,17 @@ public:
426
426
  private:
427
427
  auto build_handshake_message() -> std::vector<std::byte>
428
428
  {
429
- auto credentials = fmt::format("{}:{}", credentials_.username, credentials_.password);
429
+ std::string auth{};
430
+ if (credentials_.uses_jwt()) {
431
+ auth = fmt::format("Bearer {}", credentials_.jwt_token);
432
+ } else {
433
+ auto credentials = fmt::format("{}:{}", credentials_.username, credentials_.password);
434
+ auth = fmt::format(
435
+ "Basic {}",
436
+ base64::encode(gsl::as_bytes(gsl::span{ credentials.data(), credentials.size() })));
437
+ }
430
438
  auto message = fmt::format("GET {} HTTP/1.1\r\n"
431
- "Authorization: Basic {}\r\n"
439
+ "Authorization: {}\r\n"
432
440
  "Upgrade: websocket\r\n"
433
441
  "Connection: Upgrade\r\n"
434
442
  "Host: {}:{}\r\n"
@@ -436,10 +444,7 @@ private:
436
444
  "Sec-WebSocket-Key: {}\r\n"
437
445
  "\r\n",
438
446
  address_.path,
439
- base64::encode(gsl::as_bytes(gsl::span{
440
- credentials.data(),
441
- credentials.size(),
442
- })),
447
+ auth,
443
448
  address_.hostname,
444
449
  address_.service,
445
450
  codec_.session_key());
@@ -671,30 +676,29 @@ class app_telemetry_reporter_impl
671
676
  {
672
677
  public:
673
678
  app_telemetry_reporter_impl(std::shared_ptr<app_telemetry_meter> meter,
674
- cluster_options options,
675
- cluster_credentials credentials,
679
+ origin& origin,
676
680
  asio::io_context& ctx,
677
- asio::ssl::context& tls)
681
+ tls_context_provider& tls)
678
682
  : meter_{ std::move(meter) }
679
- , options_{ std::move(options) }
680
- , credentials_{ std::move(credentials) }
683
+ , origin_{ origin }
681
684
  , ctx_{ ctx }
682
685
  , tls_{ tls }
683
686
  , backoff_{ ctx }
684
687
  , exponential_backoff_calculator_{
685
688
  std::chrono::milliseconds{ 100 },
686
- options_.app_telemetry_backoff_interval,
689
+ origin_.options().app_telemetry_backoff_interval,
687
690
  2 /* backoff factor */,
688
691
  0.5 /* jitter factor */,
689
692
  }
690
693
  {
691
- if (options_.enable_app_telemetry) {
692
- if (!options_.app_telemetry_endpoint.empty()) {
693
- auto url = couchbase::core::utils::string_codec::url_parse(options_.app_telemetry_endpoint);
694
+ if (origin_.options().enable_app_telemetry) {
695
+ if (!origin_.options().app_telemetry_endpoint.empty()) {
696
+ auto url =
697
+ couchbase::core::utils::string_codec::url_parse(origin_.options().app_telemetry_endpoint);
694
698
  if (url.host.empty() || url.scheme != "ws") {
695
699
  CB_LOG_WARNING(
696
700
  "unable to use \"{}\" as a app telemetry endpoint (expected ws:// and hostname)",
697
- options_.app_telemetry_endpoint);
701
+ origin_.options().app_telemetry_endpoint);
698
702
  return;
699
703
  }
700
704
  addresses_.push_back({
@@ -743,19 +747,19 @@ public:
743
747
  }
744
748
 
745
749
  websocket_state_ = connection_state::connected;
746
- CB_LOG_WARNING("connected app telemetry endpoint. {}",
747
- tao::json::to_string(tao::json::value{
748
- { "stream", stream->id() },
749
- { "hostname", address.hostname },
750
- }));
750
+ CB_LOG_DEBUG("connected app telemetry endpoint. {}",
751
+ tao::json::to_string(tao::json::value{
752
+ { "stream", stream->id() },
753
+ { "hostname", address.hostname },
754
+ }));
751
755
  websocket_session_ = websocket_session::start(ctx_,
752
756
  address,
753
- credentials_,
757
+ origin_.credentials(),
754
758
  std::move(stream),
755
759
  meter_,
756
760
  shared_from_this(),
757
- options_.app_telemetry_ping_interval,
758
- options_.app_telemetry_ping_timeout);
761
+ origin_.options().app_telemetry_ping_interval,
762
+ origin_.options().app_telemetry_ping_timeout);
759
763
  retry_backoff_calculator_ = &no_backoff_calculator_;
760
764
  ++next_address_index_;
761
765
  }
@@ -813,25 +817,27 @@ public:
813
817
  return;
814
818
  }
815
819
  if (self->websocket_state_ == connection_state::disconnected) {
816
- self->dialer_ =
817
- telemetry_dialer::dial(next_address, self->options_, self->ctx_, self->tls_, self);
820
+ self->dialer_ = telemetry_dialer::dial(
821
+ next_address, self->origin_.options(), self->ctx_, self->tls_, self);
818
822
  }
819
823
  });
820
824
  return;
821
825
  }
822
- dialer_ = telemetry_dialer::dial(next_address, options_, ctx_, tls_, shared_from_this());
826
+ dialer_ =
827
+ telemetry_dialer::dial(next_address, origin_.options(), ctx_, tls_, shared_from_this());
823
828
  }
824
829
 
825
830
  void update_config(topology::configuration&& config)
826
831
  {
827
- if (!options_.enable_app_telemetry) {
832
+ if (!origin_.options().enable_app_telemetry) {
828
833
  meter_->disable();
829
834
  return;
830
835
  }
831
836
  meter_->update_config(config);
832
837
 
833
- if (options_.app_telemetry_endpoint.empty()) {
834
- addresses_ = get_app_telemetry_addresses(config, options_.enable_tls, options_.network);
838
+ if (origin_.options().app_telemetry_endpoint.empty()) {
839
+ addresses_ = get_app_telemetry_addresses(
840
+ config, origin_.options().enable_tls, origin_.options().network);
835
841
  next_address_index_ = 0;
836
842
  }
837
843
 
@@ -841,17 +847,16 @@ public:
841
847
  meter_->enable();
842
848
  if (websocket_state_ == connection_state::disconnected) {
843
849
  dialer_ = telemetry_dialer::dial(
844
- addresses_[next_address_index_], options_, ctx_, tls_, shared_from_this());
850
+ addresses_[next_address_index_], origin_.options(), ctx_, tls_, shared_from_this());
845
851
  }
846
852
  }
847
853
  }
848
854
 
849
855
  private:
850
856
  std::shared_ptr<app_telemetry_meter> meter_;
851
- cluster_options options_;
852
- cluster_credentials credentials_;
857
+ origin& origin_;
853
858
  asio::io_context& ctx_;
854
- asio::ssl::context& tls_;
859
+ tls_context_provider& tls_;
855
860
  asio::steady_timer backoff_;
856
861
  const exponential_backoff_with_jitter exponential_backoff_calculator_;
857
862
 
@@ -868,13 +873,10 @@ private:
868
873
  };
869
874
 
870
875
  app_telemetry_reporter::app_telemetry_reporter(std::shared_ptr<app_telemetry_meter> meter,
871
- const cluster_options& options,
872
- const cluster_credentials& credentials,
876
+ origin& origin,
873
877
  asio::io_context& ctx,
874
- asio::ssl::context& tls)
875
- : impl_{
876
- std::make_shared<app_telemetry_reporter_impl>(std::move(meter), options, credentials, ctx, tls)
877
- }
878
+ tls_context_provider& tls)
879
+ : impl_{ std::make_shared<app_telemetry_reporter_impl>(std::move(meter), origin, ctx, tls) }
878
880
  {
879
881
  }
880
882
 
@@ -15,7 +15,9 @@
15
15
 
16
16
  #pragma once
17
17
 
18
+ #include "cluster.hxx"
18
19
  #include "config_listener.hxx"
20
+ #include "tls_context_provider.hxx"
19
21
 
20
22
  #include <memory>
21
23
 
@@ -45,10 +47,9 @@ public:
45
47
  auto operator=(const app_telemetry_reporter&) -> app_telemetry_reporter& = delete;
46
48
 
47
49
  app_telemetry_reporter(std::shared_ptr<app_telemetry_meter> meter,
48
- const cluster_options& options,
49
- const cluster_credentials& credentials,
50
+ origin& origin,
50
51
  asio::io_context& ctx,
51
- asio::ssl::context& tls);
52
+ tls_context_provider& tls);
52
53
  ~app_telemetry_reporter() override;
53
54
  void update_config(topology::configuration config) override;
54
55
  void stop();
@@ -19,6 +19,7 @@
19
19
 
20
20
  #include "collection_id_cache_entry.hxx"
21
21
  #include "core/app_telemetry_meter.hxx"
22
+ #include "core/cluster_options.hxx"
22
23
  #include "core/config_listener.hxx"
23
24
  #include "core/document_id.hxx"
24
25
  #include "core/error_context/key_value_error_map_info.hxx"
@@ -85,20 +86,22 @@ public:
85
86
  couchbase::core::origin origin,
86
87
  std::shared_ptr<tracing::tracer_wrapper> tracer,
87
88
  std::shared_ptr<metrics::meter_wrapper> meter,
89
+ std::shared_ptr<orphan_reporter> orphan_reporter,
88
90
  std::shared_ptr<core::app_telemetry_meter> app_telemetry,
89
91
  std::vector<protocol::hello_feature> known_features,
90
92
  std::shared_ptr<impl::bootstrap_state_listener> state_listener,
91
93
  asio::io_context& ctx,
92
- asio::ssl::context& tls)
94
+ tls_context_provider& tls)
93
95
  : client_id_{ std::move(client_id) }
94
96
  , name_{ std::move(name) }
95
97
  , log_prefix_{ fmt::format("[{}/{}]", client_id_, name_) }
96
- , origin_{ std::move(origin) }
97
98
  , tracer_{ std::move(tracer) }
98
99
  , meter_{ std::move(meter) }
100
+ , orphan_reporter_{ std::move(orphan_reporter) }
99
101
  , app_telemetry_meter_{ std::move(app_telemetry) }
100
102
  , known_features_{ std::move(known_features) }
101
103
  , state_listener_{ std::move(state_listener) }
104
+ , origin_{ std::move(origin) }
102
105
  , codec_{ { known_features_.begin(), known_features_.end() } }
103
106
  , ctx_{ ctx }
104
107
  , tls_{ tls }
@@ -117,11 +120,13 @@ public:
117
120
  std::optional<key_value_error_map_info> error_info)
118
121
  {
119
122
  // TODO(SA): copy from mcbp_command, subject to refactor later
123
+ #ifdef COUCHBASE_CXX_CLIENT_CREATE_OPERATION_SPAN_IN_CORE
120
124
  metrics::metric_attributes attrs{
121
125
  service_type::key_value, fmt::format("{}", req->command_), ec, name_, req->scope_name_,
122
126
  req->collection_name_,
123
127
  };
124
128
  meter_->record_value(std::move(attrs), req->dispatched_time_);
129
+ #endif
125
130
 
126
131
  if (ec == asio::error::operation_aborted) {
127
132
  // TODO(SA): fix tracing
@@ -317,11 +322,11 @@ public:
317
322
  {
318
323
  if (req->key_.empty()) {
319
324
  if (auto server = server_by_vbucket(req->vbucket_, req->replica_index_); server) {
320
- return find_session_by_index(server.value());
325
+ return find_or_connect_session_by_index(server.value());
321
326
  }
322
327
  } else if (auto [partition, server] = map_id(req->key_, req->replica_index_); server) {
323
328
  req->vbucket_ = partition;
324
- return find_session_by_index(server.value());
329
+ return find_or_connect_session_by_index(server.value());
325
330
  }
326
331
  return std::nullopt;
327
332
  }
@@ -365,6 +370,53 @@ public:
365
370
  return { 0, std::nullopt };
366
371
  }
367
372
 
373
+ void connect_session(std::size_t index)
374
+ {
375
+ const std::scoped_lock lock(config_mutex_, sessions_mutex_);
376
+ if (!config_) {
377
+ return;
378
+ }
379
+
380
+ const auto& node = config_->nodes[index];
381
+
382
+ const auto& hostname = node.hostname_for(origin_.options().network);
383
+ auto port = node.port_or(
384
+ origin_.options().network, service_type::key_value, origin_.options().enable_tls, 0);
385
+ if (port == 0) {
386
+ return;
387
+ }
388
+
389
+ const couchbase::core::origin origin(origin_.credentials(), hostname, port, origin_.options());
390
+ io::mcbp_session session =
391
+ origin_.options().enable_tls
392
+ ? io::mcbp_session(
393
+ client_id_, node.node_uuid, ctx_, tls_, origin, state_listener_, name_, known_features_)
394
+ : io::mcbp_session(
395
+ client_id_, node.node_uuid, ctx_, origin, state_listener_, name_, known_features_);
396
+ CB_LOG_DEBUG(R"({} rev={}, connect idx={}, session="{}", address="{}:{}")",
397
+ log_prefix_,
398
+ config_->rev_str(),
399
+ node.index,
400
+ session.id(),
401
+ hostname,
402
+ port);
403
+ session.bootstrap(
404
+ [self = shared_from_this(), session](std::error_code err,
405
+ topology::configuration cfg) mutable -> void {
406
+ if (err) {
407
+ return self->remove_session(session.id());
408
+ }
409
+ self->update_config(std::move(cfg));
410
+ session.on_configuration_update(self);
411
+ session.on_stop([id = session.id(), self]() -> void {
412
+ self->remove_session(id);
413
+ });
414
+ self->drain_deferred_queue({});
415
+ },
416
+ true);
417
+ sessions_.insert_or_assign(index, std::move(session));
418
+ }
419
+
368
420
  void restart_sessions()
369
421
  {
370
422
  const std::scoped_lock lock(config_mutex_, sessions_mutex_);
@@ -594,9 +646,9 @@ public:
594
646
  {
595
647
  const std::scoped_lock lock(sessions_mutex_);
596
648
  if (sessions_.empty()) {
597
- CB_LOG_WARNING(R"({} unable to find connected session (sessions_ is empty), retry in {})",
598
- log_prefix_,
599
- heartbeat_interval_);
649
+ CB_LOG_DEBUG(R"({} unable to find connected session (sessions_ is empty), retry in {})",
650
+ log_prefix_,
651
+ heartbeat_interval_);
600
652
  return;
601
653
  }
602
654
 
@@ -616,9 +668,9 @@ public:
616
668
  req.opaque(session->next_opaque());
617
669
  session->write_and_flush(req.data());
618
670
  } else {
619
- CB_LOG_WARNING(R"({} unable to find connected session with GCCCP support, retry in {})",
620
- log_prefix_,
621
- heartbeat_interval_);
671
+ CB_LOG_DEBUG(R"({} unable to find connected session with GCCCP support, retry in {})",
672
+ log_prefix_,
673
+ heartbeat_interval_);
622
674
  }
623
675
  }
624
676
 
@@ -698,6 +750,11 @@ public:
698
750
  }
699
751
  }
700
752
 
753
+ void update_credentials(cluster_credentials credentials)
754
+ {
755
+ origin_.update_credentials(std::move(credentials));
756
+ }
757
+
701
758
  void update_config(topology::configuration config) override
702
759
  {
703
760
  std::vector<topology::configuration::node> added{};
@@ -810,6 +867,10 @@ public:
810
867
  continue;
811
868
  }
812
869
 
870
+ if (origin_.options().enable_lazy_connections) {
871
+ ++next_index;
872
+ continue;
873
+ }
813
874
  const couchbase::core::origin origin(
814
875
  origin_.credentials(), hostname, port, origin_.options());
815
876
  io::mcbp_session session =
@@ -883,6 +944,16 @@ public:
883
944
  return {};
884
945
  }
885
946
 
947
+ [[nodiscard]] auto find_or_connect_session_by_index(std::size_t index)
948
+ -> std::optional<io::mcbp_session>
949
+ {
950
+ if (auto session = find_session_by_index(index); session) {
951
+ return session;
952
+ }
953
+ connect_session(index);
954
+ return {};
955
+ }
956
+
886
957
  [[nodiscard]] auto next_session_index() -> std::size_t
887
958
  {
888
959
  const std::scoped_lock lock(sessions_mutex_);
@@ -929,6 +1000,11 @@ public:
929
1000
  return meter_;
930
1001
  }
931
1002
 
1003
+ [[nodiscard]] auto orphan_reporter() const -> std::shared_ptr<core::orphan_reporter>
1004
+ {
1005
+ return orphan_reporter_;
1006
+ }
1007
+
932
1008
  [[nodiscard]] auto app_telemetry_meter() const -> std::shared_ptr<core::app_telemetry_meter>
933
1009
  {
934
1010
  return app_telemetry_meter_;
@@ -977,20 +1053,33 @@ public:
977
1053
  return {};
978
1054
  }
979
1055
 
1056
+ void for_each_session(utils::movable_function<void(io::mcbp_session&)> handler)
1057
+ {
1058
+ std::map<size_t, io::mcbp_session> sessions;
1059
+ {
1060
+ const std::scoped_lock lock(sessions_mutex_);
1061
+ sessions = sessions_;
1062
+ }
1063
+ for (auto& [index, session] : sessions) {
1064
+ handler(session);
1065
+ }
1066
+ }
1067
+
980
1068
  private:
981
1069
  const std::string client_id_;
982
1070
  const std::string name_;
983
1071
  const std::string log_prefix_;
984
- const origin origin_;
985
1072
  const std::shared_ptr<tracing::tracer_wrapper> tracer_;
986
1073
  const std::shared_ptr<metrics::meter_wrapper> meter_;
1074
+ const std::shared_ptr<core::orphan_reporter> orphan_reporter_;
987
1075
  const std::shared_ptr<core::app_telemetry_meter> app_telemetry_meter_;
988
1076
  const std::vector<protocol::hello_feature> known_features_;
989
1077
  const std::shared_ptr<impl::bootstrap_state_listener> state_listener_;
1078
+ origin origin_;
990
1079
  mcbp::codec codec_;
991
1080
 
992
1081
  asio::io_context& ctx_;
993
- asio::ssl::context& tls_;
1082
+ tls_context_provider& tls_;
994
1083
 
995
1084
  asio::steady_timer heartbeat_timer_;
996
1085
  std::chrono::milliseconds heartbeat_interval_;
@@ -1015,9 +1104,10 @@ private:
1015
1104
 
1016
1105
  bucket::bucket(std::string client_id,
1017
1106
  asio::io_context& ctx,
1018
- asio::ssl::context& tls,
1107
+ tls_context_provider& tls,
1019
1108
  std::shared_ptr<tracing::tracer_wrapper> tracer,
1020
1109
  std::shared_ptr<metrics::meter_wrapper> meter,
1110
+ std::shared_ptr<core::orphan_reporter> orphan_reporter,
1021
1111
  std::shared_ptr<core::app_telemetry_meter> app_telemetry_meter,
1022
1112
  std::string name,
1023
1113
  couchbase::core::origin origin,
@@ -1030,6 +1120,7 @@ bucket::bucket(std::string client_id,
1030
1120
  std::move(origin),
1031
1121
  std::move(tracer),
1032
1122
  std::move(meter),
1123
+ std::move(orphan_reporter),
1033
1124
  std::move(app_telemetry_meter),
1034
1125
  std::move(known_features),
1035
1126
  std::move(state_listener),
@@ -1068,6 +1159,12 @@ bucket::update_config(topology::configuration config)
1068
1159
  return impl_->update_config(std::move(config));
1069
1160
  }
1070
1161
 
1162
+ void
1163
+ bucket::update_credentials(cluster_credentials credentials)
1164
+ {
1165
+ return impl_->update_credentials(std::move(credentials));
1166
+ }
1167
+
1071
1168
  auto
1072
1169
  bucket::name() const -> const std::string&
1073
1170
  {
@@ -1098,6 +1195,12 @@ bucket::meter() const -> std::shared_ptr<metrics::meter_wrapper>
1098
1195
  return impl_->meter();
1099
1196
  }
1100
1197
 
1198
+ auto
1199
+ bucket::orphan_reporter() const -> std::shared_ptr<core::orphan_reporter>
1200
+ {
1201
+ return impl_->orphan_reporter();
1202
+ }
1203
+
1101
1204
  auto
1102
1205
  bucket::app_telemetry_meter() const -> std::shared_ptr<core::app_telemetry_meter>
1103
1206
  {
@@ -1148,6 +1251,12 @@ bucket::defer_command(utils::movable_function<void(std::error_code)> command)
1148
1251
  impl_->defer_command(std::move(command));
1149
1252
  }
1150
1253
 
1254
+ void
1255
+ bucket::for_each_session(utils::movable_function<void(io::mcbp_session&)> handler)
1256
+ {
1257
+ impl_->for_each_session(std::move(handler));
1258
+ }
1259
+
1151
1260
  auto
1152
1261
  bucket::default_timeout() const -> std::chrono::milliseconds
1153
1262
  {
@@ -1190,4 +1299,10 @@ bucket::direct_re_queue(const std::shared_ptr<mcbp::queue_request>& req, bool is
1190
1299
  {
1191
1300
  return impl_->direct_re_queue(req, is_retry);
1192
1301
  }
1302
+
1303
+ void
1304
+ bucket::connect_session(std::size_t index)
1305
+ {
1306
+ return impl_->connect_session(index);
1307
+ }
1193
1308
  } // namespace couchbase::core
@@ -20,6 +20,7 @@
20
20
  #include "config_listener.hxx"
21
21
  #include "io/mcbp_command.hxx"
22
22
  #include "operations.hxx"
23
+ #include "tls_context_provider.hxx"
23
24
 
24
25
  #include <asio/bind_executor.hpp>
25
26
  #include <asio/io_context.hpp>
@@ -67,10 +68,11 @@ class bucket
67
68
  public:
68
69
  bucket(std::string client_id,
69
70
  asio::io_context& ctx,
70
- asio::ssl::context& tls,
71
+ tls_context_provider& tls,
71
72
  std::shared_ptr<tracing::tracer_wrapper> tracer,
72
73
  std::shared_ptr<metrics::meter_wrapper> meter,
73
- std::shared_ptr<core::app_telemetry_meter> app_telemetry_meter,
74
+ std::shared_ptr<orphan_reporter> orphan_reporter,
75
+ std::shared_ptr<app_telemetry_meter> app_telemetry_meter,
74
76
  std::string name,
75
77
  couchbase::core::origin origin,
76
78
  std::vector<protocol::hello_feature> known_features,
@@ -104,6 +106,8 @@ public:
104
106
  });
105
107
  }
106
108
 
109
+ void connect_session(std::size_t index);
110
+
107
111
  template<typename Request>
108
112
  void map_and_send(std::shared_ptr<operations::mcbp_command<bucket, Request>> cmd)
109
113
  {
@@ -141,6 +145,9 @@ public:
141
145
  session.has_value() ? session->bootstrap_address() : "",
142
146
  session.has_value() && session->has_config(),
143
147
  config_rev());
148
+ if (!session) {
149
+ connect_session(index);
150
+ }
144
151
  return defer_command([self = shared_from_this(), cmd](std::error_code ec) {
145
152
  if (ec == errc::common::request_canceled) {
146
153
  return cmd->cancel(retry_reason::do_not_retry);
@@ -194,6 +201,7 @@ public:
194
201
 
195
202
  void fetch_config();
196
203
  void update_config(topology::configuration config) override;
204
+ void update_credentials(cluster_credentials credentials);
197
205
  void bootstrap(utils::movable_function<void(std::error_code, topology::configuration)>&& handler);
198
206
  void with_configuration(
199
207
  utils::movable_function<void(std::error_code, std::shared_ptr<topology::configuration>)>&&
@@ -205,11 +213,13 @@ public:
205
213
  void ping(const std::shared_ptr<diag::ping_collector>& collector,
206
214
  std::optional<std::chrono::milliseconds> timeout);
207
215
  void defer_command(utils::movable_function<void(std::error_code)> command);
216
+ void for_each_session(utils::movable_function<void(io::mcbp_session&)> handler);
208
217
 
209
218
  [[nodiscard]] auto name() const -> const std::string&;
210
219
  [[nodiscard]] auto log_prefix() const -> const std::string&;
211
220
  [[nodiscard]] auto tracer() const -> std::shared_ptr<tracing::tracer_wrapper>;
212
221
  [[nodiscard]] auto meter() const -> std::shared_ptr<metrics::meter_wrapper>;
222
+ [[nodiscard]] auto orphan_reporter() const -> std::shared_ptr<orphan_reporter>;
213
223
  [[nodiscard]] auto app_telemetry_meter() const -> std::shared_ptr<app_telemetry_meter>;
214
224
  [[nodiscard]] auto default_retry_strategy() const -> std::shared_ptr<couchbase::retry_strategy>;
215
225
  [[nodiscard]] auto is_closed() const -> bool;