couchbase 4.2.8 → 4.2.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (370) 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 +401 -424
  5. package/deps/couchbase-cxx-client/cmake/CompilerWarnings.cmake +7 -3
  6. package/deps/couchbase-cxx-client/cmake/OpenSSL.cmake +1 -0
  7. package/deps/couchbase-cxx-client/core/agent_config.hxx +1 -1
  8. package/deps/couchbase-cxx-client/core/agent_group.cxx +0 -1
  9. package/deps/couchbase-cxx-client/core/agent_group.hxx +9 -0
  10. package/deps/couchbase-cxx-client/core/agent_group_config.hxx +1 -1
  11. package/deps/couchbase-cxx-client/core/bucket.cxx +74 -10
  12. package/deps/couchbase-cxx-client/core/bucket.hxx +4 -2
  13. package/deps/couchbase-cxx-client/core/cluster.cxx +1491 -108
  14. package/deps/couchbase-cxx-client/core/cluster.hxx +183 -473
  15. package/deps/couchbase-cxx-client/core/cluster_agent_config.hxx +1 -1
  16. package/deps/couchbase-cxx-client/core/cluster_options.cxx +12 -2
  17. package/deps/couchbase-cxx-client/core/cluster_options.hxx +9 -8
  18. package/deps/couchbase-cxx-client/core/config_profiles.cxx +2 -2
  19. package/deps/couchbase-cxx-client/core/config_profiles.hxx +1 -1
  20. package/deps/couchbase-cxx-client/core/core_sdk_shim.cxx +1 -2
  21. package/deps/couchbase-cxx-client/core/core_sdk_shim.hxx +3 -2
  22. package/deps/couchbase-cxx-client/core/diagnostics.hxx +0 -1
  23. package/deps/couchbase-cxx-client/core/dispatcher.cxx +2 -2
  24. package/deps/couchbase-cxx-client/core/impl/analytics.cxx +38 -76
  25. package/deps/couchbase-cxx-client/core/impl/analytics.hxx +40 -0
  26. package/deps/couchbase-cxx-client/core/impl/analytics_index_manager.cxx +820 -0
  27. package/deps/couchbase-cxx-client/core/impl/binary_collection.cxx +403 -0
  28. package/deps/couchbase-cxx-client/core/impl/bucket.cxx +102 -0
  29. package/deps/couchbase-cxx-client/core/impl/bucket_manager.cxx +433 -0
  30. package/deps/couchbase-cxx-client/core/impl/cluster.cxx +299 -44
  31. package/deps/couchbase-cxx-client/core/impl/collection.cxx +1384 -0
  32. package/deps/couchbase-cxx-client/core/impl/collection_manager.cxx +306 -0
  33. package/deps/couchbase-cxx-client/core/impl/configuration_profiles_registry.cxx +3 -1
  34. package/deps/couchbase-cxx-client/core/impl/diagnostics.cxx +294 -0
  35. package/deps/couchbase-cxx-client/core/impl/diagnostics.hxx +39 -0
  36. package/deps/couchbase-cxx-client/core/impl/dns_srv_tracker.cxx +2 -0
  37. package/deps/couchbase-cxx-client/core/{operations/mcbp_noop.cxx → impl/doc_id_query.cxx} +19 -15
  38. package/deps/couchbase-cxx-client/core/impl/key_value_error_category.cxx +4 -2
  39. package/deps/couchbase-cxx-client/core/impl/lookup_in_all_replicas.hxx +0 -10
  40. package/deps/couchbase-cxx-client/core/impl/lookup_in_any_replica.hxx +0 -10
  41. package/deps/couchbase-cxx-client/core/impl/observe_poll.cxx +24 -17
  42. package/deps/couchbase-cxx-client/core/impl/observe_poll.hxx +1 -1
  43. package/deps/couchbase-cxx-client/core/impl/query.cxx +45 -68
  44. package/deps/couchbase-cxx-client/core/impl/query.hxx +34 -0
  45. package/deps/couchbase-cxx-client/core/impl/query_index_manager.cxx +628 -0
  46. package/deps/couchbase-cxx-client/core/impl/scope.cxx +187 -0
  47. package/deps/couchbase-cxx-client/core/impl/search.cxx +81 -57
  48. package/deps/couchbase-cxx-client/core/impl/search.hxx +45 -0
  49. package/deps/couchbase-cxx-client/core/impl/search_index_manager.cxx +712 -0
  50. package/deps/couchbase-cxx-client/core/impl/search_request.cxx +139 -0
  51. package/deps/couchbase-cxx-client/core/impl/search_row_location.cxx +12 -0
  52. package/deps/couchbase-cxx-client/core/impl/search_sort_geo_distance.cxx +87 -0
  53. package/deps/couchbase-cxx-client/core/impl/vector_query.cxx +42 -0
  54. package/deps/couchbase-cxx-client/core/impl/vector_search.cxx +40 -0
  55. package/deps/couchbase-cxx-client/core/impl/with_legacy_durability.hxx +23 -25
  56. package/deps/couchbase-cxx-client/core/io/dns_config.cxx +28 -0
  57. package/deps/couchbase-cxx-client/core/io/dns_config.hxx +6 -25
  58. package/deps/couchbase-cxx-client/core/io/http_session.hxx +6 -3
  59. package/deps/couchbase-cxx-client/core/io/http_session_manager.hxx +9 -1
  60. package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +1 -1
  61. package/deps/couchbase-cxx-client/core/io/mcbp_message.hxx +3 -2
  62. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +75 -53
  63. package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +3 -1
  64. package/deps/couchbase-cxx-client/core/logger/logger.cxx +1 -1
  65. package/deps/couchbase-cxx-client/core/logger/logger.hxx +4 -4
  66. package/deps/couchbase-cxx-client/core/management/bucket_settings.hxx +1 -1
  67. package/deps/couchbase-cxx-client/core/mcbp/packet.cxx +1 -1
  68. package/deps/couchbase-cxx-client/core/mcbp/queue_callback.hxx +1 -1
  69. package/deps/couchbase-cxx-client/core/meta/features.hxx +38 -0
  70. package/deps/couchbase-cxx-client/core/operations/document_query.cxx +23 -2
  71. package/deps/couchbase-cxx-client/core/operations/document_query.hxx +1 -1
  72. package/deps/couchbase-cxx-client/core/operations/document_search.cxx +37 -1
  73. package/deps/couchbase-cxx-client/core/operations/document_search.hxx +11 -0
  74. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_create.cxx +2 -0
  75. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_drop.cxx +2 -0
  76. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_create.cxx +2 -0
  77. package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_drop.cxx +2 -0
  78. package/deps/couchbase-cxx-client/core/operations/management/analytics_get_pending_mutations.cxx +2 -0
  79. package/deps/couchbase-cxx-client/core/operations/management/analytics_index_drop.cxx +2 -0
  80. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_connect.cxx +2 -0
  81. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_disconnect.cxx +2 -0
  82. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_drop.cxx +2 -0
  83. package/deps/couchbase-cxx-client/core/operations/management/analytics_link_get_all.cxx +2 -0
  84. package/deps/couchbase-cxx-client/core/operations/management/bucket_create.cxx +1 -1
  85. package/deps/couchbase-cxx-client/core/operations/management/bucket_describe.cxx +2 -0
  86. package/deps/couchbase-cxx-client/core/operations/management/bucket_drop.cxx +2 -0
  87. package/deps/couchbase-cxx-client/core/operations/management/bucket_flush.cxx +2 -0
  88. package/deps/couchbase-cxx-client/core/operations/management/bucket_get.cxx +2 -0
  89. package/deps/couchbase-cxx-client/core/operations/management/change_password.cxx +3 -1
  90. package/deps/couchbase-cxx-client/core/operations/management/collection_create.cxx +9 -6
  91. package/deps/couchbase-cxx-client/core/operations/management/collection_create.hxx +1 -1
  92. package/deps/couchbase-cxx-client/core/operations/management/collection_drop.cxx +2 -0
  93. package/deps/couchbase-cxx-client/core/operations/management/collection_update.cxx +9 -8
  94. package/deps/couchbase-cxx-client/core/operations/management/collection_update.hxx +1 -1
  95. package/deps/couchbase-cxx-client/core/operations/management/error_utils.cxx +9 -5
  96. package/deps/couchbase-cxx-client/core/operations/management/eventing_deploy_function.cxx +2 -0
  97. package/deps/couchbase-cxx-client/core/operations/management/eventing_drop_function.cxx +2 -0
  98. package/deps/couchbase-cxx-client/core/operations/management/eventing_get_function.cxx +2 -0
  99. package/deps/couchbase-cxx-client/core/operations/management/eventing_pause_function.cxx +2 -0
  100. package/deps/couchbase-cxx-client/core/operations/management/eventing_resume_function.cxx +2 -0
  101. package/deps/couchbase-cxx-client/core/operations/management/eventing_undeploy_function.cxx +2 -0
  102. package/deps/couchbase-cxx-client/core/operations/management/eventing_upsert_function.cxx +2 -0
  103. package/deps/couchbase-cxx-client/core/operations/management/group_drop.cxx +2 -0
  104. package/deps/couchbase-cxx-client/core/operations/management/group_get.cxx +2 -0
  105. package/deps/couchbase-cxx-client/core/operations/management/group_get_all.cxx +1 -1
  106. package/deps/couchbase-cxx-client/core/operations/management/query_index_build_deferred.hxx +2 -2
  107. package/deps/couchbase-cxx-client/core/operations/management/query_index_create.cxx +4 -1
  108. package/deps/couchbase-cxx-client/core/operations/management/query_index_drop.cxx +4 -1
  109. package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.cxx +1 -1
  110. package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.hxx +1 -1
  111. package/deps/couchbase-cxx-client/core/operations/management/scope_create.cxx +2 -0
  112. package/deps/couchbase-cxx-client/core/operations/management/scope_drop.cxx +2 -0
  113. package/deps/couchbase-cxx-client/core/operations/management/scope_get_all.cxx +2 -0
  114. package/deps/couchbase-cxx-client/core/operations/management/search_get_stats.cxx +4 -4
  115. package/deps/couchbase-cxx-client/core/operations/management/search_get_stats.hxx +4 -4
  116. package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.cxx +19 -1
  117. package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.hxx +3 -0
  118. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.cxx +23 -1
  119. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.hxx +3 -0
  120. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.cxx +23 -1
  121. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.hxx +3 -0
  122. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.cxx +23 -1
  123. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.hxx +3 -0
  124. package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.cxx +19 -1
  125. package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.hxx +3 -0
  126. package/deps/couchbase-cxx-client/core/operations/management/search_index_get.cxx +19 -1
  127. package/deps/couchbase-cxx-client/core/operations/management/search_index_get.hxx +2 -0
  128. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.cxx +39 -22
  129. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.hxx +3 -0
  130. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.cxx +20 -1
  131. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.hxx +3 -0
  132. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_stats.cxx +2 -0
  133. package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.cxx +19 -1
  134. package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.hxx +3 -0
  135. package/deps/couchbase-cxx-client/core/operations/management/view_index_drop.cxx +2 -0
  136. package/deps/couchbase-cxx-client/core/operations/management/view_index_get.cxx +2 -0
  137. package/deps/couchbase-cxx-client/core/operations/management/view_index_get_all.cxx +2 -0
  138. package/deps/couchbase-cxx-client/core/operations/management/view_index_upsert.cxx +2 -0
  139. package/deps/couchbase-cxx-client/core/operations.hxx +0 -1
  140. package/deps/couchbase-cxx-client/core/operations_fwd.hxx +260 -0
  141. package/deps/couchbase-cxx-client/core/origin.cxx +146 -5
  142. package/deps/couchbase-cxx-client/core/origin.hxx +30 -140
  143. package/deps/couchbase-cxx-client/core/protocol/cmd_cluster_map_change_notification.hxx +3 -3
  144. package/deps/couchbase-cxx-client/core/protocol/cmd_hello.hxx +5 -0
  145. package/deps/couchbase-cxx-client/core/protocol/cmd_observe_seqno.hxx +4 -4
  146. package/deps/couchbase-cxx-client/core/protocol/hello_feature.hxx +6 -0
  147. package/deps/couchbase-cxx-client/core/protocol/hello_feature_fmt.hxx +3 -0
  148. package/deps/couchbase-cxx-client/core/protocol/status.cxx +6 -0
  149. package/deps/couchbase-cxx-client/core/protocol/status.hxx +1 -0
  150. package/deps/couchbase-cxx-client/core/query_context.hxx +11 -7
  151. package/deps/couchbase-cxx-client/core/range_scan_orchestrator.cxx +1 -1
  152. package/deps/couchbase-cxx-client/core/topology/collections_manifest.hxx +1 -1
  153. package/deps/couchbase-cxx-client/core/topology/collections_manifest_json.hxx +1 -1
  154. package/deps/couchbase-cxx-client/core/topology/configuration.cxx +23 -0
  155. package/deps/couchbase-cxx-client/core/topology/configuration.hxx +8 -12
  156. package/deps/couchbase-cxx-client/core/topology/configuration_fmt.hxx +3 -3
  157. package/deps/couchbase-cxx-client/core/topology/configuration_json.hxx +2 -0
  158. package/deps/couchbase-cxx-client/core/topology/error_map.hxx +2 -2
  159. package/deps/couchbase-cxx-client/core/topology/error_map_json.hxx +4 -0
  160. package/deps/couchbase-cxx-client/core/transactions/active_transaction_record.cxx +58 -0
  161. package/deps/couchbase-cxx-client/core/transactions/active_transaction_record.hxx +5 -40
  162. package/deps/couchbase-cxx-client/core/transactions/async_attempt_context.cxx +30 -0
  163. package/deps/couchbase-cxx-client/core/transactions/atr_cleanup_entry.cxx +18 -18
  164. package/deps/couchbase-cxx-client/core/transactions/attempt_context.cxx +36 -0
  165. package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.cxx +39 -41
  166. package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.hxx +2 -2
  167. package/deps/couchbase-cxx-client/core/transactions/internal/atr_cleanup_entry.hxx +3 -1
  168. package/deps/couchbase-cxx-client/core/transactions/internal/atr_entry.hxx +2 -0
  169. package/deps/couchbase-cxx-client/core/transactions/internal/doc_record.cxx +32 -0
  170. package/deps/couchbase-cxx-client/core/transactions/internal/doc_record.hxx +4 -30
  171. package/deps/couchbase-cxx-client/core/transactions/internal/doc_record_fmt.hxx +41 -0
  172. package/deps/couchbase-cxx-client/core/transactions/internal/logging.hxx +17 -15
  173. package/deps/couchbase-cxx-client/core/transactions/internal/transaction_context.hxx +1 -1
  174. package/deps/couchbase-cxx-client/core/transactions/internal/transactions_cleanup.hxx +4 -4
  175. package/deps/couchbase-cxx-client/core/transactions/internal/utils.hxx +5 -13
  176. package/deps/couchbase-cxx-client/core/transactions/result.hxx +0 -26
  177. package/deps/couchbase-cxx-client/core/transactions/result_fmt.hxx +46 -0
  178. package/deps/couchbase-cxx-client/core/transactions/staged_mutation.cxx +16 -14
  179. package/deps/couchbase-cxx-client/core/transactions/transaction_context.cxx +6 -6
  180. package/deps/couchbase-cxx-client/core/transactions/transaction_keyspace.cxx +48 -0
  181. package/deps/couchbase-cxx-client/core/transactions/transaction_links.hxx +1 -0
  182. package/deps/couchbase-cxx-client/core/transactions/transaction_options.cxx +61 -4
  183. package/deps/couchbase-cxx-client/core/transactions/transactions.cxx +9 -8
  184. package/deps/couchbase-cxx-client/core/transactions/transactions_cleanup.cxx +9 -16
  185. package/deps/couchbase-cxx-client/core/transactions/transactions_config.cxx +7 -6
  186. package/deps/couchbase-cxx-client/core/transactions.hxx +6 -5
  187. package/deps/couchbase-cxx-client/core/utils/join_strings.hxx +4 -3
  188. package/deps/couchbase-cxx-client/core/utils/keyspace.hxx +4 -4
  189. package/deps/couchbase-cxx-client/core/vector_query_combination.hxx +23 -0
  190. package/deps/couchbase-cxx-client/couchbase/allow_querying_search_index_options.hxx +44 -0
  191. package/deps/couchbase-cxx-client/couchbase/analytics_index_manager.hxx +463 -0
  192. package/deps/couchbase-cxx-client/couchbase/analyze_document_options.hxx +44 -0
  193. package/deps/couchbase-cxx-client/couchbase/append_options.hxx +0 -24
  194. package/deps/couchbase-cxx-client/couchbase/behavior_options.hxx +1 -1
  195. package/deps/couchbase-cxx-client/couchbase/binary_collection.hxx +19 -115
  196. package/deps/couchbase-cxx-client/couchbase/bucket.hxx +42 -30
  197. package/deps/couchbase-cxx-client/couchbase/bucket_manager.hxx +8 -7
  198. package/deps/couchbase-cxx-client/couchbase/build_query_index_options.hxx +0 -1
  199. package/deps/couchbase-cxx-client/couchbase/cluster.hxx +151 -73
  200. package/deps/couchbase-cxx-client/couchbase/cluster_options.hxx +1 -27
  201. package/deps/couchbase-cxx-client/couchbase/codec/json_transcoder.hxx +1 -1
  202. package/deps/couchbase-cxx-client/couchbase/codec/raw_binary_transcoder.hxx +2 -1
  203. package/deps/couchbase-cxx-client/couchbase/codec/raw_json_transcoder.hxx +78 -0
  204. package/deps/couchbase-cxx-client/couchbase/codec/raw_string_transcoder.hxx +72 -0
  205. package/deps/couchbase-cxx-client/couchbase/collection.hxx +176 -386
  206. package/deps/couchbase-cxx-client/couchbase/collection_manager.hxx +8 -9
  207. package/deps/couchbase-cxx-client/couchbase/collection_query_index_manager.hxx +21 -24
  208. package/deps/couchbase-cxx-client/couchbase/connect_link_analytics_options.hxx +116 -0
  209. package/deps/couchbase-cxx-client/couchbase/create_bucket_options.hxx +3 -3
  210. package/deps/couchbase-cxx-client/couchbase/create_collection_options.hxx +32 -3
  211. package/deps/couchbase-cxx-client/couchbase/create_dataset_analytics_options.hxx +120 -0
  212. package/deps/couchbase-cxx-client/couchbase/create_dataverse_analytics_options.hxx +85 -0
  213. package/deps/couchbase-cxx-client/couchbase/create_index_analytics_options.hxx +103 -0
  214. package/deps/couchbase-cxx-client/couchbase/create_link_analytics_options.hxx +63 -0
  215. package/deps/couchbase-cxx-client/couchbase/decrement_options.hxx +0 -23
  216. package/deps/couchbase-cxx-client/couchbase/diagnostics_options.hxx +75 -0
  217. package/deps/couchbase-cxx-client/couchbase/diagnostics_result.hxx +124 -0
  218. package/deps/couchbase-cxx-client/couchbase/disallow_querying_search_index_options.hxx +43 -0
  219. package/deps/couchbase-cxx-client/couchbase/disconnect_link_analytics_options.hxx +105 -0
  220. package/deps/couchbase-cxx-client/couchbase/drop_dataset_analytics_options.hxx +103 -0
  221. package/deps/couchbase-cxx-client/couchbase/drop_dataverse_analytics_options.hxx +84 -0
  222. package/deps/couchbase-cxx-client/couchbase/drop_index_analytics_options.hxx +103 -0
  223. package/deps/couchbase-cxx-client/couchbase/drop_link_analytics_options.hxx +63 -0
  224. package/deps/couchbase-cxx-client/couchbase/drop_search_index_options.hxx +43 -0
  225. package/deps/couchbase-cxx-client/couchbase/endpoint_diagnostics.hxx +206 -0
  226. package/deps/couchbase-cxx-client/couchbase/endpoint_ping_report.hxx +205 -0
  227. package/deps/couchbase-cxx-client/couchbase/error_codes.hxx +22 -1
  228. package/deps/couchbase-cxx-client/couchbase/exists_options.hxx +0 -23
  229. package/deps/couchbase-cxx-client/couchbase/fmt/key_value_error_map_attribute.hxx +6 -0
  230. package/deps/couchbase-cxx-client/couchbase/fmt/key_value_status_code.hxx +3 -0
  231. package/deps/couchbase-cxx-client/couchbase/fmt/transaction_keyspace.hxx +37 -0
  232. package/deps/couchbase-cxx-client/couchbase/freeze_plan_search_index_options.hxx +43 -0
  233. package/deps/couchbase-cxx-client/couchbase/get_all_datasets_analytics_options.hxx +66 -0
  234. package/deps/couchbase-cxx-client/couchbase/get_all_indexes_analytics_options.hxx +65 -0
  235. package/deps/couchbase-cxx-client/couchbase/get_all_query_indexes_options.hxx +1 -4
  236. package/deps/couchbase-cxx-client/couchbase/get_all_replicas_options.hxx +0 -23
  237. package/deps/couchbase-cxx-client/couchbase/get_all_search_indexes_options.hxx +45 -0
  238. package/deps/couchbase-cxx-client/couchbase/get_and_lock_options.hxx +0 -24
  239. package/deps/couchbase-cxx-client/couchbase/get_and_touch_options.hxx +0 -24
  240. package/deps/couchbase-cxx-client/couchbase/get_any_replica_options.hxx +0 -23
  241. package/deps/couchbase-cxx-client/couchbase/get_indexed_search_index_options.hxx +43 -0
  242. package/deps/couchbase-cxx-client/couchbase/get_links_analytics_options.hxx +121 -0
  243. package/deps/couchbase-cxx-client/couchbase/get_options.hxx +1 -29
  244. package/deps/couchbase-cxx-client/couchbase/get_pending_mutations_analytics_options.hxx +67 -0
  245. package/deps/couchbase-cxx-client/couchbase/get_search_index_options.hxx +44 -0
  246. package/deps/couchbase-cxx-client/couchbase/increment_options.hxx +0 -23
  247. package/deps/couchbase-cxx-client/couchbase/insert_options.hxx +0 -24
  248. package/deps/couchbase-cxx-client/couchbase/key_value_error_map_attribute.hxx +12 -0
  249. package/deps/couchbase-cxx-client/couchbase/key_value_status_code.hxx +1 -0
  250. package/deps/couchbase-cxx-client/couchbase/lookup_in_options.hxx +0 -24
  251. package/deps/couchbase-cxx-client/couchbase/management/analytics_dataset.hxx +48 -0
  252. package/deps/couchbase-cxx-client/couchbase/management/analytics_index.hxx +48 -0
  253. package/deps/couchbase-cxx-client/couchbase/management/analytics_link.hxx +239 -0
  254. package/deps/couchbase-cxx-client/couchbase/management/collection_spec.hxx +1 -1
  255. package/deps/couchbase-cxx-client/couchbase/management/query_index.hxx +3 -3
  256. package/deps/couchbase-cxx-client/couchbase/management/search_index.hxx +40 -0
  257. package/deps/couchbase-cxx-client/couchbase/manager_error_context.hxx +0 -1
  258. package/deps/couchbase-cxx-client/couchbase/mutate_in_options.hxx +0 -24
  259. package/deps/couchbase-cxx-client/couchbase/network_options.hxx +1 -1
  260. package/deps/couchbase-cxx-client/couchbase/pause_ingest_search_index_options.hxx +43 -0
  261. package/deps/couchbase-cxx-client/couchbase/phrase_query.hxx +19 -0
  262. package/deps/couchbase-cxx-client/couchbase/ping_options.hxx +93 -0
  263. package/deps/couchbase-cxx-client/couchbase/ping_result.hxx +118 -0
  264. package/deps/couchbase-cxx-client/couchbase/prepend_options.hxx +0 -24
  265. package/deps/couchbase-cxx-client/couchbase/query_index_manager.hxx +99 -20
  266. package/deps/couchbase-cxx-client/couchbase/query_options.hxx +0 -21
  267. package/deps/couchbase-cxx-client/couchbase/remove_options.hxx +0 -23
  268. package/deps/couchbase-cxx-client/couchbase/replace_link_analytics_options.hxx +63 -0
  269. package/deps/couchbase-cxx-client/couchbase/replace_options.hxx +0 -24
  270. package/deps/couchbase-cxx-client/couchbase/resume_ingest_search_index_options.hxx +43 -0
  271. package/deps/couchbase-cxx-client/couchbase/scope.hxx +37 -53
  272. package/deps/couchbase-cxx-client/couchbase/scope_search_index_manager.hxx +291 -0
  273. package/deps/couchbase-cxx-client/couchbase/search_facet_result.hxx +1 -7
  274. package/deps/couchbase-cxx-client/couchbase/search_geo_distance_units.hxx +26 -0
  275. package/deps/couchbase-cxx-client/couchbase/search_index_manager.hxx +292 -0
  276. package/deps/couchbase-cxx-client/couchbase/search_request.hxx +120 -0
  277. package/deps/couchbase-cxx-client/couchbase/search_row_location.hxx +10 -0
  278. package/deps/couchbase-cxx-client/couchbase/search_sort_geo_distance.hxx +84 -0
  279. package/deps/couchbase-cxx-client/couchbase/security_options.hxx +1 -1
  280. package/deps/couchbase-cxx-client/couchbase/service_type.hxx +58 -0
  281. package/deps/couchbase-cxx-client/couchbase/touch_options.hxx +0 -24
  282. package/deps/couchbase-cxx-client/couchbase/tracing/request_tracer.hxx +1 -1
  283. package/deps/couchbase-cxx-client/couchbase/transactions/async_attempt_context.hxx +10 -7
  284. package/deps/couchbase-cxx-client/couchbase/transactions/attempt_context.hxx +10 -10
  285. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_keyspace.hxx +8 -58
  286. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_options.hxx +28 -70
  287. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_query_options.hxx +7 -2
  288. package/deps/couchbase-cxx-client/couchbase/transactions/transactions_cleanup_config.hxx +2 -1
  289. package/deps/couchbase-cxx-client/couchbase/transactions/transactions_config.hxx +11 -38
  290. package/deps/couchbase-cxx-client/couchbase/unfreeze_plan_search_index_options.hxx +43 -0
  291. package/deps/couchbase-cxx-client/couchbase/unlock_options.hxx +0 -24
  292. package/deps/couchbase-cxx-client/couchbase/update_collection_options.hxx +32 -3
  293. package/deps/couchbase-cxx-client/couchbase/upsert_options.hxx +0 -24
  294. package/deps/couchbase-cxx-client/couchbase/upsert_search_index_options.hxx +41 -0
  295. package/deps/couchbase-cxx-client/couchbase/vector_query.hxx +99 -0
  296. package/deps/couchbase-cxx-client/couchbase/vector_search.hxx +85 -0
  297. package/deps/couchbase-cxx-client/couchbase/vector_search_options.hxx +76 -0
  298. package/dist/binding.d.ts +16 -9
  299. package/dist/binding.js +4 -1
  300. package/dist/bindingutilities.d.ts +6 -1
  301. package/dist/bindingutilities.js +17 -1
  302. package/dist/cluster.d.ts +12 -1
  303. package/dist/cluster.js +22 -0
  304. package/dist/collection.js +3 -3
  305. package/dist/couchbase.d.ts +1 -0
  306. package/dist/couchbase.js +1 -0
  307. package/dist/errors.d.ts +9 -0
  308. package/dist/errors.js +14 -2
  309. package/dist/searchexecutor.d.ts +2 -2
  310. package/dist/searchexecutor.js +19 -3
  311. package/dist/searchtypes.d.ts +46 -0
  312. package/dist/searchtypes.js +81 -1
  313. package/dist/transactions.d.ts +2 -0
  314. package/dist/transactions.js +2 -3
  315. package/dist/usermanager.js +1 -1
  316. package/dist/vectorsearch.d.ts +99 -0
  317. package/dist/vectorsearch.js +132 -0
  318. package/package.json +7 -7
  319. package/src/binding.cpp +1 -0
  320. package/src/connection.cpp +12 -9
  321. package/src/connection.hpp +3 -3
  322. package/src/connection_autogen.cpp +7 -5
  323. package/src/constants.cpp +14 -0
  324. package/src/instance.cpp +2 -2
  325. package/src/instance.hpp +1 -1
  326. package/src/jstocbpp_autogen.hpp +45 -45
  327. package/src/jstocbpp_basic.hpp +2 -0
  328. package/src/jstocbpp_errors.hpp +1 -0
  329. package/src/jstocbpp_transactions.hpp +6 -22
  330. package/src/mutationtoken.hpp +1 -0
  331. package/tools/gen-bindings-json.py +41 -16
  332. package/deps/couchbase-cxx-client/core/impl/append.cxx +0 -87
  333. package/deps/couchbase-cxx-client/core/impl/build_deferred_query_indexes.cxx +0 -157
  334. package/deps/couchbase-cxx-client/core/impl/create_bucket.cxx +0 -158
  335. package/deps/couchbase-cxx-client/core/impl/create_collection.cxx +0 -83
  336. package/deps/couchbase-cxx-client/core/impl/create_query_index.cxx +0 -232
  337. package/deps/couchbase-cxx-client/core/impl/create_scope.cxx +0 -69
  338. package/deps/couchbase-cxx-client/core/impl/decrement.cxx +0 -96
  339. package/deps/couchbase-cxx-client/core/impl/drop_bucket.cxx +0 -66
  340. package/deps/couchbase-cxx-client/core/impl/drop_collection.cxx +0 -76
  341. package/deps/couchbase-cxx-client/core/impl/drop_query_index.cxx +0 -187
  342. package/deps/couchbase-cxx-client/core/impl/drop_scope.cxx +0 -68
  343. package/deps/couchbase-cxx-client/core/impl/exists.cxx +0 -47
  344. package/deps/couchbase-cxx-client/core/impl/flush_bucket.cxx +0 -66
  345. package/deps/couchbase-cxx-client/core/impl/get.cxx +0 -68
  346. package/deps/couchbase-cxx-client/core/impl/get_all_buckets.cxx +0 -178
  347. package/deps/couchbase-cxx-client/core/impl/get_all_query_indexes.cxx +0 -106
  348. package/deps/couchbase-cxx-client/core/impl/get_all_replicas.cxx +0 -145
  349. package/deps/couchbase-cxx-client/core/impl/get_all_scopes.cxx +0 -94
  350. package/deps/couchbase-cxx-client/core/impl/get_and_lock.cxx +0 -49
  351. package/deps/couchbase-cxx-client/core/impl/get_and_touch.cxx +0 -49
  352. package/deps/couchbase-cxx-client/core/impl/get_any_replica.cxx +0 -134
  353. package/deps/couchbase-cxx-client/core/impl/get_bucket.cxx +0 -168
  354. package/deps/couchbase-cxx-client/core/impl/increment.cxx +0 -96
  355. package/deps/couchbase-cxx-client/core/impl/insert.cxx +0 -90
  356. package/deps/couchbase-cxx-client/core/impl/lookup_in.cxx +0 -69
  357. package/deps/couchbase-cxx-client/core/impl/lookup_in_all_replicas.cxx +0 -178
  358. package/deps/couchbase-cxx-client/core/impl/lookup_in_any_replica.cxx +0 -169
  359. package/deps/couchbase-cxx-client/core/impl/mutate_in.cxx +0 -125
  360. package/deps/couchbase-cxx-client/core/impl/prepend.cxx +0 -87
  361. package/deps/couchbase-cxx-client/core/impl/remove.cxx +0 -86
  362. package/deps/couchbase-cxx-client/core/impl/replace.cxx +0 -102
  363. package/deps/couchbase-cxx-client/core/impl/touch.cxx +0 -49
  364. package/deps/couchbase-cxx-client/core/impl/unlock.cxx +0 -47
  365. package/deps/couchbase-cxx-client/core/impl/update_bucket.cxx +0 -133
  366. package/deps/couchbase-cxx-client/core/impl/update_collection.cxx +0 -83
  367. package/deps/couchbase-cxx-client/core/impl/upsert.cxx +0 -100
  368. package/deps/couchbase-cxx-client/core/impl/watch_query_indexes.cxx +0 -196
  369. package/deps/couchbase-cxx-client/core/operations/mcbp_noop.hxx +0 -49
  370. /package/deps/couchbase-cxx-client/core/impl/{streaming_json_lexter_error_category.cxx → streaming_json_lexer_error_category.cxx} +0 -0
@@ -51,6 +51,7 @@
51
51
  #include "streams.hxx"
52
52
 
53
53
  #include <couchbase/build_config.hxx>
54
+ #include <couchbase/error_codes.hxx>
54
55
  #include <couchbase/fmt/retry_reason.hxx>
55
56
 
56
57
  #include <asio.hpp>
@@ -153,12 +154,12 @@ struct connection_endpoints {
153
154
  connection_endpoints(asio::ip::tcp::endpoint remote_endpoint, asio::ip::tcp::endpoint local_endpoint)
154
155
  : remote{ std::move(remote_endpoint) }
155
156
  , remote_address{ remote.address().to_string() }
156
- , remote_address_with_port{ fmt::format(remote.protocol() == asio::ip::tcp::v6() ? "[{}]:{}" : "{}:{}",
157
- remote_address,
158
- remote.port()) }
157
+ , remote_address_with_port{ remote.protocol() == asio::ip::tcp::v6() ? fmt::format("[{}]:{}", remote_address, remote.port())
158
+ : fmt::format("{}:{}", remote_address, remote.port()) }
159
159
  , local{ std::move(local_endpoint) }
160
160
  , local_address{ local.address().to_string() }
161
- , local_address_with_port{ fmt::format(local.protocol() == asio::ip::tcp::v6() ? "[{}]:{}" : "{}:{}", local_address, local.port()) }
161
+ , local_address_with_port{ local.protocol() == asio::ip::tcp::v6() ? fmt::format("[{}]:{}", local_address, local.port())
162
+ : fmt::format("{}:{}", local_address, local.port()) }
162
163
  {
163
164
  }
164
165
 
@@ -245,6 +246,7 @@ class mcbp_session_impl
245
246
  }
246
247
  if (session_->origin_.options().enable_clustermap_notification) {
247
248
  hello_req.body().enable_clustermap_change_notification();
249
+ hello_req.body().enable_deduplicate_not_my_vbucket_clustermap();
248
250
  }
249
251
  if (session_->origin_.options().enable_compression) {
250
252
  hello_req.body().enable_compression();
@@ -259,7 +261,7 @@ class mcbp_session_impl
259
261
  CB_LOG_DEBUG("{} user_agent={}, requested_features=[{}]",
260
262
  session_->log_prefix_,
261
263
  user_agent,
262
- utils::join_strings_fmt("{}", hello_req.body().features(), ", "));
264
+ utils::join_strings_fmt(hello_req.body().features(), ", "));
263
265
  session_->write(hello_req.data());
264
266
 
265
267
  if (!session_->origin_.credentials().uses_certificate()) {
@@ -347,7 +349,7 @@ class mcbp_session_impl
347
349
  session_->supported_features_ = resp.body().supported_features();
348
350
  CB_LOG_DEBUG("{} supported_features=[{}]",
349
351
  session_->log_prefix_,
350
- utils::join_strings_fmt("{}", session_->supported_features_, ", "));
352
+ utils::join_strings_fmt(session_->supported_features_, ", "));
351
353
  if (session_->origin_.credentials().uses_certificate()) {
352
354
  CB_LOG_DEBUG("{} skip SASL authentication, because TLS certificate was specified",
353
355
  session_->log_prefix_);
@@ -540,17 +542,11 @@ class mcbp_session_impl
540
542
  {
541
543
  private:
542
544
  std::shared_ptr<mcbp_session_impl> session_;
543
- asio::steady_timer heartbeat_timer_;
544
- std::chrono::milliseconds heartbeat_interval_;
545
545
  std::atomic_bool stopped_{ false };
546
546
 
547
547
  public:
548
548
  explicit message_handler(std::shared_ptr<mcbp_session_impl> session)
549
549
  : session_(std::move(session))
550
- , heartbeat_timer_(session_->ctx_)
551
- , heartbeat_interval_{ session_->origin_.options().config_poll_floor > session_->origin_.options().config_poll_interval
552
- ? session_->origin_.options().config_poll_floor
553
- : session_->origin_.options().config_poll_interval }
554
550
  {
555
551
  }
556
552
 
@@ -561,16 +557,10 @@ class mcbp_session_impl
561
557
 
562
558
  void start()
563
559
  {
564
- if (session_->supports_gcccp_) {
565
- fetch_config({});
566
- }
567
560
  }
568
561
 
569
562
  void stop()
570
563
  {
571
- if (bool expected_state{ false }; stopped_.compare_exchange_strong(expected_state, true)) {
572
- heartbeat_timer_.cancel();
573
- }
574
564
  }
575
565
 
576
566
  void handle(mcbp_message&& msg)
@@ -664,7 +654,18 @@ class mcbp_session_impl
664
654
  Expects(protocol::is_valid_server_request_opcode(msg.header.opcode));
665
655
  switch (static_cast<protocol::server_opcode>(msg.header.opcode)) {
666
656
  case protocol::server_opcode::cluster_map_change_notification: {
667
- protocol::server_request<protocol::cluster_map_change_notification_request_body> req(std::move(msg));
657
+ protocol::cmd_info info{ session_->bootstrap_hostname_, session_->bootstrap_port_number_ };
658
+ if (session_->origin_.options().dump_configuration) {
659
+ std::string_view config_text{ reinterpret_cast<const char*>(msg.body.data()), msg.body.size() };
660
+ CB_LOG_TRACE(
661
+ "{} configuration from cluster_map_change_notification request (size={}, endpoint=\"{}:{}\"), {}",
662
+ session_->log_prefix_,
663
+ config_text.size(),
664
+ info.endpoint_address,
665
+ info.endpoint_port,
666
+ config_text);
667
+ }
668
+ protocol::server_request<protocol::cluster_map_change_notification_request_body> req(std::move(msg), info);
668
669
  std::optional<topology::configuration> config = req.body().config();
669
670
  if (session_ && config.has_value()) {
670
671
  if ((!config->bucket.has_value() && req.body().bucket().empty()) ||
@@ -696,23 +697,6 @@ class mcbp_session_impl
696
697
  break;
697
698
  }
698
699
  }
699
-
700
- void fetch_config(std::error_code ec)
701
- {
702
- if (ec == asio::error::operation_aborted || stopped_ || !session_) {
703
- return;
704
- }
705
- protocol::client_request<protocol::get_cluster_config_request_body> req;
706
- req.opaque(session_->next_opaque());
707
- session_->write_and_flush(req.data());
708
- heartbeat_timer_.expires_after(heartbeat_interval_);
709
- heartbeat_timer_.async_wait([self = shared_from_this()](std::error_code e) {
710
- if (e == asio::error::operation_aborted) {
711
- return;
712
- }
713
- self->fetch_config(e);
714
- });
715
- }
716
700
  };
717
701
 
718
702
  public:
@@ -730,6 +714,7 @@ class mcbp_session_impl
730
714
  , bootstrap_deadline_(ctx_)
731
715
  , connection_deadline_(ctx_)
732
716
  , retry_backoff_(ctx_)
717
+ , ping_deadline_(ctx_)
733
718
  , origin_{ std::move(origin) }
734
719
  , bucket_name_{ std::move(bucket_name) }
735
720
  , supported_features_{ std::move(known_features) }
@@ -754,6 +739,7 @@ class mcbp_session_impl
754
739
  , bootstrap_deadline_(ctx_)
755
740
  , connection_deadline_(ctx_)
756
741
  , retry_backoff_(ctx_)
742
+ , ping_deadline_(ctx_)
757
743
  , origin_(std::move(origin))
758
744
  , bucket_name_(std::move(bucket_name))
759
745
  , supported_features_(std::move(known_features))
@@ -798,7 +784,7 @@ class mcbp_session_impl
798
784
  bucket_name_ };
799
785
  }
800
786
 
801
- void ping(std::shared_ptr<diag::ping_reporter> handler)
787
+ void ping(std::shared_ptr<diag::ping_reporter> handler, std::optional<std::chrono::milliseconds> timeout)
802
788
  {
803
789
  protocol::client_request<protocol::mcbp_noop_request_body> req;
804
790
  req.opaque(next_opaque());
@@ -812,7 +798,11 @@ class mcbp_session_impl
812
798
  diag::ping_state state = diag::ping_state::ok;
813
799
  std::optional<std::string> error{};
814
800
  if (ec) {
815
- state = diag::ping_state::error;
801
+ if (ec == errc::common::unambiguous_timeout || ec == errc::common::ambiguous_timeout) {
802
+ state = diag::ping_state::timeout;
803
+ } else {
804
+ state = diag::ping_state::error;
805
+ }
816
806
  error.emplace(fmt::format("code={}, message={}, reason={}", ec.value(), ec.message(), reason));
817
807
  }
818
808
  handler->report({
@@ -826,6 +816,13 @@ class mcbp_session_impl
826
816
  error,
827
817
  });
828
818
  });
819
+ ping_deadline_.expires_after(timeout.value_or(origin_.options().key_value_timeout));
820
+ ping_deadline_.async_wait([self = this->shared_from_this(), opaque = req.opaque()](std::error_code ec) {
821
+ if (ec == asio::error::operation_aborted) {
822
+ return;
823
+ }
824
+ static_cast<void>(self->cancel(opaque, errc::common::unambiguous_timeout, retry_reason::do_not_retry));
825
+ });
829
826
  }
830
827
 
831
828
  [[nodiscard]] mcbp_context context() const
@@ -850,8 +847,9 @@ class mcbp_session_impl
850
847
  self->state_listener_->report_bootstrap_error(fmt::format("{}:{}", self->bootstrap_hostname_, self->bootstrap_port_), ec);
851
848
  }
852
849
  CB_LOG_WARNING("{} unable to bootstrap in time", self->log_prefix_);
853
- auto h = std::move(self->bootstrap_callback_);
854
- h(ec, {});
850
+ if (auto h = std::move(self->bootstrap_callback_); h) {
851
+ h(ec, {});
852
+ }
855
853
  self->stop(retry_reason::do_not_retry);
856
854
  });
857
855
  initiate_bootstrap();
@@ -926,6 +924,7 @@ class mcbp_session_impl
926
924
  bootstrap_deadline_.cancel();
927
925
  connection_deadline_.cancel();
928
926
  retry_backoff_.cancel();
927
+ ping_deadline_.cancel();
929
928
  resolver_.cancel();
930
929
  stream_->close([](std::error_code) {});
931
930
  if (auto h = std::move(bootstrap_handler_); h) {
@@ -1024,8 +1023,10 @@ class mcbp_session_impl
1024
1023
  }
1025
1024
  }
1026
1025
 
1026
+ auto reason = status == static_cast<std::uint16_t>(key_value_status_code::not_my_vbucket) ? retry_reason::key_value_not_my_vbucket
1027
+ : retry_reason::do_not_retry;
1027
1028
  if (fun) {
1028
- fun(protocol::map_status_code(opcode, status), retry_reason::do_not_retry, std::move(msg), decode_error_code(status));
1029
+ fun(protocol::map_status_code(opcode, status), reason, std::move(msg), decode_error_code(status));
1029
1030
  return true;
1030
1031
  }
1031
1032
 
@@ -1043,11 +1044,8 @@ class mcbp_session_impl
1043
1044
  }
1044
1045
  }
1045
1046
  if (request) {
1046
- handler->handle_response(std::move(request),
1047
- protocol::map_status_code(opcode, status),
1048
- retry_reason::do_not_retry,
1049
- std::move(msg),
1050
- decode_error_code(status));
1047
+ handler->handle_response(
1048
+ std::move(request), protocol::map_status_code(opcode, status), reason, std::move(msg), decode_error_code(status));
1051
1049
  return true;
1052
1050
  }
1053
1051
  return false;
@@ -1245,11 +1243,12 @@ class mcbp_session_impl
1245
1243
  }
1246
1244
  }
1247
1245
  }
1246
+ config_.reset();
1248
1247
  config_.emplace(std::move(config));
1249
1248
  configured_ = true;
1250
1249
  for (const auto& listener : config_listeners_) {
1251
- asio::post(asio::bind_executor(
1252
- ctx_, [listener, config = config_.value()]() mutable { return listener->update_config(std::move(config)); }));
1250
+ asio::post(
1251
+ asio::bind_executor(ctx_, [listener, c = config_.value()]() mutable { return listener->update_config(std::move(c)); }));
1253
1252
  }
1254
1253
  }
1255
1254
 
@@ -1372,6 +1371,7 @@ class mcbp_session_impl
1372
1371
  return initiate_bootstrap();
1373
1372
  }
1374
1373
  endpoints_ = endpoints;
1374
+ CB_LOG_TRACE("{} resolved \"{}:{}\" to {} endpoint(s)", log_prefix_, bootstrap_hostname_, bootstrap_port_, endpoints_.size());
1375
1375
  do_connect(endpoints_.begin());
1376
1376
  connection_deadline_.expires_after(origin_.options().resolve_timeout);
1377
1377
  connection_deadline_.async_wait([self = shared_from_this()](const auto timer_ec) {
@@ -1391,19 +1391,33 @@ class mcbp_session_impl
1391
1391
  if (it != endpoints_.end()) {
1392
1392
  auto hostname = it->endpoint().address().to_string();
1393
1393
  auto port = it->endpoint().port();
1394
- CB_LOG_DEBUG("{} connecting to {}:{}, timeout={}ms", log_prefix_, hostname, port, origin_.options().connect_timeout.count());
1394
+ CB_LOG_DEBUG("{} connecting to {}:{} (\"{}:{}\"), timeout={}ms",
1395
+ log_prefix_,
1396
+ hostname,
1397
+ port,
1398
+ bootstrap_hostname_,
1399
+ bootstrap_port_,
1400
+ origin_.options().connect_timeout.count());
1395
1401
  connection_deadline_.expires_after(origin_.options().connect_timeout);
1396
1402
  connection_deadline_.async_wait([self = shared_from_this(), hostname, port](const auto timer_ec) {
1397
1403
  if (timer_ec == asio::error::operation_aborted || self->stopped_) {
1398
1404
  return;
1399
1405
  }
1400
- CB_LOG_DEBUG("{} unable to connect to {}:{} in time, reconnecting", self->log_prefix_, hostname, port);
1406
+ CB_LOG_DEBUG("{} unable to connect to {}:{} (\"{}:{}\") in time, reconnecting",
1407
+ self->log_prefix_,
1408
+ hostname,
1409
+ port,
1410
+ self->bootstrap_hostname_,
1411
+ self->bootstrap_port_);
1401
1412
  return self->stream_->close([self](std::error_code) { self->initiate_bootstrap(); });
1402
1413
  });
1403
1414
  stream_->async_connect(it->endpoint(),
1404
1415
  std::bind(&mcbp_session_impl::on_connect, shared_from_this(), std::placeholders::_1, it));
1405
1416
  } else {
1406
- CB_LOG_ERROR("{} no more endpoints left to connect, will try another address", log_prefix_);
1417
+ CB_LOG_ERROR("{} no more endpoints left to connect to \"{}:{}\", will try another address",
1418
+ log_prefix_,
1419
+ bootstrap_hostname_,
1420
+ bootstrap_port_);
1407
1421
  if (state_listener_) {
1408
1422
  state_listener_->report_bootstrap_error(fmt::format("{}:{}", bootstrap_hostname_, bootstrap_port_),
1409
1423
  errc::network::no_endpoints_left);
@@ -1453,6 +1467,7 @@ class mcbp_session_impl
1453
1467
  bootstrap_hostname_,
1454
1468
  connection_endpoints_.remote_address,
1455
1469
  connection_endpoints_.remote.port());
1470
+ parser_.reset();
1456
1471
  bootstrap_handler_ = std::make_shared<bootstrap_handler>(shared_from_this());
1457
1472
  connection_deadline_.cancel();
1458
1473
  }
@@ -1602,6 +1617,7 @@ class mcbp_session_impl
1602
1617
  asio::steady_timer bootstrap_deadline_;
1603
1618
  asio::steady_timer connection_deadline_;
1604
1619
  asio::steady_timer retry_backoff_;
1620
+ asio::steady_timer ping_deadline_;
1605
1621
  couchbase::core::origin origin_;
1606
1622
  std::optional<std::string> bucket_name_;
1607
1623
  mcbp_parser parser_;
@@ -1827,9 +1843,9 @@ mcbp_session::supported_features() const
1827
1843
  }
1828
1844
 
1829
1845
  void
1830
- mcbp_session::ping(std::shared_ptr<diag::ping_reporter> handler) const
1846
+ mcbp_session::ping(std::shared_ptr<diag::ping_reporter> handler, std::optional<std::chrono::milliseconds> timeout) const
1831
1847
  {
1832
- return impl_->ping(std::move(handler));
1848
+ return impl_->ping(std::move(handler), std::move(timeout));
1833
1849
  }
1834
1850
 
1835
1851
  bool
@@ -1862,4 +1878,10 @@ mcbp_session::write_and_subscribe(std::shared_ptr<mcbp::queue_request> request,
1862
1878
  return impl_->write_and_subscribe(std::move(request), std::move(handler));
1863
1879
  }
1864
1880
 
1881
+ void
1882
+ mcbp_session::write_and_flush(std::vector<std::byte>&& buffer)
1883
+ {
1884
+ return impl_->write_and_flush(std::move(buffer));
1885
+ }
1886
+
1865
1887
  } // namespace couchbase::core::io
@@ -23,6 +23,7 @@
23
23
  #include "mcbp_context.hxx"
24
24
  #include "mcbp_message.hxx"
25
25
 
26
+ #include <chrono>
26
27
  #include <cinttypes>
27
28
  #include <memory>
28
29
  #include <optional>
@@ -108,6 +109,7 @@ class mcbp_session
108
109
  [[nodiscard]] const std::string& bootstrap_hostname() const;
109
110
  [[nodiscard]] const std::string& bootstrap_port() const;
110
111
  [[nodiscard]] std::uint16_t bootstrap_port_number() const;
112
+ void write_and_flush(std::vector<std::byte>&& buffer);
111
113
  void write_and_subscribe(std::shared_ptr<mcbp::queue_request>, std::shared_ptr<response_handler> handler);
112
114
  void write_and_subscribe(std::uint32_t opaque, std::vector<std::byte>&& data, command_handler&& handler);
113
115
  void bootstrap(utils::movable_function<void(std::error_code, topology::configuration)>&& handler,
@@ -118,7 +120,7 @@ class mcbp_session
118
120
  [[nodiscard]] bool has_config() const;
119
121
  [[nodiscard]] diag::endpoint_diag_info diag_info() const;
120
122
  void on_configuration_update(std::shared_ptr<config_listener> handler);
121
- void ping(std::shared_ptr<diag::ping_reporter> handler) const;
123
+ void ping(std::shared_ptr<diag::ping_reporter> handler, std::optional<std::chrono::milliseconds> = {}) const;
122
124
  [[nodiscard]] bool supports_gcccp() const;
123
125
  [[nodiscard]] std::optional<key_value_error_map_info> decode_error_code(std::uint16_t code);
124
126
  void handle_not_my_vbucket(const io::mcbp_message& msg) const;
@@ -30,7 +30,7 @@ static const std::string protocol_logger_name{ "couchbase_cxx_client_protocol_lo
30
30
  * This pattern is duplicated for some test cases. If you need to update it,
31
31
  * please also update in all relevant places.
32
32
  */
33
- static const std::string log_pattern{ "[%Y-%m-%d %T.%e] [%P,%t] [%^%l%$] %oms, %v" };
33
+ static const std::string log_pattern{ "[%Y-%m-%d %T.%e] %4oms [%^%4!l%$] [%P,%t] %v" };
34
34
 
35
35
  /**
36
36
  * Instances of spdlog (async) file logger.
@@ -178,16 +178,16 @@ log_protocol(const char* file, int line, const char* function, std::string_view
178
178
  * @param msg message to log
179
179
  * @param args the formatting arguments
180
180
  */
181
- template<typename String, typename... Args>
181
+ template<typename... Args>
182
182
  inline void
183
- log(const char* file, int line, const char* function, level lvl, const String& msg, Args&&... args)
183
+ log(const char* file, int line, const char* function, level lvl, fmt::format_string<Args...> msg, Args&&... args)
184
184
  {
185
185
  detail::log(file, line, function, lvl, fmt::format(msg, std::forward<Args>(args)...));
186
186
  }
187
187
 
188
- template<typename String, typename... Args>
188
+ template<typename... Args>
189
189
  inline void
190
- log_protocol(const char* file, int line, const char* function, const String& msg, Args&&... args)
190
+ log_protocol(const char* file, int line, const char* function, fmt::format_string<Args...> msg, Args&&... args)
191
191
  {
192
192
  detail::log_protocol(file, line, function, fmt::format(msg, std::forward<Args>(args)...));
193
193
  }
@@ -116,7 +116,7 @@ struct bucket_settings {
116
116
  bucket_eviction_policy eviction_policy{ bucket_eviction_policy::unknown };
117
117
  bucket_conflict_resolution conflict_resolution_type{ bucket_conflict_resolution::unknown };
118
118
  std::optional<bool> history_retention_collection_default{};
119
- std::optional<std::uint32_t> history_retention_bytes;
119
+ std::optional<std::uint32_t> history_retention_bytes{};
120
120
  std::optional<std::uint32_t> history_retention_duration{};
121
121
 
122
122
  /**
@@ -86,7 +86,7 @@ packet::debug_string() const
86
86
  }
87
87
  }
88
88
 
89
- fmt::format_to(std::back_insert_iterator(out), "}");
89
+ fmt::format_to(std::back_insert_iterator(out), "}}");
90
90
  return { out.begin(), out.end() };
91
91
  }
92
92
  } // namespace couchbase::core::mcbp
@@ -17,7 +17,7 @@
17
17
 
18
18
  #pragma once
19
19
 
20
- #include "../utils/movable_function.hxx"
20
+ #include "core/utils/movable_function.hxx"
21
21
 
22
22
  #include <functional>
23
23
  #include <memory>
@@ -73,3 +73,41 @@
73
73
  #define COUCHBASE_CXX_CLIENT_HAS_COLLECTION_QUERY_INDEX_MANAGEMENT 1
74
74
 
75
75
  #define COUCHBASE_CXX_CLIENT_TRANSACTIONS_EXT_PARALLEL_UNSTAGING
76
+
77
+ /**
78
+ * core cluster implementation has been hidden and not accessible through the public API
79
+ */
80
+ #define COUCHBASE_CXX_CLIENT_HAS_CORE_CLUSTER_HIDDEN 1
81
+
82
+ /**
83
+ * expiration_time has been renamed to timeout in transactions_options and transactions_config
84
+ * kv_timeout removed from transactions_options and transactions_config
85
+ */
86
+ #define COUCHBASE_CXX_CLIENT_TRANSACTIONS_OPTIONS_HAVE_TIMEOUT 1
87
+
88
+ /**
89
+ * Search index management is accessible from the public API
90
+ * couchbase::cluster::search_indexes() support
91
+ */
92
+ #define COUCHBASE_CXX_CLIENT_HAS_PUBLIC_SEARCH_INDEX_MANAGEMENT 1
93
+
94
+ /**
95
+ * FTS is accessible from the public API
96
+ * couchbase::cluster::search_query() and couchbase::scope::search_query() support
97
+ */
98
+ #define COUCHBASE_CXX_CLIENT_HAS_PUBLIC_SEARCH 1
99
+
100
+ /**
101
+ * The document not locked (couchbase::errc::key_value::document_not_locked) error code is supported
102
+ */
103
+ #define COUCHBASE_CXX_CLIENT_HAS_ERRC_DOCUMENT_NOT_LOCKED 1
104
+
105
+ /**
106
+ * Vector search is supported via couchbase::cluster::search() or couchbase::scope::search()
107
+ */
108
+ #define COUCHBASE_CXX_CLIENT_HAS_VECTOR_SEARCH 1
109
+
110
+ /**
111
+ * Scope level search index management is supported via couchbase::scope::search_indexes()
112
+ */
113
+ #define COUCHBASE_CXX_CLIENT_HAS_SCOPE_SEARCH_INDEX_MANAGEMENT 1
@@ -26,6 +26,7 @@
26
26
  #include <couchbase/error_codes.hxx>
27
27
 
28
28
  #include <gsl/assert>
29
+ #include <regex>
29
30
 
30
31
  namespace couchbase::core::operations
31
32
  {
@@ -236,7 +237,9 @@ query_request::make_response(error_context::query&& ctx, const encoded_response_
236
237
  response.ctx.client_context_id);
237
238
  }
238
239
  }
239
- response.meta.status = payload.at("status").get_string();
240
+ if (const auto* s = payload.find("status"); s != nullptr) {
241
+ response.meta.status = payload.at("status").get_string();
242
+ }
240
243
  if (const auto* s = payload.find("signature"); s != nullptr) {
241
244
  response.meta.signature = couchbase::core::utils::json::generate(*s);
242
245
  }
@@ -324,7 +327,12 @@ query_request::make_response(error_context::query&& ctx, const encoded_response_
324
327
  response.ctx.first_error_message = response.meta.errors->front().message;
325
328
  switch (response.ctx.first_error_code) {
326
329
  case 1065: /* IKey: "service.io.request.unrecognized_parameter" */
327
- response.ctx.ec = errc::common::invalid_argument;
330
+ if ((response.ctx.first_error_message.find("Unrecognized parameter in request") != std::string::npos) &&
331
+ (response.ctx.first_error_message.find("preserve_expiry") != std::string::npos)) {
332
+ response.ctx.ec = errc::common::feature_not_available;
333
+ } else {
334
+ response.ctx.ec = errc::common::invalid_argument;
335
+ }
328
336
  break;
329
337
  case 1080: /* IKey: "timeout" */
330
338
  response.ctx.ec = errc::common::unambiguous_timeout;
@@ -342,6 +350,19 @@ query_request::make_response(error_context::query&& ctx, const encoded_response_
342
350
  case 4090: /* IKey: "plan.build_prepared.name_not_in_encoded_plan" */
343
351
  response.ctx.ec = errc::query::prepared_statement_failure;
344
352
  break;
353
+ case 4300: /* IKey: "plan.new_index_already_exists" */
354
+ response.ctx.ec = errc::common::index_exists;
355
+ break;
356
+ case 5000: /* IKey: "Internal Error" */
357
+ if (std::regex_search(response.ctx.first_error_message, std::regex{ ".*[iI]ndex .*already exist.*" })) {
358
+ response.ctx.ec = errc::common::index_exists;
359
+ } else if (response.ctx.first_error_message.find("Index does not exist") != std::string::npos ||
360
+ std::regex_search(response.ctx.first_error_message, std::regex{ ".*[iI]ndex .*[nN]ot [fF]ound.*" })) {
361
+ response.ctx.ec = errc::common::index_not_found;
362
+ } else if (response.ctx.first_error_message.find("Bucket Not Found") != std::string::npos) {
363
+ response.ctx.ec = errc::common::bucket_not_found;
364
+ }
365
+ break;
345
366
  case 12009: /* IKey: "datastore.couchbase.DML_error" */
346
367
  if (response.ctx.first_error_message.find("CAS mismatch") != std::string::npos) {
347
368
  response.ctx.ec = errc::common::cas_mismatch;
@@ -34,7 +34,7 @@
34
34
  namespace couchbase::tracing
35
35
  {
36
36
  class request_span;
37
- }
37
+ } // namespace couchbase::tracing
38
38
 
39
39
  namespace couchbase::core::operations
40
40
  {
@@ -34,6 +34,25 @@ search_request::encode_to(search_request::encoded_request_type& encoded, http_co
34
34
  { "query", utils::json::parse(query) },
35
35
  { "ctl", { { "timeout", encoded.timeout.count() } } },
36
36
  };
37
+
38
+ if (show_request.has_value()) {
39
+ body["showrequest"] = show_request.value() ? "true" : "false";
40
+ }
41
+
42
+ if (vector_search.has_value()) {
43
+ body["knn"] = utils::json::parse(vector_search.value());
44
+ }
45
+ if (vector_query_combination.has_value()) {
46
+ switch (*vector_query_combination) {
47
+ case couchbase::core::vector_query_combination::combination_or:
48
+ body["knn_operator"] = "or";
49
+ break;
50
+ case couchbase::core::vector_query_combination::combination_and:
51
+ body["knn_operator"] = "and";
52
+ break;
53
+ }
54
+ }
55
+
37
56
  if (explain) {
38
57
  body["explain"] = *explain;
39
58
  }
@@ -103,10 +122,15 @@ search_request::encode_to(search_request::encoded_request_type& encoded, http_co
103
122
  body[key] = utils::json::parse(value);
104
123
  }
105
124
 
125
+ if (bucket_name.has_value() && scope_name.has_value()) {
126
+ encoded.path = fmt::format("/api/bucket/{}/scope/{}/index/{}/query", bucket_name.value(), scope_name.value(), index_name);
127
+ } else {
128
+ encoded.path = fmt::format("/api/index/{}/query", index_name);
129
+ }
130
+
106
131
  encoded.type = type;
107
132
  encoded.headers["content-type"] = "application/json";
108
133
  encoded.method = "POST";
109
- encoded.path = fmt::format("/api/index/{}/query", index_name);
110
134
  body_str = utils::json::generate(body);
111
135
  encoded.body = body_str;
112
136
  if (context.options.show_queries) {
@@ -310,6 +334,18 @@ search_request::make_response(error_context::search&& ctx, const encoded_respons
310
334
  response.ctx.ec = errc::common::rate_limited;
311
335
  return response;
312
336
  }
337
+ } else if (encoded.status_code == 404) {
338
+ tao::json::value payload{};
339
+ try {
340
+ payload = utils::json::parse(encoded.body.data());
341
+ } catch (const tao::pegtl::parse_error&) {
342
+ response.ctx.ec = errc::common::parsing_failure;
343
+ return response;
344
+ }
345
+ response.status = payload.at("status").get_string();
346
+ response.error = payload.at("error").get_string();
347
+ response.ctx.ec = errc::common::feature_not_available;
348
+ return response;
313
349
  }
314
350
  response.ctx.ec = errc::common::internal_server_failure;
315
351
  }
@@ -27,6 +27,7 @@
27
27
  #include "core/search_highlight_style.hxx"
28
28
  #include "core/search_scan_consistency.hxx"
29
29
  #include "core/timeout_defaults.hxx"
30
+ #include "core/vector_query_combination.hxx"
30
31
 
31
32
  #include <couchbase/mutation_token.hxx>
32
33
 
@@ -118,6 +119,16 @@ struct search_request {
118
119
 
119
120
  std::string index_name;
120
121
  couchbase::core::json_string query;
122
+ std::optional<std::string> bucket_name;
123
+ std::optional<std::string> scope_name;
124
+
125
+ /**
126
+ * UNCOMMITTED: This should be set to false if using the .search() API, leave unset for old .search_query() API
127
+ */
128
+ std::optional<bool> show_request;
129
+
130
+ std::optional<couchbase::core::json_string> vector_search;
131
+ std::optional<couchbase::core::vector_query_combination> vector_query_combination;
121
132
 
122
133
  std::optional<std::uint32_t> limit{};
123
134
  std::optional<std::uint32_t> skip{};
@@ -21,6 +21,8 @@
21
21
  #include "core/utils/name_codec.hxx"
22
22
  #include "error_utils.hxx"
23
23
 
24
+ #include <fmt/core.h>
25
+
24
26
  namespace couchbase::core::operations::management
25
27
  {
26
28
  std::error_code
@@ -21,6 +21,8 @@
21
21
  #include "core/utils/name_codec.hxx"
22
22
  #include "error_utils.hxx"
23
23
 
24
+ #include <fmt/core.h>
25
+
24
26
  namespace couchbase::core::operations::management
25
27
  {
26
28
  std::error_code
@@ -21,6 +21,8 @@
21
21
  #include "core/utils/name_codec.hxx"
22
22
  #include "error_utils.hxx"
23
23
 
24
+ #include <fmt/core.h>
25
+
24
26
  namespace couchbase::core::operations::management
25
27
  {
26
28
  std::error_code
@@ -21,6 +21,8 @@
21
21
  #include "core/utils/name_codec.hxx"
22
22
  #include "error_utils.hxx"
23
23
 
24
+ #include <fmt/core.h>
25
+
24
26
  namespace couchbase::core::operations::management
25
27
  {
26
28
  std::error_code
@@ -20,6 +20,8 @@
20
20
  #include "core/utils/json.hxx"
21
21
  #include "error_utils.hxx"
22
22
 
23
+ #include <fmt/core.h>
24
+
23
25
  namespace couchbase::core::operations::management
24
26
  {
25
27
  std::error_code
@@ -21,6 +21,8 @@
21
21
  #include "core/utils/name_codec.hxx"
22
22
  #include "error_utils.hxx"
23
23
 
24
+ #include <fmt/core.h>
25
+
24
26
  namespace couchbase::core::operations::management
25
27
  {
26
28
  std::error_code