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,12 +15,14 @@
15
15
  */
16
16
 
17
17
  #include "staged_mutation.hxx"
18
+
18
19
  #include "attempt_context_impl.hxx"
19
20
  #include "core/cluster.hxx"
20
21
 
21
22
  #include "internal/transaction_fields.hxx"
22
23
  #include "internal/utils.hxx"
23
24
  #include "result.hxx"
25
+ #include "result_fmt.hxx"
24
26
 
25
27
  #include <asio/bind_executor.hpp>
26
28
  #include <asio/post.hpp>
@@ -124,16 +126,16 @@ staged_mutation_queue::extract_to(const std::string& prefix, core::operations::m
124
126
  void
125
127
  staged_mutation_queue::remove_any(const core::document_id& id)
126
128
  {
127
- std::lock_guard<std::mutex> lock(mutex_);
129
+ const std::lock_guard<std::mutex> lock(mutex_);
128
130
  auto new_end =
129
- std::remove_if(queue_.begin(), queue_.end(), [id](const staged_mutation& item) { return document_ids_equal(item.id(), id); });
131
+ std::remove_if(queue_.begin(), queue_.end(), [&id](const staged_mutation& item) { return document_ids_equal(item.id(), id); });
130
132
  queue_.erase(new_end, queue_.end());
131
133
  }
132
134
 
133
135
  staged_mutation*
134
136
  staged_mutation_queue::find_any(const core::document_id& id)
135
137
  {
136
- std::lock_guard<std::mutex> lock(mutex_);
138
+ const std::lock_guard<std::mutex> lock(mutex_);
137
139
  for (auto& item : queue_) {
138
140
  if (document_ids_equal(item.doc().id(), id)) {
139
141
  return &item;
@@ -209,7 +211,7 @@ staged_mutation_queue::commit(attempt_context_impl* ctx)
209
211
  auto future = barrier->get_future();
210
212
 
211
213
  try {
212
- auto timer = std::make_shared<asio::steady_timer>(ctx->cluster_ref()->io_context());
214
+ auto timer = std::make_shared<asio::steady_timer>(ctx->cluster_ref().io_context());
213
215
  async_constant_delay delay(timer);
214
216
 
215
217
  switch (item.type()) {
@@ -292,7 +294,7 @@ staged_mutation_queue::rollback(attempt_context_impl* ctx)
292
294
  auto future = barrier->get_future();
293
295
 
294
296
  try {
295
- auto timer = std::make_shared<asio::steady_timer>(ctx->cluster_ref()->io_context());
297
+ auto timer = std::make_shared<asio::steady_timer>(ctx->cluster_ref().io_context());
296
298
  async_exp_delay delay(timer);
297
299
 
298
300
  switch (item.type()) {
@@ -360,7 +362,7 @@ staged_mutation_queue::rollback_insert(attempt_context_impl* ctx,
360
362
  {
361
363
  CB_ATTEMPT_CTX_LOG_TRACE(ctx, "rolling back staged insert for {} with cas {}", item.doc().id(), item.doc().cas().value());
362
364
 
363
- asio::post(asio::bind_executor(ctx->cluster_ref()->io_context(), [this, callback = std::move(callback), ctx, &item, delay]() mutable {
365
+ asio::post(asio::bind_executor(ctx->cluster_ref().io_context(), [this, callback = std::move(callback), ctx, &item, delay]() mutable {
364
366
  try {
365
367
  auto ec = ctx->error_if_expired_and_not_in_overtime(STAGE_DELETE_INSERTED, item.doc().id().key());
366
368
  if (ec) {
@@ -379,7 +381,7 @@ staged_mutation_queue::rollback_insert(attempt_context_impl* ctx,
379
381
  req.access_deleted = true;
380
382
  req.cas = item.doc().cas();
381
383
  wrap_durable_request(req, ctx->overall().config());
382
- return ctx->cluster_ref()->execute(
384
+ return ctx->cluster_ref().execute(
383
385
  req, [this, callback = std::move(callback), ctx, &item, delay](const core::operations::mutate_in_response& resp) mutable {
384
386
  CB_ATTEMPT_CTX_LOG_TRACE(ctx, "mutate_in for {} with cas {}", item.doc().id(), item.doc().cas().value());
385
387
 
@@ -407,7 +409,7 @@ staged_mutation_queue::rollback_remove_or_replace(attempt_context_impl* ctx,
407
409
  {
408
410
  CB_ATTEMPT_CTX_LOG_TRACE(ctx, "rolling back staged remove/replace for {} with cas {}", item.doc().id(), item.doc().cas().value());
409
411
 
410
- asio::post(asio::bind_executor(ctx->cluster_ref()->io_context(), [this, callback = std::move(callback), ctx, &item, delay]() mutable {
412
+ asio::post(asio::bind_executor(ctx->cluster_ref().io_context(), [this, callback = std::move(callback), ctx, &item, delay]() mutable {
411
413
  try {
412
414
  auto ec = ctx->error_if_expired_and_not_in_overtime(STAGE_ROLLBACK_DOC, item.doc().id().key());
413
415
  if (ec) {
@@ -425,7 +427,7 @@ staged_mutation_queue::rollback_remove_or_replace(attempt_context_impl* ctx,
425
427
  .specs();
426
428
  req.cas = item.doc().cas();
427
429
  wrap_durable_request(req, ctx->overall().config());
428
- return ctx->cluster_ref()->execute(
430
+ return ctx->cluster_ref().execute(
429
431
  req, [this, callback = std::move(callback), ctx, &item, delay](const core::operations::mutate_in_response& resp) mutable {
430
432
  auto res = result::create_from_subdoc_response(resp);
431
433
  try {
@@ -455,7 +457,7 @@ staged_mutation_queue::commit_doc(attempt_context_impl* ctx,
455
457
  ctx, "commit doc {}, cas_zero_mode {}, ambiguity_resolution_mode {}", item.doc().id(), cas_zero_mode, ambiguity_resolution_mode);
456
458
 
457
459
  asio::post(asio::bind_executor(
458
- ctx->cluster_ref()->io_context(),
460
+ ctx->cluster_ref().io_context(),
459
461
  [this, callback = std::move(callback), ctx, &item, delay, cas_zero_mode, ambiguity_resolution_mode]() mutable {
460
462
  try {
461
463
  ctx->check_expiry_during_commit_or_rollback(STAGE_COMMIT_DOC, std::optional<const std::string>(item.doc().id().key()));
@@ -472,7 +474,7 @@ staged_mutation_queue::commit_doc(attempt_context_impl* ctx,
472
474
  core::operations::insert_request req{ item.doc().id(), item.content() };
473
475
  req.flags = couchbase::codec::codec_flags::json_common_flags;
474
476
  wrap_durable_request(req, ctx->overall().config());
475
- return ctx->cluster_ref()->execute(
477
+ return ctx->cluster_ref().execute(
476
478
  req,
477
479
  [this, callback = std::move(callback), ctx, &item, delay, ambiguity_resolution_mode, cas_zero_mode](
478
480
  const core::operations::insert_response& resp) mutable {
@@ -498,7 +500,7 @@ staged_mutation_queue::commit_doc(attempt_context_impl* ctx,
498
500
  req.store_semantics = couchbase::store_semantics::replace;
499
501
  req.cas = couchbase::cas(cas_zero_mode ? 0 : item.doc().cas().value());
500
502
  wrap_durable_request(req, ctx->overall().config());
501
- return ctx->cluster_ref()->execute(
503
+ return ctx->cluster_ref().execute(
502
504
  req,
503
505
  [this, callback = std::move(callback), ctx, &item, delay, ambiguity_resolution_mode, cas_zero_mode](
504
506
  const core::operations::mutate_in_response resp) mutable {
@@ -527,7 +529,7 @@ staged_mutation_queue::remove_doc(attempt_context_impl* ctx,
527
529
  {
528
530
  CB_ATTEMPT_CTX_LOG_TRACE(ctx, "remove doc {}", item.doc().id());
529
531
 
530
- asio::post(asio::bind_executor(ctx->cluster_ref()->io_context(), [this, callback = std::move(callback), ctx, &item, delay]() mutable {
532
+ asio::post(asio::bind_executor(ctx->cluster_ref().io_context(), [this, callback = std::move(callback), ctx, &item, delay]() mutable {
531
533
  try {
532
534
  ctx->check_expiry_during_commit_or_rollback(STAGE_REMOVE_DOC, std::optional<const std::string>(item.doc().id().key()));
533
535
  auto ec = ctx->hooks_.before_doc_removed(ctx, item.doc().id().key());
@@ -536,7 +538,7 @@ staged_mutation_queue::remove_doc(attempt_context_impl* ctx,
536
538
  }
537
539
  core::operations::remove_request req{ item.doc().id() };
538
540
  wrap_durable_request(req, ctx->overall().config());
539
- return ctx->cluster_ref()->execute(
541
+ return ctx->cluster_ref().execute(
540
542
  req, [this, callback = std::move(callback), ctx, &item, delay](core::operations::remove_response resp) mutable {
541
543
  auto res = result::create_from_mutation_response(resp);
542
544
  try {
@@ -32,7 +32,7 @@ transaction_context::transaction_context(transactions& txns, const couchbase::tr
32
32
  , config_(config.apply(txns.config()))
33
33
  , deferred_elapsed_(0)
34
34
  , cleanup_(txns.cleanup())
35
- , delay_(new exp_delay(std::chrono::milliseconds(1), std::chrono::milliseconds(100), 2 * config_.expiration_time))
35
+ , delay_(new exp_delay(std::chrono::milliseconds(1), std::chrono::milliseconds(100), 2 * config_.timeout))
36
36
  {
37
37
  // add metadata_collection to cleanup, if present
38
38
  if (config_.metadata_collection) {
@@ -54,7 +54,7 @@ transaction_context::remaining() const
54
54
  {
55
55
  const auto& now = std::chrono::steady_clock::now();
56
56
  auto expired_nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(now - start_time_client_) + deferred_elapsed_;
57
- return config_.expiration_time - expired_nanos;
57
+ return config_.timeout - expired_nanos;
58
58
  }
59
59
 
60
60
  [[nodiscard]] bool
@@ -64,7 +64,7 @@ transaction_context::has_expired_client_side()
64
64
  const auto& now = std::chrono::steady_clock::now();
65
65
  auto expired_nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(now - start_time_client_) + deferred_elapsed_;
66
66
  auto expired_millis = std::chrono::duration_cast<std::chrono::milliseconds>(expired_nanos);
67
- bool is_expired = expired_nanos > config_.expiration_time;
67
+ bool is_expired = expired_nanos > config_.timeout;
68
68
  if (is_expired) {
69
69
  CB_ATTEMPT_CTX_LOG_INFO(current_attempt_context_,
70
70
  "has expired client side (now={}ns, start={}ns, deferred_elapsed={}ns, expired={}ns ({}ms), config={}ms)",
@@ -73,7 +73,7 @@ transaction_context::has_expired_client_side()
73
73
  deferred_elapsed_.count(),
74
74
  expired_nanos.count(),
75
75
  expired_millis.count(),
76
- std::chrono::duration_cast<std::chrono::milliseconds>(config_.expiration_time).count());
76
+ std::chrono::duration_cast<std::chrono::milliseconds>(config_.timeout).count());
77
77
  }
78
78
  return is_expired;
79
79
  }
@@ -81,7 +81,7 @@ transaction_context::has_expired_client_side()
81
81
  void
82
82
  transaction_context::after_delay(std::chrono::milliseconds delay, std::function<void()> fn)
83
83
  {
84
- auto timer = std::make_shared<asio::steady_timer>(this->transactions_.cluster_ref()->io_context());
84
+ auto timer = std::make_shared<asio::steady_timer>(this->transactions_.cluster_ref().io_context());
85
85
  timer->expires_after(delay);
86
86
  timer->async_wait([timer, fn](std::error_code) {
87
87
  // have to always call the function, even if timer was canceled.
@@ -92,7 +92,7 @@ transaction_context::after_delay(std::chrono::milliseconds delay, std::function<
92
92
  void
93
93
  transaction_context::new_attempt_context(async_attempt_context::VoidCallback&& cb)
94
94
  {
95
- asio::post(transactions_.cluster_ref()->io_context(), [this, cb = std::move(cb)]() {
95
+ asio::post(transactions_.cluster_ref().io_context(), [this, cb = std::move(cb)]() {
96
96
  // the first time we call the delay, it just records an end time. After that, it
97
97
  // actually delays.
98
98
  try {
@@ -0,0 +1,48 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2021-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include <couchbase/transactions/transaction_keyspace.hxx>
19
+
20
+ #include <couchbase/collection.hxx>
21
+ #include <couchbase/scope.hxx>
22
+
23
+ namespace couchbase::transactions
24
+ {
25
+ transaction_keyspace::transaction_keyspace(std::string bucket_name, std::string scope_name, std::string collection_name)
26
+ : bucket(std::move(bucket_name))
27
+ , scope(std::move(scope_name))
28
+ , collection(std::move(collection_name))
29
+ {
30
+ if (scope.empty()) {
31
+ scope = couchbase::scope::default_name;
32
+ }
33
+ if (collection.empty()) {
34
+ collection = couchbase::collection::default_name;
35
+ }
36
+ }
37
+
38
+ transaction_keyspace::transaction_keyspace(const std::string& bucket_name)
39
+ : transaction_keyspace{ bucket_name, couchbase::scope::default_name, couchbase::collection::default_name }
40
+ {
41
+ }
42
+
43
+ bool
44
+ transaction_keyspace::valid()
45
+ {
46
+ return !bucket.empty() && !scope.empty() && !collection.empty();
47
+ }
48
+ } // namespace couchbase::transactions
@@ -257,6 +257,7 @@ struct fmt::formatter<couchbase::core::transactions::transaction_links> {
257
257
  r.atr_scope_name().value_or("none"),
258
258
  r.atr_collection_name().value_or("none"),
259
259
  r.atr_id().value_or("none"),
260
+ r.staged_transaction_id().value_or("none"),
260
261
  r.staged_attempt_id().value_or("none"),
261
262
  r.staged_operation_id().value_or("none"),
262
263
  r.crc32_of_staging().value_or("none"));
@@ -13,9 +13,12 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+
17
+ #include <couchbase/collection.hxx>
18
+ #include <couchbase/transactions/transaction_options.hxx>
19
+
16
20
  #include <core/transactions/attempt_context_testing_hooks.hxx>
17
21
  #include <core/transactions/cleanup_testing_hooks.hxx>
18
- #include <couchbase/transactions/transaction_options.hxx>
19
22
 
20
23
  namespace couchbase::transactions
21
24
  {
@@ -27,12 +30,66 @@ transaction_options::apply(const transactions_config::built& conf) const
27
30
  query_config.scan_consistency = *scan_consistency_;
28
31
  }
29
32
  return { durability_.value_or(conf.level),
30
- expiration_time_.value_or(conf.expiration_time),
31
- kv_timeout_ ? kv_timeout_ : conf.kv_timeout,
33
+ timeout_.value_or(conf.timeout),
32
34
  attempt_context_hooks_ ? attempt_context_hooks_ : conf.attempt_context_hooks,
33
35
  cleanup_hooks_ ? cleanup_hooks_ : conf.cleanup_hooks,
34
36
  metadata_collection_ ? metadata_collection_ : conf.metadata_collection,
35
37
  query_config,
36
38
  conf.cleanup_config };
37
39
  }
38
- } // namespace couchbase::transactions
40
+
41
+ transaction_options&
42
+ transaction_options::test_factories(std::shared_ptr<core::transactions::attempt_context_testing_hooks> hooks,
43
+ std::shared_ptr<core::transactions::cleanup_testing_hooks> cleanup_hooks)
44
+ {
45
+ attempt_context_hooks_ = hooks;
46
+ cleanup_hooks_ = cleanup_hooks;
47
+ return *this;
48
+ }
49
+
50
+ std::optional<transaction_keyspace>
51
+ transaction_options::metadata_collection() const
52
+ {
53
+ return metadata_collection_;
54
+ }
55
+
56
+ transaction_options&
57
+ transaction_options::durability_level(couchbase::durability_level level)
58
+ {
59
+ durability_ = level;
60
+ return *this;
61
+ }
62
+
63
+ std::optional<couchbase::durability_level>
64
+ transaction_options::durability_level() const
65
+ {
66
+ return durability_;
67
+ }
68
+
69
+ transaction_options&
70
+ transaction_options::scan_consistency(query_scan_consistency scan_consistency)
71
+ {
72
+ scan_consistency_ = scan_consistency;
73
+ return *this;
74
+ }
75
+
76
+ std::optional<query_scan_consistency>
77
+ transaction_options::scan_consistency() const
78
+ {
79
+ return scan_consistency_;
80
+ }
81
+
82
+ std::optional<std::chrono::nanoseconds>
83
+ transaction_options::timeout()
84
+ {
85
+ return timeout_;
86
+ }
87
+
88
+ transaction_options&
89
+ transaction_options::metadata_collection(const couchbase::collection& coll)
90
+ {
91
+ metadata_collection_.emplace(coll.bucket_name(), coll.scope_name(), coll.name());
92
+ return *this;
93
+ }
94
+
95
+ } // namespace couchbase::transactions
@@ -17,8 +17,9 @@
17
17
  #include "attempt_context_impl.hxx"
18
18
 
19
19
  #include "core/cluster.hxx"
20
-
20
+ #include "core/meta/version.hxx"
21
21
  #include "core/transactions.hxx"
22
+
22
23
  #include "internal/exceptions_internal.hxx"
23
24
  #include "internal/logging.hxx"
24
25
  #include "internal/transaction_context.hxx"
@@ -27,13 +28,13 @@
27
28
 
28
29
  namespace couchbase::core::transactions
29
30
  {
30
- transactions::transactions(std::shared_ptr<core::cluster> cluster, const couchbase::transactions::transactions_config& config)
31
- : transactions(cluster, config.build())
31
+ transactions::transactions(core::cluster cluster, const couchbase::transactions::transactions_config& config)
32
+ : transactions(std::move(cluster), config.build())
32
33
  {
33
34
  }
34
35
 
35
- transactions::transactions(std::shared_ptr<core::cluster> cluster, const couchbase::transactions::transactions_config::built& config)
36
- : cluster_(cluster)
36
+ transactions::transactions(core::cluster cluster, const couchbase::transactions::transactions_config::built& config)
37
+ : cluster_(std::move(cluster))
37
38
  , config_(config)
38
39
  , cleanup_(new transactions_cleanup(cluster_, config_))
39
40
  {
@@ -48,7 +49,7 @@ transactions::transactions(std::shared_ptr<core::cluster> cluster, const couchba
48
49
  auto barrier = std::make_shared<std::promise<std::error_code>>();
49
50
  auto f = barrier->get_future();
50
51
  std::atomic<bool> callback_called{ false };
51
- cluster_->open_bucket(config_.metadata_collection->bucket, [&callback_called, barrier](std::error_code ec) {
52
+ cluster_.open_bucket(config_.metadata_collection->bucket, [&callback_called, barrier](std::error_code ec) {
52
53
  if (callback_called.load()) {
53
54
  return;
54
55
  }
@@ -59,7 +60,7 @@ transactions::transactions(std::shared_ptr<core::cluster> cluster, const couchba
59
60
  if (err) {
60
61
  auto err_msg =
61
62
  fmt::format("error opening metadata_collection bucket '{}' specified in the config!", config_.metadata_collection->bucket);
62
- CB_TXN_LOG_DEBUG(err_msg);
63
+ CB_TXN_LOG_DEBUG("{}", err_msg);
63
64
  throw std::runtime_error(err_msg);
64
65
  }
65
66
  }
@@ -76,7 +77,7 @@ wrap_run(transactions& txns, const couchbase::transactions::transaction_options&
76
77
  while (attempts++ < max_attempts) {
77
78
  // NOTE: new_attempt_context has the exponential backoff built in. So, after
78
79
  // the first time it is called, it has a 1ms delay, then 2ms, etc... capped at 100ms
79
- // until (for now) a timeout is reached (2x the expiration_time). Soon, will build in
80
+ // until (for now) a timeout is reached (2x the timeout). Soon, will build in
80
81
  // a max attempts instead. In any case, the timeout occurs in the logic - adding
81
82
  // a max attempts or timeout is just in case a bug prevents timeout, etc...
82
83
  overall.new_attempt_context();
@@ -26,8 +26,8 @@
26
26
  #include "internal/transactions_cleanup.hxx"
27
27
  #include "internal/utils.hxx"
28
28
 
29
- #include <algorithm>
30
- #include <chrono>
29
+ #include <couchbase/fmt/transaction_keyspace.hxx>
30
+
31
31
  #include <functional>
32
32
 
33
33
  namespace couchbase::core::transactions
@@ -41,9 +41,8 @@ transactions_cleanup_attempt::transactions_cleanup_attempt(const atr_cleanup_ent
41
41
  {
42
42
  }
43
43
 
44
- transactions_cleanup::transactions_cleanup(std::shared_ptr<core::cluster> cluster,
45
- const couchbase::transactions::transactions_config::built& config)
46
- : cluster_(cluster)
44
+ transactions_cleanup::transactions_cleanup(core::cluster cluster, const couchbase::transactions::transactions_config::built& config)
45
+ : cluster_(std::move(cluster))
47
46
  , config_(config)
48
47
  , client_uuid_(uid_generator::next())
49
48
  , running_(config.cleanup_config.cleanup_client_attempts || config.cleanup_config.cleanup_lost_attempts)
@@ -254,8 +253,7 @@ transactions_cleanup::create_client_record(const couchbase::transactions::transa
254
253
  if (ec) {
255
254
  throw client_error(*ec, "client_record_before_create hook raised error");
256
255
  }
257
- cluster_->execute(
258
- req, [barrier](core::operations::mutate_in_response resp) { barrier->set_value(result::create_from_subdoc_response(resp)); });
256
+ cluster_.execute(req, [barrier](auto&& resp) { barrier->set_value(result::create_from_subdoc_response(resp)); });
259
257
  wrap_operation_future(f);
260
258
 
261
259
  } catch (const client_error& e) {
@@ -285,15 +283,13 @@ transactions_cleanup::get_active_clients(const couchbase::transactions::transact
285
283
  lookup_in_specs::get(subdoc::lookup_in_macro::vbucket).xattr(),
286
284
  }
287
285
  .specs();
288
- wrap_request(req, config_);
289
286
  auto barrier = std::make_shared<std::promise<result>>();
290
287
  auto f = barrier->get_future();
291
288
  auto ec = config_.cleanup_hooks->client_record_before_get(keyspace.bucket);
292
289
  if (ec) {
293
290
  throw client_error(*ec, "client_record_before_get hook raised error");
294
291
  }
295
- cluster_->execute(
296
- req, [barrier](core::operations::lookup_in_response resp) { barrier->set_value(result::create_from_subdoc_response(resp)); });
292
+ cluster_.execute(req, [barrier](auto&& resp) { barrier->set_value(result::create_from_subdoc_response(resp)); });
297
293
  auto res = wrap_operation_future(f);
298
294
 
299
295
  std::vector<std::string> active_client_uids;
@@ -375,9 +371,8 @@ transactions_cleanup::get_active_clients(const couchbase::transactions::transact
375
371
  auto mutate_barrier = std::make_shared<std::promise<result>>();
376
372
  auto mutate_f = mutate_barrier->get_future();
377
373
  CB_LOST_ATTEMPT_CLEANUP_LOG_TRACE("updating record");
378
- cluster_->execute(mutate_req, [mutate_barrier](core::operations::mutate_in_response resp) {
379
- mutate_barrier->set_value(result::create_from_subdoc_response(resp));
380
- });
374
+ cluster_.execute(mutate_req,
375
+ [mutate_barrier](auto&& resp) { mutate_barrier->set_value(result::create_from_subdoc_response(resp)); });
381
376
  res = wrap_operation_future(mutate_f);
382
377
 
383
378
  // just update the cas, and return the details
@@ -420,9 +415,7 @@ transactions_cleanup::remove_client_record_from_all_buckets(const std::string& u
420
415
  wrap_durable_request(req, config_);
421
416
  auto barrier = std::make_shared<std::promise<result>>();
422
417
  auto f = barrier->get_future();
423
- cluster_->execute(req, [barrier](core::operations::mutate_in_response resp) {
424
- barrier->set_value(result::create_from_subdoc_response(resp));
425
- });
418
+ cluster_.execute(req, [barrier](auto&& resp) { barrier->set_value(result::create_from_subdoc_response(resp)); });
426
419
  wrap_operation_future(f);
427
420
  CB_LOST_ATTEMPT_CLEANUP_LOG_DEBUG("removed {} from {}", uuid, keyspace);
428
421
  } catch (const client_error& e) {
@@ -26,7 +26,7 @@ namespace couchbase::transactions
26
26
 
27
27
  transactions_config::transactions_config()
28
28
  : level_(couchbase::durability_level::majority)
29
- , expiration_time_(std::chrono::seconds(15))
29
+ , timeout_(std::chrono::seconds(15))
30
30
  , attempt_context_hooks_(new core::transactions::attempt_context_testing_hooks())
31
31
  , cleanup_hooks_(new core::transactions::cleanup_testing_hooks())
32
32
  {
@@ -36,7 +36,7 @@ transactions_config::~transactions_config() = default;
36
36
 
37
37
  transactions_config::transactions_config(transactions_config&& c) noexcept
38
38
  : level_(c.level_)
39
- , expiration_time_(c.expiration_time_)
39
+ , timeout_(c.timeout_)
40
40
  , attempt_context_hooks_(c.attempt_context_hooks_)
41
41
  , cleanup_hooks_(c.cleanup_hooks_)
42
42
  , metadata_collection_(std::move(c.metadata_collection_))
@@ -47,7 +47,7 @@ transactions_config::transactions_config(transactions_config&& c) noexcept
47
47
 
48
48
  transactions_config::transactions_config(const transactions_config& config)
49
49
  : level_(config.durability_level())
50
- , expiration_time_(config.expiration_time())
50
+ , timeout_(config.timeout())
51
51
  , attempt_context_hooks_(std::make_shared<core::transactions::attempt_context_testing_hooks>(config.attempt_context_hooks()))
52
52
  , cleanup_hooks_(std::make_shared<core::transactions::cleanup_testing_hooks>(config.cleanup_hooks()))
53
53
  , metadata_collection_(config.metadata_collection())
@@ -61,7 +61,7 @@ transactions_config::operator=(const transactions_config& c)
61
61
  {
62
62
  if (this != &c) {
63
63
  level_ = c.level_;
64
- expiration_time_ = c.expiration_time_;
64
+ timeout_ = c.timeout_;
65
65
  attempt_context_hooks_ = c.attempt_context_hooks_;
66
66
  cleanup_hooks_ = c.cleanup_hooks_;
67
67
  query_config_ = c.query_config_;
@@ -74,8 +74,9 @@ transactions_config::operator=(const transactions_config& c)
74
74
  transactions_config::built
75
75
  transactions_config::build() const
76
76
  {
77
- return { level_, expiration_time_, kv_timeout_, attempt_context_hooks_,
78
- cleanup_hooks_, metadata_collection_, query_config_.build(), cleanup_config_.build() };
77
+ return {
78
+ level_, timeout_, attempt_context_hooks_, cleanup_hooks_, metadata_collection_, query_config_.build(), cleanup_config_.build()
79
+ };
79
80
  }
80
81
 
81
82
  } // namespace couchbase::transactions
@@ -25,6 +25,7 @@
25
25
  #include "transactions/attempt_context.hxx"
26
26
  #include "transactions/exceptions.hxx"
27
27
 
28
+ #include "core/cluster.hxx"
28
29
  #include "core/logger/logger.hxx"
29
30
 
30
31
  #include <spdlog/common.h>
@@ -134,8 +135,8 @@ class transactions : public couchbase::transactions::transactions
134
135
  * @param cluster The cluster to use for the transactions.
135
136
  * @param config The configuration parameters to use for the transactions.
136
137
  */
137
- transactions(std::shared_ptr<core::cluster> cluster, const couchbase::transactions::transactions_config::built& config);
138
- transactions(std::shared_ptr<core::cluster> cluster, const couchbase::transactions::transactions_config& config);
138
+ transactions(core::cluster cluster, const couchbase::transactions::transactions_config::built& config);
139
+ transactions(core::cluster cluster, const couchbase::transactions::transactions_config& config);
139
140
 
140
141
  /**
141
142
  * @brief Destructor
@@ -239,17 +240,17 @@ class transactions : public couchbase::transactions::transactions
239
240
  *
240
241
  * @return Ref to the cluster used by this transaction object.
241
242
  */
242
- [[nodiscard]] std::shared_ptr<core::cluster> cluster_ref()
243
+ [[nodiscard]] core::cluster& cluster_ref()
243
244
  {
244
245
  return cluster_;
245
246
  }
246
247
 
247
248
  private:
248
- std::shared_ptr<core::cluster> cluster_;
249
+ core::cluster cluster_;
249
250
  couchbase::transactions::transactions_config::built config_;
250
251
  std::unique_ptr<transactions_cleanup> cleanup_;
251
252
  const std::size_t max_attempts_{ 1000 };
252
253
  const std::chrono::milliseconds min_retry_delay_{ 1 };
253
254
  };
254
255
  } // namespace transactions
255
- } // namespace couchbase::core
256
+ } // namespace couchbase::core
@@ -46,16 +46,17 @@ join_strings(const Range& values, const std::string& sep)
46
46
  * Joins a list of objects together using fmt:: for formatting.
47
47
  */
48
48
  template<typename Range>
49
+
49
50
  std::string
50
- join_strings_fmt(const std::string& item_fmt, const Range& values, const std::string& sep)
51
+ join_strings_fmt(const Range& values, const std::string& sep)
51
52
  {
52
53
  std::stringstream stream;
53
54
  auto sentinel = std::end(values);
54
55
  if (auto it = std::begin(values); it != sentinel) {
55
- stream << fmt::format(item_fmt, *it);
56
+ stream << fmt::format("{}", *it);
56
57
  ++it;
57
58
  while (it != sentinel) {
58
- stream << sep << fmt::format(item_fmt, *it);
59
+ stream << sep << fmt::format("{}", *it);
59
60
  ++it;
60
61
  }
61
62
  }
@@ -26,11 +26,11 @@ template<typename Request>
26
26
  static bool
27
27
  check_query_management_request(const Request& req)
28
28
  {
29
- // if there is a query_context, then bucket, scope should not be specified, but collection should be.
30
- // collection should be.
29
+ // if there is a query_context, then bucket and scope will be ignored
31
30
  if (req.query_ctx.has_value()) {
32
- return !req.collection_name.empty() && req.bucket_name.empty() && req.scope_name.empty();
31
+ return true;
33
32
  }
33
+
34
34
  // otherwise, both scope and collection must be specified, if one is
35
35
  // and bucket _must_ be there as well.
36
36
  return !req.bucket_name.empty() &&
@@ -52,4 +52,4 @@ build_keyspace(const Request& req)
52
52
  return fmt::format("{}:`{}`.`{}`.`{}`", req.namespace_id, req.bucket_name, req.scope_name, req.collection_name);
53
53
  }
54
54
 
55
- } // namespace couchbase::core::utils
55
+ } // namespace couchbase::core::utils
@@ -0,0 +1,44 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/common_options.hxx>
21
+ #include <couchbase/manager_error_context.hxx>
22
+
23
+ #include <functional>
24
+ #include <memory>
25
+ #include <optional>
26
+ #include <string>
27
+
28
+ namespace couchbase
29
+ {
30
+ struct allow_querying_search_index_options : public common_options<allow_querying_search_index_options> {
31
+ public:
32
+ struct built : public common_options<allow_querying_search_index_options>::built {
33
+ };
34
+
35
+ [[nodiscard]] auto build() const -> built
36
+ {
37
+ return { build_common_options() };
38
+ }
39
+
40
+ private:
41
+ };
42
+
43
+ using allow_querying_search_index_handler = std::function<void(couchbase::manager_error_context)>;
44
+ } // namespace couchbase