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
@@ -15,18 +15,54 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- #include "cluster.hxx"
19
-
20
18
  #include "couchbase/build_config.hxx"
21
19
 
20
+ #include "cluster.hxx"
21
+
22
+ #include "bucket.hxx"
23
+ #include "capella_ca.hxx"
24
+ #include "core/impl/get_replica.hxx"
25
+ #include "core/impl/lookup_in_replica.hxx"
26
+ #include "core/impl/observe_seqno.hxx"
27
+ #include "core/io/http_command.hxx"
28
+ #include "core/io/http_session_manager.hxx"
29
+ #include "core/io/mcbp_command.hxx"
30
+ #include "core/io/mcbp_session.hxx"
31
+ #include "core/management/analytics_link.hxx"
22
32
  #include "core/mcbp/completion_token.hxx"
23
33
  #include "core/mcbp/queue_request.hxx"
34
+ #include "core/metrics/logging_meter.hxx"
35
+ #include "core/metrics/noop_meter.hxx"
36
+ #include "core/operations.hxx"
37
+ #include "core/operations/management/analytics.hxx"
38
+ #include "core/operations/management/bucket.hxx"
39
+ #include "core/operations/management/bucket_describe.hxx"
40
+ #include "core/operations/management/cluster_describe.hxx"
41
+ #include "core/operations/management/cluster_developer_preview_enable.hxx"
42
+ #include "core/operations/management/collections.hxx"
43
+ #include "core/operations/management/eventing.hxx"
44
+ #include "core/operations/management/freeform.hxx"
45
+ #include "core/operations/management/query.hxx"
46
+ #include "core/operations/management/search.hxx"
47
+ #include "core/operations/management/user.hxx"
48
+ #include "core/operations/management/view.hxx"
49
+ #include "core/tracing/noop_tracer.hxx"
50
+ #include "core/tracing/threshold_logging_tracer.hxx"
51
+ #include "core/utils/join_strings.hxx"
52
+ #include "crud_component.hxx"
53
+ #include "dispatcher.hxx"
54
+ #include "impl/dns_srv_tracker.hxx"
55
+ #include "mozilla_ca_bundle.hxx"
24
56
  #include "ping_collector.hxx"
25
57
  #include "ping_reporter.hxx"
26
58
 
59
+ #include <asio/ssl.hpp>
60
+ #include <fstream>
61
+ #include <memory>
62
+ #include <thread>
63
+
27
64
  namespace couchbase::core
28
65
  {
29
-
30
66
  class ping_collector_impl
31
67
  : public std::enable_shared_from_this<ping_collector_impl>
32
68
  , public diag::ping_reporter
@@ -44,7 +80,7 @@ class ping_collector_impl
44
80
  {
45
81
  }
46
82
 
47
- ~ping_collector_impl()
83
+ ~ping_collector_impl() override
48
84
  {
49
85
  invoke_handler();
50
86
  }
@@ -56,7 +92,7 @@ class ping_collector_impl
56
92
 
57
93
  void report(diag::endpoint_ping_info&& info) override
58
94
  {
59
- std::scoped_lock lock(mutex_);
95
+ const std::scoped_lock lock(mutex_);
60
96
  res_.services[info.type].emplace_back(std::move(info));
61
97
  if (--expected_ == 0) {
62
98
  invoke_handler();
@@ -78,143 +114,1452 @@ class ping_collector_impl
78
114
  }
79
115
  };
80
116
 
81
- void
82
- cluster::configure_tls_options(bool has_capella_host)
117
+ class cluster_impl : public std::enable_shared_from_this<cluster_impl>
83
118
  {
84
- asio::ssl::context::options tls_options =
85
- asio::ssl::context::default_workarounds | // various bug workarounds that should be rather harmless
86
- asio::ssl::context::no_sslv2 | // published: 1995, deprecated: 2011
87
- asio::ssl::context::no_sslv3; // published: 1996, deprecated: 2015
88
- if (origin_.options().tls_disable_deprecated_protocols) {
89
- tls_options |= asio::ssl::context::no_tlsv1 | // published: 1999, deprecated: 2021
90
- asio::ssl::context::no_tlsv1_1; // published: 2006, deprecated: 2021
91
- }
92
- if (origin_.options().tls_disable_v1_2 || has_capella_host) {
93
- tls_options |= asio::ssl::context::no_tlsv1_2; // published: 2008, still in use
119
+ public:
120
+ explicit cluster_impl(asio::io_context& ctx)
121
+ : ctx_(ctx)
122
+ , work_(asio::make_work_guard(ctx_))
123
+ , session_manager_(std::make_shared<io::http_session_manager>(id_, ctx_, tls_))
124
+ {
94
125
  }
95
- tls_.set_options(tls_options);
96
- switch (origin_.options().tls_verify) {
97
- case tls_verify_mode::none:
98
- tls_.set_verify_mode(asio::ssl::verify_none);
99
- break;
100
126
 
101
- case tls_verify_mode::peer:
102
- tls_.set_verify_mode(asio::ssl::verify_peer);
103
- break;
127
+ auto io_context() -> asio::io_context&
128
+ {
129
+ return ctx_;
104
130
  }
105
131
 
132
+ void configure_tls_options(bool has_capella_host)
133
+ {
134
+ asio::ssl::context::options tls_options =
135
+ asio::ssl::context::default_workarounds | // various bug workarounds that should be rather harmless
136
+ asio::ssl::context::no_sslv2 | // published: 1995, deprecated: 2011
137
+ asio::ssl::context::no_sslv3; // published: 1996, deprecated: 2015
138
+ if (origin_.options().tls_disable_deprecated_protocols) {
139
+ tls_options |= asio::ssl::context::no_tlsv1 | // published: 1999, deprecated: 2021
140
+ asio::ssl::context::no_tlsv1_1; // published: 2006, deprecated: 2021
141
+ }
142
+ if (origin_.options().tls_disable_v1_2 || has_capella_host) {
143
+ tls_options |= asio::ssl::context::no_tlsv1_2; // published: 2008, still in use
144
+ }
145
+ tls_.set_options(tls_options);
146
+ switch (origin_.options().tls_verify) {
147
+ case tls_verify_mode::none:
148
+ tls_.set_verify_mode(asio::ssl::verify_none);
149
+ break;
150
+
151
+ case tls_verify_mode::peer:
152
+ tls_.set_verify_mode(asio::ssl::verify_peer);
153
+ break;
154
+ }
155
+
106
156
  #ifdef COUCHBASE_CXX_CLIENT_TLS_KEY_LOG_FILE
107
- SSL_CTX_set_keylog_callback(tls_.native_handle(), [](const SSL* /* ssl */, const char* line) {
108
- std::ofstream keylog(COUCHBASE_CXX_CLIENT_TLS_KEY_LOG_FILE, std::ios::out | std::ios::app | std::ios::binary);
109
- keylog << std::string_view(line) << std::endl;
110
- });
111
- CB_LOG_CRITICAL(
112
- "COUCHBASE_CXX_CLIENT_TLS_KEY_LOG_FILE was set to \"{}\" during build, all TLS keys will be logged for network analysis "
113
- "(https://wiki.wireshark.org/TLS). DO NOT USE THIS BUILD IN PRODUCTION",
114
- COUCHBASE_CXX_CLIENT_TLS_KEY_LOG_FILE);
157
+ SSL_CTX_set_keylog_callback(tls_.native_handle(), [](const SSL* /* ssl */, const char* line) {
158
+ std::ofstream keylog(COUCHBASE_CXX_CLIENT_TLS_KEY_LOG_FILE, std::ios::out | std::ios::app | std::ios::binary);
159
+ keylog << std::string_view(line) << std::endl;
160
+ });
161
+ CB_LOG_CRITICAL(
162
+ "COUCHBASE_CXX_CLIENT_TLS_KEY_LOG_FILE was set to \"{}\" during build, all TLS keys will be logged for network analysis "
163
+ "(https://wiki.wireshark.org/TLS). DO NOT USE THIS BUILD IN PRODUCTION",
164
+ COUCHBASE_CXX_CLIENT_TLS_KEY_LOG_FILE);
115
165
  #endif
116
- }
166
+ }
117
167
 
118
- void
119
- cluster::do_ping(std::optional<std::string> report_id,
120
- std::optional<std::string> bucket_name,
121
- std::set<service_type> services,
122
- utils::movable_function<void(diag::ping_result)> handler)
123
- {
124
- if (!report_id) {
125
- report_id = std::make_optional(uuid::to_string(uuid::random()));
168
+ void open(couchbase::core::origin origin, utils::movable_function<void(std::error_code)>&& handler)
169
+ {
170
+ if (stopped_) {
171
+ return handler(errc::network::cluster_closed);
172
+ }
173
+ if (origin.get_nodes().empty()) {
174
+ stopped_ = true;
175
+ work_.reset();
176
+ return handler(errc::common::invalid_argument);
177
+ }
178
+
179
+ origin_ = std::move(origin);
180
+ CB_LOG_DEBUG(R"(open cluster, id: "{}", core version: "{}", {})", id_, couchbase::core::meta::sdk_semver(), origin_.to_json());
181
+ // ignore the enable_tracing flag if a tracer was passed in
182
+ if (nullptr != origin_.options().tracer) {
183
+ tracer_ = origin_.options().tracer;
184
+ } else {
185
+ if (origin_.options().enable_tracing) {
186
+ tracer_ = std::make_shared<tracing::threshold_logging_tracer>(ctx_, origin_.options().tracing_options);
187
+ } else {
188
+ tracer_ = std::make_shared<tracing::noop_tracer>();
189
+ }
190
+ }
191
+ tracer_->start();
192
+ // ignore the metrics options if a meter was passed in.
193
+ if (nullptr != origin_.options().meter) {
194
+ meter_ = origin_.options().meter;
195
+ } else {
196
+ if (origin_.options().enable_metrics) {
197
+ meter_ = std::make_shared<metrics::logging_meter>(ctx_, origin_.options().metrics_options);
198
+ } else {
199
+ meter_ = std::make_shared<metrics::noop_meter>();
200
+ }
201
+ }
202
+ meter_->start();
203
+ session_manager_->set_tracer(tracer_);
204
+ if (origin_.options().enable_dns_srv) {
205
+ std::string hostname;
206
+ std::string port;
207
+ std::tie(hostname, port) = origin_.next_address();
208
+ dns_srv_tracker_ =
209
+ std::make_shared<impl::dns_srv_tracker>(ctx_, hostname, origin_.options().dns_config, origin_.options().enable_tls);
210
+ return asio::post(asio::bind_executor(
211
+ ctx_, [self = shared_from_this(), hostname = std::move(hostname), handler = std::move(handler)]() mutable {
212
+ return self->dns_srv_tracker_->get_srv_nodes([self, hostname = std::move(hostname), handler = std::move(handler)](
213
+ origin::node_list nodes, std::error_code ec) mutable {
214
+ if (ec) {
215
+ return self->close([ec, handler = std::move(handler)]() mutable { handler(ec); });
216
+ }
217
+ if (!nodes.empty()) {
218
+ self->origin_.set_nodes(std::move(nodes));
219
+ CB_LOG_INFO("replace list of bootstrap nodes with addresses from DNS SRV of \"{}\": [{}]",
220
+ hostname,
221
+ utils::join_strings(self->origin_.get_nodes(), ", "));
222
+ }
223
+ return self->do_open(std::move(handler));
224
+ });
225
+ }));
226
+ }
227
+ do_open(std::move(handler));
228
+ }
229
+
230
+ void open_bucket(const std::string& bucket_name, utils::movable_function<void(std::error_code)>&& handler)
231
+ {
232
+ if (stopped_) {
233
+ return handler(errc::network::cluster_closed);
234
+ }
235
+ std::shared_ptr<bucket> b{};
236
+ {
237
+ std::scoped_lock lock(buckets_mutex_);
238
+ auto ptr = buckets_.find(bucket_name);
239
+ if (ptr == buckets_.end()) {
240
+ std::vector<protocol::hello_feature> known_features;
241
+ if (session_ && session_->has_config()) {
242
+ known_features = session_->supported_features();
243
+ }
244
+ b = std::make_shared<bucket>(id_, ctx_, tls_, tracer_, meter_, bucket_name, origin_, known_features, dns_srv_tracker_);
245
+ buckets_.try_emplace(bucket_name, b);
246
+ }
247
+ }
248
+ if (b == nullptr) {
249
+ return handler({});
250
+ }
251
+
252
+ b->on_configuration_update(session_manager_);
253
+ b->bootstrap([self = shared_from_this(), bucket_name, handler = std::move(handler)](std::error_code ec,
254
+ const topology::configuration& config) mutable {
255
+ if (ec) {
256
+ std::scoped_lock lock(self->buckets_mutex_);
257
+ self->buckets_.erase(bucket_name);
258
+ } else if (self->session_ && !self->session_->supports_gcccp()) {
259
+ self->session_manager_->set_configuration(config, self->origin_.options());
260
+ }
261
+ handler(ec);
262
+ });
126
263
  }
127
- if (stopped_) {
128
- return handler({ report_id.value(), meta::sdk_id() });
264
+
265
+ void close_bucket(const std::string& bucket_name, utils::movable_function<void(std::error_code)>&& handler)
266
+ {
267
+ if (stopped_) {
268
+ return handler(errc::network::cluster_closed);
269
+ }
270
+ std::shared_ptr<bucket> b{};
271
+ {
272
+ std::scoped_lock lock(buckets_mutex_);
273
+
274
+ if (auto ptr = buckets_.find(bucket_name); ptr != buckets_.end()) {
275
+ b = std::move(ptr->second);
276
+ buckets_.erase(ptr);
277
+ }
278
+ }
279
+ if (b != nullptr) {
280
+ b->close();
281
+ }
282
+ return handler({});
129
283
  }
130
- if (services.empty()) {
131
- services = {
132
- service_type::key_value, service_type::view, service_type::query, service_type::search,
133
- service_type::analytics, service_type::management, service_type::eventing,
134
- };
284
+
285
+ std::pair<std::error_code, couchbase::core::origin> origin() const
286
+ {
287
+ if (stopped_) {
288
+ return { errc::network::cluster_closed, {} };
289
+ }
290
+ return { {}, origin_ };
135
291
  }
136
- asio::post(
137
- asio::bind_executor(ctx_, [cluster = shared_from_this(), report_id, bucket_name, services, handler = std::move(handler)]() mutable {
138
- auto collector = std::make_shared<ping_collector_impl>(report_id.value(), std::move(handler));
139
- if (bucket_name) {
140
- if (services.find(service_type::key_value) != services.end()) {
141
- if (auto bucket = cluster->find_bucket_by_name(bucket_name.value()); bucket) {
142
- return bucket->ping(collector);
143
- }
144
- cluster->open_bucket(bucket_name.value(), [collector, cluster, bucket_name](std::error_code ec) {
145
- if (!ec) {
146
- if (auto bucket = cluster->find_bucket_by_name(bucket_name.value()); bucket) {
147
- return bucket->ping(collector);
292
+
293
+ template<class Request,
294
+ class Handler,
295
+ typename std::enable_if_t<!std::is_same_v<typename Request::encoded_request_type, io::http_request>, int> = 0>
296
+ void execute(Request request, Handler&& handler)
297
+ {
298
+ using response_type = typename Request::encoded_response_type;
299
+ if (stopped_) {
300
+ return handler(request.make_response(make_key_value_error_context(errc::network::cluster_closed, request.id), response_type{}));
301
+ }
302
+ if (auto bucket = find_bucket_by_name(request.id.bucket()); bucket != nullptr) {
303
+ return bucket->execute(std::move(request), std::forward<Handler>(handler));
304
+ }
305
+ if (request.id.bucket().empty()) {
306
+ return handler(
307
+ request.make_response(make_key_value_error_context(errc::common::bucket_not_found, request.id), response_type{}));
308
+ }
309
+ auto bucket_name = request.id.bucket();
310
+ return open_bucket(
311
+ bucket_name,
312
+ [self = shared_from_this(), request = std::move(request), handler = std::forward<Handler>(handler)](std::error_code ec) mutable {
313
+ if (ec) {
314
+ return handler(request.make_response(make_key_value_error_context(ec, request.id), response_type{}));
315
+ }
316
+ return self->execute(std::move(request), std::forward<Handler>(handler));
317
+ });
318
+ }
319
+
320
+ template<class Request,
321
+ class Handler,
322
+ typename std::enable_if_t<std::is_same_v<typename Request::encoded_request_type, io::http_request>, int> = 0>
323
+ void execute(Request request, Handler&& handler)
324
+ {
325
+ using response_type = typename Request::encoded_response_type;
326
+ if (stopped_) {
327
+ return handler(request.make_response({ errc::network::cluster_closed }, response_type{}));
328
+ }
329
+ if constexpr (operations::is_compound_operation_v<Request>) {
330
+ return request.execute(shared_from_this(), std::forward<Handler>(handler));
331
+ } else {
332
+ return session_manager_->execute(std::move(request), std::forward<Handler>(handler), origin_.credentials());
333
+ }
334
+ }
335
+
336
+ std::shared_ptr<bucket> find_bucket_by_name(const std::string& name)
337
+ {
338
+ std::scoped_lock lock(buckets_mutex_);
339
+
340
+ auto bucket = buckets_.find(name);
341
+ if (bucket == buckets_.end()) {
342
+ return {};
343
+ }
344
+ return bucket->second;
345
+ }
346
+
347
+ void for_each_bucket(utils::movable_function<void(std::shared_ptr<bucket>)> handler)
348
+ {
349
+ std::vector<std::shared_ptr<bucket>> buckets{};
350
+ {
351
+ std::scoped_lock lock(buckets_mutex_);
352
+ buckets.reserve(buckets_.size());
353
+ for (const auto& [name, bucket] : buckets_) {
354
+ buckets.push_back(bucket);
355
+ }
356
+ }
357
+ for (auto bucket : buckets) {
358
+ handler(bucket);
359
+ }
360
+ }
361
+
362
+ void do_open(utils::movable_function<void(std::error_code)> handler)
363
+ {
364
+ // Warn users if idle_http_connection_timeout is too close to server idle timeouts
365
+ if (origin_.options().idle_http_connection_timeout > std::chrono::milliseconds(4'500)) {
366
+ CB_LOG_INFO("[{}]: The SDK may produce trivial warnings due to the idle HTTP connection timeout being set above the idle"
367
+ "timeout of various services",
368
+ id_);
369
+ }
370
+
371
+ // Warn users if they attempt to use Capella without TLS being enabled.
372
+ bool has_capella_host = false;
373
+ {
374
+ bool has_non_capella_host = false;
375
+ static std::string suffix = "cloud.couchbase.com";
376
+ for (const auto& node : origin_.get_hostnames()) {
377
+ if (auto pos = node.find(suffix); pos != std::string::npos && pos + suffix.size() == node.size()) {
378
+ has_capella_host = true;
379
+ } else {
380
+ has_non_capella_host = true;
381
+ }
382
+ }
383
+
384
+ if (has_capella_host && !origin_.options().enable_tls) {
385
+ CB_LOG_WARNING("[{}]: TLS is required when connecting to Couchbase Capella. Please enable TLS by prefixing "
386
+ "the connection string with \"couchbases://\" (note the final 's').",
387
+ id_);
388
+ }
389
+
390
+ if (origin_.options().enable_tls /* TLS is enabled */
391
+ && origin_.options().trust_certificate.empty() /* No CA certificate (or other SDK-specific trust source) is specified */
392
+ && origin_.options().trust_certificate_value.empty() /* and certificate value has not been specified */
393
+ && origin_.options().tls_verify != tls_verify_mode::none /* The user did not disable all TLS verification */
394
+ && has_non_capella_host /* The connection string has a hostname that does NOT end in ".cloud.couchbase.com" */) {
395
+ CB_LOG_WARNING("[{}] When TLS is enabled, the cluster options must specify certificate(s) to trust or ensure that they are "
396
+ "available in system CA store. (Unless connecting to cloud.couchbase.com.)",
397
+ id_);
398
+ }
399
+ }
400
+
401
+ if (origin_.options().enable_tls) {
402
+ configure_tls_options(has_capella_host);
403
+
404
+ if (origin_.options().trust_certificate.empty() &&
405
+ origin_.options().trust_certificate_value.empty()) { // trust certificate is not explicitly specified
406
+ CB_LOG_DEBUG(R"([{}]: use default CA for TLS verify)", id_);
407
+ std::error_code ec{};
408
+
409
+ // load system certificates
410
+ tls_.set_default_verify_paths(ec);
411
+ if (ec) {
412
+ CB_LOG_WARNING(R"([{}]: failed to load system CAs: {})", id_, ec.message());
413
+ }
414
+
415
+ // add the Capella Root CA in addition to system CAs
416
+ tls_.add_certificate_authority(
417
+ asio::const_buffer(couchbase::core::default_ca::capellaCaCert, strlen(couchbase::core::default_ca::capellaCaCert)), ec);
418
+ if (ec) {
419
+ CB_LOG_WARNING("[{}]: unable to load default CAs: {}", id_, ec.message());
420
+ // we don't consider this fatal and try to continue without it
421
+ }
422
+
423
+ if (const auto certificates = default_ca::mozilla_ca_certs();
424
+ !origin_.options().disable_mozilla_ca_certificates && !certificates.empty()) {
425
+ CB_LOG_DEBUG("[{}]: loading {} CA certificates from Mozilla bundle. Update date: \"{}\", SHA256: \"{}\"",
426
+ id_,
427
+ certificates.size(),
428
+ default_ca::mozilla_ca_certs_date(),
429
+ default_ca::mozilla_ca_certs_sha256());
430
+ for (const auto& cert : certificates) {
431
+ tls_.add_certificate_authority(asio::const_buffer(cert.body.data(), cert.body.size()), ec);
432
+ if (ec) {
433
+ CB_LOG_WARNING("[{}]: unable to load CA \"{}\" from Mozilla bundle: {}", id_, cert.authority, ec.message());
434
+ }
435
+ }
436
+ }
437
+ } else { // trust certificate is explicitly specified
438
+ std::error_code ec{};
439
+ // load only the explicit certificate
440
+ // system and default capella certificates are not loaded
441
+ if (!origin_.options().trust_certificate_value.empty()) {
442
+ CB_LOG_DEBUG(R"([{}]: use TLS certificate passed through via options object)", id_);
443
+ tls_.add_certificate_authority(asio::const_buffer(origin_.options().trust_certificate_value.data(),
444
+ origin_.options().trust_certificate_value.size()),
445
+ ec);
446
+ if (ec) {
447
+ CB_LOG_WARNING("[{}]: unable to load CA passed via options object: {}", id_, ec.message());
448
+ }
449
+ }
450
+ if (!origin_.options().trust_certificate.empty()) {
451
+ CB_LOG_DEBUG(R"([{}]: use TLS verify file: "{}")", id_, origin_.options().trust_certificate);
452
+ tls_.load_verify_file(origin_.options().trust_certificate, ec);
453
+ if (ec) {
454
+ CB_LOG_ERROR("[{}]: unable to load verify file \"{}\": {}", id_, origin_.options().trust_certificate, ec.message());
455
+ return close([ec, handler = std::move(handler)]() mutable { return handler(ec); });
456
+ }
457
+ }
458
+ }
459
+ if (origin_.credentials().uses_certificate()) {
460
+ std::error_code ec{};
461
+ CB_LOG_DEBUG(R"([{}]: use TLS certificate chain: "{}")", id_, origin_.certificate_path());
462
+ tls_.use_certificate_chain_file(origin_.certificate_path(), ec);
463
+ if (ec) {
464
+ CB_LOG_ERROR("[{}]: unable to load certificate chain \"{}\": {}", id_, origin_.certificate_path(), ec.message());
465
+ return close([ec, handler = std::move(handler)]() mutable { return handler(ec); });
466
+ }
467
+ CB_LOG_DEBUG(R"([{}]: use TLS private key: "{}")", id_, origin_.key_path());
468
+ tls_.use_private_key_file(origin_.key_path(), asio::ssl::context::file_format::pem, ec);
469
+ if (ec) {
470
+ CB_LOG_ERROR("[{}]: unable to load private key \"{}\": {}", id_, origin_.key_path(), ec.message());
471
+ return close([ec, handler = std::move(handler)]() mutable { return handler(ec); });
472
+ }
473
+ }
474
+ session_ = io::mcbp_session(id_, ctx_, tls_, origin_, dns_srv_tracker_);
475
+ } else {
476
+ session_ = io::mcbp_session(id_, ctx_, origin_, dns_srv_tracker_);
477
+ }
478
+ session_->bootstrap([self = shared_from_this(), handler = std::move(handler)](std::error_code ec,
479
+ const topology::configuration& config) mutable {
480
+ if (!ec) {
481
+ if (self->origin_.options().network == "auto") {
482
+ self->origin_.options().network = config.select_network(self->session_->bootstrap_hostname());
483
+ if (self->origin_.options().network == "default") {
484
+ CB_LOG_DEBUG(R"({} detected network is "{}")", self->session_->log_prefix(), self->origin_.options().network);
485
+ } else {
486
+ CB_LOG_INFO(R"({} detected network is "{}")", self->session_->log_prefix(), self->origin_.options().network);
487
+ }
488
+ }
489
+ if (self->origin_.options().network != "default") {
490
+ origin::node_list nodes;
491
+ nodes.reserve(config.nodes.size());
492
+ for (const auto& address : config.nodes) {
493
+ auto port =
494
+ address.port_or(self->origin_.options().network, service_type::key_value, self->origin_.options().enable_tls, 0);
495
+ if (port == 0) {
496
+ continue;
497
+ }
498
+ origin::node_entry node;
499
+ node.first = address.hostname_for(self->origin_.options().network);
500
+ node.second = std::to_string(port);
501
+ nodes.emplace_back(node);
502
+ }
503
+ self->origin_.set_nodes(nodes);
504
+ CB_LOG_INFO("replace list of bootstrap nodes with addresses of alternative network \"{}\": [{}]",
505
+ self->origin_.options().network,
506
+ utils::join_strings(self->origin_.get_nodes(), ","));
507
+ }
508
+ self->session_manager_->set_configuration(config, self->origin_.options());
509
+ self->session_->on_configuration_update(self->session_manager_);
510
+ self->session_->on_stop([self]() {
511
+ if (self->session_) {
512
+ self->session_.reset();
513
+ }
514
+ });
515
+ }
516
+ if (ec) {
517
+ return self->close([ec, handler = std::move(handler)]() mutable { handler(ec); });
518
+ }
519
+ handler(ec);
520
+ });
521
+ }
522
+
523
+ void with_bucket_configuration(const std::string& bucket_name,
524
+ utils::movable_function<void(std::error_code, topology::configuration)>&& handler)
525
+ {
526
+ if (stopped_) {
527
+ return handler(errc::network::cluster_closed, {});
528
+ }
529
+ if (auto bucket = find_bucket_by_name(bucket_name); bucket != nullptr) {
530
+ return bucket->with_configuration(std::move(handler));
531
+ }
532
+ return handler(errc::common::bucket_not_found, {});
533
+ }
534
+
535
+ void ping(std::optional<std::string> report_id,
536
+ std::optional<std::string> bucket_name,
537
+ std::set<service_type> services,
538
+ std::optional<std::chrono::milliseconds> timeout,
539
+ utils::movable_function<void(diag::ping_result)> handler)
540
+ {
541
+ if (!report_id) {
542
+ report_id = std::make_optional(uuid::to_string(uuid::random()));
543
+ }
544
+ if (stopped_) {
545
+ return handler({ report_id.value(), meta::sdk_id() });
546
+ }
547
+ if (services.empty()) {
548
+ services = {
549
+ service_type::key_value, service_type::view, service_type::query, service_type::search,
550
+ service_type::analytics, service_type::management, service_type::eventing,
551
+ };
552
+ }
553
+ asio::post(asio::bind_executor(
554
+ ctx_, [cluster = shared_from_this(), report_id, bucket_name, services, timeout, handler = std::move(handler)]() mutable {
555
+ auto collector = std::make_shared<ping_collector_impl>(report_id.value(), std::move(handler));
556
+ if (bucket_name) {
557
+ if (services.find(service_type::key_value) != services.end()) {
558
+ if (auto bucket = cluster->find_bucket_by_name(bucket_name.value()); bucket) {
559
+ return bucket->ping(collector, timeout);
560
+ }
561
+ cluster->open_bucket(bucket_name.value(), [collector, cluster, bucket_name, timeout](std::error_code ec) {
562
+ if (!ec) {
563
+ if (auto bucket = cluster->find_bucket_by_name(bucket_name.value()); bucket) {
564
+ return bucket->ping(collector, timeout);
565
+ }
148
566
  }
567
+ });
568
+ }
569
+ } else {
570
+ if (services.find(service_type::key_value) != services.end()) {
571
+ if (cluster->session_) {
572
+ cluster->session_->ping(collector->build_reporter(), timeout);
149
573
  }
150
- });
151
- }
152
- } else {
153
- if (services.find(service_type::key_value) != services.end()) {
154
- if (cluster->session_) {
155
- cluster->session_->ping(collector->build_reporter());
574
+ cluster->for_each_bucket([&collector, &timeout](auto bucket) { bucket->ping(collector, timeout); });
156
575
  }
157
- cluster->for_each_bucket([&collector](auto& bucket) { bucket->ping(collector); });
576
+ cluster->session_manager_->ping(services, timeout, collector, cluster->origin_.credentials());
158
577
  }
159
- cluster->session_manager_->ping(services, collector, cluster->origin_.credentials());
160
- }
161
- }));
162
- }
578
+ }));
579
+ }
163
580
 
164
- std::shared_ptr<bucket>
165
- cluster::find_bucket_by_name(const std::string& name)
166
- {
167
- std::scoped_lock lock(buckets_mutex_);
581
+ void diagnostics(std::optional<std::string> report_id, utils::movable_function<void(diag::diagnostics_result)>&& handler)
582
+ {
583
+ if (!report_id) {
584
+ report_id = std::make_optional(uuid::to_string(uuid::random()));
585
+ }
586
+ if (stopped_) {
587
+ return handler({ report_id.value(), couchbase::core::meta::sdk_id() });
588
+ }
589
+ asio::post(asio::bind_executor(ctx_, [self = shared_from_this(), report_id, handler = std::move(handler)]() mutable {
590
+ diag::diagnostics_result res{ report_id.value(), couchbase::core::meta::sdk_id() };
591
+ if (self->session_) {
592
+ res.services[service_type::key_value].emplace_back(self->session_->diag_info());
593
+ }
594
+ self->for_each_bucket([&res](const auto& bucket) { bucket->export_diag_info(res); });
595
+ self->session_manager_->export_diag_info(res);
596
+ handler(std::move(res));
597
+ }));
598
+ }
599
+
600
+ void close(utils::movable_function<void()>&& handler)
601
+ {
602
+ if (stopped_) {
603
+ return handler();
604
+ }
605
+ stopped_ = true;
606
+ asio::post(asio::bind_executor(ctx_, [self = shared_from_this(), handler = std::move(handler)]() mutable {
607
+ if (self->session_) {
608
+ self->session_->stop(retry_reason::do_not_retry);
609
+ self->session_.reset();
610
+ }
611
+ self->for_each_bucket([](auto bucket) { bucket->close(); });
612
+ self->session_manager_->close();
613
+ handler();
614
+ self->work_.reset();
615
+ if (self->tracer_) {
616
+ self->tracer_->stop();
617
+ }
618
+ self->tracer_.reset();
619
+ if (self->meter_) {
620
+ self->meter_->stop();
621
+ }
622
+ self->meter_.reset();
623
+ }));
624
+ }
625
+
626
+ auto direct_dispatch(const std::string& bucket_name, std::shared_ptr<couchbase::core::mcbp::queue_request> req) -> std::error_code
627
+ {
628
+ if (stopped_) {
629
+ return errc::network::cluster_closed;
630
+ }
631
+ if (bucket_name.empty()) {
632
+ return errc::common::invalid_argument;
633
+ }
634
+ if (auto bucket = find_bucket_by_name(bucket_name); bucket != nullptr) {
635
+ return bucket->direct_dispatch(std::move(req));
636
+ }
637
+
638
+ open_bucket(bucket_name, [self = shared_from_this(), req = std::move(req), bucket_name](std::error_code ec) mutable {
639
+ if (ec) {
640
+ return req->cancel(ec);
641
+ }
642
+ self->direct_dispatch(bucket_name, std::move(req));
643
+ });
644
+ return {};
645
+ }
646
+
647
+ auto direct_re_queue(const std::string& bucket_name, std::shared_ptr<mcbp::queue_request> req, bool is_retry) -> std::error_code
648
+ {
649
+ if (stopped_) {
650
+ return errc::network::cluster_closed;
651
+ }
652
+ if (bucket_name.empty()) {
653
+ return errc::common::invalid_argument;
654
+ }
655
+ if (auto bucket = find_bucket_by_name(bucket_name); bucket != nullptr) {
656
+ return bucket->direct_re_queue(std::move(req), is_retry);
657
+ }
168
658
 
169
- auto bucket = buckets_.find(name);
170
- if (bucket == buckets_.end()) {
659
+ open_bucket(bucket_name, [self = shared_from_this(), bucket_name, req = std::move(req), is_retry](std::error_code ec) mutable {
660
+ if (ec) {
661
+ return req->cancel(ec);
662
+ }
663
+ self->direct_re_queue(bucket_name, std::move(req), is_retry);
664
+ });
171
665
  return {};
172
666
  }
173
- return bucket->second;
667
+
668
+ private:
669
+ std::string id_{ uuid::to_string(uuid::random()) };
670
+ asio::io_context& ctx_;
671
+ asio::executor_work_guard<asio::io_context::executor_type> work_;
672
+ asio::ssl::context tls_{ asio::ssl::context::tls_client };
673
+ std::shared_ptr<io::http_session_manager> session_manager_;
674
+ std::optional<io::mcbp_session> session_{};
675
+ std::shared_ptr<impl::dns_srv_tracker> dns_srv_tracker_{};
676
+ std::mutex buckets_mutex_{};
677
+ std::map<std::string, std::shared_ptr<bucket>> buckets_{};
678
+ couchbase::core::origin origin_{};
679
+ std::shared_ptr<couchbase::tracing::request_tracer> tracer_{ nullptr };
680
+ std::shared_ptr<couchbase::metrics::meter> meter_{ nullptr };
681
+ std::atomic_bool stopped_{ false };
682
+ };
683
+
684
+ cluster::cluster(asio::io_context& ctx)
685
+ : impl_{ std::make_shared<cluster_impl>(ctx) }
686
+ {
687
+ }
688
+
689
+ auto
690
+ cluster::direct_dispatch(const std::string& bucket_name, std::shared_ptr<couchbase::core::mcbp::queue_request> req) const -> std::error_code
691
+ {
692
+ if (impl_) {
693
+ return impl_->direct_dispatch(bucket_name, std::move(req));
694
+ }
695
+ return errc::network::cluster_closed;
174
696
  }
175
697
 
176
698
  auto
177
- cluster::direct_dispatch(const std::string& bucket_name, std::shared_ptr<couchbase::core::mcbp::queue_request> req) -> std::error_code
699
+ cluster::direct_re_queue(const std::string& bucket_name, std::shared_ptr<mcbp::queue_request> req, bool is_retry) const -> std::error_code
178
700
  {
179
- if (stopped_) {
180
- return errc::network::cluster_closed;
701
+ if (impl_) {
702
+ return impl_->direct_re_queue(bucket_name, std::move(req), is_retry);
181
703
  }
182
- if (bucket_name.empty()) {
183
- return errc::common::invalid_argument;
704
+ return errc::network::cluster_closed;
705
+ }
706
+
707
+ void
708
+ cluster::close(utils::movable_function<void()>&& handler) const
709
+ {
710
+ if (impl_) {
711
+ impl_->close(std::move(handler));
184
712
  }
185
- if (auto bucket = find_bucket_by_name(bucket_name); bucket != nullptr) {
186
- return bucket->direct_dispatch(std::move(req));
713
+ }
714
+
715
+ void
716
+ cluster::open_bucket(const std::string& bucket_name, utils::movable_function<void(std::error_code)>&& handler) const
717
+ {
718
+ if (impl_) {
719
+ impl_->open_bucket(bucket_name, std::move(handler));
187
720
  }
721
+ }
188
722
 
189
- open_bucket(bucket_name, [self = shared_from_this(), req = std::move(req), bucket_name](std::error_code ec) mutable {
190
- if (ec) {
191
- return req->cancel(ec);
192
- }
193
- self->direct_dispatch(bucket_name, std::move(req));
194
- });
195
- return {};
723
+ void
724
+ cluster::open(couchbase::core::origin origin, utils::movable_function<void(std::error_code)>&& handler) const
725
+ {
726
+ if (impl_) {
727
+ impl_->open(std::move(origin), std::move(handler));
728
+ }
196
729
  }
197
730
 
198
- auto
199
- cluster::direct_re_queue(const std::string& bucket_name, std::shared_ptr<mcbp::queue_request> req, bool is_retry) -> std::error_code
731
+ void
732
+ cluster::diagnostics(std::optional<std::string> report_id, utils::movable_function<void(diag::diagnostics_result)>&& handler) const
200
733
  {
201
- if (stopped_) {
202
- return errc::network::cluster_closed;
734
+ if (impl_) {
735
+ impl_->diagnostics(std::move(report_id), std::move(handler));
203
736
  }
204
- if (bucket_name.empty()) {
205
- return errc::common::invalid_argument;
737
+ }
738
+
739
+ void
740
+ cluster::ping(std::optional<std::string> report_id,
741
+ std::optional<std::string> bucket_name,
742
+ std::set<service_type> services,
743
+ std::optional<std::chrono::milliseconds> timeout,
744
+ utils::movable_function<void(diag::ping_result)>&& handler) const
745
+ {
746
+ if (impl_) {
747
+ impl_->ping(std::move(report_id), std::move(bucket_name), std::move(services), std::move(timeout), std::move(handler));
206
748
  }
207
- if (auto bucket = find_bucket_by_name(bucket_name); bucket != nullptr) {
208
- return bucket->direct_re_queue(std::move(req), is_retry);
749
+ }
750
+
751
+ void
752
+ cluster::with_bucket_configuration(const std::string& bucket_name,
753
+ utils::movable_function<void(std::error_code, topology::configuration)>&& handler) const
754
+ {
755
+ if (impl_) {
756
+ impl_->with_bucket_configuration(bucket_name, std::move(handler));
209
757
  }
758
+ }
210
759
 
211
- open_bucket(bucket_name, [self = shared_from_this(), bucket_name, req = std::move(req), is_retry](std::error_code ec) mutable {
212
- if (ec) {
213
- return req->cancel(ec);
214
- }
215
- self->direct_re_queue(bucket_name, std::move(req), is_retry);
216
- });
217
- return {};
760
+ void
761
+ cluster::close_bucket(const std::string& bucket_name, utils::movable_function<void(std::error_code)>&& handler) const
762
+ {
763
+ if (impl_) {
764
+ impl_->close_bucket(bucket_name, std::move(handler));
765
+ }
766
+ }
767
+
768
+ std::pair<std::error_code, couchbase::core::origin>
769
+ cluster::origin() const
770
+ {
771
+ if (impl_) {
772
+ return impl_->origin();
773
+ }
774
+ return { errc::network::cluster_closed, {} };
775
+ }
776
+
777
+ auto
778
+ cluster::io_context() const -> asio::io_context&
779
+ {
780
+ return impl_->io_context();
781
+ }
782
+
783
+ void
784
+ cluster::execute(operations::append_request request, utils::movable_function<void(operations::append_response)>&& handler) const
785
+ {
786
+ return impl_->execute(std::move(request), std::move(handler));
787
+ }
788
+
789
+ void
790
+ cluster::execute(operations::decrement_request request, utils::movable_function<void(operations::decrement_response)>&& handler) const
791
+ {
792
+ return impl_->execute(std::move(request), std::move(handler));
793
+ }
794
+
795
+ void
796
+ cluster::execute(operations::exists_request request, utils::movable_function<void(operations::exists_response)>&& handler) const
797
+ {
798
+ return impl_->execute(std::move(request), std::move(handler));
799
+ }
800
+
801
+ void
802
+ cluster::execute(operations::get_request request, utils::movable_function<void(operations::get_response)>&& handler) const
803
+ {
804
+ return impl_->execute(std::move(request), std::move(handler));
805
+ }
806
+
807
+ void
808
+ cluster::execute(operations::get_all_replicas_request request,
809
+ utils::movable_function<void(operations::get_all_replicas_response)>&& handler) const
810
+ {
811
+ return request.execute(impl_, std::move(handler));
812
+ }
813
+
814
+ void
815
+ cluster::execute(operations::get_and_lock_request request, utils::movable_function<void(operations::get_and_lock_response)>&& handler) const
816
+ {
817
+ return impl_->execute(std::move(request), std::move(handler));
818
+ }
819
+
820
+ void
821
+ cluster::execute(operations::get_and_touch_request request,
822
+ utils::movable_function<void(operations::get_and_touch_response)>&& handler) const
823
+ {
824
+ return impl_->execute(std::move(request), std::move(handler));
825
+ }
826
+
827
+ void
828
+ cluster::execute(operations::get_any_replica_request request,
829
+ utils::movable_function<void(operations::get_any_replica_response)>&& handler) const
830
+ {
831
+ return request.execute(impl_, std::move(handler));
832
+ }
833
+
834
+ void
835
+ cluster::execute(operations::get_projected_request request,
836
+ utils::movable_function<void(operations::get_projected_response)>&& handler) const
837
+ {
838
+ return impl_->execute(std::move(request), std::move(handler));
839
+ }
840
+
841
+ void
842
+ cluster::execute(operations::increment_request request, utils::movable_function<void(operations::increment_response)>&& handler) const
843
+ {
844
+ return impl_->execute(std::move(request), std::move(handler));
845
+ }
846
+
847
+ void
848
+ cluster::execute(operations::insert_request request, utils::movable_function<void(operations::insert_response)>&& handler) const
849
+ {
850
+ return impl_->execute(std::move(request), std::move(handler));
851
+ }
852
+
853
+ void
854
+ cluster::execute(operations::lookup_in_request request, utils::movable_function<void(operations::lookup_in_response)>&& handler) const
855
+ {
856
+ return impl_->execute(std::move(request), std::move(handler));
857
+ }
858
+
859
+ void
860
+ cluster::execute(operations::lookup_in_any_replica_request request,
861
+ utils::movable_function<void(operations::lookup_in_any_replica_response)>&& handler) const
862
+ {
863
+ return request.execute(impl_, std::move(handler));
864
+ }
865
+
866
+ void
867
+ cluster::execute(operations::lookup_in_all_replicas_request request,
868
+ utils::movable_function<void(operations::lookup_in_all_replicas_response)>&& handler) const
869
+ {
870
+ return request.execute(impl_, std::move(handler));
871
+ }
872
+
873
+ void
874
+ cluster::execute(operations::mutate_in_request request, utils::movable_function<void(operations::mutate_in_response)>&& handler) const
875
+ {
876
+ return impl_->execute(std::move(request), std::move(handler));
877
+ }
878
+
879
+ void
880
+ cluster::execute(operations::prepend_request request, utils::movable_function<void(operations::prepend_response)>&& handler) const
881
+ {
882
+ return impl_->execute(std::move(request), std::move(handler));
883
+ }
884
+
885
+ void
886
+ cluster::execute(operations::query_request request, utils::movable_function<void(operations::query_response)>&& handler) const
887
+ {
888
+ return impl_->execute(std::move(request), std::move(handler));
889
+ }
890
+
891
+ void
892
+ cluster::execute(operations::remove_request request, utils::movable_function<void(operations::remove_response)>&& handler) const
893
+ {
894
+ return impl_->execute(std::move(request), std::move(handler));
895
+ }
896
+
897
+ void
898
+ cluster::execute(operations::replace_request request, utils::movable_function<void(operations::replace_response)>&& handler) const
899
+ {
900
+ return impl_->execute(std::move(request), std::move(handler));
901
+ }
902
+
903
+ void
904
+ cluster::execute(operations::search_request request, utils::movable_function<void(operations::search_response)>&& handler) const
905
+ {
906
+ return impl_->execute(std::move(request), std::move(handler));
907
+ }
908
+
909
+ void
910
+ cluster::execute(operations::touch_request request, utils::movable_function<void(operations::touch_response)>&& handler) const
911
+ {
912
+ return impl_->execute(std::move(request), std::move(handler));
913
+ }
914
+
915
+ void
916
+ cluster::execute(operations::unlock_request request, utils::movable_function<void(operations::unlock_response)>&& handler) const
917
+ {
918
+ return impl_->execute(std::move(request), std::move(handler));
218
919
  }
219
920
 
921
+ void
922
+ cluster::execute(operations::upsert_request request, utils::movable_function<void(operations::upsert_response)>&& handler) const
923
+ {
924
+ return impl_->execute(std::move(request), std::move(handler));
925
+ }
926
+
927
+ void
928
+ cluster::execute(operations::document_view_request request,
929
+ utils::movable_function<void(operations::document_view_response)>&& handler) const
930
+ {
931
+ return impl_->execute(std::move(request), std::move(handler));
932
+ }
933
+
934
+ void
935
+ cluster::execute(operations::http_noop_request request, utils::movable_function<void(operations::http_noop_response)>&& handler) const
936
+ {
937
+ return impl_->execute(std::move(request), std::move(handler));
938
+ }
939
+
940
+ void
941
+ cluster::execute(operations::management::analytics_dataset_create_request request,
942
+ utils::movable_function<void(operations::management::analytics_dataset_create_response)>&& handler) const
943
+ {
944
+ return impl_->execute(std::move(request), std::move(handler));
945
+ }
946
+
947
+ void
948
+ cluster::execute(operations::management::analytics_dataset_drop_request request,
949
+ utils::movable_function<void(operations::management::analytics_dataset_drop_response)>&& handler) const
950
+ {
951
+ return impl_->execute(std::move(request), std::move(handler));
952
+ }
953
+
954
+ void
955
+ cluster::execute(operations::management::analytics_dataset_get_all_request request,
956
+ utils::movable_function<void(operations::management::analytics_dataset_get_all_response)>&& handler) const
957
+ {
958
+ return impl_->execute(std::move(request), std::move(handler));
959
+ }
960
+
961
+ void
962
+ cluster::execute(operations::management::analytics_dataverse_create_request request,
963
+ utils::movable_function<void(operations::management::analytics_dataverse_create_response)>&& handler) const
964
+ {
965
+ return impl_->execute(std::move(request), std::move(handler));
966
+ }
967
+
968
+ void
969
+ cluster::execute(operations::management::analytics_dataverse_drop_request request,
970
+ utils::movable_function<void(operations::management::analytics_dataverse_drop_response)>&& handler) const
971
+ {
972
+ return impl_->execute(std::move(request), std::move(handler));
973
+ }
974
+
975
+ void
976
+ cluster::execute(operations::management::analytics_get_pending_mutations_request request,
977
+ utils::movable_function<void(operations::management::analytics_get_pending_mutations_response)>&& handler) const
978
+ {
979
+ return impl_->execute(std::move(request), std::move(handler));
980
+ }
981
+
982
+ void
983
+ cluster::execute(operations::management::analytics_index_create_request request,
984
+ utils::movable_function<void(operations::management::analytics_index_create_response)>&& handler) const
985
+ {
986
+ return impl_->execute(std::move(request), std::move(handler));
987
+ }
988
+
989
+ void
990
+ cluster::execute(operations::management::analytics_index_drop_request request,
991
+ utils::movable_function<void(operations::management::analytics_index_drop_response)>&& handler) const
992
+ {
993
+ return impl_->execute(std::move(request), std::move(handler));
994
+ }
995
+
996
+ void
997
+ cluster::execute(operations::management::analytics_index_get_all_request request,
998
+ utils::movable_function<void(operations::management::analytics_index_get_all_response)>&& handler) const
999
+ {
1000
+ return impl_->execute(std::move(request), std::move(handler));
1001
+ }
1002
+
1003
+ void
1004
+ cluster::execute(operations::management::analytics_link_connect_request request,
1005
+ utils::movable_function<void(operations::management::analytics_link_connect_response)>&& handler) const
1006
+ {
1007
+ return impl_->execute(std::move(request), std::move(handler));
1008
+ }
1009
+
1010
+ void
1011
+ cluster::execute(operations::management::analytics_link_disconnect_request request,
1012
+ utils::movable_function<void(operations::management::analytics_link_disconnect_response)>&& handler) const
1013
+ {
1014
+ return impl_->execute(std::move(request), std::move(handler));
1015
+ }
1016
+
1017
+ void
1018
+ cluster::execute(operations::management::analytics_link_drop_request request,
1019
+ utils::movable_function<void(operations::management::analytics_link_drop_response)>&& handler) const
1020
+ {
1021
+ return impl_->execute(std::move(request), std::move(handler));
1022
+ }
1023
+
1024
+ void
1025
+ cluster::execute(operations::management::analytics_link_get_all_request request,
1026
+ utils::movable_function<void(operations::management::analytics_link_get_all_response)>&& handler) const
1027
+ {
1028
+ return impl_->execute(std::move(request), std::move(handler));
1029
+ }
1030
+
1031
+ void
1032
+ cluster::execute(operations::management::bucket_create_request request,
1033
+ utils::movable_function<void(operations::management::bucket_create_response)>&& handler) const
1034
+ {
1035
+ return impl_->execute(std::move(request), std::move(handler));
1036
+ }
1037
+
1038
+ void
1039
+ cluster::execute(operations::management::bucket_drop_request request,
1040
+ utils::movable_function<void(operations::management::bucket_drop_response)>&& handler) const
1041
+ {
1042
+ return impl_->execute(std::move(request), std::move(handler));
1043
+ }
1044
+
1045
+ void
1046
+ cluster::execute(operations::management::bucket_flush_request request,
1047
+ utils::movable_function<void(operations::management::bucket_flush_response)>&& handler) const
1048
+ {
1049
+ return impl_->execute(std::move(request), std::move(handler));
1050
+ }
1051
+
1052
+ void
1053
+ cluster::execute(operations::management::bucket_get_request request,
1054
+ utils::movable_function<void(operations::management::bucket_get_response)>&& handler) const
1055
+ {
1056
+ return impl_->execute(std::move(request), std::move(handler));
1057
+ }
1058
+
1059
+ void
1060
+ cluster::execute(operations::management::bucket_get_all_request request,
1061
+ utils::movable_function<void(operations::management::bucket_get_all_response)>&& handler) const
1062
+ {
1063
+ return impl_->execute(std::move(request), std::move(handler));
1064
+ }
1065
+
1066
+ void
1067
+ cluster::execute(operations::management::bucket_update_request request,
1068
+ utils::movable_function<void(operations::management::bucket_update_response)>&& handler) const
1069
+ {
1070
+ return impl_->execute(std::move(request), std::move(handler));
1071
+ }
1072
+
1073
+ void
1074
+ cluster::execute(operations::management::collection_create_request request,
1075
+ utils::movable_function<void(operations::management::collection_create_response)>&& handler) const
1076
+ {
1077
+ return impl_->execute(std::move(request), std::move(handler));
1078
+ }
1079
+
1080
+ void
1081
+ cluster::execute(operations::management::collection_update_request request,
1082
+ utils::movable_function<void(operations::management::collection_update_response)>&& handler) const
1083
+ {
1084
+ return impl_->execute(std::move(request), std::move(handler));
1085
+ }
1086
+
1087
+ void
1088
+ cluster::execute(operations::management::collection_drop_request request,
1089
+ utils::movable_function<void(operations::management::collection_drop_response)>&& handler) const
1090
+ {
1091
+ return impl_->execute(std::move(request), std::move(handler));
1092
+ }
1093
+
1094
+ void
1095
+ cluster::execute(operations::management::collections_manifest_get_request request,
1096
+ utils::movable_function<void(operations::management::collections_manifest_get_response)>&& handler) const
1097
+ {
1098
+ return impl_->execute(std::move(request), std::move(handler));
1099
+ }
1100
+
1101
+ void
1102
+ cluster::execute(operations::management::scope_create_request request,
1103
+ utils::movable_function<void(operations::management::scope_create_response)>&& handler) const
1104
+ {
1105
+ return impl_->execute(std::move(request), std::move(handler));
1106
+ }
1107
+
1108
+ void
1109
+ cluster::execute(operations::management::scope_drop_request request,
1110
+ utils::movable_function<void(operations::management::scope_drop_response)>&& handler) const
1111
+ {
1112
+ return impl_->execute(std::move(request), std::move(handler));
1113
+ }
1114
+
1115
+ void
1116
+ cluster::execute(operations::management::scope_get_all_request request,
1117
+ utils::movable_function<void(operations::management::scope_get_all_response)>&& handler) const
1118
+ {
1119
+ return impl_->execute(std::move(request), std::move(handler));
1120
+ }
1121
+
1122
+ void
1123
+ cluster::execute(operations::management::eventing_deploy_function_request request,
1124
+ utils::movable_function<void(operations::management::eventing_deploy_function_response)>&& handler) const
1125
+ {
1126
+ return impl_->execute(std::move(request), std::move(handler));
1127
+ }
1128
+
1129
+ void
1130
+ cluster::execute(operations::management::eventing_drop_function_request request,
1131
+ utils::movable_function<void(operations::management::eventing_drop_function_response)>&& handler) const
1132
+ {
1133
+ return impl_->execute(std::move(request), std::move(handler));
1134
+ }
1135
+
1136
+ void
1137
+ cluster::execute(operations::management::eventing_get_all_functions_request request,
1138
+ utils::movable_function<void(operations::management::eventing_get_all_functions_response)>&& handler) const
1139
+ {
1140
+ return impl_->execute(std::move(request), std::move(handler));
1141
+ }
1142
+
1143
+ void
1144
+ cluster::execute(operations::management::eventing_get_function_request request,
1145
+ utils::movable_function<void(operations::management::eventing_get_function_response)>&& handler) const
1146
+ {
1147
+ return impl_->execute(std::move(request), std::move(handler));
1148
+ }
1149
+
1150
+ void
1151
+ cluster::execute(operations::management::eventing_get_status_request request,
1152
+ utils::movable_function<void(operations::management::eventing_get_status_response)>&& handler) const
1153
+ {
1154
+ return impl_->execute(std::move(request), std::move(handler));
1155
+ }
1156
+
1157
+ void
1158
+ cluster::execute(operations::management::eventing_pause_function_request request,
1159
+ utils::movable_function<void(operations::management::eventing_pause_function_response)>&& handler) const
1160
+ {
1161
+ return impl_->execute(std::move(request), std::move(handler));
1162
+ }
1163
+
1164
+ void
1165
+ cluster::execute(operations::management::eventing_resume_function_request request,
1166
+ utils::movable_function<void(operations::management::eventing_resume_function_response)>&& handler) const
1167
+ {
1168
+ return impl_->execute(std::move(request), std::move(handler));
1169
+ }
1170
+
1171
+ void
1172
+ cluster::execute(operations::management::eventing_undeploy_function_request request,
1173
+ utils::movable_function<void(operations::management::eventing_undeploy_function_response)>&& handler) const
1174
+ {
1175
+ return impl_->execute(std::move(request), std::move(handler));
1176
+ }
1177
+
1178
+ void
1179
+ cluster::execute(operations::management::eventing_upsert_function_request request,
1180
+ utils::movable_function<void(operations::management::eventing_upsert_function_response)>&& handler) const
1181
+ {
1182
+ return impl_->execute(std::move(request), std::move(handler));
1183
+ }
1184
+
1185
+ void
1186
+ cluster::execute(operations::management::view_index_drop_request request,
1187
+ utils::movable_function<void(operations::management::view_index_drop_response)>&& handler) const
1188
+ {
1189
+ return impl_->execute(std::move(request), std::move(handler));
1190
+ }
1191
+
1192
+ void
1193
+ cluster::execute(operations::management::view_index_get_request request,
1194
+ utils::movable_function<void(operations::management::view_index_get_response)>&& handler) const
1195
+ {
1196
+ return impl_->execute(std::move(request), std::move(handler));
1197
+ }
1198
+
1199
+ void
1200
+ cluster::execute(operations::management::view_index_get_all_request request,
1201
+ utils::movable_function<void(operations::management::view_index_get_all_response)>&& handler) const
1202
+ {
1203
+ return impl_->execute(std::move(request), std::move(handler));
1204
+ }
1205
+
1206
+ void
1207
+ cluster::execute(operations::management::view_index_upsert_request request,
1208
+ utils::movable_function<void(operations::management::view_index_upsert_response)>&& handler) const
1209
+ {
1210
+ return impl_->execute(std::move(request), std::move(handler));
1211
+ }
1212
+
1213
+ void
1214
+ cluster::execute(operations::management::change_password_request request,
1215
+ utils::movable_function<void(operations::management::change_password_response)>&& handler) const
1216
+ {
1217
+ return impl_->execute(std::move(request), std::move(handler));
1218
+ }
1219
+
1220
+ void
1221
+ cluster::execute(operations::management::group_drop_request request,
1222
+ utils::movable_function<void(operations::management::group_drop_response)>&& handler) const
1223
+ {
1224
+ return impl_->execute(std::move(request), std::move(handler));
1225
+ }
1226
+
1227
+ void
1228
+ cluster::execute(operations::management::group_get_request request,
1229
+ utils::movable_function<void(operations::management::group_get_response)>&& handler) const
1230
+ {
1231
+ return impl_->execute(std::move(request), std::move(handler));
1232
+ }
1233
+
1234
+ void
1235
+ cluster::execute(operations::management::group_get_all_request request,
1236
+ utils::movable_function<void(operations::management::group_get_all_response)>&& handler) const
1237
+ {
1238
+ return impl_->execute(std::move(request), std::move(handler));
1239
+ }
1240
+
1241
+ void
1242
+ cluster::execute(operations::management::group_upsert_request request,
1243
+ utils::movable_function<void(operations::management::group_upsert_response)>&& handler) const
1244
+ {
1245
+ return impl_->execute(std::move(request), std::move(handler));
1246
+ }
1247
+
1248
+ void
1249
+ cluster::execute(operations::management::role_get_all_request request,
1250
+ utils::movable_function<void(operations::management::role_get_all_response)>&& handler) const
1251
+ {
1252
+ return impl_->execute(std::move(request), std::move(handler));
1253
+ }
1254
+
1255
+ void
1256
+ cluster::execute(operations::management::user_drop_request request,
1257
+ utils::movable_function<void(operations::management::user_drop_response)>&& handler) const
1258
+ {
1259
+ return impl_->execute(std::move(request), std::move(handler));
1260
+ }
1261
+
1262
+ void
1263
+ cluster::execute(operations::management::user_get_request request,
1264
+ utils::movable_function<void(operations::management::user_get_response)>&& handler) const
1265
+ {
1266
+ return impl_->execute(std::move(request), std::move(handler));
1267
+ }
1268
+
1269
+ void
1270
+ cluster::execute(operations::management::user_get_all_request request,
1271
+ utils::movable_function<void(operations::management::user_get_all_response)>&& handler) const
1272
+ {
1273
+ return impl_->execute(std::move(request), std::move(handler));
1274
+ }
1275
+
1276
+ void
1277
+ cluster::execute(operations::management::user_upsert_request request,
1278
+ utils::movable_function<void(operations::management::user_upsert_response)>&& handler) const
1279
+ {
1280
+ return impl_->execute(std::move(request), std::move(handler));
1281
+ }
1282
+
1283
+ void
1284
+ cluster::execute(operations::management::search_get_stats_request request,
1285
+ utils::movable_function<void(operations::management::search_get_stats_response)>&& handler) const
1286
+ {
1287
+ return impl_->execute(std::move(request), std::move(handler));
1288
+ }
1289
+
1290
+ void
1291
+ cluster::execute(operations::management::search_index_analyze_document_request request,
1292
+ utils::movable_function<void(operations::management::search_index_analyze_document_response)>&& handler) const
1293
+ {
1294
+ return impl_->execute(std::move(request), std::move(handler));
1295
+ }
1296
+
1297
+ void
1298
+ cluster::execute(operations::management::search_index_control_ingest_request request,
1299
+ utils::movable_function<void(operations::management::search_index_control_ingest_response)>&& handler) const
1300
+ {
1301
+ return impl_->execute(std::move(request), std::move(handler));
1302
+ }
1303
+
1304
+ void
1305
+ cluster::execute(operations::management::search_index_control_plan_freeze_request request,
1306
+ utils::movable_function<void(operations::management::search_index_control_plan_freeze_response)>&& handler) const
1307
+ {
1308
+ return impl_->execute(std::move(request), std::move(handler));
1309
+ }
1310
+
1311
+ void
1312
+ cluster::execute(operations::management::search_index_control_query_request request,
1313
+ utils::movable_function<void(operations::management::search_index_control_query_response)>&& handler) const
1314
+ {
1315
+ return impl_->execute(std::move(request), std::move(handler));
1316
+ }
1317
+
1318
+ void
1319
+ cluster::execute(operations::management::search_index_drop_request request,
1320
+ utils::movable_function<void(operations::management::search_index_drop_response)>&& handler) const
1321
+ {
1322
+ return impl_->execute(std::move(request), std::move(handler));
1323
+ }
1324
+
1325
+ void
1326
+ cluster::execute(operations::management::search_index_get_request request,
1327
+ utils::movable_function<void(operations::management::search_index_get_response)>&& handler) const
1328
+ {
1329
+ return impl_->execute(std::move(request), std::move(handler));
1330
+ }
1331
+
1332
+ void
1333
+ cluster::execute(operations::management::search_index_get_all_request request,
1334
+ utils::movable_function<void(operations::management::search_index_get_all_response)>&& handler) const
1335
+ {
1336
+ return impl_->execute(std::move(request), std::move(handler));
1337
+ }
1338
+
1339
+ void
1340
+ cluster::execute(operations::management::search_index_get_documents_count_request request,
1341
+ utils::movable_function<void(operations::management::search_index_get_documents_count_response)>&& handler) const
1342
+ {
1343
+ return impl_->execute(std::move(request), std::move(handler));
1344
+ }
1345
+
1346
+ void
1347
+ cluster::execute(operations::management::search_index_get_stats_request request,
1348
+ utils::movable_function<void(operations::management::search_index_get_stats_response)>&& handler) const
1349
+ {
1350
+ return impl_->execute(std::move(request), std::move(handler));
1351
+ }
1352
+
1353
+ void
1354
+ cluster::execute(operations::management::search_index_upsert_request request,
1355
+ utils::movable_function<void(operations::management::search_index_upsert_response)>&& handler) const
1356
+ {
1357
+ return impl_->execute(std::move(request), std::move(handler));
1358
+ }
1359
+
1360
+ void
1361
+ cluster::execute(operations::management::query_index_build_request request,
1362
+ utils::movable_function<void(operations::management::query_index_build_response)>&& handler) const
1363
+ {
1364
+ return impl_->execute(std::move(request), std::move(handler));
1365
+ }
1366
+
1367
+ void
1368
+ cluster::execute(operations::management::query_index_build_deferred_request request,
1369
+ utils::movable_function<void(operations::management::query_index_build_deferred_response)>&& handler) const
1370
+ {
1371
+ return impl_->execute(std::move(request), std::move(handler));
1372
+ }
1373
+
1374
+ void
1375
+ cluster::execute(operations::management::query_index_create_request request,
1376
+ utils::movable_function<void(operations::management::query_index_create_response)>&& handler) const
1377
+ {
1378
+ return impl_->execute(std::move(request), std::move(handler));
1379
+ }
1380
+
1381
+ void
1382
+ cluster::execute(operations::management::query_index_drop_request request,
1383
+ utils::movable_function<void(operations::management::query_index_drop_response)>&& handler) const
1384
+ {
1385
+ return impl_->execute(std::move(request), std::move(handler));
1386
+ }
1387
+
1388
+ void
1389
+ cluster::execute(operations::management::query_index_get_all_request request,
1390
+ utils::movable_function<void(operations::management::query_index_get_all_response)>&& handler) const
1391
+ {
1392
+ return impl_->execute(std::move(request), std::move(handler));
1393
+ }
1394
+
1395
+ void
1396
+ cluster::execute(operations::management::query_index_get_all_deferred_request request,
1397
+ utils::movable_function<void(operations::management::query_index_get_all_deferred_response)>&& handler) const
1398
+ {
1399
+ return impl_->execute(std::move(request), std::move(handler));
1400
+ }
1401
+
1402
+ void
1403
+ cluster::execute(operations::management::bucket_describe_request request,
1404
+ utils::movable_function<void(operations::management::bucket_describe_response)>&& handler) const
1405
+ {
1406
+ return impl_->execute(std::move(request), std::move(handler));
1407
+ }
1408
+
1409
+ void
1410
+ cluster::execute(operations::management::cluster_describe_request request,
1411
+ utils::movable_function<void(operations::management::cluster_describe_response)>&& handler) const
1412
+ {
1413
+ return impl_->execute(std::move(request), std::move(handler));
1414
+ }
1415
+
1416
+ void
1417
+ cluster::execute(operations::management::cluster_developer_preview_enable_request request,
1418
+ utils::movable_function<void(operations::management::cluster_developer_preview_enable_response)>&& handler) const
1419
+ {
1420
+ return impl_->execute(std::move(request), std::move(handler));
1421
+ }
1422
+
1423
+ void
1424
+ cluster::execute(operations::management::freeform_request request,
1425
+ utils::movable_function<void(operations::management::freeform_response)>&& handler) const
1426
+ {
1427
+ return impl_->execute(std::move(request), std::move(handler));
1428
+ }
1429
+
1430
+ void
1431
+ cluster::execute(impl::get_replica_request request, utils::movable_function<void(impl::get_replica_response)>&& handler) const
1432
+ {
1433
+ return impl_->execute(std::move(request), std::move(handler));
1434
+ }
1435
+
1436
+ void
1437
+ cluster::execute(impl::observe_seqno_request request, utils::movable_function<void(impl::observe_seqno_response)>&& handler) const
1438
+ {
1439
+ return impl_->execute(std::move(request), std::move(handler));
1440
+ }
1441
+
1442
+ void
1443
+ cluster::execute(operations::management::analytics_link_replace_request<management::analytics::azure_blob_external_link> request,
1444
+ utils::movable_function<void(operations::management::analytics_link_replace_response)>&& handler) const
1445
+ {
1446
+ return impl_->execute(std::move(request), std::move(handler));
1447
+ }
1448
+
1449
+ void
1450
+ cluster::execute(operations::management::analytics_link_replace_request<management::analytics::couchbase_remote_link> request,
1451
+ utils::movable_function<void(operations::management::analytics_link_replace_response)>&& handler) const
1452
+ {
1453
+ return impl_->execute(std::move(request), std::move(handler));
1454
+ }
1455
+
1456
+ void
1457
+ cluster::execute(operations::management::analytics_link_replace_request<management::analytics::s3_external_link> request,
1458
+ utils::movable_function<void(operations::management::analytics_link_replace_response)>&& handler) const
1459
+ {
1460
+ return impl_->execute(std::move(request), std::move(handler));
1461
+ }
1462
+
1463
+ void
1464
+ cluster::execute(operations::management::analytics_link_create_request<management::analytics::azure_blob_external_link> request,
1465
+ utils::movable_function<void(operations::management::analytics_link_create_response)>&& handler) const
1466
+ {
1467
+ return impl_->execute(std::move(request), std::move(handler));
1468
+ }
1469
+
1470
+ void
1471
+ cluster::execute(operations::management::analytics_link_create_request<management::analytics::couchbase_remote_link> request,
1472
+ utils::movable_function<void(operations::management::analytics_link_create_response)>&& handler) const
1473
+ {
1474
+ return impl_->execute(std::move(request), std::move(handler));
1475
+ }
1476
+
1477
+ void
1478
+ cluster::execute(operations::management::analytics_link_create_request<management::analytics::s3_external_link> request,
1479
+ utils::movable_function<void(operations::management::analytics_link_create_response)>&& handler) const
1480
+ {
1481
+ return impl_->execute(std::move(request), std::move(handler));
1482
+ }
1483
+
1484
+ void
1485
+ cluster::execute(operations::analytics_request request, utils::movable_function<void(operations::analytics_response)>&& handler) const
1486
+ {
1487
+ return impl_->execute(std::move(request), std::move(handler));
1488
+ }
1489
+
1490
+ void
1491
+ cluster::execute(operations::upsert_request_with_legacy_durability request,
1492
+ utils::movable_function<void(operations::upsert_response)>&& handler) const
1493
+ {
1494
+ return request.execute(*this, std::move(handler));
1495
+ }
1496
+
1497
+ void
1498
+ cluster::execute(operations::insert_request_with_legacy_durability request,
1499
+ utils::movable_function<void(operations::insert_response)>&& handler) const
1500
+ {
1501
+ return request.execute(*this, std::move(handler));
1502
+ }
1503
+
1504
+ void
1505
+ cluster::execute(operations::append_request_with_legacy_durability request,
1506
+ utils::movable_function<void(operations::append_response)>&& handler) const
1507
+ {
1508
+ return request.execute(*this, std::move(handler));
1509
+ }
1510
+
1511
+ void
1512
+ cluster::execute(operations::prepend_request_with_legacy_durability request,
1513
+ utils::movable_function<void(operations::prepend_response)>&& handler) const
1514
+ {
1515
+ return request.execute(*this, std::move(handler));
1516
+ }
1517
+
1518
+ void
1519
+ cluster::execute(operations::replace_request_with_legacy_durability request,
1520
+ utils::movable_function<void(operations::replace_response)>&& handler) const
1521
+ {
1522
+ return request.execute(*this, std::move(handler));
1523
+ }
1524
+
1525
+ void
1526
+ cluster::execute(operations::mutate_in_request_with_legacy_durability request,
1527
+ utils::movable_function<void(operations::mutate_in_response)>&& handler) const
1528
+ {
1529
+ return request.execute(*this, std::move(handler));
1530
+ }
1531
+
1532
+ void
1533
+ cluster::execute(operations::remove_request_with_legacy_durability request,
1534
+ utils::movable_function<void(operations::remove_response)>&& handler) const
1535
+ {
1536
+ return request.execute(*this, std::move(handler));
1537
+ }
1538
+
1539
+ void
1540
+ cluster::execute(operations::increment_request_with_legacy_durability request,
1541
+ utils::movable_function<void(operations::increment_response)>&& handler) const
1542
+ {
1543
+ return request.execute(*this, std::move(handler));
1544
+ }
1545
+
1546
+ void
1547
+ cluster::execute(operations::decrement_request_with_legacy_durability request,
1548
+ utils::movable_function<void(operations::decrement_response)>&& handler) const
1549
+ {
1550
+ return request.execute(*this, std::move(handler));
1551
+ }
1552
+
1553
+ void
1554
+ cluster::execute(impl::lookup_in_replica_request request, utils::movable_function<void(impl::lookup_in_replica_response)>&& handler) const
1555
+ {
1556
+ return impl_->execute(std::move(request), std::move(handler));
1557
+ }
1558
+
1559
+ auto
1560
+ cluster::to_string() const -> std::string
1561
+ {
1562
+ return fmt::format(
1563
+ R"(#<cluster:{} impl={}>)", static_cast<const void*>(this), impl_ ? static_cast<const void*>(impl_.get()) : "(none)");
1564
+ }
220
1565
  } // namespace couchbase::core