couchbase 3.1.1 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/ext/CMakeLists.txt +3 -1
  4. data/ext/build_version.hxx.in +1 -1
  5. data/ext/cmake/Testing.cmake +1 -0
  6. data/ext/cmake/ThirdPartyDependencies.cmake +6 -0
  7. data/ext/cmake/VersionInfo.cmake +3 -0
  8. data/ext/couchbase/bucket.hxx +47 -28
  9. data/ext/couchbase/cbsasl/client.h +1 -1
  10. data/ext/couchbase/cbsasl/context.cc +1 -1
  11. data/ext/couchbase/cbsasl/context.h +3 -3
  12. data/ext/couchbase/cbsasl/mechanism.cc +5 -8
  13. data/ext/couchbase/cbsasl/mechanism.h +1 -4
  14. data/ext/couchbase/cbsasl/plain/plain.cc +1 -1
  15. data/ext/couchbase/cbsasl/scram-sha/scram-sha.cc +30 -36
  16. data/ext/couchbase/cluster.hxx +40 -22
  17. data/ext/couchbase/cluster_options.hxx +7 -1
  18. data/ext/couchbase/configuration.hxx +37 -16
  19. data/ext/couchbase/couchbase.cxx +1145 -291
  20. data/ext/couchbase/error_map.hxx +1 -1
  21. data/ext/couchbase/errors.hxx +25 -17
  22. data/ext/couchbase/io/dns_client.hxx +3 -3
  23. data/ext/couchbase/io/dns_codec.hxx +4 -5
  24. data/ext/couchbase/io/dns_config.hxx +5 -6
  25. data/ext/couchbase/io/dns_message.hxx +3 -3
  26. data/ext/couchbase/io/http_command.hxx +70 -35
  27. data/ext/couchbase/io/http_session.hxx +4 -3
  28. data/ext/couchbase/io/http_session_manager.hxx +28 -19
  29. data/ext/couchbase/io/mcbp_command.hxx +51 -19
  30. data/ext/couchbase/io/mcbp_context.hxx +1 -1
  31. data/ext/couchbase/io/mcbp_parser.hxx +4 -4
  32. data/ext/couchbase/io/mcbp_session.hxx +91 -101
  33. data/ext/couchbase/io/query_cache.hxx +2 -2
  34. data/ext/couchbase/io/retry_orchestrator.hxx +2 -4
  35. data/ext/couchbase/io/retry_reason.hxx +2 -2
  36. data/ext/couchbase/io/retry_strategy.hxx +1 -6
  37. data/ext/couchbase/io/streams.hxx +7 -7
  38. data/ext/couchbase/metrics/logging_meter.hxx +228 -0
  39. data/ext/couchbase/metrics/logging_meter_options.hxx +28 -0
  40. data/ext/couchbase/metrics/meter.hxx +49 -0
  41. data/ext/couchbase/metrics/noop_meter.hxx +43 -0
  42. data/ext/couchbase/operations/analytics_dataset_create.hxx +16 -12
  43. data/ext/couchbase/operations/analytics_dataset_drop.hxx +11 -11
  44. data/ext/couchbase/operations/analytics_dataset_get_all.hxx +6 -6
  45. data/ext/couchbase/operations/analytics_dataverse_create.hxx +10 -11
  46. data/ext/couchbase/operations/analytics_dataverse_drop.hxx +10 -11
  47. data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +9 -11
  48. data/ext/couchbase/operations/analytics_index_create.hxx +14 -13
  49. data/ext/couchbase/operations/analytics_index_drop.hxx +18 -12
  50. data/ext/couchbase/operations/analytics_index_get_all.hxx +8 -6
  51. data/ext/couchbase/operations/analytics_link.hxx +39 -0
  52. data/ext/couchbase/operations/analytics_link_azure_blob_external.hxx +145 -0
  53. data/ext/couchbase/operations/analytics_link_connect.hxx +14 -12
  54. data/ext/couchbase/operations/analytics_link_couchbase_remote.hxx +220 -0
  55. data/ext/couchbase/operations/analytics_link_create.hxx +128 -0
  56. data/ext/couchbase/operations/analytics_link_disconnect.hxx +11 -12
  57. data/ext/couchbase/operations/analytics_link_drop.hxx +130 -0
  58. data/ext/couchbase/operations/analytics_link_get_all.hxx +160 -0
  59. data/ext/couchbase/operations/analytics_link_replace.hxx +128 -0
  60. data/ext/couchbase/operations/analytics_link_s3_external.hxx +122 -0
  61. data/ext/couchbase/operations/bucket_create.hxx +8 -8
  62. data/ext/couchbase/operations/bucket_drop.hxx +5 -5
  63. data/ext/couchbase/operations/bucket_flush.hxx +5 -5
  64. data/ext/couchbase/operations/bucket_get.hxx +7 -7
  65. data/ext/couchbase/operations/bucket_get_all.hxx +7 -5
  66. data/ext/couchbase/operations/bucket_settings.hxx +40 -49
  67. data/ext/couchbase/operations/bucket_update.hxx +8 -8
  68. data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +7 -7
  69. data/ext/couchbase/operations/collection_create.hxx +11 -11
  70. data/ext/couchbase/operations/collection_drop.hxx +12 -10
  71. data/ext/couchbase/operations/collections_manifest_get.hxx +3 -3
  72. data/ext/couchbase/operations/design_document.hxx +2 -2
  73. data/ext/couchbase/operations/document_analytics.hxx +29 -36
  74. data/ext/couchbase/operations/document_append.hxx +3 -3
  75. data/ext/couchbase/operations/document_decrement.hxx +3 -3
  76. data/ext/couchbase/operations/document_exists.hxx +2 -2
  77. data/ext/couchbase/operations/document_get.hxx +3 -3
  78. data/ext/couchbase/operations/document_get_and_lock.hxx +5 -3
  79. data/ext/couchbase/operations/document_get_and_touch.hxx +5 -3
  80. data/ext/couchbase/operations/document_get_projected.hxx +10 -11
  81. data/ext/couchbase/operations/document_increment.hxx +3 -3
  82. data/ext/couchbase/operations/document_insert.hxx +3 -3
  83. data/ext/couchbase/operations/document_lookup_in.hxx +12 -18
  84. data/ext/couchbase/operations/document_mutate_in.hxx +13 -18
  85. data/ext/couchbase/operations/document_prepend.hxx +3 -3
  86. data/ext/couchbase/operations/document_query.hxx +39 -41
  87. data/ext/couchbase/operations/document_remove.hxx +3 -3
  88. data/ext/couchbase/operations/document_replace.hxx +3 -3
  89. data/ext/couchbase/operations/document_search.hxx +56 -61
  90. data/ext/couchbase/operations/document_touch.hxx +3 -3
  91. data/ext/couchbase/operations/document_unlock.hxx +3 -3
  92. data/ext/couchbase/operations/document_upsert.hxx +3 -3
  93. data/ext/couchbase/operations/document_view.hxx +23 -23
  94. data/ext/couchbase/operations/group_drop.hxx +5 -5
  95. data/ext/couchbase/operations/group_get.hxx +7 -7
  96. data/ext/couchbase/operations/group_get_all.hxx +6 -6
  97. data/ext/couchbase/operations/group_upsert.hxx +11 -11
  98. data/ext/couchbase/operations/http_noop.hxx +6 -6
  99. data/ext/couchbase/operations/mcbp_noop.hxx +3 -3
  100. data/ext/couchbase/operations/query_index_build_deferred.hxx +6 -6
  101. data/ext/couchbase/operations/query_index_create.hxx +10 -8
  102. data/ext/couchbase/operations/query_index_drop.hxx +8 -8
  103. data/ext/couchbase/operations/query_index_get_all.hxx +43 -39
  104. data/ext/couchbase/operations/rbac.hxx +40 -63
  105. data/ext/couchbase/operations/role_get_all.hxx +6 -6
  106. data/ext/couchbase/operations/scope_create.hxx +10 -10
  107. data/ext/couchbase/operations/scope_drop.hxx +9 -9
  108. data/ext/couchbase/operations/scope_get_all.hxx +8 -8
  109. data/ext/couchbase/operations/search_get_stats.hxx +5 -3
  110. data/ext/couchbase/operations/search_index.hxx +6 -15
  111. data/ext/couchbase/operations/search_index_analyze_document.hxx +11 -11
  112. data/ext/couchbase/operations/search_index_control_ingest.hxx +9 -9
  113. data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +9 -9
  114. data/ext/couchbase/operations/search_index_control_query.hxx +9 -9
  115. data/ext/couchbase/operations/search_index_drop.hxx +11 -9
  116. data/ext/couchbase/operations/search_index_get.hxx +11 -9
  117. data/ext/couchbase/operations/search_index_get_all.hxx +11 -11
  118. data/ext/couchbase/operations/search_index_get_documents_count.hxx +10 -10
  119. data/ext/couchbase/operations/search_index_get_stats.hxx +10 -8
  120. data/ext/couchbase/operations/search_index_upsert.hxx +12 -10
  121. data/ext/couchbase/operations/user_drop.hxx +5 -5
  122. data/ext/couchbase/operations/user_get.hxx +7 -7
  123. data/ext/couchbase/operations/user_get_all.hxx +6 -6
  124. data/ext/couchbase/operations/user_upsert.hxx +9 -9
  125. data/ext/couchbase/operations/view_index_drop.hxx +10 -10
  126. data/ext/couchbase/operations/view_index_get.hxx +13 -15
  127. data/ext/couchbase/operations/view_index_get_all.hxx +17 -20
  128. data/ext/couchbase/operations/view_index_upsert.hxx +9 -7
  129. data/ext/couchbase/operations.hxx +4 -0
  130. data/ext/couchbase/origin.hxx +14 -10
  131. data/ext/couchbase/platform/backtrace.c +1 -1
  132. data/ext/couchbase/platform/base64.cc +5 -5
  133. data/ext/couchbase/platform/base64.h +2 -5
  134. data/ext/couchbase/protocol/client_opcode.hxx +7 -4
  135. data/ext/couchbase/protocol/client_request.hxx +2 -2
  136. data/ext/couchbase/protocol/client_response.hxx +41 -16
  137. data/ext/couchbase/protocol/cmd_append.hxx +17 -16
  138. data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +4 -4
  139. data/ext/couchbase/protocol/cmd_decrement.hxx +10 -11
  140. data/ext/couchbase/protocol/cmd_exists.hxx +12 -15
  141. data/ext/couchbase/protocol/cmd_get.hxx +11 -14
  142. data/ext/couchbase/protocol/cmd_get_and_lock.hxx +10 -12
  143. data/ext/couchbase/protocol/cmd_get_and_touch.hxx +10 -12
  144. data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +13 -18
  145. data/ext/couchbase/protocol/cmd_get_collection_id.hxx +12 -15
  146. data/ext/couchbase/protocol/cmd_get_collections_manifest.hxx +12 -16
  147. data/ext/couchbase/protocol/cmd_get_error_map.hxx +14 -17
  148. data/ext/couchbase/protocol/cmd_hello.hxx +8 -10
  149. data/ext/couchbase/protocol/cmd_increment.hxx +9 -10
  150. data/ext/couchbase/protocol/cmd_insert.hxx +9 -9
  151. data/ext/couchbase/protocol/cmd_lookup_in.hxx +12 -13
  152. data/ext/couchbase/protocol/cmd_mutate_in.hxx +11 -11
  153. data/ext/couchbase/protocol/cmd_noop.hxx +16 -20
  154. data/ext/couchbase/protocol/cmd_prepend.hxx +9 -10
  155. data/ext/couchbase/protocol/cmd_remove.hxx +10 -13
  156. data/ext/couchbase/protocol/cmd_replace.hxx +7 -7
  157. data/ext/couchbase/protocol/cmd_sasl_auth.hxx +8 -10
  158. data/ext/couchbase/protocol/cmd_sasl_list_mechs.hxx +10 -15
  159. data/ext/couchbase/protocol/cmd_sasl_step.hxx +10 -12
  160. data/ext/couchbase/protocol/cmd_select_bucket.hxx +14 -18
  161. data/ext/couchbase/protocol/cmd_touch.hxx +8 -11
  162. data/ext/couchbase/protocol/cmd_unlock.hxx +10 -14
  163. data/ext/couchbase/protocol/cmd_upsert.hxx +8 -8
  164. data/ext/couchbase/protocol/datatype.hxx +3 -3
  165. data/ext/couchbase/protocol/durability_level.hxx +2 -2
  166. data/ext/couchbase/protocol/frame_info_id.hxx +4 -4
  167. data/ext/couchbase/protocol/hello_feature.hxx +2 -2
  168. data/ext/couchbase/protocol/magic.hxx +2 -2
  169. data/ext/couchbase/protocol/server_opcode.hxx +2 -2
  170. data/ext/couchbase/protocol/server_request.hxx +1 -1
  171. data/ext/couchbase/protocol/status.hxx +4 -7
  172. data/ext/couchbase/protocol/unsigned_leb128.h +5 -20
  173. data/ext/couchbase/service_type.hxx +4 -4
  174. data/ext/couchbase/tracing/constants.hxx +261 -0
  175. data/ext/couchbase/tracing/noop_tracer.hxx +50 -0
  176. data/ext/couchbase/tracing/request_tracer.hxx +77 -0
  177. data/ext/couchbase/tracing/threshold_logging_options.hxx +64 -0
  178. data/ext/couchbase/tracing/threshold_logging_tracer.hxx +366 -0
  179. data/ext/couchbase/utils/byteswap.hxx +1 -1
  180. data/ext/couchbase/utils/connection_string.hxx +21 -1
  181. data/ext/couchbase/utils/name_codec.hxx +41 -0
  182. data/ext/couchbase/utils/url_codec.hxx +236 -0
  183. data/ext/couchbase/version.hxx +1 -1
  184. data/ext/test/CMakeLists.txt +1 -0
  185. data/ext/test/test_native_trivial_query.cxx +60 -0
  186. data/ext/third_party/hdr_histogram_c/CMakeLists.txt +84 -0
  187. data/ext/third_party/hdr_histogram_c/COPYING.txt +121 -0
  188. data/ext/third_party/hdr_histogram_c/LICENSE.txt +41 -0
  189. data/ext/third_party/hdr_histogram_c/config.cmake.in +6 -0
  190. data/ext/third_party/hdr_histogram_c/src/CMakeLists.txt +83 -0
  191. data/ext/third_party/hdr_histogram_c/src/hdr_atomic.h +146 -0
  192. data/ext/third_party/hdr_histogram_c/src/hdr_encoding.c +322 -0
  193. data/ext/third_party/hdr_histogram_c/src/hdr_encoding.h +79 -0
  194. data/ext/third_party/hdr_histogram_c/src/hdr_endian.h +116 -0
  195. data/ext/third_party/hdr_histogram_c/src/hdr_histogram.c +1196 -0
  196. data/ext/third_party/hdr_histogram_c/src/hdr_histogram.h +516 -0
  197. data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log.c +1290 -0
  198. data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log.h +236 -0
  199. data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log_no_op.c +171 -0
  200. data/ext/third_party/hdr_histogram_c/src/hdr_interval_recorder.c +227 -0
  201. data/ext/third_party/hdr_histogram_c/src/hdr_interval_recorder.h +109 -0
  202. data/ext/third_party/hdr_histogram_c/src/hdr_malloc.h +19 -0
  203. data/ext/third_party/hdr_histogram_c/src/hdr_tests.h +22 -0
  204. data/ext/third_party/hdr_histogram_c/src/hdr_thread.c +108 -0
  205. data/ext/third_party/hdr_histogram_c/src/hdr_thread.h +55 -0
  206. data/ext/third_party/hdr_histogram_c/src/hdr_time.c +98 -0
  207. data/ext/third_party/hdr_histogram_c/src/hdr_time.h +49 -0
  208. data/ext/third_party/hdr_histogram_c/src/hdr_writer_reader_phaser.c +143 -0
  209. data/ext/third_party/hdr_histogram_c/src/hdr_writer_reader_phaser.h +51 -0
  210. data/lib/couchbase/cluster.rb +1 -0
  211. data/lib/couchbase/errors.rb +3 -0
  212. data/lib/couchbase/management/analytics_index_manager.rb +920 -226
  213. data/lib/couchbase/management/bucket_manager.rb +207 -69
  214. data/lib/couchbase/management/collection_manager.rb +173 -61
  215. data/lib/couchbase/management/query_index_manager.rb +357 -169
  216. data/lib/couchbase/options.rb +75 -3
  217. data/lib/couchbase/scope.rb +102 -0
  218. data/lib/couchbase/utils/time.rb +4 -0
  219. data/lib/couchbase/version.rb +6 -6
  220. metadata +50 -7
@@ -43,7 +43,7 @@ struct group_get_request {
43
43
  std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
44
44
  std::string client_context_id{ uuid::to_string(uuid::random()) };
45
45
 
46
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
46
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
47
47
  {
48
48
  encoded.method = "GET";
49
49
  encoded.path = fmt::format("/settings/rbac/groups/{}", name);
@@ -53,24 +53,24 @@ struct group_get_request {
53
53
  };
54
54
 
55
55
  group_get_response
56
- make_response(error_context::http&& ctx, group_get_request&, group_get_request::encoded_response_type&& encoded)
56
+ make_response(error_context::http&& ctx, const group_get_request& /* request */, group_get_request::encoded_response_type&& encoded)
57
57
  {
58
- group_get_response response{ ctx };
58
+ group_get_response response{ std::move(ctx) };
59
59
  if (!response.ctx.ec) {
60
60
  switch (encoded.status_code) {
61
61
  case 200: {
62
62
  try {
63
63
  response.group = tao::json::from_string(encoded.body).as<rbac::group>();
64
- } catch (tao::json::pegtl::parse_error& e) {
65
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
64
+ } catch (const tao::json::pegtl::parse_error& e) {
65
+ response.ctx.ec = error::common_errc::parsing_failure;
66
66
  return response;
67
67
  }
68
68
  } break;
69
69
  case 404:
70
- response.ctx.ec = std::make_error_code(error::management_errc::group_not_found);
70
+ response.ctx.ec = error::management_errc::group_not_found;
71
71
  break;
72
72
  default:
73
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
73
+ response.ctx.ec = error::common_errc::internal_server_failure;
74
74
  break;
75
75
  }
76
76
  }
@@ -42,7 +42,7 @@ struct group_get_all_request {
42
42
  std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
43
43
  std::string client_context_id{ uuid::to_string(uuid::random()) };
44
44
 
45
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
45
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
46
46
  {
47
47
  encoded.method = "GET";
48
48
  encoded.path = fmt::format("/settings/rbac/groups");
@@ -52,23 +52,23 @@ struct group_get_all_request {
52
52
  };
53
53
 
54
54
  group_get_all_response
55
- make_response(error_context::http&& ctx, group_get_all_request&, group_get_all_request::encoded_response_type&& encoded)
55
+ make_response(error_context::http&& ctx, const group_get_all_request& /* request */, group_get_all_request::encoded_response_type&& encoded)
56
56
  {
57
- group_get_all_response response{ ctx };
57
+ group_get_all_response response{ std::move(ctx) };
58
58
  if (!response.ctx.ec) {
59
59
  if (encoded.status_code == 200) {
60
60
  tao::json::value payload{};
61
61
  try {
62
62
  payload = tao::json::from_string(encoded.body);
63
- } catch (tao::json::pegtl::parse_error& e) {
64
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
63
+ } catch (const tao::json::pegtl::parse_error& e) {
64
+ response.ctx.ec = error::common_errc::parsing_failure;
65
65
  return response;
66
66
  }
67
67
  for (const auto& entry : payload.get_array()) {
68
68
  response.groups.emplace_back(entry.as<rbac::group>());
69
69
  }
70
70
  } else {
71
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
71
+ response.ctx.ec = error::common_errc::internal_server_failure;
72
72
  }
73
73
  }
74
74
  return response;
@@ -47,7 +47,7 @@ struct group_upsert_request {
47
47
  std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
48
48
  std::string client_context_id{ uuid::to_string(uuid::random()) };
49
49
 
50
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
50
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
51
51
  {
52
52
  encoded.method = "PUT";
53
53
  encoded.path = fmt::format("/settings/rbac/groups/{}", group.name);
@@ -91,31 +91,31 @@ struct group_upsert_request {
91
91
  };
92
92
 
93
93
  group_upsert_response
94
- make_response(error_context::http&& ctx, group_upsert_request&, group_upsert_request::encoded_response_type&& encoded)
94
+ make_response(error_context::http&& ctx, const group_upsert_request& /* request */, group_upsert_request::encoded_response_type&& encoded)
95
95
  {
96
- group_upsert_response response{ ctx };
96
+ group_upsert_response response{ std::move(ctx) };
97
97
  if (!response.ctx.ec) {
98
98
  switch (encoded.status_code) {
99
99
  case 200:
100
100
  break;
101
101
  case 400: {
102
- response.ctx.ec = std::make_error_code(error::common_errc::invalid_argument);
102
+ response.ctx.ec = error::common_errc::invalid_argument;
103
103
  tao::json::value payload{};
104
104
  try {
105
105
  payload = tao::json::from_string(encoded.body);
106
- } catch (tao::json::pegtl::parse_error& e) {
107
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
106
+ } catch (const tao::json::pegtl::parse_error&) {
107
+ response.ctx.ec = error::common_errc::parsing_failure;
108
108
  return response;
109
109
  }
110
- const auto* errors = payload.find("errors");
111
- if (errors != nullptr && errors->is_object()) {
112
- for (const auto& entry : errors->get_object()) {
113
- response.errors.emplace_back(fmt::format("{}: {}", entry.first, entry.second.get_string()));
110
+
111
+ if (const auto* errors = payload.find("errors"); errors != nullptr && errors->is_object()) {
112
+ for (const auto& [code, message] : errors->get_object()) {
113
+ response.errors.emplace_back(fmt::format("{}: {}", code, message.get_string()));
114
114
  }
115
115
  }
116
116
  } break;
117
117
  default:
118
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
118
+ response.ctx.ec = error::common_errc::internal_server_failure;
119
119
  break;
120
120
  }
121
121
  }
@@ -39,7 +39,7 @@ struct http_noop_request {
39
39
 
40
40
  std::string client_context_id{ uuid::to_string(uuid::random()) };
41
41
 
42
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
42
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */)
43
43
  {
44
44
  encoded.headers["connection"] = "keep-alive";
45
45
  encoded.method = "GET";
@@ -56,22 +56,22 @@ struct http_noop_request {
56
56
  timeout = timeout_defaults::search_timeout;
57
57
  encoded.path = "/api/ping";
58
58
  break;
59
- case service_type::views:
59
+ case service_type::view:
60
60
  timeout = timeout_defaults::view_timeout;
61
61
  encoded.path = "/";
62
62
  break;
63
63
  case service_type::management:
64
- case service_type::kv:
65
- return std::make_error_code(error::common_errc::feature_not_available);
64
+ case service_type::key_value:
65
+ return error::common_errc::feature_not_available;
66
66
  }
67
67
  return {};
68
68
  }
69
69
  };
70
70
 
71
71
  http_noop_response
72
- make_response(error_context::http&& ctx, http_noop_request&, http_noop_request::encoded_response_type&&)
72
+ make_response(error_context::http&& ctx, const http_noop_request& /* request */, http_noop_request::encoded_response_type&&)
73
73
  {
74
- http_noop_response response{ ctx };
74
+ http_noop_response response{ std::move(ctx) };
75
75
  return response;
76
76
  }
77
77
 
@@ -37,7 +37,7 @@ struct mcbp_noop_request {
37
37
  std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
38
38
  io::retry_context<io::retry_strategy::best_effort> retries{ true };
39
39
 
40
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
40
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&& /* context */) const
41
41
  {
42
42
  encoded.opaque(opaque);
43
43
  encoded.partition(partition);
@@ -46,9 +46,9 @@ struct mcbp_noop_request {
46
46
  };
47
47
 
48
48
  mcbp_noop_response
49
- make_response(error_context::key_value&& ctx, mcbp_noop_request&, mcbp_noop_request::encoded_response_type&&)
49
+ make_response(error_context::key_value&& ctx, const mcbp_noop_request& /* request */, mcbp_noop_request::encoded_response_type&&)
50
50
  {
51
- mcbp_noop_response response{ ctx };
51
+ mcbp_noop_response response{ std::move(ctx) };
52
52
  return response;
53
53
  }
54
54
 
@@ -45,7 +45,7 @@ struct query_index_build_deferred_request {
45
45
  std::string bucket_name;
46
46
  std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
47
47
 
48
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
48
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
49
49
  {
50
50
  encoded.headers["content-type"] = "application/json";
51
51
  tao::json::value body{
@@ -64,16 +64,16 @@ struct query_index_build_deferred_request {
64
64
 
65
65
  query_index_build_deferred_response
66
66
  make_response(error_context::http&& ctx,
67
- query_index_build_deferred_request&,
67
+ const query_index_build_deferred_request& /* request */,
68
68
  query_index_build_deferred_request::encoded_response_type&& encoded)
69
69
  {
70
- query_index_build_deferred_response response{ ctx };
70
+ query_index_build_deferred_response response{ std::move(ctx) };
71
71
  if (!response.ctx.ec) {
72
72
  tao::json::value payload{};
73
73
  try {
74
74
  payload = tao::json::from_string(encoded.body);
75
- } catch (tao::json::pegtl::parse_error& e) {
76
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
75
+ } catch (const tao::json::pegtl::parse_error& e) {
76
+ response.ctx.ec = error::common_errc::parsing_failure;
77
77
  return response;
78
78
  }
79
79
  response.status = payload.at("status").get_string();
@@ -84,7 +84,7 @@ make_response(error_context::http&& ctx,
84
84
  error.message = entry.at("msg").get_string();
85
85
  response.errors.emplace_back(error);
86
86
  }
87
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
87
+ response.ctx.ec = error::common_errc::internal_server_failure;
88
88
  }
89
89
  }
90
90
  return response;
@@ -55,7 +55,7 @@ struct query_index_create_request {
55
55
  std::optional<int> num_replicas{};
56
56
  std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
57
57
 
58
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
58
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
59
59
  {
60
60
  encoded.headers["content-type"] = "application/json";
61
61
  tao::json::value with{};
@@ -100,15 +100,17 @@ struct query_index_create_request {
100
100
  };
101
101
 
102
102
  query_index_create_response
103
- make_response(error_context::http&& ctx, query_index_create_request& request, query_index_create_request::encoded_response_type&& encoded)
103
+ make_response(error_context::http&& ctx,
104
+ const query_index_create_request& request,
105
+ query_index_create_request::encoded_response_type&& encoded)
104
106
  {
105
- query_index_create_response response{ ctx };
107
+ query_index_create_response response{ std::move(ctx) };
106
108
  if (!response.ctx.ec) {
107
109
  tao::json::value payload{};
108
110
  try {
109
111
  payload = tao::json::from_string(encoded.body);
110
- } catch (tao::json::pegtl::parse_error& e) {
111
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
112
+ } catch (const tao::json::pegtl::parse_error& e) {
113
+ response.ctx.ec = error::common_errc::parsing_failure;
112
114
  return response;
113
115
  }
114
116
  response.status = payload.at("status").get_string();
@@ -137,12 +139,12 @@ make_response(error_context::http&& ctx, query_index_create_request& request, qu
137
139
  }
138
140
  if (index_already_exists) {
139
141
  if (!request.ignore_if_exists) {
140
- response.ctx.ec = std::make_error_code(error::common_errc::index_exists);
142
+ response.ctx.ec = error::common_errc::index_exists;
141
143
  }
142
144
  } else if (bucket_not_found) {
143
- response.ctx.ec = std::make_error_code(error::common_errc::bucket_not_found);
145
+ response.ctx.ec = error::common_errc::bucket_not_found;
144
146
  } else if (!response.errors.empty()) {
145
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
147
+ response.ctx.ec = error::common_errc::internal_server_failure;
146
148
  }
147
149
  }
148
150
  }
@@ -51,7 +51,7 @@ struct query_index_drop_request {
51
51
  bool ignore_if_does_not_exist{ false };
52
52
  std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
53
53
 
54
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
54
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
55
55
  {
56
56
  encoded.headers["content-type"] = "application/json";
57
57
  std::string keyspace = fmt::format("`{}`", bucket_name);
@@ -73,15 +73,15 @@ struct query_index_drop_request {
73
73
  };
74
74
 
75
75
  query_index_drop_response
76
- make_response(error_context::http&& ctx, query_index_drop_request& request, query_index_drop_request::encoded_response_type&& encoded)
76
+ make_response(error_context::http&& ctx, const query_index_drop_request& request, query_index_drop_request::encoded_response_type&& encoded)
77
77
  {
78
- query_index_drop_response response{ ctx };
78
+ query_index_drop_response response{ std::move(ctx) };
79
79
  if (!response.ctx.ec) {
80
80
  tao::json::value payload{};
81
81
  try {
82
82
  payload = tao::json::from_string(encoded.body);
83
- } catch (tao::json::pegtl::parse_error& e) {
84
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
83
+ } catch (const tao::json::pegtl::parse_error& e) {
84
+ response.ctx.ec = error::common_errc::parsing_failure;
85
85
  return response;
86
86
  }
87
87
  response.status = payload.at("status").get_string();
@@ -111,12 +111,12 @@ make_response(error_context::http&& ctx, query_index_drop_request& request, quer
111
111
  }
112
112
  if (index_not_found) {
113
113
  if (!request.ignore_if_does_not_exist) {
114
- response.ctx.ec = std::make_error_code(error::common_errc::index_not_found);
114
+ response.ctx.ec = error::common_errc::index_not_found;
115
115
  }
116
116
  } else if (bucket_not_found) {
117
- response.ctx.ec = std::make_error_code(error::common_errc::bucket_not_found);
117
+ response.ctx.ec = error::common_errc::bucket_not_found;
118
118
  } else if (!response.errors.empty()) {
119
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
119
+ response.ctx.ec = error::common_errc::internal_server_failure;
120
120
  }
121
121
  }
122
122
  }
@@ -35,6 +35,7 @@ struct query_index_get_all_response {
35
35
  std::string collection_name;
36
36
  std::string type;
37
37
  std::vector<std::string> index_key{};
38
+ std::optional<std::string> partition{};
38
39
  std::optional<std::string> condition{};
39
40
  std::optional<std::string> bucket_id{};
40
41
  std::optional<std::string> scope_id{};
@@ -56,7 +57,7 @@ struct query_index_get_all_request {
56
57
  std::string bucket_name;
57
58
  std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
58
59
 
59
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
60
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
60
61
  {
61
62
  encoded.headers["content-type"] = "application/json";
62
63
  tao::json::value body{
@@ -75,46 +76,49 @@ struct query_index_get_all_request {
75
76
  };
76
77
 
77
78
  query_index_get_all_response
78
- make_response(error_context::http&& ctx, query_index_get_all_request&, query_index_get_all_request::encoded_response_type&& encoded)
79
+ make_response(error_context::http&& ctx,
80
+ const query_index_get_all_request& /* request */,
81
+ query_index_get_all_request::encoded_response_type&& encoded)
79
82
  {
80
- query_index_get_all_response response{ ctx };
81
- if (!response.ctx.ec) {
82
- if (encoded.status_code == 200) {
83
- tao::json::value payload{};
84
- try {
85
- payload = tao::json::from_string(encoded.body);
86
- } catch (tao::json::pegtl::parse_error& e) {
87
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
88
- return response;
89
- }
90
- response.status = payload.at("status").get_string();
91
- if (response.status == "success") {
92
- for (const auto& entry : payload.at("results").get_array()) {
93
- query_index_get_all_response::query_index index;
94
- index.id = entry.at("id").get_string();
95
- index.datastore_id = entry.at("datastore_id").get_string();
96
- index.namespace_id = entry.at("namespace_id").get_string();
97
- index.keyspace_id = entry.at("keyspace_id").get_string();
98
- index.type = entry.at("using").get_string();
99
- index.name = entry.at("name").get_string();
100
- index.state = entry.at("state").get_string();
101
- if (const auto* prop = entry.find("bucket_id")) {
102
- index.bucket_id = prop->get_string();
103
- }
104
- if (const auto* prop = entry.find("scope_id")) {
105
- index.scope_id = prop->get_string();
106
- }
107
- if (const auto* prop = entry.find("is_primary")) {
108
- index.is_primary = prop->get_boolean();
109
- }
110
- if (const auto* prop = entry.find("condition")) {
111
- index.condition = prop->get_string();
112
- }
113
- for (const auto& key : entry.at("index_key").get_array()) {
114
- index.index_key.emplace_back(key.get_string());
115
- }
116
- response.indexes.emplace_back(index);
83
+ query_index_get_all_response response{ std::move(ctx) };
84
+ if (!response.ctx.ec && encoded.status_code == 200) {
85
+ tao::json::value payload{};
86
+ try {
87
+ payload = tao::json::from_string(encoded.body);
88
+ } catch (const tao::json::pegtl::parse_error& e) {
89
+ response.ctx.ec = error::common_errc::parsing_failure;
90
+ return response;
91
+ }
92
+ response.status = payload.at("status").get_string();
93
+ if (response.status == "success") {
94
+ for (const auto& entry : payload.at("results").get_array()) {
95
+ query_index_get_all_response::query_index index;
96
+ index.id = entry.at("id").get_string();
97
+ index.datastore_id = entry.at("datastore_id").get_string();
98
+ index.namespace_id = entry.at("namespace_id").get_string();
99
+ index.keyspace_id = entry.at("keyspace_id").get_string();
100
+ index.type = entry.at("using").get_string();
101
+ index.name = entry.at("name").get_string();
102
+ index.state = entry.at("state").get_string();
103
+ if (const auto* prop = entry.find("bucket_id")) {
104
+ index.bucket_id = prop->get_string();
105
+ }
106
+ if (const auto* prop = entry.find("scope_id")) {
107
+ index.scope_id = prop->get_string();
108
+ }
109
+ if (const auto* prop = entry.find("is_primary")) {
110
+ index.is_primary = prop->get_boolean();
111
+ }
112
+ if (const auto* prop = entry.find("condition")) {
113
+ index.condition = prop->get_string();
114
+ }
115
+ if (const auto* prop = entry.find("partition")) {
116
+ index.partition = prop->get_string();
117
+ }
118
+ for (const auto& key : entry.at("index_key").get_array()) {
119
+ index.index_key.emplace_back(key.get_string());
117
120
  }
121
+ response.indexes.emplace_back(index);
118
122
  }
119
123
  }
120
124
  }
@@ -84,8 +84,7 @@ struct traits<couchbase::operations::rbac::user_and_metadata> {
84
84
  static couchbase::operations::rbac::user_and_metadata as(const tao::json::basic_value<Traits>& v)
85
85
  {
86
86
  couchbase::operations::rbac::user_and_metadata result;
87
- std::string domain = v.at("domain").get_string();
88
- if (domain == "local") {
87
+ if (const std::string& domain = v.at("domain").get_string(); domain == "local") {
89
88
  result.domain = couchbase::operations::rbac::auth_domain::local;
90
89
  } else if (domain == "external") {
91
90
  result.domain = couchbase::operations::rbac::auth_domain::external;
@@ -93,78 +92,56 @@ struct traits<couchbase::operations::rbac::user_and_metadata> {
93
92
  spdlog::error(R"("unexpected domain for user with metadata: "{}")", domain);
94
93
  }
95
94
  result.username = v.at("id").get_string();
96
- {
97
- const auto* display_name = v.find("name");
98
- if (display_name != nullptr && !display_name->get_string().empty()) {
99
- result.display_name = display_name->get_string();
100
- }
95
+ if (const auto* display_name = v.find("name"); display_name != nullptr && !display_name->get_string().empty()) {
96
+ result.display_name = display_name->get_string();
101
97
  }
102
98
  result.password_changed = v.template optional<std::string>("password_change_date");
103
- {
104
- const auto* external_groups = v.find("external_groups");
105
- if (external_groups != nullptr) {
106
- for (const auto& group : external_groups->get_array()) {
107
- result.external_groups.insert(group.get_string());
108
- }
99
+ if (const auto* external_groups = v.find("external_groups"); external_groups != nullptr) {
100
+ for (const auto& group : external_groups->get_array()) {
101
+ result.external_groups.insert(group.get_string());
109
102
  }
110
103
  }
111
- {
112
- const auto* groups = v.find("groups");
113
- if (groups != nullptr) {
114
- for (const auto& group : groups->get_array()) {
115
- result.groups.insert(group.get_string());
116
- }
104
+ if (const auto* groups = v.find("groups"); groups != nullptr) {
105
+ for (const auto& group : groups->get_array()) {
106
+ result.groups.insert(group.get_string());
117
107
  }
118
108
  }
119
- {
120
- const auto* roles = v.find("roles");
121
- if (roles != nullptr) {
122
- for (const auto& entry : roles->get_array()) {
123
- couchbase::operations::rbac::role_and_origins role{};
124
- role.name = entry.at("role").get_string();
125
- {
126
- const auto* bucket = entry.find("bucket_name");
127
- if (bucket != nullptr && !bucket->get_string().empty()) {
128
- role.bucket = bucket->get_string();
129
- }
130
- }
131
- {
132
- const auto* scope = entry.find("scope_name");
133
- if (scope != nullptr && !scope->get_string().empty()) {
134
- role.scope = scope->get_string();
109
+ if (const auto* roles = v.find("roles"); roles != nullptr) {
110
+ for (const auto& entry : roles->get_array()) {
111
+ couchbase::operations::rbac::role_and_origins role{};
112
+ role.name = entry.at("role").get_string();
113
+ if (const auto* bucket = entry.find("bucket_name"); bucket != nullptr && !bucket->get_string().empty()) {
114
+ role.bucket = bucket->get_string();
115
+ }
116
+ if (const auto* scope = entry.find("scope_name"); scope != nullptr && !scope->get_string().empty()) {
117
+ role.scope = scope->get_string();
118
+ }
119
+
120
+ if (const auto* collection = entry.find("collection_name"); collection != nullptr && !collection->get_string().empty()) {
121
+ role.collection = collection->get_string();
122
+ }
123
+
124
+ if (const auto* origins = entry.find("origins"); origins != nullptr) {
125
+ bool has_user_origin = false;
126
+ for (const auto& ent : origins->get_array()) {
127
+ couchbase::operations::rbac::origin origin{};
128
+ origin.type = ent.at("type").get_string();
129
+ if (origin.type == "user") {
130
+ has_user_origin = true;
135
131
  }
136
- }
137
- {
138
- const auto* collection = entry.find("collection_name");
139
- if (collection != nullptr && !collection->get_string().empty()) {
140
- role.collection = collection->get_string();
132
+ const auto* name = ent.find("name");
133
+ if (name != nullptr) {
134
+ origin.name = name->get_string();
141
135
  }
136
+ role.origins.push_back(origin);
142
137
  }
143
- {
144
- const auto* origins = entry.find("origins");
145
- if (origins != nullptr) {
146
- bool has_user_origin = false;
147
- for (const auto& ent : origins->get_array()) {
148
- couchbase::operations::rbac::origin origin{};
149
- origin.type = ent.at("type").get_string();
150
- if (origin.type == "user") {
151
- has_user_origin = true;
152
- }
153
- const auto* name = ent.find("name");
154
- if (name != nullptr) {
155
- origin.name = name->get_string();
156
- }
157
- role.origins.push_back(origin);
158
- }
159
- if (has_user_origin) {
160
- result.roles.push_back(role);
161
- }
162
- } else {
163
- result.roles.push_back(role);
164
- }
138
+ if (has_user_origin) {
139
+ result.roles.push_back(role);
165
140
  }
166
- result.effective_roles.push_back(role);
141
+ } else {
142
+ result.roles.push_back(role);
167
143
  }
144
+ result.effective_roles.push_back(role);
168
145
  }
169
146
  }
170
147
  return result;