couchbase 3.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +73 -4
  3. data/ext/build_config.hxx.in +2 -0
  4. data/ext/build_version.hxx.in +11 -8
  5. data/ext/cmake/BuildTracing.cmake +1 -1
  6. data/ext/cmake/CompilerWarnings.cmake +5 -0
  7. data/ext/cmake/Testing.cmake +3 -6
  8. data/ext/couchbase/bucket.hxx +9 -1
  9. data/ext/couchbase/cbsasl/client.h +1 -1
  10. data/ext/couchbase/cluster.hxx +89 -6
  11. data/ext/couchbase/configuration.hxx +2 -0
  12. data/ext/couchbase/couchbase.cxx +1647 -507
  13. data/ext/couchbase/diagnostics.hxx +0 -3
  14. data/ext/couchbase/io/dns_client.hxx +2 -2
  15. data/ext/couchbase/io/http_command.hxx +6 -3
  16. data/ext/couchbase/io/http_session.hxx +14 -18
  17. data/ext/couchbase/io/http_session_manager.hxx +83 -2
  18. data/ext/couchbase/io/mcbp_command.hxx +4 -1
  19. data/ext/couchbase/io/mcbp_context.hxx +37 -0
  20. data/ext/couchbase/io/mcbp_session.hxx +91 -30
  21. data/ext/couchbase/operations.hxx +5 -0
  22. data/ext/couchbase/operations/analytics_dataset_create.hxx +3 -2
  23. data/ext/couchbase/operations/analytics_dataset_drop.hxx +3 -2
  24. data/ext/couchbase/operations/analytics_dataset_get_all.hxx +3 -2
  25. data/ext/couchbase/operations/analytics_dataverse_create.hxx +3 -2
  26. data/ext/couchbase/operations/analytics_dataverse_drop.hxx +3 -2
  27. data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +3 -2
  28. data/ext/couchbase/operations/analytics_index_create.hxx +3 -2
  29. data/ext/couchbase/operations/analytics_index_drop.hxx +3 -2
  30. data/ext/couchbase/operations/analytics_index_get_all.hxx +5 -2
  31. data/ext/couchbase/operations/analytics_link_connect.hxx +3 -2
  32. data/ext/couchbase/operations/analytics_link_disconnect.hxx +3 -2
  33. data/ext/couchbase/operations/bucket_create.hxx +3 -2
  34. data/ext/couchbase/operations/bucket_drop.hxx +3 -2
  35. data/ext/couchbase/operations/bucket_flush.hxx +3 -2
  36. data/ext/couchbase/operations/bucket_get.hxx +3 -2
  37. data/ext/couchbase/operations/bucket_get_all.hxx +3 -2
  38. data/ext/couchbase/operations/bucket_update.hxx +3 -2
  39. data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +3 -2
  40. data/ext/couchbase/operations/collection_create.hxx +3 -2
  41. data/ext/couchbase/operations/collection_drop.hxx +3 -2
  42. data/ext/couchbase/operations/collections_manifest_get.hxx +3 -2
  43. data/ext/couchbase/operations/document_analytics.hxx +3 -2
  44. data/ext/couchbase/operations/document_append.hxx +77 -0
  45. data/ext/couchbase/operations/document_decrement.hxx +3 -2
  46. data/ext/couchbase/operations/document_exists.hxx +3 -2
  47. data/ext/couchbase/operations/document_get.hxx +3 -2
  48. data/ext/couchbase/operations/document_get_and_lock.hxx +3 -2
  49. data/ext/couchbase/operations/document_get_and_touch.hxx +3 -2
  50. data/ext/couchbase/operations/document_get_projected.hxx +3 -2
  51. data/ext/couchbase/operations/document_increment.hxx +3 -2
  52. data/ext/couchbase/operations/document_insert.hxx +3 -2
  53. data/ext/couchbase/operations/document_lookup_in.hxx +8 -2
  54. data/ext/couchbase/operations/document_mutate_in.hxx +13 -2
  55. data/ext/couchbase/operations/document_prepend.hxx +77 -0
  56. data/ext/couchbase/operations/document_query.hxx +3 -2
  57. data/ext/couchbase/operations/document_remove.hxx +5 -2
  58. data/ext/couchbase/operations/document_replace.hxx +3 -2
  59. data/ext/couchbase/operations/document_search.hxx +3 -2
  60. data/ext/couchbase/operations/document_touch.hxx +3 -2
  61. data/ext/couchbase/operations/document_unlock.hxx +3 -2
  62. data/ext/couchbase/operations/document_upsert.hxx +3 -2
  63. data/ext/couchbase/operations/document_view.hxx +3 -2
  64. data/ext/couchbase/operations/group_drop.hxx +3 -2
  65. data/ext/couchbase/operations/group_get.hxx +3 -2
  66. data/ext/couchbase/operations/group_get_all.hxx +3 -2
  67. data/ext/couchbase/operations/group_upsert.hxx +3 -2
  68. data/ext/couchbase/operations/http_noop.hxx +78 -0
  69. data/ext/couchbase/operations/mcbp_noop.hxx +61 -0
  70. data/ext/couchbase/operations/query_index_build_deferred.hxx +3 -2
  71. data/ext/couchbase/operations/query_index_create.hxx +3 -2
  72. data/ext/couchbase/operations/query_index_drop.hxx +3 -2
  73. data/ext/couchbase/operations/query_index_get_all.hxx +3 -2
  74. data/ext/couchbase/operations/role_get_all.hxx +3 -2
  75. data/ext/couchbase/operations/scope_create.hxx +3 -2
  76. data/ext/couchbase/operations/scope_drop.hxx +3 -2
  77. data/ext/couchbase/operations/scope_get_all.hxx +3 -2
  78. data/ext/couchbase/operations/search_get_stats.hxx +3 -2
  79. data/ext/couchbase/operations/search_index_analyze_document.hxx +3 -2
  80. data/ext/couchbase/operations/search_index_control_ingest.hxx +3 -2
  81. data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +3 -2
  82. data/ext/couchbase/operations/search_index_control_query.hxx +3 -2
  83. data/ext/couchbase/operations/search_index_drop.hxx +3 -2
  84. data/ext/couchbase/operations/search_index_get.hxx +3 -2
  85. data/ext/couchbase/operations/search_index_get_all.hxx +3 -2
  86. data/ext/couchbase/operations/search_index_get_documents_count.hxx +3 -2
  87. data/ext/couchbase/operations/search_index_get_stats.hxx +3 -2
  88. data/ext/couchbase/operations/search_index_upsert.hxx +3 -2
  89. data/ext/couchbase/operations/user_drop.hxx +3 -2
  90. data/ext/couchbase/operations/user_get.hxx +3 -2
  91. data/ext/couchbase/operations/user_get_all.hxx +3 -2
  92. data/ext/couchbase/operations/user_upsert.hxx +3 -2
  93. data/ext/couchbase/operations/view_index_drop.hxx +3 -2
  94. data/ext/couchbase/operations/view_index_get.hxx +3 -2
  95. data/ext/couchbase/operations/view_index_get_all.hxx +3 -2
  96. data/ext/couchbase/operations/view_index_upsert.hxx +3 -2
  97. data/ext/couchbase/platform/terminate_handler.cc +5 -2
  98. data/ext/couchbase/protocol/client_opcode.hxx +368 -0
  99. data/ext/couchbase/protocol/cmd_append.hxx +145 -0
  100. data/ext/couchbase/protocol/cmd_hello.hxx +1 -0
  101. data/ext/couchbase/protocol/cmd_lookup_in.hxx +11 -3
  102. data/ext/couchbase/protocol/cmd_mutate_in.hxx +46 -4
  103. data/ext/couchbase/protocol/cmd_noop.hxx +82 -0
  104. data/ext/couchbase/protocol/cmd_prepend.hxx +145 -0
  105. data/ext/couchbase/protocol/durability_level.hxx +16 -0
  106. data/ext/couchbase/protocol/hello_feature.hxx +9 -0
  107. data/ext/couchbase/protocol/unsigned_leb128.h +2 -2
  108. data/ext/couchbase/service_type.hxx +1 -1
  109. data/ext/couchbase/version.hxx +18 -4
  110. data/ext/extconf.rb +9 -6
  111. data/ext/test/CMakeLists.txt +5 -0
  112. data/ext/test/test_helper.hxx +3 -3
  113. data/ext/test/test_helper_native.hxx +2 -5
  114. data/ext/test/test_native_binary_operations.cxx +186 -0
  115. data/ext/test/test_native_diagnostics.cxx +54 -3
  116. data/ext/test/test_ruby_trivial_crud.cxx +1 -1
  117. data/lib/couchbase.rb +1 -0
  118. data/lib/couchbase/analytics_options.rb +1 -71
  119. data/lib/couchbase/binary_collection.rb +60 -22
  120. data/lib/couchbase/binary_collection_options.rb +0 -76
  121. data/lib/couchbase/bucket.rb +40 -36
  122. data/lib/couchbase/cluster.rb +89 -156
  123. data/lib/couchbase/collection.rb +290 -72
  124. data/lib/couchbase/collection_options.rb +30 -243
  125. data/lib/couchbase/datastructures/couchbase_list.rb +5 -16
  126. data/lib/couchbase/datastructures/couchbase_map.rb +5 -16
  127. data/lib/couchbase/datastructures/couchbase_queue.rb +5 -16
  128. data/lib/couchbase/datastructures/couchbase_set.rb +5 -16
  129. data/lib/couchbase/diagnostics.rb +181 -0
  130. data/lib/couchbase/json_transcoder.rb +1 -1
  131. data/lib/couchbase/{common_options.rb → logger.rb} +24 -11
  132. data/lib/couchbase/management/query_index_manager.rb +1 -1
  133. data/lib/couchbase/management/user_manager.rb +3 -0
  134. data/lib/couchbase/options.rb +2094 -0
  135. data/lib/couchbase/query_options.rb +1 -144
  136. data/lib/couchbase/scope.rb +8 -25
  137. data/lib/couchbase/search_options.rb +0 -93
  138. data/lib/couchbase/version.rb +20 -1
  139. data/lib/couchbase/view_options.rb +1 -91
  140. metadata +19 -7
@@ -196,7 +196,7 @@ struct query_request {
196
196
  std::optional<http_context> ctx_{};
197
197
  bool extract_encoded_plan_{ false };
198
198
 
199
- void encode_to(encoded_request_type& encoded, http_context& context)
199
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& context)
200
200
  {
201
201
  ctx_.emplace(context);
202
202
  tao::json::value body{};
@@ -324,11 +324,12 @@ struct query_request {
324
324
  } else {
325
325
  spdlog::debug("QUERY: prep={}, {}", tao::json::to_string(prep), tao::json::to_string(stmt));
326
326
  }
327
+ return {};
327
328
  }
328
329
  };
329
330
 
330
331
  query_response
331
- make_response(std::error_code ec, query_request& request, query_request::encoded_response_type encoded)
332
+ make_response(std::error_code ec, query_request& request, query_request::encoded_response_type&& encoded)
332
333
  {
333
334
  query_response response{ request.client_context_id, ec };
334
335
  if (!ec) {
@@ -39,24 +39,27 @@ struct remove_request {
39
39
  document_id id;
40
40
  uint16_t partition{};
41
41
  uint32_t opaque{};
42
+ uint64_t cas{ 0 };
42
43
  protocol::durability_level durability_level{ protocol::durability_level::none };
43
44
  std::optional<std::uint16_t> durability_timeout{};
44
45
  std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
45
46
  io::retry_context<io::retry_strategy::best_effort> retries{ false };
46
47
 
47
- void encode_to(encoded_request_type& encoded)
48
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
48
49
  {
49
50
  encoded.opaque(opaque);
50
51
  encoded.partition(partition);
52
+ encoded.cas(cas);
51
53
  encoded.body().id(id);
52
54
  if (durability_level != protocol::durability_level::none) {
53
55
  encoded.body().durability(durability_level, durability_timeout);
54
56
  }
57
+ return {};
55
58
  }
56
59
  };
57
60
 
58
61
  remove_response
59
- make_response(std::error_code ec, remove_request& request, remove_request::encoded_response_type encoded)
62
+ make_response(std::error_code ec, remove_request& request, remove_request::encoded_response_type&& encoded)
60
63
  {
61
64
  remove_response response{ request.id, encoded.opaque(), ec };
62
65
  if (ec && response.opaque == 0) {
@@ -49,7 +49,7 @@ struct replace_request {
49
49
  std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
50
50
  io::retry_context<io::retry_strategy::best_effort> retries{ false };
51
51
 
52
- void encode_to(encoded_request_type& encoded)
52
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
53
53
  {
54
54
  encoded.opaque(opaque);
55
55
  encoded.partition(partition);
@@ -61,11 +61,12 @@ struct replace_request {
61
61
  if (durability_level != protocol::durability_level::none) {
62
62
  encoded.body().durability(durability_level, durability_timeout);
63
63
  }
64
+ return {};
64
65
  }
65
66
  };
66
67
 
67
68
  replace_response
68
- make_response(std::error_code ec, replace_request& request, replace_request::encoded_response_type encoded)
69
+ make_response(std::error_code ec, replace_request& request, replace_request::encoded_response_type&& encoded)
69
70
  {
70
71
  replace_response response{ request.id, encoded.opaque(), ec };
71
72
  if (ec && response.opaque == 0) {
@@ -128,7 +128,7 @@ struct search_request {
128
128
 
129
129
  std::map<std::string, tao::json::value> raw{};
130
130
 
131
- void encode_to(encoded_request_type& encoded, http_context& context)
131
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& context)
132
132
  {
133
133
  tao::json::value body{
134
134
  { "query", query },
@@ -201,11 +201,12 @@ struct search_request {
201
201
  } else {
202
202
  spdlog::debug("SEARCH: {}", tao::json::to_string(body["query"]));
203
203
  }
204
+ return {};
204
205
  }
205
206
  };
206
207
 
207
208
  search_response
208
- make_response(std::error_code ec, search_request& request, search_request::encoded_response_type encoded)
209
+ make_response(std::error_code ec, search_request& request, search_request::encoded_response_type&& encoded)
209
210
  {
210
211
  search_response response{ ec };
211
212
  response.meta_data.client_context_id = request.client_context_id;
@@ -42,17 +42,18 @@ struct touch_request {
42
42
  std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
43
43
  io::retry_context<io::retry_strategy::best_effort> retries{ false };
44
44
 
45
- void encode_to(encoded_request_type& encoded)
45
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
46
46
  {
47
47
  encoded.opaque(opaque);
48
48
  encoded.partition(partition);
49
49
  encoded.body().id(id);
50
50
  encoded.body().expiry(expiry);
51
+ return {};
51
52
  }
52
53
  };
53
54
 
54
55
  touch_response
55
- make_response(std::error_code ec, touch_request& request, touch_request::encoded_response_type encoded)
56
+ make_response(std::error_code ec, touch_request& request, touch_request::encoded_response_type&& encoded)
56
57
  {
57
58
  touch_response response{ request.id, encoded.opaque(), ec };
58
59
  if (ec && response.opaque == 0) {
@@ -42,17 +42,18 @@ struct unlock_request {
42
42
  std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
43
43
  io::retry_context<io::retry_strategy::best_effort> retries{ false };
44
44
 
45
- void encode_to(encoded_request_type& encoded)
45
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
46
46
  {
47
47
  encoded.opaque(opaque);
48
48
  encoded.partition(partition);
49
49
  encoded.body().id(id);
50
50
  encoded.cas(cas);
51
+ return {};
51
52
  }
52
53
  };
53
54
 
54
55
  unlock_response
55
- make_response(std::error_code ec, unlock_request& request, unlock_request::encoded_response_type encoded)
56
+ make_response(std::error_code ec, unlock_request& request, unlock_request::encoded_response_type&& encoded)
56
57
  {
57
58
  unlock_response response{ request.id, encoded.opaque(), ec };
58
59
  if (ec && response.opaque == 0) {
@@ -48,7 +48,7 @@ struct upsert_request {
48
48
  std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
49
49
  io::retry_context<io::retry_strategy::best_effort> retries{ false };
50
50
 
51
- void encode_to(encoded_request_type& encoded)
51
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
52
52
  {
53
53
  encoded.opaque(opaque);
54
54
  encoded.partition(partition);
@@ -59,11 +59,12 @@ struct upsert_request {
59
59
  if (durability_level != protocol::durability_level::none) {
60
60
  encoded.body().durability(durability_level, durability_timeout);
61
61
  }
62
+ return {};
62
63
  }
63
64
  };
64
65
 
65
66
  upsert_response
66
- make_response(std::error_code ec, upsert_request& request, upsert_request::encoded_response_type encoded)
67
+ make_response(std::error_code ec, upsert_request& request, upsert_request::encoded_response_type&& encoded)
67
68
  {
68
69
  upsert_response response{ request.id, encoded.opaque(), ec };
69
70
  if (ec && response.opaque == 0) {
@@ -89,7 +89,7 @@ struct document_view_request {
89
89
  enum class sort_order { ascending, descending };
90
90
  std::optional<sort_order> order;
91
91
 
92
- void encode_to(encoded_request_type& encoded, http_context&)
92
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
93
93
  {
94
94
  std::vector<std::string> query_string;
95
95
 
@@ -172,11 +172,12 @@ struct document_view_request {
172
172
  view_name,
173
173
  fmt::join(query_string, "&"));
174
174
  encoded.body = tao::json::to_string(body);
175
+ return {};
175
176
  }
176
177
  };
177
178
 
178
179
  document_view_response
179
- make_response(std::error_code ec, document_view_request& request, document_view_request::encoded_response_type encoded)
180
+ make_response(std::error_code ec, document_view_request& request, document_view_request::encoded_response_type&& encoded)
180
181
  {
181
182
  document_view_response response{ request.client_context_id, ec };
182
183
  if (!ec) {
@@ -42,15 +42,16 @@ struct group_drop_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
- void encode_to(encoded_request_type& encoded, http_context&)
45
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
46
46
  {
47
47
  encoded.method = "DELETE";
48
48
  encoded.path = fmt::format("/settings/rbac/groups/{}", name);
49
+ return {};
49
50
  }
50
51
  };
51
52
 
52
53
  group_drop_response
53
- make_response(std::error_code ec, group_drop_request& request, group_drop_request::encoded_response_type encoded)
54
+ make_response(std::error_code ec, group_drop_request& request, group_drop_request::encoded_response_type&& encoded)
54
55
  {
55
56
  group_drop_response response{ request.client_context_id, ec };
56
57
  if (!ec) {
@@ -43,16 +43,17 @@ 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
- void encode_to(encoded_request_type& encoded, http_context&)
46
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
47
47
  {
48
48
  encoded.method = "GET";
49
49
  encoded.path = fmt::format("/settings/rbac/groups/{}", name);
50
50
  encoded.headers["content-type"] = "application/x-www-form-urlencoded";
51
+ return {};
51
52
  }
52
53
  };
53
54
 
54
55
  group_get_response
55
- make_response(std::error_code ec, group_get_request& request, group_get_request::encoded_response_type encoded)
56
+ make_response(std::error_code ec, group_get_request& request, group_get_request::encoded_response_type&& encoded)
56
57
  {
57
58
  group_get_response response{ request.client_context_id, ec };
58
59
  if (!ec) {
@@ -42,16 +42,17 @@ 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
- void encode_to(encoded_request_type& encoded, http_context&)
45
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
46
46
  {
47
47
  encoded.method = "GET";
48
48
  encoded.path = fmt::format("/settings/rbac/groups");
49
49
  encoded.headers["content-type"] = "application/x-www-form-urlencoded";
50
+ return {};
50
51
  }
51
52
  };
52
53
 
53
54
  group_get_all_response
54
- make_response(std::error_code ec, group_get_all_request& request, group_get_all_request::encoded_response_type encoded)
55
+ make_response(std::error_code ec, group_get_all_request& request, group_get_all_request::encoded_response_type&& encoded)
55
56
  {
56
57
  group_get_all_response response{ request.client_context_id, ec };
57
58
  if (!ec) {
@@ -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
- void encode_to(encoded_request_type& encoded, http_context&)
50
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
51
51
  {
52
52
  encoded.method = "PUT";
53
53
  encoded.path = fmt::format("/settings/rbac/groups/{}", group.name);
@@ -86,11 +86,12 @@ struct group_upsert_request {
86
86
  }
87
87
  encoded.body = fmt::format("{}", fmt::join(params, "&"));
88
88
  encoded.headers["content-type"] = "application/x-www-form-urlencoded";
89
+ return {};
89
90
  }
90
91
  };
91
92
 
92
93
  group_upsert_response
93
- make_response(std::error_code ec, group_upsert_request& request, group_upsert_request::encoded_response_type encoded)
94
+ make_response(std::error_code ec, group_upsert_request& request, group_upsert_request::encoded_response_type&& encoded)
94
95
  {
95
96
  group_upsert_response response{ request.client_context_id, ec };
96
97
  if (!ec) {
@@ -0,0 +1,78 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <tao/json.hpp>
21
+
22
+ #include <version.hxx>
23
+
24
+ namespace couchbase::operations
25
+ {
26
+ struct http_noop_response {
27
+ std::string client_context_id;
28
+ std::error_code ec;
29
+ uint32_t status_code;
30
+ };
31
+
32
+ struct http_noop_request {
33
+ using response_type = http_noop_response;
34
+ using encoded_request_type = io::http_request;
35
+ using encoded_response_type = io::http_response;
36
+
37
+ service_type type;
38
+ std::chrono::milliseconds timeout;
39
+
40
+ std::string client_context_id{ uuid::to_string(uuid::random()) };
41
+
42
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
43
+ {
44
+ encoded.headers["connection"] = "keep-alive";
45
+ encoded.method = "GET";
46
+ switch (type) {
47
+ case service_type::query:
48
+ timeout = timeout_defaults::query_timeout;
49
+ encoded.path = "/admin/ping";
50
+ break;
51
+ case service_type::analytics:
52
+ timeout = timeout_defaults::analytics_timeout;
53
+ encoded.path = "/admin/ping";
54
+ break;
55
+ case service_type::search:
56
+ timeout = timeout_defaults::search_timeout;
57
+ encoded.path = "/api/ping";
58
+ break;
59
+ case service_type::views:
60
+ timeout = timeout_defaults::view_timeout;
61
+ encoded.path = "/";
62
+ break;
63
+ case service_type::management:
64
+ case service_type::kv:
65
+ return std::make_error_code(error::common_errc::feature_not_available);
66
+ }
67
+ return {};
68
+ }
69
+ };
70
+
71
+ http_noop_response
72
+ make_response(std::error_code ec, http_noop_request& request, http_noop_request::encoded_response_type&& encoded)
73
+ {
74
+ http_noop_response response{ request.client_context_id, ec, encoded.status_code };
75
+ return response;
76
+ }
77
+
78
+ } // namespace couchbase::operations
@@ -0,0 +1,61 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <document_id.hxx>
21
+ #include <protocol/cmd_noop.hxx>
22
+ #include <io/retry_context.hxx>
23
+
24
+ namespace couchbase::operations
25
+ {
26
+
27
+ struct mcbp_noop_response {
28
+ std::uint32_t opaque;
29
+ std::error_code ec{};
30
+ std::chrono::steady_clock::time_point start{};
31
+ std::chrono::steady_clock::time_point stop{};
32
+ };
33
+
34
+ struct mcbp_noop_request {
35
+ using encoded_request_type = protocol::client_request<protocol::mcbp_noop_request_body>;
36
+ using encoded_response_type = protocol::client_response<protocol::mcbp_noop_response_body>;
37
+
38
+ uint16_t partition{};
39
+ uint32_t opaque{};
40
+ std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
41
+ io::retry_context<io::retry_strategy::best_effort> retries{ true };
42
+
43
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
44
+ {
45
+ encoded.opaque(opaque);
46
+ encoded.partition(partition);
47
+ return {};
48
+ }
49
+ };
50
+
51
+ mcbp_noop_response
52
+ make_response(std::error_code ec, mcbp_noop_request& request, mcbp_noop_request::encoded_response_type&& encoded)
53
+ {
54
+ mcbp_noop_response response{ encoded.opaque(), ec };
55
+ if (ec && response.opaque == 0) {
56
+ response.opaque = request.opaque;
57
+ }
58
+ return response;
59
+ }
60
+
61
+ } // namespace couchbase::operations
@@ -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
- void encode_to(encoded_request_type& encoded, http_context&)
48
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
49
49
  {
50
50
  encoded.headers["content-type"] = "application/json";
51
51
  tao::json::value body{
@@ -58,13 +58,14 @@ struct query_index_build_deferred_request {
58
58
  encoded.method = "POST";
59
59
  encoded.path = "/query/service";
60
60
  encoded.body = tao::json::to_string(body);
61
+ return {};
61
62
  }
62
63
  };
63
64
 
64
65
  query_index_build_deferred_response
65
66
  make_response(std::error_code ec,
66
67
  query_index_build_deferred_request& request,
67
- query_index_build_deferred_request::encoded_response_type encoded)
68
+ query_index_build_deferred_request::encoded_response_type&& encoded)
68
69
  {
69
70
  query_index_build_deferred_response response{ request.client_context_id, ec };
70
71
  if (!ec) {
@@ -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
- void encode_to(encoded_request_type& encoded, http_context&)
58
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
59
59
  {
60
60
  encoded.headers["content-type"] = "application/json";
61
61
  tao::json::value with{};
@@ -95,11 +95,12 @@ struct query_index_create_request {
95
95
  encoded.method = "POST";
96
96
  encoded.path = "/query/service";
97
97
  encoded.body = tao::json::to_string(body);
98
+ return {};
98
99
  }
99
100
  };
100
101
 
101
102
  query_index_create_response
102
- make_response(std::error_code ec, query_index_create_request& request, query_index_create_request::encoded_response_type encoded)
103
+ make_response(std::error_code ec, query_index_create_request& request, query_index_create_request::encoded_response_type&& encoded)
103
104
  {
104
105
  query_index_create_response response{ request.client_context_id, ec };
105
106
  if (!ec) {