couchbase 3.4.2 → 3.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/couchbase/CMakeLists.txt +57 -7
  4. data/ext/couchbase/cmake/Documentation.cmake +0 -1
  5. data/ext/couchbase/cmake/OpenSSL.cmake +98 -3
  6. data/ext/couchbase/cmake/Testing.cmake +12 -4
  7. data/ext/couchbase/cmake/build_config.hxx.in +3 -0
  8. data/ext/couchbase/core/bucket.cxx +3 -2
  9. data/ext/couchbase/core/bucket.hxx +9 -0
  10. data/ext/couchbase/core/cluster.hxx +17 -0
  11. data/ext/couchbase/core/cluster_options.cxx +2 -2
  12. data/ext/couchbase/core/cluster_options.hxx +4 -6
  13. data/ext/couchbase/core/cluster_options_fwd.hxx +26 -0
  14. data/ext/couchbase/core/config_profile.hxx +1 -54
  15. data/ext/couchbase/core/config_profiles.cxx +79 -0
  16. data/ext/couchbase/core/config_profiles.hxx +56 -0
  17. data/ext/couchbase/core/error_context/search.hxx +1 -1
  18. data/ext/couchbase/core/impl/analytics.cxx +1 -0
  19. data/ext/couchbase/core/impl/boolean_field_query.cxx +40 -0
  20. data/ext/couchbase/core/impl/boolean_query.cxx +62 -0
  21. data/ext/couchbase/core/impl/cluster.cxx +2 -0
  22. data/ext/couchbase/core/impl/conjunction_query.cxx +51 -0
  23. data/ext/couchbase/core/impl/date_range.cxx +89 -0
  24. data/ext/couchbase/core/impl/date_range_facet.cxx +54 -0
  25. data/ext/couchbase/core/impl/date_range_facet_result.cxx +64 -0
  26. data/ext/couchbase/core/impl/date_range_query.cxx +125 -0
  27. data/ext/couchbase/core/impl/disjunction_query.cxx +51 -0
  28. data/ext/couchbase/core/impl/encoded_search_facet.hxx +29 -0
  29. data/ext/couchbase/core/impl/encoded_search_query.hxx +29 -0
  30. data/ext/couchbase/core/impl/encoded_search_sort.hxx +29 -0
  31. data/ext/couchbase/core/impl/geo_bounding_box_query.cxx +46 -0
  32. data/ext/couchbase/core/impl/geo_distance_query.cxx +43 -0
  33. data/ext/couchbase/core/impl/geo_polygon_query.cxx +46 -0
  34. data/ext/couchbase/core/impl/internal_date_range_facet_result.cxx +80 -0
  35. data/ext/couchbase/core/impl/internal_date_range_facet_result.hxx +48 -0
  36. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  37. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  38. data/ext/couchbase/core/impl/internal_search_error_context.cxx +141 -0
  39. data/ext/couchbase/core/impl/internal_search_error_context.hxx +61 -0
  40. data/ext/couchbase/core/impl/internal_search_meta_data.cxx +60 -0
  41. data/ext/couchbase/core/impl/internal_search_meta_data.hxx +41 -0
  42. data/ext/couchbase/core/impl/internal_search_result.cxx +84 -0
  43. data/ext/couchbase/core/impl/internal_search_result.hxx +43 -0
  44. data/ext/couchbase/core/impl/internal_search_row.cxx +82 -0
  45. data/ext/couchbase/core/impl/internal_search_row.hxx +56 -0
  46. data/ext/couchbase/core/impl/internal_search_row_location.hxx +32 -0
  47. data/ext/couchbase/core/impl/internal_search_row_locations.cxx +137 -0
  48. data/ext/couchbase/core/impl/internal_search_row_locations.hxx +45 -0
  49. data/ext/couchbase/core/impl/internal_term_facet_result.cxx +80 -0
  50. data/ext/couchbase/core/impl/internal_term_facet_result.hxx +48 -0
  51. data/ext/couchbase/core/impl/match_all_query.cxx +35 -0
  52. data/ext/couchbase/core/impl/match_none_query.cxx +35 -0
  53. data/ext/couchbase/core/impl/match_phrase_query.cxx +43 -0
  54. data/ext/couchbase/core/impl/match_query.cxx +59 -0
  55. data/ext/couchbase/core/impl/numeric_range.cxx +49 -0
  56. data/ext/couchbase/core/impl/numeric_range_facet.cxx +54 -0
  57. data/ext/couchbase/core/impl/numeric_range_facet_result.cxx +64 -0
  58. data/ext/couchbase/core/impl/numeric_range_query.cxx +56 -0
  59. data/ext/couchbase/core/impl/phrase_query.cxx +42 -0
  60. data/ext/couchbase/core/impl/prefix_query.cxx +40 -0
  61. data/ext/couchbase/core/impl/query_string_query.cxx +37 -0
  62. data/ext/couchbase/core/impl/regexp_query.cxx +40 -0
  63. data/ext/couchbase/core/impl/search.cxx +191 -0
  64. data/ext/couchbase/core/impl/search_error_context.cxx +147 -0
  65. data/ext/couchbase/core/impl/search_meta_data.cxx +46 -0
  66. data/ext/couchbase/core/impl/search_result.cxx +66 -0
  67. data/ext/couchbase/core/impl/search_row.cxx +74 -0
  68. data/ext/couchbase/core/impl/search_row_location.cxx +64 -0
  69. data/ext/couchbase/core/impl/search_row_locations.cxx +66 -0
  70. data/ext/couchbase/core/impl/search_sort_field.cxx +104 -0
  71. data/ext/couchbase/core/impl/search_sort_id.cxx +43 -0
  72. data/ext/couchbase/core/impl/search_sort_score.cxx +43 -0
  73. data/ext/couchbase/core/impl/term_facet.cxx +36 -0
  74. data/ext/couchbase/core/impl/term_facet_result.cxx +64 -0
  75. data/ext/couchbase/core/impl/term_query.cxx +56 -0
  76. data/ext/couchbase/core/impl/term_range_query.cxx +57 -0
  77. data/ext/couchbase/core/impl/wildcard_query.cxx +40 -0
  78. data/ext/couchbase/core/io/http_context.hxx +1 -1
  79. data/ext/couchbase/core/io/http_session.hxx +10 -0
  80. data/ext/couchbase/core/io/http_session_manager.hxx +5 -3
  81. data/ext/couchbase/core/io/mcbp_session.cxx +28 -1
  82. data/ext/couchbase/core/io/retry_orchestrator.hxx +3 -2
  83. data/ext/couchbase/core/json_string.hxx +5 -0
  84. data/ext/couchbase/core/meta/version.cxx +18 -4
  85. data/ext/couchbase/core/mozilla_ca_bundle.hxx +39 -0
  86. data/ext/couchbase/core/operations/document_analytics.cxx +1 -0
  87. data/ext/couchbase/core/operations/document_analytics.hxx +1 -0
  88. data/ext/couchbase/core/operations/document_append.hxx +1 -1
  89. data/ext/couchbase/core/operations/document_decrement.hxx +1 -1
  90. data/ext/couchbase/core/operations/document_exists.hxx +1 -1
  91. data/ext/couchbase/core/operations/document_get.hxx +1 -1
  92. data/ext/couchbase/core/operations/document_get_and_lock.hxx +1 -1
  93. data/ext/couchbase/core/operations/document_get_and_touch.hxx +1 -1
  94. data/ext/couchbase/core/operations/document_get_projected.hxx +1 -1
  95. data/ext/couchbase/core/operations/document_increment.hxx +1 -1
  96. data/ext/couchbase/core/operations/document_insert.hxx +1 -1
  97. data/ext/couchbase/core/operations/document_lookup_in.hxx +1 -1
  98. data/ext/couchbase/core/operations/document_mutate_in.hxx +1 -1
  99. data/ext/couchbase/core/operations/document_prepend.hxx +1 -1
  100. data/ext/couchbase/core/operations/document_query.cxx +2 -0
  101. data/ext/couchbase/core/operations/document_query.hxx +6 -0
  102. data/ext/couchbase/core/operations/document_remove.hxx +1 -1
  103. data/ext/couchbase/core/operations/document_replace.hxx +1 -1
  104. data/ext/couchbase/core/operations/document_search.cxx +4 -1
  105. data/ext/couchbase/core/operations/document_search.hxx +2 -1
  106. data/ext/couchbase/core/operations/document_touch.hxx +1 -1
  107. data/ext/couchbase/core/operations/document_unlock.hxx +1 -1
  108. data/ext/couchbase/core/operations/document_upsert.hxx +1 -1
  109. data/ext/couchbase/core/operations/document_view.hxx +1 -0
  110. data/ext/couchbase/core/protocol/client_request.hxx +11 -2
  111. data/ext/couchbase/core/public_fwd.hxx +21 -0
  112. data/ext/couchbase/core/tls_verify_mode.hxx +26 -0
  113. data/ext/couchbase/core/topology/configuration.cxx +15 -2
  114. data/ext/couchbase/core/topology/configuration.hxx +5 -1
  115. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.cxx +93 -0
  116. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.hxx +48 -75
  117. data/ext/couchbase/core/transactions/cleanup_testing_hooks.cxx +52 -0
  118. data/ext/couchbase/core/transactions/cleanup_testing_hooks.hxx +17 -31
  119. data/ext/couchbase/core/transactions/exceptions.hxx +12 -9
  120. data/ext/couchbase/core/utils/connection_string.cxx +17 -0
  121. data/ext/couchbase/core/utils/json.cxx +4 -1
  122. data/ext/couchbase/couchbase/behavior_options.hxx +10 -1
  123. data/ext/couchbase/couchbase/boolean_field_query.hxx +77 -0
  124. data/ext/couchbase/couchbase/boolean_query.hxx +223 -0
  125. data/ext/couchbase/couchbase/cluster.hxx +42 -1
  126. data/ext/couchbase/couchbase/conjunction_query.hxx +88 -0
  127. data/ext/couchbase/couchbase/date_range.hxx +69 -0
  128. data/ext/couchbase/couchbase/date_range_facet.hxx +56 -0
  129. data/ext/couchbase/couchbase/date_range_facet_result.hxx +55 -0
  130. data/ext/couchbase/couchbase/date_range_query.hxx +265 -0
  131. data/ext/couchbase/couchbase/disjunction_query.hxx +109 -0
  132. data/ext/couchbase/couchbase/doc_id_query.hxx +111 -0
  133. data/ext/couchbase/couchbase/error_context.hxx +7 -6
  134. data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  135. data/ext/couchbase/couchbase/fmt/search_scan_consistency.hxx +49 -0
  136. data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +107 -0
  137. data/ext/couchbase/couchbase/geo_distance_query.hxx +109 -0
  138. data/ext/couchbase/couchbase/geo_point.hxx +32 -0
  139. data/ext/couchbase/couchbase/geo_polygon_query.hxx +85 -0
  140. data/ext/couchbase/couchbase/highlight_style.hxx +45 -0
  141. data/ext/couchbase/couchbase/match_all_query.hxx +43 -0
  142. data/ext/couchbase/couchbase/match_none_query.hxx +43 -0
  143. data/ext/couchbase/couchbase/match_operator.hxx +45 -0
  144. data/ext/couchbase/couchbase/match_phrase_query.hxx +108 -0
  145. data/ext/couchbase/couchbase/match_query.hxx +163 -0
  146. data/ext/couchbase/couchbase/numeric_range.hxx +58 -0
  147. data/ext/couchbase/couchbase/numeric_range_facet.hxx +56 -0
  148. data/ext/couchbase/couchbase/numeric_range_facet_result.hxx +55 -0
  149. data/ext/couchbase/couchbase/numeric_range_query.hxx +143 -0
  150. data/ext/couchbase/couchbase/phrase_query.hxx +93 -0
  151. data/ext/couchbase/couchbase/prefix_query.hxx +82 -0
  152. data/ext/couchbase/couchbase/query_string_query.hxx +72 -0
  153. data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
  154. data/ext/couchbase/couchbase/scope.hxx +40 -0
  155. data/ext/couchbase/couchbase/search_date_range.hxx +68 -0
  156. data/ext/couchbase/couchbase/search_error_context.hxx +138 -0
  157. data/ext/couchbase/couchbase/search_facet.hxx +60 -0
  158. data/ext/couchbase/couchbase/search_facet_result.hxx +50 -0
  159. data/ext/couchbase/couchbase/search_meta_data.hxx +85 -0
  160. data/ext/couchbase/couchbase/search_metrics.hxx +127 -0
  161. data/ext/couchbase/couchbase/search_numeric_range.hxx +69 -0
  162. data/ext/couchbase/couchbase/search_options.hxx +509 -0
  163. data/ext/couchbase/couchbase/search_query.hxx +69 -0
  164. data/ext/couchbase/couchbase/search_result.hxx +77 -0
  165. data/ext/couchbase/couchbase/search_row.hxx +104 -0
  166. data/ext/couchbase/couchbase/search_row_location.hxx +55 -0
  167. data/ext/couchbase/couchbase/search_row_locations.hxx +86 -0
  168. data/ext/couchbase/couchbase/search_scan_consistency.hxx +34 -0
  169. data/ext/couchbase/couchbase/search_sort.hxx +58 -0
  170. data/ext/couchbase/couchbase/search_sort_field.hxx +117 -0
  171. data/ext/couchbase/couchbase/search_sort_field_missing.hxx +26 -0
  172. data/ext/couchbase/couchbase/search_sort_field_mode.hxx +27 -0
  173. data/ext/couchbase/couchbase/search_sort_field_type.hxx +28 -0
  174. data/ext/couchbase/couchbase/search_sort_id.hxx +60 -0
  175. data/ext/couchbase/couchbase/search_sort_score.hxx +60 -0
  176. data/ext/couchbase/couchbase/search_term_range.hxx +51 -0
  177. data/ext/couchbase/couchbase/security_options.hxx +3 -0
  178. data/ext/couchbase/couchbase/term_facet.hxx +48 -0
  179. data/ext/couchbase/couchbase/term_facet_result.hxx +55 -0
  180. data/ext/couchbase/couchbase/term_query.hxx +151 -0
  181. data/ext/couchbase/couchbase/term_range_query.hxx +142 -0
  182. data/ext/couchbase/couchbase/tracing/request_span.hxx +63 -0
  183. data/ext/couchbase/couchbase/tracing/request_tracer.hxx +2 -40
  184. data/ext/couchbase/couchbase/transactions/async_attempt_context.hxx +83 -4
  185. data/ext/couchbase/couchbase/transactions/attempt_context.hxx +67 -0
  186. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +2 -0
  187. data/ext/couchbase/couchbase/transactions/transaction_keyspace.hxx +11 -1
  188. data/ext/couchbase/couchbase/transactions/transaction_options.hxx +79 -8
  189. data/ext/couchbase/couchbase/transactions/transaction_query_options.hxx +128 -15
  190. data/ext/couchbase/couchbase/transactions/transaction_query_result.hxx +4 -0
  191. data/ext/couchbase/couchbase/transactions/transaction_result.hxx +1 -1
  192. data/ext/couchbase/couchbase/transactions/transactions_cleanup_config.hxx +5 -3
  193. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +9 -5
  194. data/ext/couchbase/couchbase/transactions/transactions_query_config.hxx +6 -3
  195. data/ext/couchbase/couchbase/transactions.hxx +34 -1
  196. data/ext/couchbase/couchbase/wildcard_query.hxx +83 -0
  197. data/ext/couchbase/test/CMakeLists.txt +7 -5
  198. data/ext/couchbase/test/benchmark_helper_integration.hxx +2 -2
  199. data/ext/couchbase/test/test_helper.hxx +5 -5
  200. data/ext/couchbase/test/test_integration_analytics.cxx +28 -6
  201. data/ext/couchbase/test/test_integration_collections.cxx +7 -3
  202. data/ext/couchbase/test/test_integration_connect.cxx +7 -3
  203. data/ext/couchbase/test/test_integration_crud.cxx +13 -3
  204. data/ext/couchbase/test/test_integration_diagnostics.cxx +11 -5
  205. data/ext/couchbase/test/test_integration_durability.cxx +12 -7
  206. data/ext/couchbase/test/test_integration_examples.cxx +283 -11
  207. data/ext/couchbase/test/test_integration_management.cxx +147 -91
  208. data/ext/couchbase/test/test_integration_query.cxx +68 -10
  209. data/ext/couchbase/test/test_integration_range_scan.cxx +12 -12
  210. data/ext/couchbase/test/test_integration_read_replica.cxx +48 -11
  211. data/ext/couchbase/test/test_integration_search.cxx +22 -2
  212. data/ext/couchbase/test/test_integration_subdoc.cxx +62 -11
  213. data/ext/couchbase/test/test_integration_tracer.cxx +5 -0
  214. data/ext/couchbase/test/test_integration_transcoders.cxx +13 -5
  215. data/ext/couchbase/test/{test_transaction_transaction_context.cxx → test_transaction_context.cxx} +1 -1
  216. data/ext/couchbase/test/test_transaction_examples.cxx +195 -0
  217. data/ext/couchbase/test/{test_transaction_transaction_simple.cxx → test_transaction_simple.cxx} +17 -5
  218. data/ext/couchbase/test/{test_transaction_transaction_simple_async.cxx → test_transaction_simple_async.cxx} +19 -21
  219. data/ext/couchbase/test/test_unit_config_profiles.cxx +1 -1
  220. data/ext/couchbase/test/test_unit_json_transcoder.cxx +4 -0
  221. data/ext/couchbase/test/test_unit_search.cxx +427 -0
  222. data/ext/couchbase/test/test_unit_transaction_utils.cxx +10 -1
  223. data/ext/couchbase/test/test_unit_utils.cxx +8 -4
  224. data/ext/couchbase.cxx +58 -16
  225. data/ext/revisions.rb +3 -3
  226. data/lib/couchbase/authenticator.rb +0 -1
  227. data/lib/couchbase/cluster.rb +0 -4
  228. data/lib/couchbase/config_profiles.rb +1 -1
  229. data/lib/couchbase/json_transcoder.rb +12 -5
  230. data/lib/couchbase/management/collection_query_index_manager.rb +54 -15
  231. data/lib/couchbase/management/query_index_manager.rb +70 -5
  232. data/lib/couchbase/raw_binary_transcoder.rb +37 -0
  233. data/lib/couchbase/raw_json_transcoder.rb +38 -0
  234. data/lib/couchbase/raw_string_transcoder.rb +40 -0
  235. data/lib/couchbase/search_options.rb +5 -0
  236. data/lib/couchbase/transcoder_flags.rb +62 -0
  237. data/lib/couchbase/version.rb +1 -1
  238. metadata +139 -11
  239. data/ext/couchbase/core/config_profile.cxx +0 -47
  240. /data/ext/couchbase/test/{test_transaction_transaction_public_async_api.cxx → test_transaction_public_async_api.cxx} +0 -0
  241. /data/ext/couchbase/test/{test_transaction_transaction_public_blocking_api.cxx → test_transaction_public_blocking_api.cxx} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 78899f9fd7614787a46a54ca185e869cc93a7714ff0a1ef4c38feef98d7d54be
4
- data.tar.gz: f42e90dc0e70b2f690f9c4f7dffe3cd9675db7d8f9025bb5db315b6e59407199
3
+ metadata.gz: 573df37049b91d6dc00b674904dbda7883a4a20e7078191fc01f3b29f139df13
4
+ data.tar.gz: ec07bdbe1a3cdd5caab78b7bc4af3e525d0dba25e54e8bfb13b5d07203c0361a
5
5
  SHA512:
6
- metadata.gz: 804b0a4c05754a5349b19f4b06ee1017f62790e2f5f50696639d9cfc1b785d4f43d688cb05c325f5e10cb1e36fca1e4775c93f91cbf10ad600a5f4755a091a28
7
- data.tar.gz: cbb64fe3e1c2f5925584032cd69bb626e87c9ff61c7735a570a7e291287874076e366e2282e15d432c18832b9853c749d806cab28aa65716dc91ab835910bd6b
6
+ metadata.gz: 3b945f9a1942520c04fb22810049bda99e4daecccbadab60c9df474ec9d606a92f253f56e815739e3d64c927727d83d74265973fa72a6493ab38cc27df5f0913
7
+ data.tar.gz: 7cfa5628c2dc3a4c43741e139e064ac20f1085fd446f3b10cc480fc622464d0396cfa31d470cdca9c7c8323bb37d6b38ef1200c4b8d4b511fea0642a56f699d5
data/README.md CHANGED
@@ -23,7 +23,7 @@ The library has been tested with MRI 3.0, 3.1 and 3.2. Supported platforms are L
23
23
  Add this line to your application's Gemfile:
24
24
 
25
25
  ```ruby
26
- gem "couchbase", "3.4.2"
26
+ gem "couchbase", "3.4.3"
27
27
  ```
28
28
 
29
29
  And then execute:
@@ -80,6 +80,7 @@ add_subdirectory(core/tracing)
80
80
  add_subdirectory(core/metrics)
81
81
 
82
82
  set(couchbase_cxx_client_FILES
83
+ ${CMAKE_CURRENT_BINARY_DIR}/generated/mozilla_ca_bundle.cxx
83
84
  core/agent.cxx
84
85
  core/agent_config.cxx
85
86
  core/agent_group.cxx
@@ -91,7 +92,7 @@ set(couchbase_cxx_client_FILES
91
92
  core/cluster_agent_config.cxx
92
93
  core/cluster_options.cxx
93
94
  core/collections_component.cxx
94
- core/config_profile.cxx
95
+ core/config_profiles.cxx
95
96
  core/core_sdk_shim.cxx
96
97
  core/crud_component.cxx
97
98
  core/dispatcher.cxx
@@ -256,41 +257,73 @@ set(couchbase_cxx_client_FILES
256
257
  core/utils/split_string.cxx
257
258
  core/utils/url_codec.cxx
258
259
  core/impl/analytics.cxx
260
+ core/impl/search.cxx
259
261
  core/impl/analytics_error_category.cxx
260
262
  core/impl/append.cxx
261
263
  core/impl/best_effort_retry_strategy.cxx
264
+ core/impl/boolean_field_query.cxx
265
+ core/impl/boolean_query.cxx
262
266
  core/impl/build_deferred_query_indexes.cxx
263
- core/impl/collection_query_index_manager.cxx
264
267
  core/impl/cluster.cxx
268
+ core/impl/collection_query_index_manager.cxx
265
269
  core/impl/common_error_category.cxx
266
270
  core/impl/configuration_profiles_registry.cxx
271
+ core/impl/conjunction_query.cxx
267
272
  core/impl/create_query_index.cxx
273
+ core/impl/date_range.cxx
274
+ core/impl/date_range_facet.cxx
275
+ core/impl/date_range_facet_result.cxx
276
+ core/impl/date_range_query.cxx
268
277
  core/impl/decrement.cxx
278
+ core/impl/disjunction_query.cxx
269
279
  core/impl/dns_srv_tracker.cxx
270
280
  core/impl/drop_query_index.cxx
271
281
  core/impl/exists.cxx
272
282
  core/impl/expiry.cxx
273
283
  core/impl/fail_fast_retry_strategy.cxx
274
284
  core/impl/field_level_encryption_error_category.cxx
285
+ core/impl/geo_bounding_box_query.cxx
286
+ core/impl/geo_distance_query.cxx
287
+ core/impl/geo_polygon_query.cxx
275
288
  core/impl/get.cxx
289
+ core/impl/get_all_query_indexes.cxx
276
290
  core/impl/get_all_replicas.cxx
277
291
  core/impl/get_and_lock.cxx
278
292
  core/impl/get_and_touch.cxx
279
- core/impl/get_all_query_indexes.cxx
280
293
  core/impl/get_any_replica.cxx
281
294
  core/impl/get_replica.cxx
282
295
  core/impl/increment.cxx
283
296
  core/impl/insert.cxx
297
+ core/impl/internal_date_range_facet_result.cxx
298
+ core/impl/internal_numeric_range_facet_result.cxx
299
+ core/impl/internal_search_error_context.cxx
300
+ core/impl/internal_search_meta_data.cxx
301
+ core/impl/internal_search_result.cxx
302
+ core/impl/internal_search_row.cxx
303
+ core/impl/internal_search_row_locations.cxx
304
+ core/impl/internal_term_facet_result.cxx
284
305
  core/impl/key_value_error_category.cxx
285
306
  core/impl/lookup_in.cxx
286
307
  core/impl/management_error_category.cxx
308
+ core/impl/match_all_query.cxx
309
+ core/impl/match_none_query.cxx
310
+ core/impl/match_phrase_query.cxx
311
+ core/impl/match_query.cxx
287
312
  core/impl/mutate_in.cxx
288
313
  core/impl/network_error_category.cxx
314
+ core/impl/numeric_range.cxx
315
+ core/impl/numeric_range_facet.cxx
316
+ core/impl/numeric_range_facet_result.cxx
317
+ core/impl/numeric_range_query.cxx
289
318
  core/impl/observe_poll.cxx
290
319
  core/impl/observe_seqno.cxx
320
+ core/impl/phrase_query.cxx
321
+ core/impl/prefix_query.cxx
291
322
  core/impl/prepend.cxx
292
323
  core/impl/query.cxx
293
324
  core/impl/query_error_category.cxx
325
+ core/impl/query_string_query.cxx
326
+ core/impl/regexp_query.cxx
294
327
  core/impl/remove.cxx
295
328
  core/impl/replace.cxx
296
329
  core/impl/retry_action.cxx
@@ -314,6 +347,20 @@ set(couchbase_cxx_client_FILES
314
347
  core/impl/subdoc/remove.cxx
315
348
  core/impl/subdoc/replace.cxx
316
349
  core/impl/subdoc/upsert.cxx
350
+ core/impl/search.cxx
351
+ core/impl/search_error_context.cxx
352
+ core/impl/search_meta_data.cxx
353
+ core/impl/search_result.cxx
354
+ core/impl/search_row.cxx
355
+ core/impl/search_row_location.cxx
356
+ core/impl/search_row_locations.cxx
357
+ core/impl/search_sort_field.cxx
358
+ core/impl/search_sort_id.cxx
359
+ core/impl/search_sort_score.cxx
360
+ core/impl/term_facet.cxx
361
+ core/impl/term_facet_result.cxx
362
+ core/impl/term_query.cxx
363
+ core/impl/term_range_query.cxx
317
364
  core/impl/touch.cxx
318
365
  core/impl/transaction_error_category.cxx
319
366
  core/impl/transaction_get_result.cxx
@@ -322,6 +369,7 @@ set(couchbase_cxx_client_FILES
322
369
  core/impl/upsert.cxx
323
370
  core/impl/view_error_category.cxx
324
371
  core/impl/watch_query_indexes.cxx
372
+ core/impl/wildcard_query.cxx
325
373
  core/io/dns_client.cxx
326
374
  core/io/dns_config.cxx
327
375
  core/io/http_parser.cxx
@@ -331,11 +379,12 @@ set(couchbase_cxx_client_FILES
331
379
  core/transactions/atr_cleanup_entry.cxx
332
380
  core/transactions/atr_ids.cxx
333
381
  core/transactions/attempt_context_impl.cxx
382
+ core/transactions/attempt_context_testing_hooks.cxx
334
383
  core/transactions/binary.cxx
384
+ core/transactions/cleanup_testing_hooks.cxx
335
385
  core/transactions/exceptions.cxx
336
386
  core/transactions/result.cxx
337
387
  core/transactions/staged_mutation.cxx
338
- core/transactions/utils.cxx
339
388
  core/transactions/transaction_attempt.cxx
340
389
  core/transactions/transaction_context.cxx
341
390
  core/transactions/transaction_get_result.cxx
@@ -344,7 +393,8 @@ set(couchbase_cxx_client_FILES
344
393
  core/transactions/transactions.cxx
345
394
  core/transactions/transactions_cleanup.cxx
346
395
  core/transactions/transactions_config.cxx
347
- core/transactions/uid_generator.cxx)
396
+ core/transactions/uid_generator.cxx
397
+ core/transactions/utils.cxx)
348
398
 
349
399
  if (COUCHBASE_CXX_CLIENT_BUILD_SHARED)
350
400
  add_library(couchbase_cxx_client SHARED ${couchbase_cxx_client_FILES})
@@ -403,9 +453,9 @@ endif ()
403
453
  if (NOT COUCHBASE_CXX_CLIENT_POST_LINKED_OPENSSL)
404
454
  if (TARGET PkgConfig::PKG_CONFIG_OPENSSL)
405
455
  target_link_libraries(couchbase_cxx_client PUBLIC PkgConfig::PKG_CONFIG_OPENSSL)
406
- else()
456
+ else ()
407
457
  target_link_libraries(couchbase_cxx_client PUBLIC OpenSSL::SSL OpenSSL::Crypto)
408
- endif()
458
+ endif ()
409
459
  endif ()
410
460
 
411
461
  option(COUCHBASE_CXX_CLIENT_BUILD_TESTS "Build test programs" TRUE)
@@ -20,7 +20,6 @@ if(DOXYGEN_FOUND AND DOT)
20
20
  set(DOXYGEN_INDEX_FILE ${DOXYGEN_OUTPUT_DIR}/html/index.html)
21
21
  set(DOXYGEN_CONFIG_TEMPLATE ${PROJECT_SOURCE_DIR}/docs/Doxyfile.in)
22
22
  set(DOXYGEN_CONFIG ${PROJECT_BINARY_DIR}/Doxyfile)
23
- file(MAKE_DIRECTORY ${DOXYGEN_OUTPUT_DIR})
24
23
  configure_file(${DOXYGEN_CONFIG_TEMPLATE} ${DOXYGEN_CONFIG})
25
24
  add_custom_command(
26
25
  OUTPUT ${DOXYGEN_INDEX_FILE}
@@ -49,7 +49,7 @@ else()
49
49
  OPENSSL_USABLE ${CMAKE_CURRENT_BINARY_DIR}
50
50
  ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test_openssl.cxx
51
51
  LINK_LIBRARIES OpenSSL::SSL CXX_STANDARD 17)
52
- if( OPENSSL_USABLE)
52
+ if(OPENSSL_USABLE)
53
53
  message(STATUS "OPENSSL_VERSION: ${OPENSSL_VERSION}")
54
54
  message(STATUS "OPENSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}")
55
55
  message(STATUS "OPENSSL_LIBRARIES: ${OPENSSL_LIBRARIES}")
@@ -60,7 +60,12 @@ else()
60
60
  "Cannot use OpenSSL ${OPENSSL_VERSION} at \"${OPENSSL_INCLUDE_DIR}\" and \"${OPENSSL_LIBRARIES}\". Will try to use from pkg-config."
61
61
  )
62
62
  find_package(PkgConfig REQUIRED)
63
- pkg_check_modules(PKG_CONFIG_OPENSSL REQUIRED IMPORTED_TARGET GLOBAL openssl11)
63
+ pkg_check_modules(
64
+ PKG_CONFIG_OPENSSL
65
+ REQUIRED
66
+ IMPORTED_TARGET
67
+ GLOBAL
68
+ openssl11)
64
69
  if(PKG_CONFIG_OPENSSL_FOUND)
65
70
  message(STATUS "PKG_CONFIG_OPENSSL_VERSION: ${PKG_CONFIG_OPENSSL_VERSION}")
66
71
  message(STATUS "PKG_CONFIG_OPENSSL_INCLUDE_DIRS: ${PKG_CONFIG_OPENSSL_INCLUDE_DIRS}")
@@ -74,7 +79,12 @@ else()
74
79
  endif()
75
80
  elseif(UNIX)
76
81
  find_package(PkgConfig REQUIRED)
77
- pkg_check_modules(PKG_CONFIG_OPENSSL REQUIRED IMPORTED_TARGET GLOBAL openssl11)
82
+ pkg_check_modules(
83
+ PKG_CONFIG_OPENSSL
84
+ REQUIRED
85
+ IMPORTED_TARGET
86
+ GLOBAL
87
+ openssl11)
78
88
  if(PKG_CONFIG_OPENSSL_FOUND)
79
89
  message(STATUS "PKG_CONFIG_OPENSSL_VERSION: ${PKG_CONFIG_OPENSSL_VERSION}")
80
90
  message(STATUS "PKG_CONFIG_OPENSSL_INCLUDE_DIRS: ${PKG_CONFIG_OPENSSL_INCLUDE_DIRS}")
@@ -90,3 +100,88 @@ endif()
90
100
  # Read more at https://wiki.wireshark.org/TLS
91
101
  option(COUCHBASE_CXX_CLIENT_TLS_KEY_LOG_FILE
92
102
  "Path to file to write per-session secrets (Useful for Wireshark SSL/TLS dissection)")
103
+
104
+ option(COUCHBASE_CXX_CLIENT_EMBED_MOZILLA_CA_BUNDLE
105
+ "Download and embed Mozilla certificates from https://curl.se/ca/cacert.pem" TRUE)
106
+
107
+ if(COUCHBASE_CXX_CLIENT_EMBED_MOZILLA_CA_BUNDLE)
108
+ file(DOWNLOAD "https://curl.se/ca/cacert.pem.sha256" "${CMAKE_CURRENT_BINARY_DIR}/mozilla-ca-bundle.sha256"
109
+ TLS_VERIFY ON)
110
+ file(READ "${CMAKE_CURRENT_BINARY_DIR}/mozilla-ca-bundle.sha256" HASH_FILE_CONTENT)
111
+ string(
112
+ REGEX MATCH
113
+ "^([0-9a-f]+)"
114
+ COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_SHA256
115
+ ${HASH_FILE_CONTENT})
116
+ if(NOT COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_SHA256)
117
+ message(FATAL_ERROR "Failed to extract expected hash from file")
118
+ endif()
119
+ file(
120
+ DOWNLOAD "https://curl.se/ca/cacert.pem" "${CMAKE_CURRENT_BINARY_DIR}/mozilla-ca-bundle.crt"
121
+ TLS_VERIFY ON
122
+ EXPECTED_HASH SHA256=${COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_SHA256})
123
+
124
+ file(READ "${CMAKE_CURRENT_BINARY_DIR}/mozilla-ca-bundle.crt" CA_BUNDLE_CONTENT)
125
+ string(
126
+ REGEX MATCH
127
+ "Certificate data from Mozilla as of: ([^\n]*)"
128
+ CA_BUNDLE_DATE_LINE
129
+ ${CA_BUNDLE_CONTENT})
130
+ set(COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_DATE "${CMAKE_MATCH_1}")
131
+ else()
132
+ set(CA_BUNDLE_CONTENT "")
133
+ endif()
134
+
135
+ set(CA_BUNDLE_CPP_FILE "${CMAKE_CURRENT_BINARY_DIR}/generated/mozilla_ca_bundle.cxx")
136
+
137
+ # We parse CRT file because C++ does not allow string literals over 64k, and turning everything into bytes does not
138
+ # seems to be cross-platform and fast.
139
+ string(
140
+ REGEX MATCHALL
141
+ "[^=#]+=+\n-----BEGIN CERTIFICATE-----[^-]+-----END CERTIFICATE-----"
142
+ CERTIFICATES
143
+ "${CA_BUNDLE_CONTENT}")
144
+ list(LENGTH CERTIFICATES NUMBER_OF_CERTIFICATES)
145
+ file(
146
+ WRITE ${CA_BUNDLE_CPP_FILE}
147
+ "
148
+ #include \"core/mozilla_ca_bundle.hxx\"
149
+
150
+ namespace couchbase::core::default_ca
151
+ {
152
+ constexpr inline std::size_t number_of_certificates{ ${NUMBER_OF_CERTIFICATES} };
153
+ constexpr inline certificate certificates[]{
154
+ ")
155
+ foreach(CERTIFICATE ${CERTIFICATES})
156
+ string(
157
+ REGEX MATCH
158
+ "[ \t\r\n]*([^=\n]+)[ \t\r\n]*=+\n(-----BEGIN CERTIFICATE-----[^-]+-----END CERTIFICATE-----)"
159
+ PARTS
160
+ ${CERTIFICATE})
161
+ file(APPEND ${CA_BUNDLE_CPP_FILE} " { R\"(${CMAKE_MATCH_1})\",\n R\"(${CMAKE_MATCH_2})\" },\n\n")
162
+ endforeach()
163
+
164
+ file(
165
+ APPEND ${CA_BUNDLE_CPP_FILE}
166
+ " { \"\", \"\" },
167
+ };
168
+
169
+ auto
170
+ mozilla_ca_certs() -> gsl::span<const certificate>
171
+ {
172
+ return { certificates, number_of_certificates };
173
+ }
174
+
175
+ auto
176
+ mozilla_ca_certs_date() -> std::string_view
177
+ {
178
+ return \"${COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_DATE}\";
179
+ }
180
+
181
+ auto
182
+ mozilla_ca_certs_sha256() -> std::string_view
183
+ {
184
+ return \"${COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_SHA256}\";
185
+ }
186
+ } // namespace couchbase::core::default_ca
187
+ ")
@@ -17,7 +17,7 @@ macro(integration_test name)
17
17
  test_integration_${name}
18
18
  project_options
19
19
  project_warnings
20
- Catch2::Catch2
20
+ Catch2::Catch2WithMain
21
21
  Threads::Threads
22
22
  snappy
23
23
  couchbase_cxx_client
@@ -25,6 +25,8 @@ macro(integration_test name)
25
25
  catch_discover_tests(
26
26
  test_integration_${name}
27
27
  PROPERTIES
28
+ SKIP_REGULAR_EXPRESSION
29
+ "SKIP"
28
30
  LABELS
29
31
  "integration")
30
32
  set_property(GLOBAL APPEND PROPERTY COUCHBASE_INTEGRATION_TESTS "test_integration_${name}")
@@ -44,7 +46,7 @@ macro(transaction_test name)
44
46
  test_transaction_${name}
45
47
  project_options
46
48
  project_warnings
47
- Catch2::Catch2
49
+ Catch2::Catch2WithMain
48
50
  Threads::Threads
49
51
  snappy
50
52
  couchbase_cxx_client
@@ -52,6 +54,8 @@ macro(transaction_test name)
52
54
  catch_discover_tests(
53
55
  test_transaction_${name}
54
56
  PROPERTIES
57
+ SKIP_REGULAR_EXPRESSION
58
+ "SKIP"
55
59
  LABELS
56
60
  "transaction")
57
61
  set_property(GLOBAL APPEND PROPERTY COUCHBASE_TRANSACTION_TESTS "test_transaction_${name}")
@@ -70,7 +74,7 @@ macro(unit_test name)
70
74
  test_unit_${name}
71
75
  project_options
72
76
  project_warnings
73
- Catch2::Catch2
77
+ Catch2::Catch2WithMain
74
78
  Threads::Threads
75
79
  snappy
76
80
  couchbase_cxx_client
@@ -78,6 +82,8 @@ macro(unit_test name)
78
82
  catch_discover_tests(
79
83
  test_unit_${name}
80
84
  PROPERTIES
85
+ SKIP_REGULAR_EXPRESSION
86
+ "SKIP"
81
87
  LABELS
82
88
  "unit")
83
89
  set_property(GLOBAL APPEND PROPERTY COUCHBASE_UNIT_TESTS "test_unit_${name}")
@@ -96,7 +102,7 @@ macro(integration_benchmark name)
96
102
  benchmark_integration_${name}
97
103
  project_options
98
104
  project_warnings
99
- Catch2::Catch2
105
+ Catch2::Catch2WithMain
100
106
  Threads::Threads
101
107
  snappy
102
108
  couchbase_cxx_client
@@ -104,6 +110,8 @@ macro(integration_benchmark name)
104
110
  catch_discover_tests(
105
111
  benchmark_integration_${name}
106
112
  PROPERTIES
113
+ SKIP_REGULAR_EXPRESSION
114
+ "SKIP"
107
115
  LABELS
108
116
  "benchmark")
109
117
  set_property(GLOBAL APPEND PROPERTY COUCHBASE_BENCHMARKS "benchmark_integration_${name}")
@@ -18,3 +18,6 @@
18
18
  #pragma once
19
19
 
20
20
  #cmakedefine TLS_KEY_LOG_FILE "@TLS_KEY_LOG_FILE@"
21
+ #cmakedefine COUCHBASE_CXX_CLIENT_EMBED_MOZILLA_CA_BUNDLE
22
+ #cmakedefine COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_DATE "@COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_DATE@"
23
+ #cmakedefine COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_SHA256 "@COUCHBASE_CXX_CLIENT_MOZILLA_CA_BUNDLE_SHA256@"
@@ -315,11 +315,12 @@ class bucket_impl
315
315
  }
316
316
  {
317
317
  std::scoped_lock lock(config_mutex_);
318
- if (!config_->has_node_with_hostname(hostname)) {
318
+ if (!config_->has_node(origin_.options().network, service_type::key_value, origin_.options().enable_tls, hostname, port)) {
319
319
  CB_LOG_TRACE(
320
- R"({} requested to restart session, but the node has been ejected from current configuration already. idx={}, address="{}:{}")",
320
+ R"({} requested to restart session, but the node has been ejected from current configuration already. idx={}, network={}, address="{}:{}")",
321
321
  log_prefix_,
322
322
  index,
323
+ origin_.options().network,
323
324
  hostname,
324
325
  port);
325
326
  return;
@@ -106,6 +106,8 @@ class bucket
106
106
  } else {
107
107
  auto [partition, server] = map_id(cmd->request.id);
108
108
  if (!server.has_value()) {
109
+ CB_LOG_TRACE(
110
+ R"({} unable to map key=\"{}\" to the node, id={}, partition={})", log_prefix(), cmd->request.id, cmd->id_, partition);
109
111
  return io::retry_orchestrator::maybe_retry(
110
112
  cmd->manager_, cmd, retry_reason::node_not_available, errc::common::request_canceled);
111
113
  }
@@ -114,9 +116,16 @@ class bucket
114
116
  }
115
117
  auto session = find_session_by_index(index);
116
118
  if (!session || !session->has_config()) {
119
+ CB_LOG_TRACE(R"({} defer operation id={}, session={}, has_config={})",
120
+ log_prefix(),
121
+ cmd->id_,
122
+ session.has_value(),
123
+ session.has_value() && session->has_config());
117
124
  return defer_command([self = shared_from_this(), cmd]() { self->map_and_send(cmd); });
118
125
  }
119
126
  if (session->is_stopped()) {
127
+ CB_LOG_TRACE(
128
+ R"({} the session has been found, but it is stopped, retrying id={}, session={})", log_prefix(), cmd->id_, session->id());
120
129
  return io::retry_orchestrator::maybe_retry(
121
130
  cmd->manager_, cmd, retry_reason::node_not_available, errc::common::request_canceled);
122
131
  }
@@ -33,6 +33,7 @@
33
33
  #include "diagnostics.hxx"
34
34
  #include "dispatcher.hxx"
35
35
  #include "impl/dns_srv_tracker.hxx"
36
+ #include "mozilla_ca_bundle.hxx"
36
37
  #include "operations.hxx"
37
38
  #include "origin.hxx"
38
39
 
@@ -394,6 +395,21 @@ class cluster : public std::enable_shared_from_this<cluster>
394
395
  CB_LOG_WARNING("[{}]: unable to load default CAs: {}", id_, ec.message());
395
396
  // we don't consider this fatal and try to continue without it
396
397
  }
398
+
399
+ if (const auto certificates = default_ca::mozilla_ca_certs();
400
+ !origin_.options().disable_mozilla_ca_certificates && !certificates.empty()) {
401
+ CB_LOG_DEBUG("[{}]: loading {} CA certificates from Mozilla bundle. Update date: \"{}\", SHA256: \"{}\"",
402
+ id_,
403
+ certificates.size(),
404
+ default_ca::mozilla_ca_certs_date(),
405
+ default_ca::mozilla_ca_certs_sha256());
406
+ for (const auto& cert : certificates) {
407
+ tls_.add_certificate_authority(asio::const_buffer(cert.body.data(), cert.body.size()), ec);
408
+ if (ec) {
409
+ CB_LOG_WARNING("[{}]: unable to load CA \"{}\" from Mozilla bundle: {}", id_, cert.authority, ec.message());
410
+ }
411
+ }
412
+ }
397
413
  } else { // trust certificate is explicitly specified
398
414
  std::error_code ec{};
399
415
  // load only the explicit certificate
@@ -430,6 +446,7 @@ class cluster : public std::enable_shared_from_this<cluster>
430
446
  return close([ec, handler = std::forward<Handler>(handler)]() mutable { return handler(ec); });
431
447
  }
432
448
  }
449
+
433
450
  session_ = io::mcbp_session(id_, ctx_, tls_, origin_, dns_srv_tracker_);
434
451
  } else {
435
452
  session_ = io::mcbp_session(id_, ctx_, origin_, dns_srv_tracker_);
@@ -16,7 +16,7 @@
16
16
  */
17
17
 
18
18
  #include "cluster_options.hxx"
19
- #include "config_profile.hxx"
19
+ #include "config_profiles.hxx"
20
20
  #include <stdexcept>
21
21
 
22
22
  namespace couchbase::core
@@ -45,6 +45,6 @@ cluster_options::default_timeout_for(service_type type) const
45
45
  void
46
46
  cluster_options::apply_profile(std::string profile_name)
47
47
  {
48
- couchbase::core::known_profiles().apply(profile_name, *this);
48
+ known_profiles().apply(profile_name, *this);
49
49
  }
50
50
  } // namespace couchbase::core
@@ -25,6 +25,7 @@
25
25
  #include "core/transactions/cleanup_testing_hooks.hxx"
26
26
  #include "service_type.hxx"
27
27
  #include "timeout_defaults.hxx"
28
+ #include "tls_verify_mode.hxx"
28
29
 
29
30
  #include <couchbase/best_effort_retry_strategy.hxx>
30
31
  #include <couchbase/metrics/meter.hxx>
@@ -32,16 +33,10 @@
32
33
  #include <couchbase/transactions/transactions_config.hxx>
33
34
 
34
35
  #include <chrono>
35
- #include <list>
36
36
  #include <string>
37
37
 
38
38
  namespace couchbase::core
39
39
  {
40
- enum class tls_verify_mode {
41
- none,
42
- peer,
43
- };
44
-
45
40
  struct cluster_options {
46
41
  std::chrono::milliseconds bootstrap_timeout = timeout_defaults::bootstrap_timeout;
47
42
  std::chrono::milliseconds resolve_timeout = timeout_defaults::resolve_timeout;
@@ -86,6 +81,9 @@ struct cluster_options {
86
81
  couchbase::transactions::transactions_config::built transactions{};
87
82
 
88
83
  [[nodiscard]] std::chrono::milliseconds default_timeout_for(service_type type) const;
84
+
85
+ bool dump_configuration{ false };
86
+ bool disable_mozilla_ca_certificates{ false };
89
87
  void apply_profile(std::string profile_name);
90
88
  };
91
89
 
@@ -0,0 +1,26 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020-2021 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
+ namespace couchbase
21
+ {
22
+ namespace core
23
+ {
24
+ struct cluster_options;
25
+ } // namespace core
26
+ } // namespace couchbase
@@ -16,13 +16,7 @@
16
16
  */
17
17
  #pragma once
18
18
 
19
- #include "cluster_options.hxx"
20
- #include <chrono>
21
- #include <fmt/core.h>
22
- #include <map>
23
- #include <mutex>
24
- #include <stdexcept>
25
- #include <string>
19
+ #include "cluster_options_fwd.hxx"
26
20
 
27
21
  namespace couchbase::core
28
22
  {
@@ -32,51 +26,4 @@ class config_profile
32
26
  virtual ~config_profile() = default;
33
27
  virtual void apply(cluster_options&) = 0;
34
28
  };
35
-
36
- class development_profile : public config_profile
37
- {
38
- public:
39
- void apply(couchbase::core::cluster_options& opts) override;
40
- };
41
-
42
- // this class just registers the known profiles defined above, and allows access to them.
43
- class config_profiles
44
- {
45
- private:
46
- std::map<std::string, std::shared_ptr<couchbase::core::config_profile>> profiles_;
47
- std::mutex mut_;
48
-
49
- public:
50
- config_profiles() noexcept
51
- {
52
- // add all known profiles (above) to the map
53
- register_profile<development_profile>("wan_development");
54
- }
55
-
56
- void apply(const std::string& profile_name, couchbase::core::cluster_options& opts)
57
- {
58
- std::lock_guard<std::mutex> lock(mut_);
59
- auto it = profiles_.find(profile_name);
60
- if (it != profiles_.end()) {
61
- it->second->apply(opts);
62
- } else {
63
- throw std::invalid_argument(fmt::format("unknown profile '{}'", profile_name));
64
- }
65
- }
66
-
67
- template<typename T, typename... Args>
68
- void register_profile(const std::string& name, Args... args)
69
- {
70
- // This will just add it, doesn't look to see if it is overwriting an existing profile.
71
- // TODO: perhaps add a template Args param?
72
- // TODO: should we make this thread-safe? Easy enough here, but we'd need to make the
73
- // singleton thread-safe too.
74
- std::lock_guard<std::mutex> lock(mut_);
75
- profiles_.emplace(std::make_pair(name, std::make_shared<T>(args...)));
76
- }
77
- };
78
-
79
- config_profiles&
80
- known_profiles();
81
-
82
29
  } // namespace couchbase::core