couchbase 4.2.8-dev.1 → 4.2.9

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 (317) hide show
  1. package/CMakeLists.txt +1 -1
  2. package/deps/couchbase-cxx-cache/mozilla-ca-bundle.crt +139 -56
  3. package/deps/couchbase-cxx-cache/mozilla-ca-bundle.sha256 +1 -1
  4. package/deps/couchbase-cxx-client/CMakeLists.txt +397 -424
  5. package/deps/couchbase-cxx-client/core/agent_config.hxx +1 -1
  6. package/deps/couchbase-cxx-client/core/agent_group.cxx +0 -1
  7. package/deps/couchbase-cxx-client/core/agent_group.hxx +9 -0
  8. package/deps/couchbase-cxx-client/core/agent_group_config.hxx +1 -1
  9. package/deps/couchbase-cxx-client/core/bucket.cxx +22 -8
  10. package/deps/couchbase-cxx-client/core/bucket.hxx +3 -1
  11. package/deps/couchbase-cxx-client/core/cluster.cxx +1453 -108
  12. package/deps/couchbase-cxx-client/core/cluster.hxx +183 -473
  13. package/deps/couchbase-cxx-client/core/cluster_agent_config.hxx +1 -1
  14. package/deps/couchbase-cxx-client/core/cluster_options.cxx +12 -2
  15. package/deps/couchbase-cxx-client/core/cluster_options.hxx +9 -8
  16. package/deps/couchbase-cxx-client/core/config_profiles.cxx +2 -2
  17. package/deps/couchbase-cxx-client/core/config_profiles.hxx +1 -1
  18. package/deps/couchbase-cxx-client/core/core_sdk_shim.cxx +1 -2
  19. package/deps/couchbase-cxx-client/core/core_sdk_shim.hxx +3 -2
  20. package/deps/couchbase-cxx-client/core/diagnostics.hxx +0 -1
  21. package/deps/couchbase-cxx-client/core/dispatcher.cxx +2 -2
  22. package/deps/couchbase-cxx-client/core/impl/analytics.cxx +38 -76
  23. package/deps/couchbase-cxx-client/core/impl/analytics.hxx +40 -0
  24. package/deps/couchbase-cxx-client/core/impl/analytics_index_manager.cxx +820 -0
  25. package/deps/couchbase-cxx-client/core/impl/binary_collection.cxx +403 -0
  26. package/deps/couchbase-cxx-client/core/impl/bucket.cxx +78 -0
  27. package/deps/couchbase-cxx-client/core/impl/bucket_manager.cxx +433 -0
  28. package/deps/couchbase-cxx-client/core/impl/cluster.cxx +226 -44
  29. package/deps/couchbase-cxx-client/core/impl/collection.cxx +1384 -0
  30. package/deps/couchbase-cxx-client/core/impl/collection_manager.cxx +306 -0
  31. package/deps/couchbase-cxx-client/core/impl/configuration_profiles_registry.cxx +3 -1
  32. package/deps/couchbase-cxx-client/core/impl/dns_srv_tracker.cxx +2 -0
  33. package/deps/couchbase-cxx-client/core/{operations/mcbp_noop.cxx → impl/doc_id_query.cxx} +19 -15
  34. package/deps/couchbase-cxx-client/core/impl/key_value_error_category.cxx +4 -2
  35. package/deps/couchbase-cxx-client/core/impl/lookup_in_all_replicas.hxx +0 -10
  36. package/deps/couchbase-cxx-client/core/impl/lookup_in_any_replica.hxx +0 -10
  37. package/deps/couchbase-cxx-client/core/impl/observe_poll.cxx +24 -17
  38. package/deps/couchbase-cxx-client/core/impl/observe_poll.hxx +1 -1
  39. package/deps/couchbase-cxx-client/core/impl/query.cxx +45 -68
  40. package/deps/couchbase-cxx-client/core/impl/query.hxx +34 -0
  41. package/deps/couchbase-cxx-client/core/impl/query_index_manager.cxx +628 -0
  42. package/deps/couchbase-cxx-client/core/impl/scope.cxx +172 -0
  43. package/deps/couchbase-cxx-client/core/impl/search.cxx +12 -61
  44. package/deps/couchbase-cxx-client/core/impl/search.hxx +37 -0
  45. package/deps/couchbase-cxx-client/core/impl/search_index_manager.cxx +469 -0
  46. package/deps/couchbase-cxx-client/core/impl/search_row_location.cxx +12 -0
  47. package/deps/couchbase-cxx-client/core/impl/search_sort_geo_distance.cxx +87 -0
  48. package/deps/couchbase-cxx-client/core/impl/with_legacy_durability.hxx +23 -25
  49. package/deps/couchbase-cxx-client/core/io/dns_config.cxx +28 -0
  50. package/deps/couchbase-cxx-client/core/io/dns_config.hxx +6 -25
  51. package/deps/couchbase-cxx-client/core/io/http_session_manager.hxx +9 -1
  52. package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +1 -1
  53. package/deps/couchbase-cxx-client/core/io/mcbp_message.hxx +3 -2
  54. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +51 -21
  55. package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +2 -1
  56. package/deps/couchbase-cxx-client/core/logger/logger.hxx +4 -4
  57. package/deps/couchbase-cxx-client/core/management/bucket_settings.hxx +1 -1
  58. package/deps/couchbase-cxx-client/core/mcbp/packet.cxx +1 -1
  59. package/deps/couchbase-cxx-client/core/mcbp/queue_callback.hxx +1 -1
  60. package/deps/couchbase-cxx-client/core/meta/features.hxx +28 -0
  61. package/deps/couchbase-cxx-client/core/operations/document_query.cxx +17 -1
  62. package/deps/couchbase-cxx-client/core/operations/document_query.hxx +1 -1
  63. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_create.cxx +2 -0
  64. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_drop.cxx +2 -0
  65. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_create.cxx +2 -0
  66. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_drop.cxx +2 -0
  67. package/deps/couchbase-cxx-client/core/operations/management/analytics_get_pending_mutations.cxx +2 -0
  68. package/deps/couchbase-cxx-client/core/operations/management/analytics_index_drop.cxx +2 -0
  69. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_connect.cxx +2 -0
  70. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_disconnect.cxx +2 -0
  71. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_drop.cxx +2 -0
  72. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_get_all.cxx +2 -0
  73. package/deps/couchbase-cxx-client/core/operations/management/bucket_create.cxx +1 -1
  74. package/deps/couchbase-cxx-client/core/operations/management/bucket_describe.cxx +2 -0
  75. package/deps/couchbase-cxx-client/core/operations/management/bucket_drop.cxx +2 -0
  76. package/deps/couchbase-cxx-client/core/operations/management/bucket_flush.cxx +2 -0
  77. package/deps/couchbase-cxx-client/core/operations/management/bucket_get.cxx +2 -0
  78. package/deps/couchbase-cxx-client/core/operations/management/change_password.cxx +3 -1
  79. package/deps/couchbase-cxx-client/core/operations/management/collection_create.cxx +2 -0
  80. package/deps/couchbase-cxx-client/core/operations/management/collection_drop.cxx +2 -0
  81. package/deps/couchbase-cxx-client/core/operations/management/collection_update.cxx +2 -0
  82. package/deps/couchbase-cxx-client/core/operations/management/error_utils.cxx +6 -5
  83. package/deps/couchbase-cxx-client/core/operations/management/eventing_deploy_function.cxx +2 -0
  84. package/deps/couchbase-cxx-client/core/operations/management/eventing_drop_function.cxx +2 -0
  85. package/deps/couchbase-cxx-client/core/operations/management/eventing_get_function.cxx +2 -0
  86. package/deps/couchbase-cxx-client/core/operations/management/eventing_pause_function.cxx +2 -0
  87. package/deps/couchbase-cxx-client/core/operations/management/eventing_resume_function.cxx +2 -0
  88. package/deps/couchbase-cxx-client/core/operations/management/eventing_undeploy_function.cxx +2 -0
  89. package/deps/couchbase-cxx-client/core/operations/management/eventing_upsert_function.cxx +2 -0
  90. package/deps/couchbase-cxx-client/core/operations/management/group_drop.cxx +2 -0
  91. package/deps/couchbase-cxx-client/core/operations/management/group_get.cxx +2 -0
  92. package/deps/couchbase-cxx-client/core/operations/management/group_get_all.cxx +1 -1
  93. package/deps/couchbase-cxx-client/core/operations/management/query_index_build_deferred.hxx +2 -2
  94. package/deps/couchbase-cxx-client/core/operations/management/query_index_create.cxx +4 -1
  95. package/deps/couchbase-cxx-client/core/operations/management/query_index_drop.cxx +4 -1
  96. package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.cxx +1 -1
  97. package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.hxx +1 -1
  98. package/deps/couchbase-cxx-client/core/operations/management/scope_create.cxx +2 -0
  99. package/deps/couchbase-cxx-client/core/operations/management/scope_drop.cxx +2 -0
  100. package/deps/couchbase-cxx-client/core/operations/management/scope_get_all.cxx +2 -0
  101. package/deps/couchbase-cxx-client/core/operations/management/search_get_stats.cxx +4 -4
  102. package/deps/couchbase-cxx-client/core/operations/management/search_get_stats.hxx +4 -4
  103. package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.cxx +2 -0
  104. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.cxx +2 -0
  105. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.cxx +2 -0
  106. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.cxx +2 -0
  107. package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.cxx +2 -0
  108. package/deps/couchbase-cxx-client/core/operations/management/search_index_get.cxx +2 -0
  109. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.cxx +1 -1
  110. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.cxx +2 -0
  111. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_stats.cxx +2 -0
  112. package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.cxx +2 -0
  113. package/deps/couchbase-cxx-client/core/operations/management/view_index_drop.cxx +2 -0
  114. package/deps/couchbase-cxx-client/core/operations/management/view_index_get.cxx +2 -0
  115. package/deps/couchbase-cxx-client/core/operations/management/view_index_get_all.cxx +2 -0
  116. package/deps/couchbase-cxx-client/core/operations/management/view_index_upsert.cxx +2 -0
  117. package/deps/couchbase-cxx-client/core/operations.hxx +0 -1
  118. package/deps/couchbase-cxx-client/core/operations_fwd.hxx +260 -0
  119. package/deps/couchbase-cxx-client/core/origin.cxx +146 -5
  120. package/deps/couchbase-cxx-client/core/origin.hxx +30 -140
  121. package/deps/couchbase-cxx-client/core/protocol/cmd_cluster_map_change_notification.hxx +3 -3
  122. package/deps/couchbase-cxx-client/core/protocol/cmd_hello.hxx +5 -0
  123. package/deps/couchbase-cxx-client/core/protocol/cmd_observe_seqno.hxx +4 -4
  124. package/deps/couchbase-cxx-client/core/protocol/hello_feature.hxx +6 -0
  125. package/deps/couchbase-cxx-client/core/protocol/hello_feature_fmt.hxx +3 -0
  126. package/deps/couchbase-cxx-client/core/protocol/status.cxx +6 -0
  127. package/deps/couchbase-cxx-client/core/protocol/status.hxx +1 -0
  128. package/deps/couchbase-cxx-client/core/query_context.hxx +11 -7
  129. package/deps/couchbase-cxx-client/core/range_scan_orchestrator.cxx +1 -1
  130. package/deps/couchbase-cxx-client/core/topology/configuration.cxx +23 -0
  131. package/deps/couchbase-cxx-client/core/topology/configuration.hxx +8 -12
  132. package/deps/couchbase-cxx-client/core/topology/configuration_fmt.hxx +3 -3
  133. package/deps/couchbase-cxx-client/core/topology/configuration_json.hxx +2 -0
  134. package/deps/couchbase-cxx-client/core/topology/error_map.hxx +2 -2
  135. package/deps/couchbase-cxx-client/core/topology/error_map_json.hxx +4 -0
  136. package/deps/couchbase-cxx-client/core/transactions/active_transaction_record.cxx +58 -0
  137. package/deps/couchbase-cxx-client/core/transactions/active_transaction_record.hxx +5 -40
  138. package/deps/couchbase-cxx-client/core/transactions/async_attempt_context.cxx +30 -0
  139. package/deps/couchbase-cxx-client/core/transactions/atr_cleanup_entry.cxx +18 -18
  140. package/deps/couchbase-cxx-client/core/transactions/attempt_context.cxx +36 -0
  141. package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.cxx +39 -41
  142. package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.hxx +2 -2
  143. package/deps/couchbase-cxx-client/core/transactions/internal/atr_cleanup_entry.hxx +3 -1
  144. package/deps/couchbase-cxx-client/core/transactions/internal/atr_entry.hxx +2 -0
  145. package/deps/couchbase-cxx-client/core/transactions/internal/doc_record.cxx +32 -0
  146. package/deps/couchbase-cxx-client/core/transactions/internal/doc_record.hxx +4 -30
  147. package/deps/couchbase-cxx-client/core/transactions/internal/doc_record_fmt.hxx +41 -0
  148. package/deps/couchbase-cxx-client/core/transactions/internal/logging.hxx +17 -15
  149. package/deps/couchbase-cxx-client/core/transactions/internal/transaction_context.hxx +1 -1
  150. package/deps/couchbase-cxx-client/core/transactions/internal/transactions_cleanup.hxx +4 -4
  151. package/deps/couchbase-cxx-client/core/transactions/internal/utils.hxx +1 -13
  152. package/deps/couchbase-cxx-client/core/transactions/result.hxx +0 -26
  153. package/deps/couchbase-cxx-client/core/transactions/result_fmt.hxx +46 -0
  154. package/deps/couchbase-cxx-client/core/transactions/staged_mutation.cxx +16 -14
  155. package/deps/couchbase-cxx-client/core/transactions/transaction_context.cxx +6 -6
  156. package/deps/couchbase-cxx-client/core/transactions/transaction_keyspace.cxx +48 -0
  157. package/deps/couchbase-cxx-client/core/transactions/transaction_links.hxx +1 -0
  158. package/deps/couchbase-cxx-client/core/transactions/transaction_options.cxx +61 -4
  159. package/deps/couchbase-cxx-client/core/transactions/transactions.cxx +9 -8
  160. package/deps/couchbase-cxx-client/core/transactions/transactions_cleanup.cxx +9 -16
  161. package/deps/couchbase-cxx-client/core/transactions/transactions_config.cxx +7 -6
  162. package/deps/couchbase-cxx-client/core/transactions.hxx +6 -5
  163. package/deps/couchbase-cxx-client/core/utils/join_strings.hxx +4 -3
  164. package/deps/couchbase-cxx-client/core/utils/keyspace.hxx +4 -4
  165. package/deps/couchbase-cxx-client/couchbase/allow_querying_search_index_options.hxx +44 -0
  166. package/deps/couchbase-cxx-client/couchbase/analytics_index_manager.hxx +463 -0
  167. package/deps/couchbase-cxx-client/couchbase/analyze_document_options.hxx +44 -0
  168. package/deps/couchbase-cxx-client/couchbase/append_options.hxx +0 -24
  169. package/deps/couchbase-cxx-client/couchbase/behavior_options.hxx +1 -1
  170. package/deps/couchbase-cxx-client/couchbase/binary_collection.hxx +19 -115
  171. package/deps/couchbase-cxx-client/couchbase/bucket.hxx +13 -30
  172. package/deps/couchbase-cxx-client/couchbase/bucket_manager.hxx +8 -7
  173. package/deps/couchbase-cxx-client/couchbase/build_query_index_options.hxx +0 -1
  174. package/deps/couchbase-cxx-client/couchbase/cluster.hxx +41 -73
  175. package/deps/couchbase-cxx-client/couchbase/cluster_options.hxx +1 -27
  176. package/deps/couchbase-cxx-client/couchbase/collection.hxx +176 -386
  177. package/deps/couchbase-cxx-client/couchbase/collection_manager.hxx +8 -9
  178. package/deps/couchbase-cxx-client/couchbase/collection_query_index_manager.hxx +21 -24
  179. package/deps/couchbase-cxx-client/couchbase/connect_link_analytics_options.hxx +116 -0
  180. package/deps/couchbase-cxx-client/couchbase/create_bucket_options.hxx +3 -3
  181. package/deps/couchbase-cxx-client/couchbase/create_collection_options.hxx +3 -2
  182. package/deps/couchbase-cxx-client/couchbase/create_dataset_analytics_options.hxx +120 -0
  183. package/deps/couchbase-cxx-client/couchbase/create_dataverse_analytics_options.hxx +85 -0
  184. package/deps/couchbase-cxx-client/couchbase/create_index_analytics_options.hxx +103 -0
  185. package/deps/couchbase-cxx-client/couchbase/create_link_analytics_options.hxx +63 -0
  186. package/deps/couchbase-cxx-client/couchbase/decrement_options.hxx +0 -23
  187. package/deps/couchbase-cxx-client/couchbase/disallow_querying_search_index_options.hxx +43 -0
  188. package/deps/couchbase-cxx-client/couchbase/disconnect_link_analytics_options.hxx +105 -0
  189. package/deps/couchbase-cxx-client/couchbase/drop_dataset_analytics_options.hxx +103 -0
  190. package/deps/couchbase-cxx-client/couchbase/drop_dataverse_analytics_options.hxx +84 -0
  191. package/deps/couchbase-cxx-client/couchbase/drop_index_analytics_options.hxx +103 -0
  192. package/deps/couchbase-cxx-client/couchbase/drop_link_analytics_options.hxx +63 -0
  193. package/deps/couchbase-cxx-client/couchbase/drop_search_index_options.hxx +43 -0
  194. package/deps/couchbase-cxx-client/couchbase/error_codes.hxx +22 -1
  195. package/deps/couchbase-cxx-client/couchbase/exists_options.hxx +0 -23
  196. package/deps/couchbase-cxx-client/couchbase/fmt/key_value_error_map_attribute.hxx +6 -0
  197. package/deps/couchbase-cxx-client/couchbase/fmt/key_value_status_code.hxx +3 -0
  198. package/deps/couchbase-cxx-client/couchbase/fmt/transaction_keyspace.hxx +37 -0
  199. package/deps/couchbase-cxx-client/couchbase/freeze_plan_search_index_options.hxx +43 -0
  200. package/deps/couchbase-cxx-client/couchbase/get_all_datasets_analytics_options.hxx +66 -0
  201. package/deps/couchbase-cxx-client/couchbase/get_all_indexes_analytics_options.hxx +65 -0
  202. package/deps/couchbase-cxx-client/couchbase/get_all_query_indexes_options.hxx +1 -4
  203. package/deps/couchbase-cxx-client/couchbase/get_all_replicas_options.hxx +0 -23
  204. package/deps/couchbase-cxx-client/couchbase/get_all_search_indexes_options.hxx +45 -0
  205. package/deps/couchbase-cxx-client/couchbase/get_and_lock_options.hxx +0 -24
  206. package/deps/couchbase-cxx-client/couchbase/get_and_touch_options.hxx +0 -24
  207. package/deps/couchbase-cxx-client/couchbase/get_any_replica_options.hxx +0 -23
  208. package/deps/couchbase-cxx-client/couchbase/get_indexed_search_index_options.hxx +43 -0
  209. package/deps/couchbase-cxx-client/couchbase/get_links_analytics_options.hxx +121 -0
  210. package/deps/couchbase-cxx-client/couchbase/get_options.hxx +0 -23
  211. package/deps/couchbase-cxx-client/couchbase/get_pending_mutations_analytics_options.hxx +67 -0
  212. package/deps/couchbase-cxx-client/couchbase/get_search_index_options.hxx +44 -0
  213. package/deps/couchbase-cxx-client/couchbase/increment_options.hxx +0 -23
  214. package/deps/couchbase-cxx-client/couchbase/insert_options.hxx +0 -24
  215. package/deps/couchbase-cxx-client/couchbase/key_value_error_map_attribute.hxx +12 -0
  216. package/deps/couchbase-cxx-client/couchbase/key_value_status_code.hxx +1 -0
  217. package/deps/couchbase-cxx-client/couchbase/lookup_in_options.hxx +0 -24
  218. package/deps/couchbase-cxx-client/couchbase/management/analytics_dataset.hxx +48 -0
  219. package/deps/couchbase-cxx-client/couchbase/management/analytics_index.hxx +48 -0
  220. package/deps/couchbase-cxx-client/couchbase/management/analytics_link.hxx +239 -0
  221. package/deps/couchbase-cxx-client/couchbase/management/query_index.hxx +3 -3
  222. package/deps/couchbase-cxx-client/couchbase/management/search_index.hxx +40 -0
  223. package/deps/couchbase-cxx-client/couchbase/manager_error_context.hxx +0 -1
  224. package/deps/couchbase-cxx-client/couchbase/mutate_in_options.hxx +0 -24
  225. package/deps/couchbase-cxx-client/couchbase/network_options.hxx +1 -1
  226. package/deps/couchbase-cxx-client/couchbase/pause_ingest_search_index_options.hxx +43 -0
  227. package/deps/couchbase-cxx-client/couchbase/phrase_query.hxx +19 -0
  228. package/deps/couchbase-cxx-client/couchbase/prepend_options.hxx +0 -24
  229. package/deps/couchbase-cxx-client/couchbase/query_index_manager.hxx +99 -20
  230. package/deps/couchbase-cxx-client/couchbase/query_options.hxx +0 -21
  231. package/deps/couchbase-cxx-client/couchbase/remove_options.hxx +0 -23
  232. package/deps/couchbase-cxx-client/couchbase/replace_link_analytics_options.hxx +63 -0
  233. package/deps/couchbase-cxx-client/couchbase/replace_options.hxx +0 -24
  234. package/deps/couchbase-cxx-client/couchbase/resume_ingest_search_index_options.hxx +43 -0
  235. package/deps/couchbase-cxx-client/couchbase/scope.hxx +13 -45
  236. package/deps/couchbase-cxx-client/couchbase/search_facet_result.hxx +1 -7
  237. package/deps/couchbase-cxx-client/couchbase/search_geo_distance_units.hxx +26 -0
  238. package/deps/couchbase-cxx-client/couchbase/search_index_manager.hxx +292 -0
  239. package/deps/couchbase-cxx-client/couchbase/search_row_location.hxx +10 -0
  240. package/deps/couchbase-cxx-client/couchbase/search_sort_geo_distance.hxx +84 -0
  241. package/deps/couchbase-cxx-client/couchbase/security_options.hxx +1 -1
  242. package/deps/couchbase-cxx-client/couchbase/touch_options.hxx +0 -24
  243. package/deps/couchbase-cxx-client/couchbase/tracing/request_tracer.hxx +1 -1
  244. package/deps/couchbase-cxx-client/couchbase/transactions/async_attempt_context.hxx +10 -7
  245. package/deps/couchbase-cxx-client/couchbase/transactions/attempt_context.hxx +10 -10
  246. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_keyspace.hxx +8 -58
  247. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_options.hxx +28 -70
  248. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_query_options.hxx +7 -2
  249. package/deps/couchbase-cxx-client/couchbase/transactions/transactions_cleanup_config.hxx +2 -1
  250. package/deps/couchbase-cxx-client/couchbase/transactions/transactions_config.hxx +11 -38
  251. package/deps/couchbase-cxx-client/couchbase/unfreeze_plan_search_index_options.hxx +43 -0
  252. package/deps/couchbase-cxx-client/couchbase/unlock_options.hxx +0 -24
  253. package/deps/couchbase-cxx-client/couchbase/upsert_options.hxx +0 -24
  254. package/deps/couchbase-cxx-client/couchbase/upsert_search_index_options.hxx +41 -0
  255. package/dist/binding.d.ts +7 -9
  256. package/dist/bindingutilities.js +2 -0
  257. package/dist/collection.js +3 -3
  258. package/dist/errors.d.ts +9 -0
  259. package/dist/errors.js +14 -2
  260. package/dist/transactions.d.ts +2 -0
  261. package/dist/transactions.js +2 -3
  262. package/dist/usermanager.js +1 -1
  263. package/package.json +7 -7
  264. package/src/binding.cpp +1 -0
  265. package/src/connection.cpp +12 -9
  266. package/src/connection.hpp +3 -3
  267. package/src/connection_autogen.cpp +7 -5
  268. package/src/constants.cpp +3 -0
  269. package/src/instance.cpp +2 -2
  270. package/src/instance.hpp +1 -1
  271. package/src/jstocbpp_autogen.hpp +21 -38
  272. package/src/jstocbpp_basic.hpp +2 -0
  273. package/src/jstocbpp_errors.hpp +1 -0
  274. package/src/jstocbpp_transactions.hpp +6 -22
  275. package/src/mutationtoken.hpp +1 -0
  276. package/tools/gen-bindings-json.py +39 -16
  277. package/deps/couchbase-cxx-cache/spdlog/66ab2619a0014319471759c03e2de1af6bda14de/spdlog/example/CMakeLists.txt +0 -23
  278. package/deps/couchbase-cxx-cache/spdlog/66ab2619a0014319471759c03e2de1af6bda14de/spdlog/example/example.cpp +0 -398
  279. package/deps/couchbase-cxx-client/core/impl/append.cxx +0 -87
  280. package/deps/couchbase-cxx-client/core/impl/build_deferred_query_indexes.cxx +0 -157
  281. package/deps/couchbase-cxx-client/core/impl/create_bucket.cxx +0 -158
  282. package/deps/couchbase-cxx-client/core/impl/create_collection.cxx +0 -83
  283. package/deps/couchbase-cxx-client/core/impl/create_query_index.cxx +0 -232
  284. package/deps/couchbase-cxx-client/core/impl/create_scope.cxx +0 -69
  285. package/deps/couchbase-cxx-client/core/impl/decrement.cxx +0 -96
  286. package/deps/couchbase-cxx-client/core/impl/drop_bucket.cxx +0 -66
  287. package/deps/couchbase-cxx-client/core/impl/drop_collection.cxx +0 -76
  288. package/deps/couchbase-cxx-client/core/impl/drop_query_index.cxx +0 -187
  289. package/deps/couchbase-cxx-client/core/impl/drop_scope.cxx +0 -68
  290. package/deps/couchbase-cxx-client/core/impl/exists.cxx +0 -47
  291. package/deps/couchbase-cxx-client/core/impl/flush_bucket.cxx +0 -66
  292. package/deps/couchbase-cxx-client/core/impl/get.cxx +0 -68
  293. package/deps/couchbase-cxx-client/core/impl/get_all_buckets.cxx +0 -178
  294. package/deps/couchbase-cxx-client/core/impl/get_all_query_indexes.cxx +0 -106
  295. package/deps/couchbase-cxx-client/core/impl/get_all_replicas.cxx +0 -145
  296. package/deps/couchbase-cxx-client/core/impl/get_all_scopes.cxx +0 -94
  297. package/deps/couchbase-cxx-client/core/impl/get_and_lock.cxx +0 -49
  298. package/deps/couchbase-cxx-client/core/impl/get_and_touch.cxx +0 -49
  299. package/deps/couchbase-cxx-client/core/impl/get_any_replica.cxx +0 -134
  300. package/deps/couchbase-cxx-client/core/impl/get_bucket.cxx +0 -168
  301. package/deps/couchbase-cxx-client/core/impl/increment.cxx +0 -96
  302. package/deps/couchbase-cxx-client/core/impl/insert.cxx +0 -90
  303. package/deps/couchbase-cxx-client/core/impl/lookup_in.cxx +0 -69
  304. package/deps/couchbase-cxx-client/core/impl/lookup_in_all_replicas.cxx +0 -178
  305. package/deps/couchbase-cxx-client/core/impl/lookup_in_any_replica.cxx +0 -169
  306. package/deps/couchbase-cxx-client/core/impl/mutate_in.cxx +0 -125
  307. package/deps/couchbase-cxx-client/core/impl/prepend.cxx +0 -87
  308. package/deps/couchbase-cxx-client/core/impl/remove.cxx +0 -86
  309. package/deps/couchbase-cxx-client/core/impl/replace.cxx +0 -102
  310. package/deps/couchbase-cxx-client/core/impl/touch.cxx +0 -49
  311. package/deps/couchbase-cxx-client/core/impl/unlock.cxx +0 -47
  312. package/deps/couchbase-cxx-client/core/impl/update_bucket.cxx +0 -133
  313. package/deps/couchbase-cxx-client/core/impl/update_collection.cxx +0 -83
  314. package/deps/couchbase-cxx-client/core/impl/upsert.cxx +0 -100
  315. package/deps/couchbase-cxx-client/core/impl/watch_query_indexes.cxx +0 -196
  316. package/deps/couchbase-cxx-client/core/operations/mcbp_noop.hxx +0 -49
  317. /package/deps/couchbase-cxx-client/core/impl/{streaming_json_lexter_error_category.cxx → streaming_json_lexer_error_category.cxx} +0 -0
@@ -17,498 +17,208 @@
17
17
 
18
18
  #pragma once
19
19
 
20
- #include "bucket.hxx"
21
- #include "capella_ca.hxx"
22
- #include "core/io/http_command.hxx"
23
- #include "core/io/http_session_manager.hxx"
24
- #include "core/io/mcbp_command.hxx"
25
- #include "core/io/mcbp_session.hxx"
26
- #include "core/metrics/logging_meter.hxx"
27
- #include "core/metrics/noop_meter.hxx"
28
- #include "core/operations/management/bucket_create.hxx"
29
- #include "core/tracing/noop_tracer.hxx"
30
- #include "core/tracing/threshold_logging_tracer.hxx"
31
- #include "core/utils/join_strings.hxx"
32
- #include "crud_component.hxx"
33
20
  #include "diagnostics.hxx"
34
- #include "dispatcher.hxx"
35
- #include "impl/dns_srv_tracker.hxx"
36
- #include "mozilla_ca_bundle.hxx"
37
- #include "operations.hxx"
21
+ #include "operations_fwd.hxx"
38
22
  #include "origin.hxx"
23
+ #include "topology/configuration.hxx"
24
+ #include "utils/movable_function.hxx"
39
25
 
40
- #include <asio/ssl.hpp>
41
- #include <fstream>
42
- #include <thread>
26
+ #include <asio/io_context.hpp>
27
+ #include <chrono>
28
+ #include <optional>
43
29
  #include <utility>
44
30
 
31
+ namespace couchbase
32
+ {
33
+ class cluster;
34
+ } // namespace couchbase
35
+
45
36
  namespace couchbase::core
46
37
  {
47
38
  class crud_component;
39
+ class cluster_impl;
48
40
 
49
- class cluster : public std::enable_shared_from_this<cluster>
41
+ namespace mcbp
50
42
  {
51
- public:
52
- [[nodiscard]] auto io_context() -> asio::io_context&
53
- {
54
- return ctx_;
55
- }
56
- [[nodiscard]] static std::shared_ptr<cluster> create(asio::io_context& ctx)
57
- {
58
- return std::shared_ptr<cluster>(new cluster(ctx));
59
- }
60
-
61
- [[nodiscard]] std::pair<std::error_code, couchbase::core::origin> origin() const
62
- {
63
- if (stopped_) {
64
- return { errc::network::cluster_closed, {} };
65
- }
66
- return { {}, origin_ };
67
- }
68
-
69
- template<typename Handler>
70
- void open(couchbase::core::origin origin, Handler&& handler)
71
- {
72
- if (stopped_) {
73
- return handler(errc::network::cluster_closed);
74
- }
75
- if (origin.get_nodes().empty()) {
76
- stopped_ = true;
77
- work_.reset();
78
- return handler(errc::common::invalid_argument);
79
- }
80
-
81
- origin_ = std::move(origin);
82
- CB_LOG_DEBUG(R"(open cluster, id: "{}", core version: "{}", {})", id_, couchbase::core::meta::sdk_semver(), origin_.to_json());
83
- // ignore the enable_tracing flag if a tracer was passed in
84
- if (nullptr != origin_.options().tracer) {
85
- tracer_ = origin_.options().tracer;
86
- } else {
87
- if (origin_.options().enable_tracing) {
88
- tracer_ = std::make_shared<tracing::threshold_logging_tracer>(ctx_, origin_.options().tracing_options);
89
- } else {
90
- tracer_ = std::make_shared<tracing::noop_tracer>();
91
- }
92
- }
93
- tracer_->start();
94
- // ignore the metrics options if a meter was passed in.
95
- if (nullptr != origin_.options().meter) {
96
- meter_ = origin_.options().meter;
97
- } else {
98
- if (origin_.options().enable_metrics) {
99
- meter_ = std::make_shared<metrics::logging_meter>(ctx_, origin_.options().metrics_options);
100
- } else {
101
- meter_ = std::make_shared<metrics::noop_meter>();
102
- }
103
- }
104
- meter_->start();
105
- session_manager_->set_tracer(tracer_);
106
- if (origin_.options().enable_dns_srv) {
107
- auto [hostname, _] = origin_.next_address();
108
- dns_srv_tracker_ =
109
- std::make_shared<impl::dns_srv_tracker>(ctx_, hostname, origin_.options().dns_config, origin_.options().enable_tls);
110
- return asio::post(asio::bind_executor(
111
- ctx_, [self = shared_from_this(), hostname = std::move(hostname), handler = std::forward<Handler>(handler)]() mutable {
112
- return self->dns_srv_tracker_->get_srv_nodes(
113
- [self, hostname = std::move(hostname), handler = std::forward<Handler>(handler)](origin::node_list nodes,
114
- std::error_code ec) mutable {
115
- if (!ec && !nodes.empty()) {
116
- self->origin_.set_nodes(std::move(nodes));
117
- CB_LOG_INFO("replace list of bootstrap nodes with addresses from DNS SRV of \"{}\": [{}]",
118
- hostname,
119
- utils::join_strings(self->origin_.get_nodes(), ", "));
120
- }
121
- return self->do_open(std::forward<Handler>(handler));
122
- });
123
- }));
124
- }
125
- do_open(std::forward<Handler>(handler));
126
- }
127
-
128
- template<typename Handler>
129
- void close(Handler&& handler)
130
- {
131
- if (stopped_) {
132
- return handler();
133
- }
134
- stopped_ = true;
135
- asio::post(asio::bind_executor(ctx_, [self = shared_from_this(), handler = std::forward<Handler>(handler)]() mutable {
136
- if (self->session_) {
137
- self->session_->stop(retry_reason::do_not_retry);
138
- self->session_.reset();
139
- }
140
- self->for_each_bucket([](auto& bucket) { bucket->close(); });
141
- self->session_manager_->close();
142
- handler();
143
- self->work_.reset();
144
- if (self->tracer_) {
145
- self->tracer_->stop();
146
- }
147
- self->tracer_.reset();
148
- if (self->meter_) {
149
- self->meter_->stop();
150
- }
151
- self->meter_.reset();
152
- }));
153
- }
154
-
155
- template<typename Handler>
156
- void open_bucket(const std::string& bucket_name, Handler&& handler)
157
- {
158
- if (stopped_) {
159
- return handler(errc::network::cluster_closed);
160
- }
161
- std::shared_ptr<bucket> b{};
162
- {
163
- std::scoped_lock lock(buckets_mutex_);
164
- auto ptr = buckets_.find(bucket_name);
165
- if (ptr == buckets_.end()) {
166
- std::vector<protocol::hello_feature> known_features;
167
- if (session_ && session_->has_config()) {
168
- known_features = session_->supported_features();
169
- }
170
- b = std::make_shared<bucket>(id_, ctx_, tls_, tracer_, meter_, bucket_name, origin_, known_features, dns_srv_tracker_);
171
- buckets_.try_emplace(bucket_name, b);
172
- }
173
- }
174
- if (b == nullptr) {
175
- return handler({});
176
- }
43
+ class queue_request;
44
+ } // namespace mcbp
177
45
 
178
- b->on_configuration_update(session_manager_);
179
- b->bootstrap([self = shared_from_this(), bucket_name, handler = std::forward<Handler>(handler)](
180
- std::error_code ec, const topology::configuration& config) mutable {
181
- if (ec) {
182
- std::scoped_lock lock(self->buckets_mutex_);
183
- self->buckets_.erase(bucket_name);
184
- } else if (self->session_ && !self->session_->supports_gcccp()) {
185
- self->session_manager_->set_configuration(config, self->origin_.options());
186
- }
187
- handler(ec);
188
- });
189
- }
46
+ namespace o = operations;
47
+ namespace om = operations::management;
48
+ template<typename T>
49
+ using mf = utils::movable_function<T>;
190
50
 
191
- template<typename Handler>
192
- void close_bucket(const std::string& bucket_name, Handler&& handler)
193
- {
194
- if (stopped_) {
195
- return handler(errc::network::cluster_closed);
196
- }
197
- std::shared_ptr<bucket> b{};
198
- {
199
- std::scoped_lock lock(buckets_mutex_);
200
-
201
- if (auto ptr = buckets_.find(bucket_name); ptr != buckets_.end()) {
202
- b = std::move(ptr->second);
203
- buckets_.erase(ptr);
204
- }
205
- }
206
- if (b != nullptr) {
207
- b->close();
208
- }
209
- return handler({});
210
- }
211
-
212
- template<class Handler>
213
- void with_bucket_configuration(const std::string& bucket_name, Handler&& handler)
214
- {
215
- if (stopped_) {
216
- return handler(errc::network::cluster_closed, {});
217
- }
218
- if (auto bucket = find_bucket_by_name(bucket_name); bucket != nullptr) {
219
- return bucket->with_configuration(std::forward<Handler>(handler));
220
- }
221
- return handler(errc::common::bucket_not_found, {});
222
- }
223
-
224
- template<class Request,
225
- class Handler,
226
- typename std::enable_if_t<!std::is_same_v<typename Request::encoded_request_type, io::http_request>, int> = 0>
227
- void execute(Request request, Handler&& handler)
228
- {
229
- if constexpr (operations::is_compound_operation_v<Request>) {
230
- return request.execute(shared_from_this(), std::forward<Handler>(handler));
231
- } else {
232
- using response_type = typename Request::encoded_response_type;
233
- if (stopped_) {
234
- return handler(
235
- request.make_response(make_key_value_error_context(errc::network::cluster_closed, request.id), response_type{}));
236
- }
237
- if (auto bucket = find_bucket_by_name(request.id.bucket()); bucket != nullptr) {
238
- return bucket->execute(std::move(request), std::forward<Handler>(handler));
239
- }
240
- if (request.id.bucket().empty()) {
241
- return handler(
242
- request.make_response(make_key_value_error_context(errc::common::bucket_not_found, request.id), response_type{}));
243
- }
244
- auto bucket_name = request.id.bucket();
245
- return open_bucket(bucket_name,
246
- [self = shared_from_this(), request = std::move(request), handler = std::forward<Handler>(handler)](
247
- std::error_code ec) mutable {
248
- if (ec) {
249
- return handler(request.make_response(make_key_value_error_context(ec, request.id), response_type{}));
250
- }
251
- return self->execute(std::move(request), std::forward<Handler>(handler));
252
- });
253
- }
254
- }
255
-
256
- template<class Request,
257
- class Handler,
258
- typename std::enable_if_t<std::is_same_v<typename Request::encoded_request_type, io::http_request>, int> = 0>
259
- void execute(Request request, Handler&& handler)
260
- {
261
- using response_type = typename Request::encoded_response_type;
262
- if (stopped_) {
263
- return handler(request.make_response({ errc::network::cluster_closed }, response_type{}));
264
- }
265
- if constexpr (operations::is_compound_operation_v<Request>) {
266
- return request.execute(shared_from_this(), std::forward<Handler>(handler));
267
- } else {
268
- return session_manager_->execute(std::move(request), std::forward<Handler>(handler), origin_.credentials());
269
- }
270
- }
271
-
272
- template<typename Handler>
273
- void diagnostics(std::optional<std::string> report_id, Handler&& handler)
274
- {
275
- if (!report_id) {
276
- report_id = std::make_optional(uuid::to_string(uuid::random()));
277
- }
278
- if (stopped_) {
279
- return handler({ report_id.value(), couchbase::core::meta::sdk_id() });
280
- }
281
- asio::post(asio::bind_executor(ctx_, [self = shared_from_this(), report_id, handler = std::forward<Handler>(handler)]() mutable {
282
- diag::diagnostics_result res{ report_id.value(), couchbase::core::meta::sdk_id() };
283
- if (self->session_) {
284
- res.services[service_type::key_value].emplace_back(self->session_->diag_info());
285
- }
286
- self->for_each_bucket([&res](const auto& bucket) { bucket->export_diag_info(res); });
287
- self->session_manager_->export_diag_info(res);
288
- handler(std::move(res));
289
- }));
290
- }
51
+ class cluster
52
+ {
53
+ public:
54
+ explicit cluster(asio::io_context& ctx);
55
+
56
+ [[nodiscard]] auto io_context() const -> asio::io_context&;
57
+
58
+ [[nodiscard]] std::pair<std::error_code, couchbase::core::origin> origin() const;
59
+
60
+ void open(couchbase::core::origin origin, utils::movable_function<void(std::error_code)>&& handler) const;
61
+
62
+ void close(utils::movable_function<void()>&& handler) const;
63
+
64
+ void open_bucket(const std::string& bucket_name, utils::movable_function<void(std::error_code)>&& handler) const;
65
+
66
+ void close_bucket(const std::string& bucket_name, utils::movable_function<void(std::error_code)>&& handler) const;
67
+
68
+ void with_bucket_configuration(const std::string& bucket_name,
69
+ utils::movable_function<void(std::error_code, topology::configuration)>&& handler) const;
70
+
71
+ void execute(o::analytics_request request, mf<void(o::analytics_response)>&& handler) const;
72
+ void execute(o::append_request request, mf<void(o::append_response)>&& handler) const;
73
+ void execute(o::decrement_request request, mf<void(o::decrement_response)>&& handler) const;
74
+ void execute(o::exists_request request, mf<void(o::exists_response)>&& handler) const;
75
+ void execute(o::get_request request, mf<void(o::get_response)>&& handler) const;
76
+ void execute(o::get_all_replicas_request request, mf<void(o::get_all_replicas_response)>&& handler) const;
77
+ void execute(o::get_and_lock_request request, mf<void(o::get_and_lock_response)>&& handler) const;
78
+ void execute(o::get_and_touch_request request, mf<void(o::get_and_touch_response)>&& handler) const;
79
+ void execute(o::get_any_replica_request request, mf<void(o::get_any_replica_response)>&& handler) const;
80
+ void execute(o::get_projected_request request, mf<void(o::get_projected_response)>&& handler) const;
81
+ void execute(o::increment_request request, mf<void(o::increment_response)>&& handler) const;
82
+ void execute(o::insert_request request, mf<void(o::insert_response)>&& handler) const;
83
+ void execute(o::lookup_in_request request, mf<void(o::lookup_in_response)>&& handler) const;
84
+ void execute(o::lookup_in_any_replica_request request, mf<void(o::lookup_in_any_replica_response)>&& handler) const;
85
+ void execute(o::lookup_in_all_replicas_request request, mf<void(o::lookup_in_all_replicas_response)>&& handler) const;
86
+ void execute(o::mutate_in_request request, mf<void(o::mutate_in_response)>&& handler) const;
87
+ void execute(o::prepend_request request, mf<void(o::prepend_response)>&& handler) const;
88
+ void execute(o::query_request request, mf<void(o::query_response)>&& handler) const;
89
+ void execute(o::remove_request request, mf<void(o::remove_response)>&& handler) const;
90
+ void execute(o::replace_request request, mf<void(o::replace_response)>&& handler) const;
91
+ void execute(o::search_request request, mf<void(o::search_response)>&& handler) const;
92
+ void execute(o::touch_request request, mf<void(o::touch_response)>&& handler) const;
93
+ void execute(o::unlock_request request, mf<void(o::unlock_response)>&& handler) const;
94
+ void execute(o::upsert_request request, mf<void(o::upsert_response)>&& handler) const;
95
+ void execute(o::upsert_request_with_legacy_durability request, mf<void(o::upsert_response)>&& handler) const;
96
+ void execute(o::append_request_with_legacy_durability request, mf<void(o::append_response)>&& handler) const;
97
+ void execute(o::decrement_request_with_legacy_durability request, mf<void(o::decrement_response)>&& handler) const;
98
+ void execute(o::increment_request_with_legacy_durability request, mf<void(o::increment_response)>&& handler) const;
99
+ void execute(o::insert_request_with_legacy_durability request, mf<void(o::insert_response)>&& handler) const;
100
+ void execute(o::mutate_in_request_with_legacy_durability request, mf<void(o::mutate_in_response)>&& handler) const;
101
+ void execute(o::prepend_request_with_legacy_durability request, mf<void(o::prepend_response)>&& handler) const;
102
+ void execute(o::remove_request_with_legacy_durability request, mf<void(o::remove_response)>&& handler) const;
103
+ void execute(o::replace_request_with_legacy_durability request, mf<void(o::replace_response)>&& handler) const;
104
+
105
+ void execute(o::document_view_request request, mf<void(o::document_view_response)>&& handler) const;
106
+ void execute(o::http_noop_request request, mf<void(o::http_noop_response)>&& handler) const;
107
+
108
+ void execute(om::analytics_dataset_create_request request, mf<void(om::analytics_dataset_create_response)>&& handler) const;
109
+ void execute(om::analytics_dataset_drop_request request, mf<void(om::analytics_dataset_drop_response)>&& handler) const;
110
+ void execute(om::analytics_dataset_get_all_request request, mf<void(om::analytics_dataset_get_all_response)>&& handler) const;
111
+ void execute(om::analytics_dataverse_create_request request, mf<void(om::analytics_dataverse_create_response)>&& handler) const;
112
+ void execute(om::analytics_dataverse_drop_request request, mf<void(om::analytics_dataverse_drop_response)>&& handler) const;
113
+ void execute(om::analytics_get_pending_mutations_request request,
114
+ mf<void(om::analytics_get_pending_mutations_response)>&& handler) const;
115
+ void execute(om::analytics_index_create_request request, mf<void(om::analytics_index_create_response)>&& handler) const;
116
+ void execute(om::analytics_index_drop_request request, mf<void(om::analytics_index_drop_response)>&& handler) const;
117
+ void execute(om::analytics_index_get_all_request request, mf<void(om::analytics_index_get_all_response)>&& handler) const;
118
+ void execute(om::analytics_link_connect_request request, mf<void(om::analytics_link_connect_response)>&& handler) const;
119
+ void execute(om::analytics_link_disconnect_request request, mf<void(om::analytics_link_disconnect_response)>&& handler) const;
120
+ void execute(om::analytics_link_drop_request request, mf<void(om::analytics_link_drop_response)>&& handler) const;
121
+ void execute(om::analytics_link_get_all_request request, mf<void(om::analytics_link_get_all_response)>&& handler) const;
122
+ void execute(om::bucket_create_request request, mf<void(om::bucket_create_response)>&& handler) const;
123
+ void execute(om::bucket_drop_request request, mf<void(om::bucket_drop_response)>&& handler) const;
124
+ void execute(om::bucket_flush_request request, mf<void(om::bucket_flush_response)>&& handler) const;
125
+ void execute(om::bucket_get_request request, mf<void(om::bucket_get_response)>&& handler) const;
126
+ void execute(om::bucket_get_all_request request, mf<void(om::bucket_get_all_response)>&& handler) const;
127
+ void execute(om::bucket_update_request request, mf<void(om::bucket_update_response)>&& handler) const;
128
+ void execute(om::cluster_developer_preview_enable_request request,
129
+ mf<void(om::cluster_developer_preview_enable_response)>&& handler) const;
130
+ void execute(om::collection_create_request request, mf<void(om::collection_create_response)>&& handler) const;
131
+ void execute(om::collection_update_request request, mf<void(om::collection_update_response)>&& handler) const;
132
+ void execute(om::collection_drop_request request, mf<void(om::collection_drop_response)>&& handler) const;
133
+ void execute(om::collections_manifest_get_request request, mf<void(om::collections_manifest_get_response)>&& handler) const;
134
+ void execute(om::scope_create_request request, mf<void(om::scope_create_response)>&& handler) const;
135
+ void execute(om::scope_drop_request request, mf<void(om::scope_drop_response)>&& handler) const;
136
+ void execute(om::scope_get_all_request request, mf<void(om::scope_get_all_response)>&& handler) const;
137
+ void execute(om::eventing_deploy_function_request request, mf<void(om::eventing_deploy_function_response)>&& handler) const;
138
+ void execute(om::eventing_drop_function_request request, mf<void(om::eventing_drop_function_response)>&& handler) const;
139
+ void execute(om::eventing_get_all_functions_request request, mf<void(om::eventing_get_all_functions_response)>&& handler) const;
140
+ void execute(om::eventing_get_function_request request, mf<void(om::eventing_get_function_response)>&& handler) const;
141
+ void execute(om::eventing_get_status_request request, mf<void(om::eventing_get_status_response)>&& handler) const;
142
+ void execute(om::eventing_pause_function_request request, mf<void(om::eventing_pause_function_response)>&& handler) const;
143
+ void execute(om::eventing_resume_function_request request, mf<void(om::eventing_resume_function_response)>&& handler) const;
144
+ void execute(om::eventing_undeploy_function_request request, mf<void(om::eventing_undeploy_function_response)>&& handler) const;
145
+ void execute(om::eventing_upsert_function_request request, mf<void(om::eventing_upsert_function_response)>&& handler) const;
146
+ void execute(om::view_index_drop_request request, mf<void(om::view_index_drop_response)>&& handler) const;
147
+ void execute(om::view_index_get_request request, mf<void(om::view_index_get_response)>&& handler) const;
148
+ void execute(om::view_index_get_all_request request, mf<void(om::view_index_get_all_response)>&& handler) const;
149
+ void execute(om::view_index_upsert_request request, mf<void(om::view_index_upsert_response)>&& handler) const;
150
+ void execute(om::change_password_request request, mf<void(om::change_password_response)>&& handler) const;
151
+ void execute(om::group_drop_request request, mf<void(om::group_drop_response)>&& handler) const;
152
+ void execute(om::group_get_request request, mf<void(om::group_get_response)>&& handler) const;
153
+ void execute(om::group_get_all_request request, mf<void(om::group_get_all_response)>&& handler) const;
154
+ void execute(om::group_upsert_request request, mf<void(om::group_upsert_response)>&& handler) const;
155
+ void execute(om::role_get_all_request request, mf<void(om::role_get_all_response)>&& handler) const;
156
+ void execute(om::user_drop_request request, mf<void(om::user_drop_response)>&& handler) const;
157
+ void execute(om::user_get_request request, mf<void(om::user_get_response)>&& handler) const;
158
+ void execute(om::user_get_all_request request, mf<void(om::user_get_all_response)>&& handler) const;
159
+ void execute(om::user_upsert_request request, mf<void(om::user_upsert_response)>&& handler) const;
160
+ void execute(om::search_get_stats_request request, mf<void(om::search_get_stats_response)>&& handler) const;
161
+ void execute(om::search_index_analyze_document_request request, mf<void(om::search_index_analyze_document_response)>&& handler) const;
162
+ void execute(om::search_index_control_ingest_request request, mf<void(om::search_index_control_ingest_response)>&& handler) const;
163
+ void execute(om::search_index_control_plan_freeze_request request,
164
+ mf<void(om::search_index_control_plan_freeze_response)>&& handler) const;
165
+ void execute(om::search_index_control_query_request request, mf<void(om::search_index_control_query_response)>&& handler) const;
166
+ void execute(om::search_index_drop_request request, mf<void(om::search_index_drop_response)>&& handler) const;
167
+ void execute(om::search_index_get_request request, mf<void(om::search_index_get_response)>&& handler) const;
168
+ void execute(om::search_index_get_all_request request, mf<void(om::search_index_get_all_response)>&& handler) const;
169
+ void execute(om::search_index_get_documents_count_request request,
170
+ mf<void(om::search_index_get_documents_count_response)>&& handler) const;
171
+ void execute(om::search_index_get_stats_request request, mf<void(om::search_index_get_stats_response)>&& handler) const;
172
+ void execute(om::search_index_upsert_request request, mf<void(om::search_index_upsert_response)>&& handler) const;
173
+ void execute(om::query_index_build_request request, mf<void(om::query_index_build_response)>&& handler) const;
174
+ void execute(om::query_index_build_deferred_request request, mf<void(om::query_index_build_deferred_response)>&& handler) const;
175
+ void execute(om::query_index_create_request request, mf<void(om::query_index_create_response)>&& handler) const;
176
+ void execute(om::query_index_drop_request request, mf<void(om::query_index_drop_response)>&& handler) const;
177
+ void execute(om::query_index_get_all_request request, mf<void(om::query_index_get_all_response)>&& handler) const;
178
+ void execute(om::query_index_get_all_deferred_request request, mf<void(om::query_index_get_all_deferred_response)>&& handler) const;
179
+
180
+ void execute(om::freeform_request request, mf<void(om::freeform_response)>&& handler) const;
181
+ void execute(om::bucket_describe_request request, mf<void(om::bucket_describe_response)>&& handler) const;
182
+ void execute(om::cluster_describe_request request, mf<void(om::cluster_describe_response)>&& handler) const;
183
+
184
+ void execute(impl::get_replica_request request, mf<void(impl::get_replica_response)>&& handler) const;
185
+ void execute(impl::lookup_in_replica_request request, mf<void(impl::lookup_in_replica_response)>&& handler) const;
186
+ void execute(impl::observe_seqno_request request, mf<void(impl::observe_seqno_response)>&& handler) const;
187
+
188
+ void execute(om::analytics_link_replace_request<management::analytics::azure_blob_external_link> request,
189
+ mf<void(om::analytics_link_replace_response)>&& handler) const;
190
+ void execute(om::analytics_link_replace_request<management::analytics::couchbase_remote_link> request,
191
+ mf<void(om::analytics_link_replace_response)>&& handler) const;
192
+ void execute(om::analytics_link_replace_request<management::analytics::s3_external_link> request,
193
+ mf<void(om::analytics_link_replace_response)>&& handler) const;
194
+ void execute(om::analytics_link_create_request<management::analytics::azure_blob_external_link> request,
195
+ mf<void(om::analytics_link_create_response)>&& handler) const;
196
+ void execute(om::analytics_link_create_request<management::analytics::couchbase_remote_link> request,
197
+ mf<void(om::analytics_link_create_response)>&& handler) const;
198
+ void execute(om::analytics_link_create_request<management::analytics::s3_external_link> request,
199
+ mf<void(om::analytics_link_create_response)>&& handler) const;
200
+
201
+ void diagnostics(std::optional<std::string> report_id, mf<void(diag::diagnostics_result)>&& handler) const;
291
202
 
292
- template<typename Handler>
293
203
  void ping(std::optional<std::string> report_id,
294
204
  std::optional<std::string> bucket_name,
295
205
  std::set<service_type> services,
296
- Handler&& handler)
297
- {
298
- do_ping(report_id, bucket_name, services, std::forward<Handler>(handler));
299
- }
206
+ std::optional<std::chrono::milliseconds> timeout,
207
+ utils::movable_function<void(diag::ping_result)>&& handler) const;
300
208
 
301
- auto direct_dispatch(const std::string& bucket_name, std::shared_ptr<couchbase::core::mcbp::queue_request> req) -> std::error_code;
209
+ [[nodiscard]] auto direct_dispatch(const std::string& bucket_name, std::shared_ptr<couchbase::core::mcbp::queue_request> req) const
210
+ -> std::error_code;
302
211
 
303
- auto direct_re_queue(const std::string& bucket_name, std::shared_ptr<mcbp::queue_request> req, bool is_retry) -> std::error_code;
212
+ [[nodiscard]] auto direct_re_queue(const std::string& bucket_name, std::shared_ptr<mcbp::queue_request> req, bool is_retry) const
213
+ -> std::error_code;
304
214
 
305
- private:
306
- explicit cluster(asio::io_context& ctx)
307
- : ctx_(ctx)
308
- , work_(asio::make_work_guard(ctx_))
309
- , session_manager_(std::make_shared<io::http_session_manager>(id_, ctx_, tls_))
310
- {
311
- }
215
+ [[nodiscard]] auto to_string() const -> std::string;
312
216
 
313
- std::shared_ptr<bucket> find_bucket_by_name(const std::string& name);
314
-
315
- void do_ping(std::optional<std::string> report_id,
316
- std::optional<std::string> bucket_name,
317
- std::set<service_type> services,
318
- utils::movable_function<void(diag::ping_result)> handler);
319
-
320
- template<typename Handler>
321
- void for_each_bucket(Handler handler)
322
- {
323
- std::vector<std::shared_ptr<bucket>> buckets{};
324
- {
325
- std::scoped_lock lock(buckets_mutex_);
326
- buckets.reserve(buckets_.size());
327
- for (const auto& [name, bucket] : buckets_) {
328
- buckets.push_back(bucket);
329
- }
330
- }
331
- for (auto bucket : buckets) {
332
- handler(bucket);
333
- }
334
- }
335
-
336
- void configure_tls_options(bool has_capella_host);
337
-
338
- template<typename Handler>
339
- void do_open(Handler&& handler)
340
- {
341
- // Warn users if idle_http_connection_timeout is too close to server idle timeouts
342
- if (origin_.options().idle_http_connection_timeout > std::chrono::milliseconds(4'500)) {
343
- CB_LOG_INFO("[{}]: The SDK may produce trivial warnings due to the idle HTTP connection timeout being set above the idle"
344
- "timeout of various services",
345
- id_);
346
- }
347
-
348
- // Warn users if they attempt to use Capella without TLS being enabled.
349
- bool has_capella_host = false;
350
- {
351
- bool has_non_capella_host = false;
352
- static std::string suffix = "cloud.couchbase.com";
353
- for (const auto& node : origin_.get_hostnames()) {
354
- if (auto pos = node.find(suffix); pos != std::string::npos && pos + suffix.size() == node.size()) {
355
- has_capella_host = true;
356
- } else {
357
- has_non_capella_host = true;
358
- }
359
- }
360
-
361
- if (has_capella_host && !origin_.options().enable_tls) {
362
- CB_LOG_WARNING("[{}]: TLS is required when connecting to Couchbase Capella. Please enable TLS by prefixing "
363
- "the connection string with \"couchbases://\" (note the final 's').",
364
- id_);
365
- }
366
-
367
- if (origin_.options().enable_tls /* TLS is enabled */
368
- && origin_.options().trust_certificate.empty() /* No CA certificate (or other SDK-specific trust source) is specified */
369
- && origin_.options().trust_certificate_value.empty() /* and certificate value has not been specified */
370
- && origin_.options().tls_verify != tls_verify_mode::none /* The user did not disable all TLS verification */
371
- && has_non_capella_host /* The connection string has a hostname that does NOT end in ".cloud.couchbase.com" */) {
372
- CB_LOG_WARNING("[{}] When TLS is enabled, the cluster options must specify certificate(s) to trust or ensure that they are "
373
- "available in system CA store. (Unless connecting to cloud.couchbase.com.)",
374
- id_);
375
- }
376
- }
377
-
378
- if (origin_.options().enable_tls) {
379
- configure_tls_options(has_capella_host);
380
-
381
- if (origin_.options().trust_certificate.empty() &&
382
- origin_.options().trust_certificate_value.empty()) { // trust certificate is not explicitly specified
383
- CB_LOG_DEBUG(R"([{}]: use default CA for TLS verify)", id_);
384
- std::error_code ec{};
385
-
386
- // load system certificates
387
- tls_.set_default_verify_paths(ec);
388
- if (ec) {
389
- CB_LOG_WARNING(R"([{}]: failed to load system CAs: {})", id_, ec.message());
390
- }
391
-
392
- // add the Capella Root CA in addition to system CAs
393
- tls_.add_certificate_authority(
394
- asio::const_buffer(couchbase::core::default_ca::capellaCaCert, strlen(couchbase::core::default_ca::capellaCaCert)), ec);
395
- if (ec) {
396
- CB_LOG_WARNING("[{}]: unable to load default CAs: {}", id_, ec.message());
397
- // we don't consider this fatal and try to continue without it
398
- }
399
-
400
- if (const auto certificates = default_ca::mozilla_ca_certs();
401
- !origin_.options().disable_mozilla_ca_certificates && !certificates.empty()) {
402
- CB_LOG_DEBUG("[{}]: loading {} CA certificates from Mozilla bundle. Update date: \"{}\", SHA256: \"{}\"",
403
- id_,
404
- certificates.size(),
405
- default_ca::mozilla_ca_certs_date(),
406
- default_ca::mozilla_ca_certs_sha256());
407
- for (const auto& cert : certificates) {
408
- tls_.add_certificate_authority(asio::const_buffer(cert.body.data(), cert.body.size()), ec);
409
- if (ec) {
410
- CB_LOG_WARNING("[{}]: unable to load CA \"{}\" from Mozilla bundle: {}", id_, cert.authority, ec.message());
411
- }
412
- }
413
- }
414
- } else { // trust certificate is explicitly specified
415
- std::error_code ec{};
416
- // load only the explicit certificate
417
- // system and default capella certificates are not loaded
418
- if (!origin_.options().trust_certificate_value.empty()) {
419
- CB_LOG_DEBUG(R"([{}]: use TLS certificate passed through via options object)", id_);
420
- tls_.add_certificate_authority(asio::const_buffer(origin_.options().trust_certificate_value.data(),
421
- origin_.options().trust_certificate_value.size()),
422
- ec);
423
- if (ec) {
424
- CB_LOG_WARNING("[{}]: unable to load CA passed via options object: {}", id_, ec.message());
425
- }
426
- }
427
- if (!origin_.options().trust_certificate.empty()) {
428
- CB_LOG_DEBUG(R"([{}]: use TLS verify file: "{}")", id_, origin_.options().trust_certificate);
429
- tls_.load_verify_file(origin_.options().trust_certificate, ec);
430
- if (ec) {
431
- CB_LOG_ERROR("[{}]: unable to load verify file \"{}\": {}", id_, origin_.options().trust_certificate, ec.message());
432
- return close([ec, handler = std::forward<Handler>(handler)]() mutable { return handler(ec); });
433
- }
434
- }
435
- }
436
- if (origin_.credentials().uses_certificate()) {
437
- std::error_code ec{};
438
- CB_LOG_DEBUG(R"([{}]: use TLS certificate chain: "{}")", id_, origin_.certificate_path());
439
- tls_.use_certificate_chain_file(origin_.certificate_path(), ec);
440
- if (ec) {
441
- CB_LOG_ERROR("[{}]: unable to load certificate chain \"{}\": {}", id_, origin_.certificate_path(), ec.message());
442
- return close([ec, handler = std::forward<Handler>(handler)]() mutable { return handler(ec); });
443
- }
444
- CB_LOG_DEBUG(R"([{}]: use TLS private key: "{}")", id_, origin_.key_path());
445
- tls_.use_private_key_file(origin_.key_path(), asio::ssl::context::file_format::pem, ec);
446
- if (ec) {
447
- CB_LOG_ERROR("[{}]: unable to load private key \"{}\": {}", id_, origin_.key_path(), ec.message());
448
- return close([ec, handler = std::forward<Handler>(handler)]() mutable { return handler(ec); });
449
- }
450
- }
451
- session_ = io::mcbp_session(id_, ctx_, tls_, origin_, dns_srv_tracker_);
452
- } else {
453
- session_ = io::mcbp_session(id_, ctx_, origin_, dns_srv_tracker_);
454
- }
455
- session_->bootstrap([self = shared_from_this(),
456
- handler = std::forward<Handler>(handler)](std::error_code ec, const topology::configuration& config) mutable {
457
- if (!ec) {
458
- if (self->origin_.options().network == "auto") {
459
- self->origin_.options().network = config.select_network(self->session_->bootstrap_hostname());
460
- if (self->origin_.options().network == "default") {
461
- CB_LOG_DEBUG(R"({} detected network is "{}")", self->session_->log_prefix(), self->origin_.options().network);
462
- } else {
463
- CB_LOG_INFO(R"({} detected network is "{}")", self->session_->log_prefix(), self->origin_.options().network);
464
- }
465
- }
466
- if (self->origin_.options().network != "default") {
467
- origin::node_list nodes;
468
- nodes.reserve(config.nodes.size());
469
- for (const auto& address : config.nodes) {
470
- auto port =
471
- address.port_or(self->origin_.options().network, service_type::key_value, self->origin_.options().enable_tls, 0);
472
- if (port == 0) {
473
- continue;
474
- }
475
- origin::node_entry node;
476
- node.first = address.hostname_for(self->origin_.options().network);
477
- node.second = std::to_string(port);
478
- nodes.emplace_back(node);
479
- }
480
- self->origin_.set_nodes(nodes);
481
- CB_LOG_INFO("replace list of bootstrap nodes with addresses of alternative network \"{}\": [{}]",
482
- self->origin_.options().network,
483
- utils::join_strings(self->origin_.get_nodes(), ","));
484
- }
485
- self->session_manager_->set_configuration(config, self->origin_.options());
486
- self->session_->on_configuration_update(self->session_manager_);
487
- self->session_->on_stop([self]() {
488
- if (self->session_) {
489
- self->session_.reset();
490
- }
491
- });
492
- }
493
- if (ec) {
494
- return self->close([ec, handler = std::forward<Handler>(handler)]() mutable { handler(ec); });
495
- }
496
- handler(ec);
497
- });
498
- }
499
-
500
- std::string id_{ uuid::to_string(uuid::random()) };
501
- asio::io_context& ctx_;
502
- asio::executor_work_guard<asio::io_context::executor_type> work_;
503
- asio::ssl::context tls_{ asio::ssl::context::tls_client };
504
- std::shared_ptr<io::http_session_manager> session_manager_;
505
- std::optional<io::mcbp_session> session_{};
506
- std::shared_ptr<impl::dns_srv_tracker> dns_srv_tracker_{};
507
- std::mutex buckets_mutex_{};
508
- std::map<std::string, std::shared_ptr<bucket>> buckets_{};
509
- couchbase::core::origin origin_{};
510
- std::shared_ptr<couchbase::tracing::request_tracer> tracer_{ nullptr };
511
- std::shared_ptr<couchbase::metrics::meter> meter_{ nullptr };
512
- std::atomic_bool stopped_{ false };
217
+ private:
218
+ std::shared_ptr<cluster_impl> impl_;
513
219
  };
220
+
221
+ // FIXME: temporary solution for the core API migration. FIT performer needs to access core for KV range APIs
222
+ auto
223
+ get_core_cluster(couchbase::cluster public_api_cluster) -> core::cluster;
514
224
  } // namespace couchbase::core