couchbase 3.4.0 → 3.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/ext/couchbase/CMakeLists.txt +10 -3
  4. data/ext/couchbase/cmake/CompilerWarnings.cmake +12 -4
  5. data/ext/couchbase/cmake/Documentation.cmake +4 -3
  6. data/ext/couchbase/cmake/OpenSSL.cmake +52 -7
  7. data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +4 -0
  8. data/ext/couchbase/cmake/VersionInfo.cmake +39 -3
  9. data/ext/couchbase/cmake/test_openssl.cxx +7 -0
  10. data/ext/couchbase/core/cluster_options.hxx +0 -1
  11. data/ext/couchbase/core/config_profile.cxx +23 -1
  12. data/ext/couchbase/core/config_profile.hxx +2 -12
  13. data/ext/couchbase/core/crypto/CMakeLists.txt +5 -1
  14. data/ext/couchbase/core/impl/analytics.cxx +236 -0
  15. data/ext/couchbase/core/impl/cluster.cxx +0 -1
  16. data/ext/couchbase/core/impl/collection_query_index_manager.cxx +3 -3
  17. data/ext/couchbase/core/impl/dns_srv_tracker.cxx +5 -3
  18. data/ext/couchbase/core/impl/get_all_query_indexes.cxx +3 -3
  19. data/ext/couchbase/core/impl/query.cxx +5 -5
  20. data/ext/couchbase/core/impl/transaction_get_result.cxx +54 -0
  21. data/ext/couchbase/core/io/dns_client.cxx +225 -0
  22. data/ext/couchbase/core/io/dns_client.hxx +19 -188
  23. data/ext/couchbase/core/meta/CMakeLists.txt +7 -5
  24. data/ext/couchbase/core/meta/version.cxx +19 -0
  25. data/ext/couchbase/core/operations/document_search.cxx +5 -2
  26. data/ext/couchbase/core/operations/document_search.hxx +0 -1
  27. data/ext/couchbase/core/transactions/active_transaction_record.hxx +2 -2
  28. data/ext/couchbase/core/transactions/atr_cleanup_entry.cxx +1 -0
  29. data/ext/couchbase/core/transactions/attempt_context_impl.cxx +65 -31
  30. data/ext/couchbase/core/transactions/attempt_context_impl.hxx +44 -23
  31. data/ext/couchbase/core/transactions/forward_compat.hxx +2 -2
  32. data/ext/couchbase/core/transactions/internal/transaction_context.hxx +13 -13
  33. data/ext/couchbase/core/transactions/internal/transaction_fields.hxx +1 -0
  34. data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +7 -1
  35. data/ext/couchbase/core/transactions/staged_mutation.cxx +1 -1
  36. data/ext/couchbase/core/transactions/staged_mutation.hxx +12 -2
  37. data/ext/couchbase/core/transactions/transaction_context.cxx +9 -11
  38. data/ext/couchbase/core/transactions/transaction_get_result.cxx +41 -31
  39. data/ext/couchbase/core/transactions/transaction_get_result.hxx +7 -3
  40. data/ext/couchbase/core/transactions/transaction_links.hxx +13 -1
  41. data/ext/couchbase/core/transactions/transactions_cleanup.cxx +144 -155
  42. data/ext/couchbase/core/transactions/waitable_op_list.hxx +1 -0
  43. data/ext/couchbase/core/utils/connection_string.cxx +10 -3
  44. data/ext/couchbase/core/utils/connection_string.hxx +3 -3
  45. data/ext/couchbase/couchbase/analytics_error_context.hxx +143 -0
  46. data/ext/couchbase/couchbase/analytics_meta_data.hxx +155 -0
  47. data/ext/couchbase/couchbase/analytics_metrics.hxx +163 -0
  48. data/ext/couchbase/couchbase/analytics_options.hxx +359 -0
  49. data/ext/couchbase/couchbase/analytics_result.hxx +102 -0
  50. data/ext/couchbase/couchbase/analytics_scan_consistency.hxx +46 -0
  51. data/ext/couchbase/couchbase/analytics_status.hxx +41 -0
  52. data/ext/couchbase/couchbase/analytics_warning.hxx +85 -0
  53. data/ext/couchbase/couchbase/cluster.hxx +35 -2
  54. data/ext/couchbase/couchbase/cluster_options.hxx +10 -10
  55. data/ext/couchbase/couchbase/collection.hxx +22 -17
  56. data/ext/couchbase/couchbase/collection_query_index_manager.hxx +1 -1
  57. data/ext/couchbase/couchbase/common_options.hxx +1 -1
  58. data/ext/couchbase/couchbase/configuration_profile.hxx +1 -1
  59. data/ext/couchbase/couchbase/configuration_profiles_registry.hxx +0 -1
  60. data/ext/couchbase/couchbase/create_primary_query_index_options.hxx +1 -1
  61. data/ext/couchbase/couchbase/drop_primary_query_index_options.hxx +1 -1
  62. data/ext/couchbase/couchbase/drop_query_index_options.hxx +1 -1
  63. data/ext/couchbase/couchbase/fmt/analytics_status.hxx +76 -0
  64. data/ext/couchbase/couchbase/fmt/cas.hxx +12 -0
  65. data/ext/couchbase/couchbase/fmt/durability_level.hxx +6 -0
  66. data/ext/couchbase/couchbase/fmt/key_value_extended_error_info.hxx +6 -0
  67. data/ext/couchbase/couchbase/fmt/key_value_status_code.hxx +6 -0
  68. data/ext/couchbase/couchbase/fmt/mutation_token.hxx +6 -0
  69. data/ext/couchbase/couchbase/fmt/query_scan_consistency.hxx +6 -0
  70. data/ext/couchbase/couchbase/fmt/query_status.hxx +6 -0
  71. data/ext/couchbase/couchbase/fmt/retry_reason.hxx +6 -0
  72. data/ext/couchbase/couchbase/fmt/tls_verify_mode.hxx +6 -0
  73. data/ext/couchbase/couchbase/get_all_query_indexes_options.hxx +5 -4
  74. data/ext/couchbase/couchbase/query_index_manager.hxx +4 -2
  75. data/ext/couchbase/couchbase/query_options.hxx +0 -1
  76. data/ext/couchbase/couchbase/scope.hxx +34 -1
  77. data/ext/couchbase/couchbase/subdoc/array_add_unique.hxx +2 -0
  78. data/ext/couchbase/couchbase/subdoc/array_append.hxx +2 -0
  79. data/ext/couchbase/couchbase/subdoc/array_insert.hxx +2 -0
  80. data/ext/couchbase/couchbase/subdoc/array_prepend.hxx +2 -0
  81. data/ext/couchbase/couchbase/subdoc/count.hxx +2 -0
  82. data/ext/couchbase/couchbase/subdoc/counter.hxx +2 -0
  83. data/ext/couchbase/couchbase/subdoc/exists.hxx +2 -0
  84. data/ext/couchbase/couchbase/subdoc/get.hxx +2 -0
  85. data/ext/couchbase/couchbase/subdoc/insert.hxx +2 -0
  86. data/ext/couchbase/couchbase/subdoc/remove.hxx +2 -0
  87. data/ext/couchbase/couchbase/subdoc/replace.hxx +3 -1
  88. data/ext/couchbase/couchbase/subdoc/upsert.hxx +2 -0
  89. data/ext/couchbase/couchbase/transaction_op_error_context.hxx +4 -4
  90. data/ext/couchbase/couchbase/transactions/attempt_context.hxx +1 -1
  91. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +36 -51
  92. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +1 -1
  93. data/ext/couchbase/test/CMakeLists.txt +3 -2
  94. data/ext/couchbase/test/test_helper.hxx +1 -1
  95. data/ext/couchbase/test/test_integration_analytics.cxx +289 -13
  96. data/ext/couchbase/test/test_integration_crud.cxx +8 -1
  97. data/ext/couchbase/test/test_integration_examples.cxx +182 -0
  98. data/ext/couchbase/test/test_integration_management.cxx +15 -3
  99. data/ext/couchbase/test/test_integration_search.cxx +601 -0
  100. data/ext/couchbase/test/test_transaction_transaction_simple.cxx +73 -0
  101. data/ext/couchbase/test/test_unit_config_profiles.cxx +12 -12
  102. data/ext/couchbase/test/test_unit_connection_string.cxx +35 -0
  103. data/ext/couchbase/test/test_unit_transaction_utils.cxx +76 -19
  104. data/ext/couchbase/third_party/snappy/CMakeLists.txt +150 -27
  105. data/ext/couchbase/third_party/snappy/cmake/config.h.in +28 -24
  106. data/ext/couchbase/third_party/snappy/snappy-internal.h +189 -25
  107. data/ext/couchbase/third_party/snappy/snappy-sinksource.cc +26 -9
  108. data/ext/couchbase/third_party/snappy/snappy-sinksource.h +11 -11
  109. data/ext/couchbase/third_party/snappy/snappy-stubs-internal.cc +1 -1
  110. data/ext/couchbase/third_party/snappy/snappy-stubs-internal.h +227 -308
  111. data/ext/couchbase/third_party/snappy/snappy-stubs-public.h.in +0 -11
  112. data/ext/couchbase/third_party/snappy/snappy.cc +1176 -410
  113. data/ext/couchbase/third_party/snappy/snappy.h +19 -4
  114. data/ext/couchbase.cxx +506 -26
  115. data/ext/extconf.rb +2 -1
  116. data/ext/revisions.rb +3 -2
  117. data/lib/couchbase/binary_collection.rb +4 -4
  118. data/lib/couchbase/cluster.rb +13 -9
  119. data/lib/couchbase/cluster_registry.rb +7 -2
  120. data/lib/couchbase/collection.rb +5 -0
  121. data/lib/couchbase/configuration.rb +3 -4
  122. data/lib/couchbase/errors.rb +10 -0
  123. data/lib/couchbase/management/collection_query_index_manager.rb +183 -0
  124. data/lib/couchbase/management/query_index_manager.rb +35 -3
  125. data/lib/couchbase/management.rb +1 -0
  126. data/lib/couchbase/options.rb +87 -5
  127. data/lib/couchbase/search_options.rb +158 -240
  128. data/lib/couchbase/version.rb +1 -1
  129. metadata +21 -6
  130. data/ext/couchbase/core/CMakeLists.txt +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97dc31f5d538a882e27e0d837a7865798a5d50a3ba04f76592683a8300211b36
4
- data.tar.gz: 9c6f2fea36ce5b5fcdaf26f93d18e5a8d1024dd9aa82024eb296b08587c14cf5
3
+ metadata.gz: 78899f9fd7614787a46a54ca185e869cc93a7714ff0a1ef4c38feef98d7d54be
4
+ data.tar.gz: f42e90dc0e70b2f690f9c4f7dffe3cd9675db7d8f9025bb5db315b6e59407199
5
5
  SHA512:
6
- metadata.gz: 1c63fafd6e367c42f670dcc93d54c1a6e1ed47af28c349e22be3d2167fe9b734530146b3e03116b222813c202bfecbc14d0f1ad2d704bf82e8deda1ef6e39d8d
7
- data.tar.gz: e0593d3d352f29054ee3be5c272c24c968f03960e845ff45cb67cfaaeb61c2e59828c6e03a4271d21200f5a3a84a234b101a25880b0ff32cb076b694d4d9f05c
6
+ metadata.gz: 804b0a4c05754a5349b19f4b06ee1017f62790e2f5f50696639d9cfc1b785d4f43d688cb05c325f5e10cb1e36fca1e4775c93f91cbf10ad600a5f4755a091a28
7
+ data.tar.gz: cbb64fe3e1c2f5925584032cd69bb626e87c9ff61c7735a570a7e291287874076e366e2282e15d432c18832b9853c749d806cab28aa65716dc91ab835910bd6b
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.0"
26
+ gem "couchbase", "3.4.2"
27
27
  ```
28
28
 
29
29
  And then execute:
@@ -139,7 +139,7 @@ Now the API reference is accessible using a web browser (where `VERSION` is the
139
139
 
140
140
  The gem is available as open source under the terms of the [Apache2 License](https://opensource.org/licenses/Apache-2.0).
141
141
 
142
- Copyright 2011-2021 Couchbase, Inc.
142
+ Copyright 2011-Present Couchbase, Inc.
143
143
 
144
144
  Licensed under the Apache License, Version 2.0 (the "License");
145
145
  you may not use this file except in compliance with the License.
@@ -255,6 +255,7 @@ set(couchbase_cxx_client_FILES
255
255
  core/utils/mutation_token.cxx
256
256
  core/utils/split_string.cxx
257
257
  core/utils/url_codec.cxx
258
+ core/impl/analytics.cxx
258
259
  core/impl/analytics_error_category.cxx
259
260
  core/impl/append.cxx
260
261
  core/impl/best_effort_retry_strategy.cxx
@@ -296,8 +297,6 @@ set(couchbase_cxx_client_FILES
296
297
  core/impl/retry_reason.cxx
297
298
  core/impl/search_error_category.cxx
298
299
  core/impl/streaming_json_lexter_error_category.cxx
299
- core/impl/unlock.cxx
300
- core/impl/watch_query_indexes.cxx
301
300
  core/impl/subdoc/array_add_unique.cxx
302
301
  core/impl/subdoc/array_append.cxx
303
302
  core/impl/subdoc/array_insert.cxx
@@ -317,9 +316,13 @@ set(couchbase_cxx_client_FILES
317
316
  core/impl/subdoc/upsert.cxx
318
317
  core/impl/touch.cxx
319
318
  core/impl/transaction_error_category.cxx
319
+ core/impl/transaction_get_result.cxx
320
320
  core/impl/transaction_op_error_category.cxx
321
+ core/impl/unlock.cxx
321
322
  core/impl/upsert.cxx
322
323
  core/impl/view_error_category.cxx
324
+ core/impl/watch_query_indexes.cxx
325
+ core/io/dns_client.cxx
323
326
  core/io/dns_config.cxx
324
327
  core/io/http_parser.cxx
325
328
  core/io/mcbp_message.cxx
@@ -398,7 +401,11 @@ if (WIN32)
398
401
  endif ()
399
402
 
400
403
  if (NOT COUCHBASE_CXX_CLIENT_POST_LINKED_OPENSSL)
401
- target_link_libraries(couchbase_cxx_client PUBLIC OpenSSL::SSL OpenSSL::Crypto)
404
+ if (TARGET PkgConfig::PKG_CONFIG_OPENSSL)
405
+ target_link_libraries(couchbase_cxx_client PUBLIC PkgConfig::PKG_CONFIG_OPENSSL)
406
+ else()
407
+ target_link_libraries(couchbase_cxx_client PUBLIC OpenSSL::SSL OpenSSL::Crypto)
408
+ endif()
402
409
  endif ()
403
410
 
404
411
  option(COUCHBASE_CXX_CLIENT_BUILD_TESTS "Build test programs" TRUE)
@@ -67,8 +67,8 @@ function(set_project_warnings project_name)
67
67
  -Wuseless-cast # warn if you perform a cast to the same type
68
68
  -Wdeprecated-declarations # warn if [[deprecated]] elements being used
69
69
  )
70
- set(CLANG_WARNINGS ${COMMON_WARNINGS}
71
- -Wshadow # warn the user if a variable declaration shadows one from a parent context
70
+ set(CLANG_WARNINGS ${COMMON_WARNINGS} -Wshadow # warn the user if a variable declaration shadows one from a parent
71
+ # context
72
72
  )
73
73
 
74
74
  if(MSVC)
@@ -76,9 +76,17 @@ function(set_project_warnings project_name)
76
76
  elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
77
77
  set(PROJECT_WARNINGS ${CLANG_WARNINGS})
78
78
  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
79
- if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0.0" AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
79
+ if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "11.0.0"
80
+ AND NOT
81
+ CMAKE_BUILD_TYPE
82
+ STREQUAL
83
+ "Debug")
80
84
  # One of the occurrences: https://github.com/chriskohlhoff/asio/pull/1176
81
- set(GCC_WARNINGS ${GCC_WARNINGS} -Wno-error=null-dereference -Wno-error=array-bounds)
85
+ set(GCC_WARNINGS
86
+ ${GCC_WARNINGS}
87
+ -Wno-error=null-dereference
88
+ -Wno-error=array-bounds
89
+ -Wno-error=stringop-overflow)
82
90
  endif()
83
91
  set(PROJECT_WARNINGS ${GCC_WARNINGS})
84
92
  else()
@@ -11,11 +11,12 @@ if(DOXYGEN_FOUND AND DOT)
11
11
  file(
12
12
  GLOB_RECURSE
13
13
  COUCHBASE_CXX_CLIENT_PUBLIC_HEADERS
14
- ${PROJECT_SOURCE_DIR}/couchbase/*.hxx
15
- ${PROJECT_SOURCE_DIR}/docs/*.hxx)
14
+ ${PROJECT_SOURCE_DIR}/couchbase/**/*.hxx
15
+ ${PROJECT_SOURCE_DIR}/docs/*.hxx
16
+ ${PROJECT_SOURCE_DIR}/docs/*.md)
16
17
 
17
18
  set(DOXYGEN_INPUT_DIR ${PROJECT_SOURCE_DIR}/couchbase)
18
- set(DOXYGEN_OUTPUT_DIR ${PROJECT_BINARY_DIR}/couchbase-cxx-client-${couchbase_cxx_client_VERSION})
19
+ set(DOXYGEN_OUTPUT_DIR ${PROJECT_BINARY_DIR}/couchbase-cxx-client-${COUCHBASE_CXX_CLIENT_SEMVER})
19
20
  set(DOXYGEN_INDEX_FILE ${DOXYGEN_OUTPUT_DIR}/html/index.html)
20
21
  set(DOXYGEN_CONFIG_TEMPLATE ${PROJECT_SOURCE_DIR}/docs/Doxyfile.in)
21
22
  set(DOXYGEN_CONFIG ${PROJECT_BINARY_DIR}/Doxyfile)
@@ -14,11 +14,21 @@ else()
14
14
  if(NOT OPENSSL_ROOT_DIR)
15
15
  if(APPLE AND COUCHBASE_CXX_CLIENT_USE_HOMEBREW_TO_DETECT_OPENSSL)
16
16
  execute_process(
17
- COMMAND brew --prefix openssl@1.1
17
+ COMMAND brew --prefix openssl
18
18
  OUTPUT_VARIABLE OPENSSL_ROOT_DIR
19
+ ERROR_VARIABLE HOMEBREW_STDERR
19
20
  ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
20
21
  if(OPENSSL_ROOT_DIR)
21
- message(STATUS "Found OpenSSL prefix using homebrew: ${OPENSSL_ROOT_DIR}")
22
+ message(STATUS "Found OpenSSL prefix using Homebrew: ${OPENSSL_ROOT_DIR}")
23
+ else()
24
+ execute_process(
25
+ COMMAND brew --prefix openssl@1.1
26
+ OUTPUT_VARIABLE OPENSSL_ROOT_DIR
27
+ ERROR_VARIABLE HOMEBREW_STDERR
28
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
29
+ if(OPENSSL_ROOT_DIR)
30
+ message(STATUS "Found OpenSSL 1.1 prefix using Homebrew: ${OPENSSL_ROOT_DIR}")
31
+ endif()
22
32
  endif()
23
33
  endif()
24
34
  if(MSVC AND COUCHBASE_CXX_CLIENT_USE_SCOOP_TO_DETECT_OPENSSL)
@@ -32,11 +42,46 @@ else()
32
42
  endif()
33
43
  endif()
34
44
  endif()
35
- include(FindOpenSSL)
36
- if(OPENSSL_LIBRARIES AND OPENSSL_INCLUDE_DIR)
37
- message(STATUS "OPENSSL_VERSION: ${OPENSSL_VERSION}")
38
- message(STATUS "OPENSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}")
39
- message(STATUS "OPENSSL_LIBRARIES: ${OPENSSL_LIBRARIES}")
45
+
46
+ find_package(OpenSSL 1.1)
47
+ if(OpenSSL_FOUND)
48
+ try_compile(
49
+ OPENSSL_USABLE ${CMAKE_CURRENT_BINARY_DIR}
50
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test_openssl.cxx
51
+ LINK_LIBRARIES OpenSSL::SSL CXX_STANDARD 17)
52
+ if( OPENSSL_USABLE)
53
+ message(STATUS "OPENSSL_VERSION: ${OPENSSL_VERSION}")
54
+ message(STATUS "OPENSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}")
55
+ message(STATUS "OPENSSL_LIBRARIES: ${OPENSSL_LIBRARIES}")
56
+ else()
57
+ if(UNIX)
58
+ message(
59
+ STATUS
60
+ "Cannot use OpenSSL ${OPENSSL_VERSION} at \"${OPENSSL_INCLUDE_DIR}\" and \"${OPENSSL_LIBRARIES}\". Will try to use from pkg-config."
61
+ )
62
+ find_package(PkgConfig REQUIRED)
63
+ pkg_check_modules(PKG_CONFIG_OPENSSL REQUIRED IMPORTED_TARGET GLOBAL openssl11)
64
+ if(PKG_CONFIG_OPENSSL_FOUND)
65
+ message(STATUS "PKG_CONFIG_OPENSSL_VERSION: ${PKG_CONFIG_OPENSSL_VERSION}")
66
+ message(STATUS "PKG_CONFIG_OPENSSL_INCLUDE_DIRS: ${PKG_CONFIG_OPENSSL_INCLUDE_DIRS}")
67
+ message(STATUS "PKG_CONFIG_OPENSSL_LIBRARIES: ${PKG_CONFIG_OPENSSL_LIBRARIES}")
68
+ else()
69
+ message(FATAL_ERROR "Cannot Find OpenSSL using pkg-config, find_package() returns unusable setup")
70
+ endif()
71
+ else()
72
+ message(FATAL_ERROR "OpenSSL discovered by find_package() returns unusable setup")
73
+ endif()
74
+ endif()
75
+ elseif(UNIX)
76
+ find_package(PkgConfig REQUIRED)
77
+ pkg_check_modules(PKG_CONFIG_OPENSSL REQUIRED IMPORTED_TARGET GLOBAL openssl11)
78
+ if(PKG_CONFIG_OPENSSL_FOUND)
79
+ message(STATUS "PKG_CONFIG_OPENSSL_VERSION: ${PKG_CONFIG_OPENSSL_VERSION}")
80
+ message(STATUS "PKG_CONFIG_OPENSSL_INCLUDE_DIRS: ${PKG_CONFIG_OPENSSL_INCLUDE_DIRS}")
81
+ message(STATUS "PKG_CONFIG_OPENSSL_LIBRARIES: ${PKG_CONFIG_OPENSSL_LIBRARIES}")
82
+ else()
83
+ message(FATAL_ERROR "Cannot Find OpenSSL using pkg-config")
84
+ endif()
40
85
  else()
41
86
  message(FATAL_ERROR "Cannot build Couchbase C++ SDK without OpenSSL")
42
87
  endif()
@@ -18,6 +18,10 @@ set(PEGTL_BUILD_TESTS OFF CACHE BOOL "" FORCE)
18
18
  set(PEGTL_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
19
19
  add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/snappy)
20
20
  set_target_properties(snappy PROPERTIES POSITION_INDEPENDENT_CODE ON)
21
+ if(NOT MSVC)
22
+ # https://github.com/google/snappy/pull/156
23
+ target_compile_options(snappy PRIVATE -Wno-sign-compare)
24
+ endif()
21
25
 
22
26
  set(HDR_LOG_REQUIRED OFF CACHE BOOL "" FORCE)
23
27
  set(HDR_HISTOGRAM_BUILD_SHARED OFF CACHE BOOL "" FORCE)
@@ -25,6 +25,37 @@ if(NOT COUCHBASE_CXX_CLIENT_GIT_DESCRIBE)
25
25
  endif()
26
26
 
27
27
  string(TIMESTAMP COUCHBASE_CXX_CLIENT_BUILD_TIMESTAMP "%Y-%m-%d %H:%M:%S" UTC)
28
+ string(TIMESTAMP COUCHBASE_CXX_CLIENT_BUILD_DATE "%Y-%m-%d" UTC)
29
+
30
+ # set(couchbase_cxx_client_BUILD_NUMBER 142)
31
+ # set(COUCHBASE_CXX_CLIENT_GIT_DESCRIBE "1.0.0-beta.4-27-g6807da0") #-> "couchbase_cxx_client-1.0.0-beta.4+142.27.6807da0"
32
+ # set(COUCHBASE_CXX_CLIENT_GIT_DESCRIBE "1.0.0-beta.4-0-g6807da0") #-> "couchbase_cxx_client-1.0.0-beta.4"
33
+ # set(COUCHBASE_CXX_CLIENT_GIT_DESCRIBE "1.0.0-27-g6807da0") #-> "couchbase_cxx_client-1.0.0+142.27.6807da0"
34
+ # set(COUCHBASE_CXX_CLIENT_GIT_DESCRIBE "1.0.0-0-g6807da0") #-> "couchbase_cxx_client-1.0.0"
35
+ # set(COUCHBASE_CXX_CLIENT_GIT_DESCRIBE "1.0.0") #-> "couchbase_cxx_client-1.0.0"
36
+ set(COUCHBASE_CXX_CLIENT_SEMVER "${couchbase_cxx_client_VERSION}")
37
+ set(COUCHBASE_CXX_CLIENT_PACKAGE_VERSION "${couchbase_cxx_client_VERSION}")
38
+ set(COUCHBASE_CXX_CLIENT_PACKAGE_RELEASE "${couchbase_cxx_client_BUILD_NUMBER}")
39
+ if(COUCHBASE_CXX_CLIENT_GIT_DESCRIBE MATCHES
40
+ "^([0-9]+\\.[0-9]+\\.[0-9]+)(-([a-zA-Z0-9\\.]+))?(-([0-9]+)-g([a-zA-Z0-9]+))?$")
41
+ set(COUCHBASE_CXX_CLIENT_SEMVER "${CMAKE_MATCH_1}")
42
+ set(COUCHBASE_CXX_CLIENT_PACKAGE_VERSION "${CMAKE_MATCH_1}")
43
+ if(CMAKE_MATCH_3) # pre-release
44
+ set(COUCHBASE_CXX_CLIENT_SEMVER "${COUCHBASE_CXX_CLIENT_SEMVER}-${CMAKE_MATCH_3}")
45
+ set(COUCHBASE_CXX_CLIENT_PACKAGE_RELEASE "${CMAKE_MATCH_3}.${couchbase_cxx_client_BUILD_NUMBER}")
46
+ endif()
47
+ if(CMAKE_MATCH_5 AND CMAKE_MATCH_5 GREATER 0) # number_of_commits.build_number.sha1
48
+ set(COUCHBASE_CXX_CLIENT_SEMVER
49
+ "${COUCHBASE_CXX_CLIENT_SEMVER}+${CMAKE_MATCH_5}.${couchbase_cxx_client_BUILD_NUMBER}.${CMAKE_MATCH_6}")
50
+ if(CMAKE_MATCH_3) # pre-release
51
+ set(COUCHBASE_CXX_CLIENT_PACKAGE_RELEASE
52
+ "${CMAKE_MATCH_3}.${CMAKE_MATCH_5}.${couchbase_cxx_client_BUILD_NUMBER}.${CMAKE_MATCH_6}")
53
+ else()
54
+ set(COUCHBASE_CXX_CLIENT_PACKAGE_RELEASE "${CMAKE_MATCH_5}.${couchbase_cxx_client_BUILD_NUMBER}.${CMAKE_MATCH_6}")
55
+ endif()
56
+ endif()
57
+ endif()
58
+
28
59
  configure_file(${PROJECT_SOURCE_DIR}/cmake/build_version.hxx.in
29
60
  ${PROJECT_BINARY_DIR}/generated/couchbase/build_version.hxx @ONLY)
30
61
  configure_file(${PROJECT_SOURCE_DIR}/cmake/build_config.hxx.in
@@ -47,9 +78,14 @@ file(
47
78
  #define COUCHBASE_CXX_CLIENT_LINK_OPTIONS \"$<TARGET_PROPERTY:couchbase_cxx_client,LINK_OPTIONS>\"
48
79
  #define COUCHBASE_CXX_CLIENT_POST_LINKED_OPENSSL \"${COUCHBASE_CXX_CLIENT_POST_LINKED_OPENSSL}\"
49
80
 
50
- #define OPENSSL_CRYPTO_LIBRARIES \"${OPENSSL_CRYPTO_LIBRARIES}\"
51
- #define OPENSSL_SSL_LIBRARIES \"${OPENSSL_SSL_LIBRARIES}\"
52
- #define OPENSSL_INCLUDE_DIR \"${OPENSSL_INCLUDE_DIR}\"
81
+ #define OPENSSL_SSL_IMPORTED_LOCATION \"$<$<TARGET_EXISTS:OpenSSL::SSL>:$<TARGET_PROPERTY:OpenSSL::SSL,IMPORTED_LOCATION>>\"
82
+ #define OPENSSL_SSL_INTERFACE_INCLUDE_DIRECTORIES \"$<$<TARGET_EXISTS:OpenSSL::SSL>:$<TARGET_PROPERTY:OpenSSL::SSL,INTERFACE_INCLUDE_DIRECTORIES>>\"
83
+ #define OPENSSL_SSL_INTERFACE_LINK_LIBRARIES \"$<$<TARGET_EXISTS:OpenSSL::SSL>:$<TARGET_PROPERTY:OpenSSL::SSL,INTERFACE_LINK_LIBRARIES>>\"
84
+ #define OPENSSL_CRYPTO_IMPORTED_LOCATION \"$<$<TARGET_EXISTS:OpenSSL::Crypto>:$<TARGET_PROPERTY:OpenSSL::Crypto,IMPORTED_LOCATION>>\"
85
+ #define OPENSSL_CRYPTO_INTERFACE_INCLUDE_DIRECTORIES \"$<$<TARGET_EXISTS:OpenSSL::Crypto>:$<TARGET_PROPERTY:OpenSSL::Crypto,INTERFACE_INCLUDE_DIRECTORIES>>\"
86
+ #define OPENSSL_CRYPTO_INTERFACE_LINK_LIBRARIES \"$<$<TARGET_EXISTS:OpenSSL::Crypto>:$<TARGET_PROPERTY:OpenSSL::Crypto,INTERFACE_LINK_LIBRARIES>>\"
87
+ #define OPENSSL_PKG_CONFIG_INTERFACE_INCLUDE_DIRECTORIES \"$<$<TARGET_EXISTS:PkgConfig::PKG_CONFIG_OPENSSL>:$<TARGET_PROPERTY:PkgConfig::PKG_CONFIG_OPENSSL,INTERFACE_INCLUDE_DIRECTORIES>>\"
88
+ #define OPENSSL_PKG_CONFIG_INTERFACE_LINK_LIBRARIES \"$<$<TARGET_EXISTS:PkgConfig::PKG_CONFIG_OPENSSL>:$<TARGET_PROPERTY:PkgConfig::PKG_CONFIG_OPENSSL,INTERFACE_LINK_LIBRARIES>>\"
53
89
 
54
90
  #define CMAKE_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\"
55
91
  #define CMAKE_VERSION \"${CMAKE_VERSION}\"
@@ -0,0 +1,7 @@
1
+ #include <openssl/crypto.h>
2
+
3
+ int
4
+ main()
5
+ {
6
+ return static_cast<int>(OpenSSL_version_num());
7
+ }
@@ -53,7 +53,6 @@ struct cluster_options {
53
53
  std::chrono::milliseconds analytics_timeout = timeout_defaults::analytics_timeout;
54
54
  std::chrono::milliseconds search_timeout = timeout_defaults::search_timeout;
55
55
  std::chrono::milliseconds management_timeout = timeout_defaults::management_timeout;
56
- std::chrono::milliseconds dns_srv_timeout = timeout_defaults::dns_srv_timeout;
57
56
 
58
57
  bool enable_tls{ false };
59
58
  std::string trust_certificate{};
@@ -22,4 +22,26 @@ couchbase::core::known_profiles()
22
22
  {
23
23
  static couchbase::core::config_profiles profiles{};
24
24
  return profiles;
25
- }
25
+ }
26
+
27
+ void
28
+ couchbase::core::development_profile::apply(couchbase::core::cluster_options& opts)
29
+ {
30
+ opts.key_value_timeout = std::chrono::seconds(20);
31
+ opts.key_value_durable_timeout = std::chrono::seconds(20);
32
+ opts.connect_timeout = std::chrono::seconds(20);
33
+ opts.view_timeout = std::chrono::minutes(2);
34
+ opts.query_timeout = std::chrono::minutes(2);
35
+ opts.analytics_timeout = std::chrono::minutes(2);
36
+ opts.search_timeout = std::chrono::minutes(2);
37
+ opts.management_timeout = std::chrono::minutes(2);
38
+
39
+ // C++SDK specific
40
+ opts.dns_config = couchbase::core::io::dns::dns_config{
41
+ opts.dns_config.nameserver(),
42
+ opts.dns_config.port(),
43
+ std::chrono::seconds(20), // timeout to make DNS-SRV query
44
+ };
45
+ opts.resolve_timeout = std::chrono::seconds(20); // timeout to resolve hostnames
46
+ opts.bootstrap_timeout = std::chrono::minutes(2); // overall timeout to bootstrap
47
+ }
@@ -36,17 +36,7 @@ class config_profile
36
36
  class development_profile : public config_profile
37
37
  {
38
38
  public:
39
- void apply(couchbase::core::cluster_options& opts) override
40
- {
41
- opts.key_value_timeout = std::chrono::milliseconds(20000); // 20 sec kv timeout.
42
- opts.key_value_durable_timeout = std::chrono::milliseconds(20000); // 20 sec durable kv timeout.
43
- opts.connect_timeout = std::chrono::milliseconds(20000); // 20 sec connect timeout.
44
- opts.view_timeout = std::chrono::milliseconds(120000); // 2 minute view timeout
45
- opts.query_timeout = std::chrono::milliseconds(120000); // 2 minute query timeout
46
- opts.analytics_timeout = std::chrono::milliseconds(120000); // 2 minute analytics timeout
47
- opts.search_timeout = std::chrono::milliseconds(120000); // 2 minute search timeout
48
- opts.management_timeout = std::chrono::milliseconds(120000); // 2 minute management timeout
49
- }
39
+ void apply(couchbase::core::cluster_options& opts) override;
50
40
  };
51
41
 
52
42
  // this class just registers the known profiles defined above, and allows access to them.
@@ -89,4 +79,4 @@ class config_profiles
89
79
  config_profiles&
90
80
  known_profiles();
91
81
 
92
- } // namespace couchbase::core
82
+ } // namespace couchbase::core
@@ -4,7 +4,11 @@ target_link_libraries(couchbase_crypto PRIVATE project_options project_warnings)
4
4
  target_include_directories(couchbase_crypto PRIVATE ../..)
5
5
 
6
6
  if(NOT COUCHBASE_CXX_CLIENT_POST_LINKED_OPENSSL)
7
- target_link_libraries(couchbase_crypto PUBLIC OpenSSL::SSL OpenSSL::Crypto)
7
+ if (TARGET PkgConfig::PKG_CONFIG_OPENSSL)
8
+ target_link_libraries(couchbase_crypto PUBLIC PkgConfig::PKG_CONFIG_OPENSSL)
9
+ else()
10
+ target_link_libraries(couchbase_crypto PUBLIC OpenSSL::SSL OpenSSL::Crypto)
11
+ endif()
8
12
  endif()
9
13
 
10
14
  if(WIN32)
@@ -0,0 +1,236 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include <couchbase/cluster.hxx>
19
+ #include <couchbase/error_codes.hxx>
20
+
21
+ #include "core/cluster.hxx"
22
+ #include "core/operations/document_analytics.hxx"
23
+
24
+ namespace couchbase
25
+ {
26
+ static analytics_error_context
27
+ build_context(core::operations::analytics_response& resp)
28
+ {
29
+ return {
30
+ resp.ctx.ec,
31
+ resp.ctx.last_dispatched_to,
32
+ resp.ctx.last_dispatched_from,
33
+ resp.ctx.retry_attempts,
34
+ std::move(resp.ctx.retry_reasons),
35
+ resp.ctx.first_error_code,
36
+ std::move(resp.ctx.first_error_message),
37
+ std::move(resp.ctx.client_context_id),
38
+ std::move(resp.ctx.statement),
39
+ std::move(resp.ctx.parameters),
40
+ std::move(resp.ctx.method),
41
+ std::move(resp.ctx.path),
42
+ resp.ctx.http_status,
43
+ std::move(resp.ctx.http_body),
44
+ std::move(resp.ctx.hostname),
45
+ resp.ctx.port,
46
+ };
47
+ }
48
+
49
+ static analytics_status
50
+ map_status(core::operations::analytics_response::analytics_status status)
51
+ {
52
+ switch (status) {
53
+ case core::operations::analytics_response::running:
54
+ return analytics_status::running;
55
+ case core::operations::analytics_response::success:
56
+ return analytics_status::success;
57
+ case core::operations::analytics_response::errors:
58
+ return analytics_status::errors;
59
+ case core::operations::analytics_response::completed:
60
+ return analytics_status::completed;
61
+ case core::operations::analytics_response::stopped:
62
+ return analytics_status::stopped;
63
+ case core::operations::analytics_response::timedout:
64
+ return analytics_status::timeout;
65
+ case core::operations::analytics_response::closed:
66
+ return analytics_status::closed;
67
+ case core::operations::analytics_response::fatal:
68
+ return analytics_status::fatal;
69
+ case core::operations::analytics_response::aborted:
70
+ return analytics_status::aborted;
71
+ case core::operations::analytics_response::unknown:
72
+ return analytics_status::unknown;
73
+ }
74
+ return analytics_status::unknown;
75
+ }
76
+
77
+ static std::optional<couchbase::core::analytics_scan_consistency>
78
+ map_scan_consistency(std::optional<couchbase::analytics_scan_consistency> consistency)
79
+ {
80
+ if (consistency.has_value()) {
81
+ switch (consistency.value()) {
82
+ case analytics_scan_consistency::not_bounded:
83
+ return couchbase::core::analytics_scan_consistency::not_bounded;
84
+ case analytics_scan_consistency::request_plus:
85
+ return couchbase::core::analytics_scan_consistency::request_plus;
86
+ }
87
+ }
88
+ return {};
89
+ }
90
+
91
+ static std::vector<codec::binary>
92
+ map_rows(const core::operations::analytics_response& resp)
93
+ {
94
+ std::vector<codec::binary> rows;
95
+ rows.reserve(resp.rows.size());
96
+ for (const auto& row : resp.rows) {
97
+ rows.emplace_back(core::utils::to_binary(row));
98
+ }
99
+ return rows;
100
+ }
101
+
102
+ static std::vector<analytics_warning>
103
+ map_warnings(core::operations::analytics_response& resp)
104
+ {
105
+ if (resp.meta.warnings.empty()) {
106
+ return {};
107
+ }
108
+ std::vector<analytics_warning> warnings;
109
+ warnings.reserve(resp.meta.warnings.size());
110
+ for (auto& warning : resp.meta.warnings) {
111
+ warnings.emplace_back(warning.code, std::move(warning.message));
112
+ }
113
+ return warnings;
114
+ }
115
+
116
+ static analytics_metrics
117
+ map_metrics(const core::operations::analytics_response& resp)
118
+ {
119
+ return analytics_metrics{
120
+ resp.meta.metrics.elapsed_time, resp.meta.metrics.execution_time, resp.meta.metrics.result_count,
121
+ resp.meta.metrics.result_size, resp.meta.metrics.processed_objects, resp.meta.metrics.error_count,
122
+ resp.meta.metrics.warning_count,
123
+ };
124
+ }
125
+
126
+ static std::optional<std::vector<std::byte>>
127
+ map_signature(core::operations::analytics_response& resp)
128
+ {
129
+ if (!resp.meta.signature) {
130
+ return {};
131
+ }
132
+ return core::utils::to_binary(resp.meta.signature.value());
133
+ }
134
+
135
+ static analytics_result
136
+ build_result(core::operations::analytics_response& resp)
137
+ {
138
+ return {
139
+ analytics_meta_data{
140
+ std::move(resp.meta.request_id),
141
+ std::move(resp.meta.client_context_id),
142
+ map_status(resp.meta.status),
143
+ map_warnings(resp),
144
+ map_metrics(resp),
145
+ map_signature(resp),
146
+ },
147
+ map_rows(resp),
148
+ };
149
+ }
150
+
151
+ static core::operations::analytics_request
152
+ build_analytics_request(std::string statement,
153
+ analytics_options::built options,
154
+ std::optional<std::string> bucket_name,
155
+ std::optional<std::string> scope_name)
156
+ {
157
+ core::operations::analytics_request request{
158
+ std::move(statement),
159
+ options.readonly,
160
+ options.priority,
161
+ std::move(bucket_name),
162
+ std::move(scope_name),
163
+ {},
164
+ map_scan_consistency(options.scan_consistency),
165
+ {},
166
+ {},
167
+ {},
168
+ {},
169
+ std::move(options.client_context_id),
170
+ options.timeout,
171
+ };
172
+ if (!options.raw.empty()) {
173
+ for (auto& [name, value] : options.raw) {
174
+ request.raw[name] = std::move(value);
175
+ }
176
+ }
177
+ if (!options.positional_parameters.empty()) {
178
+ for (auto& value : options.positional_parameters) {
179
+ request.positional_parameters.emplace_back(std::move(value));
180
+ }
181
+ }
182
+ if (!options.named_parameters.empty()) {
183
+ for (auto& [name, value] : options.named_parameters) {
184
+ request.named_parameters[name] = std::move(value);
185
+ }
186
+ }
187
+ return request;
188
+ }
189
+
190
+ void
191
+ cluster::analytics_query(std::string statement, const analytics_options& options, analytics_handler&& handler) const
192
+ {
193
+ auto request = build_analytics_request(std::move(statement), options.build(), {}, {});
194
+
195
+ core_->execute(std::move(request), [handler = std::move(handler)](core::operations::analytics_response resp) mutable {
196
+ auto r = std::move(resp);
197
+ return handler(build_context(r), build_result(r));
198
+ });
199
+ }
200
+
201
+ auto
202
+ cluster::analytics_query(std::string statement, const analytics_options& options) const
203
+ -> std::future<std::pair<analytics_error_context, analytics_result>>
204
+ {
205
+ auto barrier = std::make_shared<std::promise<std::pair<analytics_error_context, analytics_result>>>();
206
+ auto future = barrier->get_future();
207
+ analytics_query(std::move(statement), options, [barrier](auto ctx, auto result) {
208
+ barrier->set_value({ std::move(ctx), std::move(result) });
209
+ });
210
+ return future;
211
+ }
212
+
213
+ void
214
+ scope::analytics_query(std::string statement, const analytics_options& options, analytics_handler&& handler) const
215
+ {
216
+ auto request = build_analytics_request(std::move(statement), options.build(), bucket_name_, name_);
217
+
218
+ core_->execute(std::move(request), [handler = std::move(handler)](core::operations::analytics_response resp) mutable {
219
+ auto r = std::move(resp);
220
+ return handler(build_context(r), build_result(r));
221
+ });
222
+ }
223
+
224
+ auto
225
+ scope::analytics_query(std::string statement, const analytics_options& options) const
226
+ -> std::future<std::pair<analytics_error_context, analytics_result>>
227
+ {
228
+ auto barrier = std::make_shared<std::promise<std::pair<analytics_error_context, analytics_result>>>();
229
+ auto future = barrier->get_future();
230
+ analytics_query(std::move(statement), options, [barrier](auto ctx, auto result) {
231
+ barrier->set_value({ std::move(ctx), std::move(result) });
232
+ });
233
+ return future;
234
+ }
235
+
236
+ } // namespace couchbase
@@ -95,7 +95,6 @@ options_to_origin(const std::string& connection_string, const couchbase::cluster
95
95
  if (opts.dns.nameserver) {
96
96
  user_options.dns_config =
97
97
  io::dns::dns_config(opts.dns.nameserver.value(), opts.dns.port.value_or(io::dns::dns_config::default_port), opts.dns.timeout);
98
- user_options.dns_srv_timeout = opts.dns.timeout;
99
98
  }
100
99
  user_options.enable_clustermap_notification = opts.behavior.enable_clustermap_notification;
101
100
  user_options.show_queries = opts.behavior.show_queries;
@@ -22,14 +22,14 @@ namespace couchbase
22
22
  {
23
23
 
24
24
  void
25
- collection_query_index_manager::get_all_indexes(const get_all_query_indexes_options& options, get_all_indexes_handler&& handler) const
25
+ collection_query_index_manager::get_all_indexes(const get_all_query_indexes_options& options, get_all_query_indexes_handler&& handler) const
26
26
  {
27
27
  return core::impl::initiate_get_all_query_indexes(core_,
28
28
  "",
29
29
  options.build(),
30
30
  core::query_context(bucket_name_, scope_name_),
31
31
  collection_name_,
32
- std::forward<get_all_indexes_handler>(handler));
32
+ std::forward<get_all_query_indexes_handler>(handler));
33
33
  }
34
34
 
35
35
  void
@@ -90,4 +90,4 @@ collection_query_index_manager::watch_indexes(std::vector<std::string> index_nam
90
90
  return core::impl::initiate_watch_query_indexes(
91
91
  core_, "", std::move(index_names), options.build(), { bucket_name_, scope_name_ }, collection_name_, std::move(handler));
92
92
  }
93
- } // namespace couchbase
93
+ } // namespace couchbase
@@ -16,11 +16,13 @@
16
16
  */
17
17
 
18
18
  #include "dns_srv_tracker.hxx"
19
- #include "../logger/logger.hxx"
20
- #include "../topology/configuration.hxx"
19
+
20
+ #include "core/logger/logger.hxx"
21
+ #include "core/utils/join_strings.hxx"
21
22
 
22
23
  #include <asio/bind_executor.hpp>
23
24
  #include <asio/io_context.hpp>
25
+ #include <asio/post.hpp>
24
26
 
25
27
  #include <memory>
26
28
 
@@ -44,7 +46,7 @@ dns_srv_tracker::get_srv_nodes(utils::movable_function<void(origin::node_list, s
44
46
  address_,
45
47
  service_,
46
48
  config_,
47
- [self = shared_from_this(), callback = std::move(callback)](couchbase::core::io::dns::dns_client::dns_srv_response&& resp) mutable {
49
+ [self = shared_from_this(), callback = std::move(callback)](couchbase::core::io::dns::dns_srv_response&& resp) mutable {
48
50
  origin::node_list nodes;
49
51
  if (resp.ec) {
50
52
  CB_LOG_WARNING("failed to fetch DNS SRV records for \"{}\" ({}), assuming that cluster is listening this address",