couchbase 4.2.8-dev.1 → 4.2.9

Sign up to get free protection for your applications and to get access to all the features.
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