couchbase 3.0.2 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/CMakeLists.txt +3 -0
- data/ext/build_version.hxx.in +1 -1
- data/ext/cmake/CompilerWarnings.cmake +1 -0
- data/ext/cmake/PreventInSourceBuilds.cmake +4 -1
- data/ext/couchbase/bucket.hxx +28 -2
- data/ext/couchbase/cluster.hxx +8 -2
- data/ext/couchbase/couchbase.cxx +955 -511
- data/ext/couchbase/error_context/analytics.hxx +46 -0
- data/ext/couchbase/error_context/http.hxx +44 -0
- data/ext/couchbase/error_context/key_value.hxx +47 -0
- data/ext/couchbase/error_context/query.hxx +46 -0
- data/ext/couchbase/error_context/search.hxx +47 -0
- data/ext/couchbase/error_context/view.hxx +47 -0
- data/ext/couchbase/io/dns_codec.hxx +1 -2
- data/ext/couchbase/io/http_command.hxx +16 -3
- data/ext/couchbase/io/http_context.hxx +1 -1
- data/ext/couchbase/io/http_session.hxx +12 -6
- data/ext/couchbase/io/http_session_manager.hxx +25 -24
- data/ext/couchbase/io/mcbp_session.hxx +8 -2
- data/ext/couchbase/io/retry_context.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataset_create.hxx +19 -12
- data/ext/couchbase/operations/analytics_dataset_drop.hxx +18 -10
- data/ext/couchbase/operations/analytics_dataset_get_all.hxx +16 -10
- data/ext/couchbase/operations/analytics_dataverse_create.hxx +18 -11
- data/ext/couchbase/operations/analytics_dataverse_drop.hxx +17 -11
- data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +17 -10
- data/ext/couchbase/operations/analytics_index_create.hxx +17 -11
- data/ext/couchbase/operations/analytics_index_drop.hxx +16 -10
- data/ext/couchbase/operations/analytics_index_get_all.hxx +14 -10
- data/ext/couchbase/operations/analytics_link_connect.hxx +15 -9
- data/ext/couchbase/operations/analytics_link_disconnect.hxx +16 -10
- data/ext/couchbase/operations/bucket_create.hxx +33 -10
- data/ext/couchbase/operations/bucket_drop.hxx +9 -8
- data/ext/couchbase/operations/bucket_flush.hxx +8 -8
- data/ext/couchbase/operations/bucket_get.hxx +15 -10
- data/ext/couchbase/operations/bucket_get_all.hxx +14 -7
- data/ext/couchbase/operations/bucket_settings.hxx +16 -0
- data/ext/couchbase/operations/bucket_update.hxx +32 -10
- data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +6 -6
- data/ext/couchbase/operations/collection_create.hxx +19 -13
- data/ext/couchbase/operations/collection_drop.hxx +18 -12
- data/ext/couchbase/operations/collections_manifest_get.hxx +5 -10
- data/ext/couchbase/operations/document_analytics.hxx +39 -17
- data/ext/couchbase/operations/document_append.hxx +5 -10
- data/ext/couchbase/operations/document_decrement.hxx +5 -10
- data/ext/couchbase/operations/document_exists.hxx +4 -6
- data/ext/couchbase/operations/document_get.hxx +6 -10
- data/ext/couchbase/operations/document_get_and_lock.hxx +4 -9
- data/ext/couchbase/operations/document_get_and_touch.hxx +4 -9
- data/ext/couchbase/operations/document_get_projected.hxx +21 -14
- data/ext/couchbase/operations/document_increment.hxx +5 -10
- data/ext/couchbase/operations/document_insert.hxx +5 -10
- data/ext/couchbase/operations/document_lookup_in.hxx +4 -9
- data/ext/couchbase/operations/document_mutate_in.hxx +7 -12
- data/ext/couchbase/operations/document_prepend.hxx +5 -10
- data/ext/couchbase/operations/document_query.hxx +45 -28
- data/ext/couchbase/operations/document_remove.hxx +5 -10
- data/ext/couchbase/operations/document_replace.hxx +5 -10
- data/ext/couchbase/operations/document_search.hxx +37 -16
- data/ext/couchbase/operations/document_touch.hxx +4 -9
- data/ext/couchbase/operations/document_unlock.hxx +4 -9
- data/ext/couchbase/operations/document_upsert.hxx +5 -10
- data/ext/couchbase/operations/document_view.hxx +29 -13
- data/ext/couchbase/operations/group_drop.hxx +7 -7
- data/ext/couchbase/operations/group_get.hxx +14 -10
- data/ext/couchbase/operations/group_get_all.hxx +14 -8
- data/ext/couchbase/operations/group_upsert.hxx +15 -9
- data/ext/couchbase/operations/http_noop.hxx +5 -5
- data/ext/couchbase/operations/mcbp_noop.hxx +3 -9
- data/ext/couchbase/operations/query_index_build_deferred.hxx +15 -9
- data/ext/couchbase/operations/query_index_create.hxx +16 -10
- data/ext/couchbase/operations/query_index_drop.hxx +16 -10
- data/ext/couchbase/operations/query_index_get_all.hxx +13 -7
- data/ext/couchbase/operations/role_get_all.hxx +14 -8
- data/ext/couchbase/operations/scope_create.hxx +19 -13
- data/ext/couchbase/operations/scope_drop.hxx +17 -11
- data/ext/couchbase/operations/scope_get_all.hxx +15 -10
- data/ext/couchbase/operations/search_get_stats.hxx +5 -5
- data/ext/couchbase/operations/search_index_analyze_document.hxx +25 -13
- data/ext/couchbase/operations/search_index_control_ingest.hxx +23 -11
- data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +23 -11
- data/ext/couchbase/operations/search_index_control_query.hxx +23 -11
- data/ext/couchbase/operations/search_index_drop.hxx +22 -10
- data/ext/couchbase/operations/search_index_get.hxx +22 -10
- data/ext/couchbase/operations/search_index_get_all.hxx +13 -7
- data/ext/couchbase/operations/search_index_get_documents_count.hxx +24 -13
- data/ext/couchbase/operations/search_index_get_stats.hxx +16 -10
- data/ext/couchbase/operations/search_index_upsert.hxx +23 -11
- data/ext/couchbase/operations/user_drop.hxx +8 -8
- data/ext/couchbase/operations/user_get.hxx +14 -10
- data/ext/couchbase/operations/user_get_all.hxx +14 -8
- data/ext/couchbase/operations/user_upsert.hxx +15 -9
- data/ext/couchbase/operations/view_index_drop.hxx +7 -7
- data/ext/couchbase/operations/view_index_get.hxx +15 -9
- data/ext/couchbase/operations/view_index_get_all.hxx +15 -9
- data/ext/couchbase/operations/view_index_upsert.hxx +8 -8
- data/ext/couchbase/origin.hxx +1 -0
- data/ext/couchbase/platform/terminate_handler.cc +12 -8
- data/ext/couchbase/protocol/client_request.hxx +2 -1
- data/ext/couchbase/protocol/client_response.hxx +18 -15
- data/ext/couchbase/protocol/cmd_exists.hxx +1 -0
- data/ext/couchbase/protocol/cmd_get.hxx +1 -1
- data/ext/couchbase/protocol/cmd_mutate_in.hxx +3 -4
- data/ext/couchbase/protocol/enhanced_error_info.hxx +28 -0
- data/ext/couchbase/utils/connection_string.hxx +1 -1
- data/ext/couchbase/version.hxx +1 -1
- data/ext/extconf.rb +1 -1
- data/ext/test/test_native_binary_operations.cxx +18 -18
- data/ext/test/test_native_diagnostics.cxx +2 -2
- data/ext/test/test_native_trivial_crud.cxx +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_reader.hpp +1 -5
- data/lib/active_support/cache/couchbase_store.rb +362 -0
- data/lib/couchbase.rb +2 -0
- data/lib/couchbase/authenticator.rb +26 -0
- data/lib/couchbase/binary_collection.rb +1 -0
- data/lib/couchbase/bucket.rb +1 -0
- data/lib/couchbase/cluster.rb +51 -27
- data/lib/couchbase/collection.rb +19 -4
- data/lib/couchbase/collection_options.rb +10 -0
- data/lib/couchbase/configuration.rb +57 -0
- data/lib/couchbase/datastructures.rb +6 -0
- data/lib/couchbase/errors.rb +111 -3
- data/lib/couchbase/management.rb +27 -0
- data/lib/couchbase/management/bucket_manager.rb +9 -2
- data/lib/couchbase/management/collection_manager.rb +1 -1
- data/lib/couchbase/management/user_manager.rb +18 -2
- data/lib/couchbase/options.rb +33 -23
- data/lib/couchbase/railtie.rb +45 -0
- data/lib/couchbase/scope.rb +44 -3
- data/lib/couchbase/utils.rb +21 -0
- data/lib/couchbase/utils/time.rb +52 -0
- data/lib/couchbase/version.rb +1 -1
- data/lib/rails/generators/couchbase/config/config_generator.rb +27 -0
- metadata +19 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2020 Couchbase, Inc.
|
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -27,8 +27,7 @@ namespace couchbase::operations
|
|
|
27
27
|
{
|
|
28
28
|
|
|
29
29
|
struct group_get_all_response {
|
|
30
|
-
|
|
31
|
-
std::error_code ec;
|
|
30
|
+
error_context::http ctx;
|
|
32
31
|
std::vector<rbac::group> groups{};
|
|
33
32
|
};
|
|
34
33
|
|
|
@@ -36,6 +35,7 @@ struct group_get_all_request {
|
|
|
36
35
|
using response_type = group_get_all_response;
|
|
37
36
|
using encoded_request_type = io::http_request;
|
|
38
37
|
using encoded_response_type = io::http_response;
|
|
38
|
+
using error_context_type = error_context::http;
|
|
39
39
|
|
|
40
40
|
static const inline service_type type = service_type::management;
|
|
41
41
|
|
|
@@ -52,17 +52,23 @@ struct group_get_all_request {
|
|
|
52
52
|
};
|
|
53
53
|
|
|
54
54
|
group_get_all_response
|
|
55
|
-
make_response(
|
|
55
|
+
make_response(error_context::http&& ctx, group_get_all_request&, group_get_all_request::encoded_response_type&& encoded)
|
|
56
56
|
{
|
|
57
|
-
group_get_all_response response{
|
|
58
|
-
if (!ec) {
|
|
57
|
+
group_get_all_response response{ ctx };
|
|
58
|
+
if (!response.ctx.ec) {
|
|
59
59
|
if (encoded.status_code == 200) {
|
|
60
|
-
tao::json::value payload
|
|
60
|
+
tao::json::value payload{};
|
|
61
|
+
try {
|
|
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);
|
|
65
|
+
return response;
|
|
66
|
+
}
|
|
61
67
|
for (const auto& entry : payload.get_array()) {
|
|
62
68
|
response.groups.emplace_back(entry.as<rbac::group>());
|
|
63
69
|
}
|
|
64
70
|
} else {
|
|
65
|
-
response.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
71
|
+
response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
66
72
|
}
|
|
67
73
|
}
|
|
68
74
|
return response;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2020 Couchbase, Inc.
|
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -31,8 +31,7 @@ namespace couchbase::operations
|
|
|
31
31
|
{
|
|
32
32
|
|
|
33
33
|
struct group_upsert_response {
|
|
34
|
-
|
|
35
|
-
std::error_code ec;
|
|
34
|
+
error_context::http ctx;
|
|
36
35
|
std::vector<std::string> errors{};
|
|
37
36
|
};
|
|
38
37
|
|
|
@@ -40,6 +39,7 @@ struct group_upsert_request {
|
|
|
40
39
|
using response_type = group_upsert_response;
|
|
41
40
|
using encoded_request_type = io::http_request;
|
|
42
41
|
using encoded_response_type = io::http_response;
|
|
42
|
+
using error_context_type = error_context::http;
|
|
43
43
|
|
|
44
44
|
static const inline service_type type = service_type::management;
|
|
45
45
|
|
|
@@ -91,16 +91,22 @@ struct group_upsert_request {
|
|
|
91
91
|
};
|
|
92
92
|
|
|
93
93
|
group_upsert_response
|
|
94
|
-
make_response(
|
|
94
|
+
make_response(error_context::http&& ctx, group_upsert_request&, group_upsert_request::encoded_response_type&& encoded)
|
|
95
95
|
{
|
|
96
|
-
group_upsert_response response{
|
|
97
|
-
if (!ec) {
|
|
96
|
+
group_upsert_response response{ ctx };
|
|
97
|
+
if (!response.ctx.ec) {
|
|
98
98
|
switch (encoded.status_code) {
|
|
99
99
|
case 200:
|
|
100
100
|
break;
|
|
101
101
|
case 400: {
|
|
102
|
-
response.ec = std::make_error_code(error::common_errc::invalid_argument);
|
|
103
|
-
tao::json::value payload
|
|
102
|
+
response.ctx.ec = std::make_error_code(error::common_errc::invalid_argument);
|
|
103
|
+
tao::json::value payload{};
|
|
104
|
+
try {
|
|
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);
|
|
108
|
+
return response;
|
|
109
|
+
}
|
|
104
110
|
const auto* errors = payload.find("errors");
|
|
105
111
|
if (errors != nullptr && errors->is_object()) {
|
|
106
112
|
for (const auto& entry : errors->get_object()) {
|
|
@@ -109,7 +115,7 @@ make_response(std::error_code ec, group_upsert_request& request, group_upsert_re
|
|
|
109
115
|
}
|
|
110
116
|
} break;
|
|
111
117
|
default:
|
|
112
|
-
response.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
118
|
+
response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
113
119
|
break;
|
|
114
120
|
}
|
|
115
121
|
}
|
|
@@ -20,19 +20,19 @@
|
|
|
20
20
|
#include <tao/json.hpp>
|
|
21
21
|
|
|
22
22
|
#include <version.hxx>
|
|
23
|
+
#include <error_context/http.hxx>
|
|
23
24
|
|
|
24
25
|
namespace couchbase::operations
|
|
25
26
|
{
|
|
26
27
|
struct http_noop_response {
|
|
27
|
-
|
|
28
|
-
std::error_code ec;
|
|
29
|
-
uint32_t status_code;
|
|
28
|
+
error_context::http ctx;
|
|
30
29
|
};
|
|
31
30
|
|
|
32
31
|
struct http_noop_request {
|
|
33
32
|
using response_type = http_noop_response;
|
|
34
33
|
using encoded_request_type = io::http_request;
|
|
35
34
|
using encoded_response_type = io::http_response;
|
|
35
|
+
using error_context_type = error_context::http;
|
|
36
36
|
|
|
37
37
|
service_type type;
|
|
38
38
|
std::chrono::milliseconds timeout;
|
|
@@ -69,9 +69,9 @@ struct http_noop_request {
|
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
http_noop_response
|
|
72
|
-
make_response(
|
|
72
|
+
make_response(error_context::http&& ctx, http_noop_request&, http_noop_request::encoded_response_type&&)
|
|
73
73
|
{
|
|
74
|
-
http_noop_response response{
|
|
74
|
+
http_noop_response response{ ctx };
|
|
75
75
|
return response;
|
|
76
76
|
}
|
|
77
77
|
|
|
@@ -25,10 +25,7 @@ namespace couchbase::operations
|
|
|
25
25
|
{
|
|
26
26
|
|
|
27
27
|
struct mcbp_noop_response {
|
|
28
|
-
|
|
29
|
-
std::error_code ec{};
|
|
30
|
-
std::chrono::steady_clock::time_point start{};
|
|
31
|
-
std::chrono::steady_clock::time_point stop{};
|
|
28
|
+
error_context::key_value ctx;
|
|
32
29
|
};
|
|
33
30
|
|
|
34
31
|
struct mcbp_noop_request {
|
|
@@ -49,12 +46,9 @@ struct mcbp_noop_request {
|
|
|
49
46
|
};
|
|
50
47
|
|
|
51
48
|
mcbp_noop_response
|
|
52
|
-
make_response(
|
|
49
|
+
make_response(error_context::key_value&& ctx, mcbp_noop_request&, mcbp_noop_request::encoded_response_type&&)
|
|
53
50
|
{
|
|
54
|
-
mcbp_noop_response response{
|
|
55
|
-
if (ec && response.opaque == 0) {
|
|
56
|
-
response.opaque = request.opaque;
|
|
57
|
-
}
|
|
51
|
+
mcbp_noop_response response{ ctx };
|
|
58
52
|
return response;
|
|
59
53
|
}
|
|
60
54
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2020 Couchbase, Inc.
|
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -28,8 +28,7 @@ struct query_index_build_deferred_response {
|
|
|
28
28
|
std::uint64_t code;
|
|
29
29
|
std::string message;
|
|
30
30
|
};
|
|
31
|
-
|
|
32
|
-
std::error_code ec;
|
|
31
|
+
error_context::http ctx;
|
|
33
32
|
std::string status{};
|
|
34
33
|
std::vector<query_problem> errors{};
|
|
35
34
|
};
|
|
@@ -38,6 +37,7 @@ struct query_index_build_deferred_request {
|
|
|
38
37
|
using response_type = query_index_build_deferred_response;
|
|
39
38
|
using encoded_request_type = io::http_request;
|
|
40
39
|
using encoded_response_type = io::http_response;
|
|
40
|
+
using error_context_type = error_context::http;
|
|
41
41
|
|
|
42
42
|
static const inline service_type type = service_type::query;
|
|
43
43
|
|
|
@@ -63,13 +63,19 @@ struct query_index_build_deferred_request {
|
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
query_index_build_deferred_response
|
|
66
|
-
make_response(
|
|
67
|
-
query_index_build_deferred_request
|
|
66
|
+
make_response(error_context::http&& ctx,
|
|
67
|
+
query_index_build_deferred_request&,
|
|
68
68
|
query_index_build_deferred_request::encoded_response_type&& encoded)
|
|
69
69
|
{
|
|
70
|
-
query_index_build_deferred_response response{
|
|
71
|
-
if (!ec) {
|
|
72
|
-
|
|
70
|
+
query_index_build_deferred_response response{ ctx };
|
|
71
|
+
if (!response.ctx.ec) {
|
|
72
|
+
tao::json::value payload{};
|
|
73
|
+
try {
|
|
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);
|
|
77
|
+
return response;
|
|
78
|
+
}
|
|
73
79
|
response.status = payload.at("status").get_string();
|
|
74
80
|
if (response.status != "success") {
|
|
75
81
|
for (const auto& entry : payload.at("errors").get_array()) {
|
|
@@ -78,7 +84,7 @@ make_response(std::error_code ec,
|
|
|
78
84
|
error.message = entry.at("msg").get_string();
|
|
79
85
|
response.errors.emplace_back(error);
|
|
80
86
|
}
|
|
81
|
-
response.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
87
|
+
response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
82
88
|
}
|
|
83
89
|
}
|
|
84
90
|
return response;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2020 Couchbase, Inc.
|
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -28,8 +28,7 @@ struct query_index_create_response {
|
|
|
28
28
|
std::uint64_t code;
|
|
29
29
|
std::string message;
|
|
30
30
|
};
|
|
31
|
-
|
|
32
|
-
std::error_code ec;
|
|
31
|
+
error_context::http ctx;
|
|
33
32
|
std::string status{};
|
|
34
33
|
std::vector<query_problem> errors{};
|
|
35
34
|
};
|
|
@@ -38,6 +37,7 @@ struct query_index_create_request {
|
|
|
38
37
|
using response_type = query_index_create_response;
|
|
39
38
|
using encoded_request_type = io::http_request;
|
|
40
39
|
using encoded_response_type = io::http_response;
|
|
40
|
+
using error_context_type = error_context::http;
|
|
41
41
|
|
|
42
42
|
static const inline service_type type = service_type::query;
|
|
43
43
|
|
|
@@ -100,11 +100,17 @@ struct query_index_create_request {
|
|
|
100
100
|
};
|
|
101
101
|
|
|
102
102
|
query_index_create_response
|
|
103
|
-
make_response(
|
|
103
|
+
make_response(error_context::http&& ctx, query_index_create_request& request, query_index_create_request::encoded_response_type&& encoded)
|
|
104
104
|
{
|
|
105
|
-
query_index_create_response response{
|
|
106
|
-
if (!ec) {
|
|
107
|
-
|
|
105
|
+
query_index_create_response response{ ctx };
|
|
106
|
+
if (!response.ctx.ec) {
|
|
107
|
+
tao::json::value payload{};
|
|
108
|
+
try {
|
|
109
|
+
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
|
+
return response;
|
|
113
|
+
}
|
|
108
114
|
response.status = payload.at("status").get_string();
|
|
109
115
|
|
|
110
116
|
if (response.status != "success") {
|
|
@@ -131,12 +137,12 @@ make_response(std::error_code ec, query_index_create_request& request, query_ind
|
|
|
131
137
|
}
|
|
132
138
|
if (index_already_exists) {
|
|
133
139
|
if (!request.ignore_if_exists) {
|
|
134
|
-
response.ec = std::make_error_code(error::common_errc::index_exists);
|
|
140
|
+
response.ctx.ec = std::make_error_code(error::common_errc::index_exists);
|
|
135
141
|
}
|
|
136
142
|
} else if (bucket_not_found) {
|
|
137
|
-
response.ec = std::make_error_code(error::common_errc::bucket_not_found);
|
|
143
|
+
response.ctx.ec = std::make_error_code(error::common_errc::bucket_not_found);
|
|
138
144
|
} else if (!response.errors.empty()) {
|
|
139
|
-
response.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
145
|
+
response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
140
146
|
}
|
|
141
147
|
}
|
|
142
148
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2020 Couchbase, Inc.
|
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -28,8 +28,7 @@ struct query_index_drop_response {
|
|
|
28
28
|
std::uint64_t code;
|
|
29
29
|
std::string message;
|
|
30
30
|
};
|
|
31
|
-
|
|
32
|
-
std::error_code ec;
|
|
31
|
+
error_context::http ctx;
|
|
33
32
|
std::string status{};
|
|
34
33
|
std::vector<query_problem> errors{};
|
|
35
34
|
};
|
|
@@ -38,6 +37,7 @@ struct query_index_drop_request {
|
|
|
38
37
|
using response_type = query_index_drop_response;
|
|
39
38
|
using encoded_request_type = io::http_request;
|
|
40
39
|
using encoded_response_type = io::http_response;
|
|
40
|
+
using error_context_type = error_context::http;
|
|
41
41
|
|
|
42
42
|
static const inline service_type type = service_type::query;
|
|
43
43
|
|
|
@@ -73,11 +73,17 @@ struct query_index_drop_request {
|
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
query_index_drop_response
|
|
76
|
-
make_response(
|
|
76
|
+
make_response(error_context::http&& ctx, query_index_drop_request& request, query_index_drop_request::encoded_response_type&& encoded)
|
|
77
77
|
{
|
|
78
|
-
query_index_drop_response response{
|
|
79
|
-
if (!ec) {
|
|
80
|
-
|
|
78
|
+
query_index_drop_response response{ ctx };
|
|
79
|
+
if (!response.ctx.ec) {
|
|
80
|
+
tao::json::value payload{};
|
|
81
|
+
try {
|
|
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);
|
|
85
|
+
return response;
|
|
86
|
+
}
|
|
81
87
|
response.status = payload.at("status").get_string();
|
|
82
88
|
|
|
83
89
|
if (response.status != "success") {
|
|
@@ -105,12 +111,12 @@ make_response(std::error_code ec, query_index_drop_request& request, query_index
|
|
|
105
111
|
}
|
|
106
112
|
if (index_not_found) {
|
|
107
113
|
if (!request.ignore_if_does_not_exist) {
|
|
108
|
-
response.ec = std::make_error_code(error::common_errc::index_not_found);
|
|
114
|
+
response.ctx.ec = std::make_error_code(error::common_errc::index_not_found);
|
|
109
115
|
}
|
|
110
116
|
} else if (bucket_not_found) {
|
|
111
|
-
response.ec = std::make_error_code(error::common_errc::bucket_not_found);
|
|
117
|
+
response.ctx.ec = std::make_error_code(error::common_errc::bucket_not_found);
|
|
112
118
|
} else if (!response.errors.empty()) {
|
|
113
|
-
response.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
119
|
+
response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
114
120
|
}
|
|
115
121
|
}
|
|
116
122
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2020 Couchbase, Inc.
|
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -39,8 +39,7 @@ struct query_index_get_all_response {
|
|
|
39
39
|
std::optional<std::string> bucket_id{};
|
|
40
40
|
std::optional<std::string> scope_id{};
|
|
41
41
|
};
|
|
42
|
-
|
|
43
|
-
std::error_code ec;
|
|
42
|
+
error_context::http ctx;
|
|
44
43
|
std::string status{};
|
|
45
44
|
std::vector<query_index> indexes{};
|
|
46
45
|
};
|
|
@@ -49,6 +48,7 @@ struct query_index_get_all_request {
|
|
|
49
48
|
using response_type = query_index_get_all_response;
|
|
50
49
|
using encoded_request_type = io::http_request;
|
|
51
50
|
using encoded_response_type = io::http_response;
|
|
51
|
+
using error_context_type = error_context::http;
|
|
52
52
|
|
|
53
53
|
static const inline service_type type = service_type::query;
|
|
54
54
|
|
|
@@ -75,12 +75,18 @@ struct query_index_get_all_request {
|
|
|
75
75
|
};
|
|
76
76
|
|
|
77
77
|
query_index_get_all_response
|
|
78
|
-
make_response(
|
|
78
|
+
make_response(error_context::http&& ctx, query_index_get_all_request&, query_index_get_all_request::encoded_response_type&& encoded)
|
|
79
79
|
{
|
|
80
|
-
query_index_get_all_response response{
|
|
81
|
-
if (!ec) {
|
|
80
|
+
query_index_get_all_response response{ ctx };
|
|
81
|
+
if (!response.ctx.ec) {
|
|
82
82
|
if (encoded.status_code == 200) {
|
|
83
|
-
|
|
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
|
+
}
|
|
84
90
|
response.status = payload.at("status").get_string();
|
|
85
91
|
if (response.status == "success") {
|
|
86
92
|
for (const auto& entry : payload.at("results").get_array()) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2020 Couchbase, Inc.
|
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -27,8 +27,7 @@ namespace couchbase::operations
|
|
|
27
27
|
{
|
|
28
28
|
|
|
29
29
|
struct role_get_all_response {
|
|
30
|
-
|
|
31
|
-
std::error_code ec;
|
|
30
|
+
error_context::http ctx;
|
|
32
31
|
std::vector<rbac::role_and_description> roles{};
|
|
33
32
|
};
|
|
34
33
|
|
|
@@ -36,6 +35,7 @@ struct role_get_all_request {
|
|
|
36
35
|
using response_type = role_get_all_response;
|
|
37
36
|
using encoded_request_type = io::http_request;
|
|
38
37
|
using encoded_response_type = io::http_response;
|
|
38
|
+
using error_context_type = error_context::http;
|
|
39
39
|
|
|
40
40
|
static const inline service_type type = service_type::management;
|
|
41
41
|
|
|
@@ -52,17 +52,23 @@ struct role_get_all_request {
|
|
|
52
52
|
};
|
|
53
53
|
|
|
54
54
|
role_get_all_response
|
|
55
|
-
make_response(
|
|
55
|
+
make_response(error_context::http&& ctx, role_get_all_request&, role_get_all_request::encoded_response_type&& encoded)
|
|
56
56
|
{
|
|
57
|
-
role_get_all_response response{
|
|
58
|
-
if (!ec) {
|
|
57
|
+
role_get_all_response response{ ctx };
|
|
58
|
+
if (!response.ctx.ec) {
|
|
59
59
|
if (encoded.status_code == 200) {
|
|
60
|
-
tao::json::value payload
|
|
60
|
+
tao::json::value payload{};
|
|
61
|
+
try {
|
|
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);
|
|
65
|
+
return response;
|
|
66
|
+
}
|
|
61
67
|
for (const auto& entry : payload.get_array()) {
|
|
62
68
|
response.roles.emplace_back(entry.as<rbac::role_and_description>());
|
|
63
69
|
}
|
|
64
70
|
} else {
|
|
65
|
-
response.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
71
|
+
response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
|
|
66
72
|
}
|
|
67
73
|
}
|
|
68
74
|
return response;
|