couchbase 3.0.0.alpha.5 → 3.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +12 -3
- data/README.md +4 -2
- data/Rakefile +1 -1
- data/couchbase.gemspec +17 -12
- data/ext/.idea/misc.xml +12 -0
- data/ext/CMakeLists.txt +10 -1
- data/ext/build_config.hxx.in +20 -0
- data/ext/build_version.hxx.in +1 -1
- data/ext/couchbase/bucket.hxx +90 -24
- data/ext/couchbase/cluster.hxx +125 -84
- data/ext/couchbase/cluster_options.hxx +53 -0
- data/ext/couchbase/configuration.hxx +220 -2
- data/ext/couchbase/couchbase.cxx +134 -127
- data/ext/couchbase/io/dns_client.hxx +3 -1
- data/ext/couchbase/io/http_command.hxx +91 -0
- data/ext/couchbase/io/http_session.hxx +58 -19
- data/ext/couchbase/io/http_session_manager.hxx +26 -31
- data/ext/couchbase/io/mcbp_command.hxx +180 -0
- data/ext/couchbase/io/mcbp_message.hxx +5 -0
- data/ext/couchbase/io/mcbp_session.hxx +213 -98
- data/ext/couchbase/io/streams.hxx +165 -0
- data/ext/couchbase/operations.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataset_create.hxx +1 -1
- data/ext/couchbase/operations/bucket_create.hxx +4 -2
- data/ext/couchbase/operations/bucket_drop.hxx +4 -2
- data/ext/couchbase/operations/bucket_flush.hxx +4 -2
- data/ext/couchbase/operations/bucket_get.hxx +4 -2
- data/ext/couchbase/operations/bucket_get_all.hxx +4 -2
- data/ext/couchbase/operations/bucket_update.hxx +4 -2
- data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +4 -2
- data/ext/couchbase/operations/collection_create.hxx +4 -2
- data/ext/couchbase/operations/collection_drop.hxx +4 -2
- data/ext/couchbase/operations/document_analytics.hxx +0 -4
- data/ext/couchbase/operations/document_decrement.hxx +6 -3
- data/ext/couchbase/operations/document_get.hxx +3 -0
- data/ext/couchbase/operations/document_get_and_lock.hxx +3 -0
- data/ext/couchbase/operations/document_get_and_touch.hxx +5 -2
- data/ext/couchbase/operations/document_get_projected.hxx +12 -9
- data/ext/couchbase/operations/document_increment.hxx +6 -3
- data/ext/couchbase/operations/document_insert.hxx +5 -2
- data/ext/couchbase/operations/document_lookup_in.hxx +3 -0
- data/ext/couchbase/operations/document_mutate_in.hxx +6 -3
- data/ext/couchbase/operations/document_remove.hxx +3 -0
- data/ext/couchbase/operations/document_replace.hxx +5 -2
- data/ext/couchbase/operations/document_search.hxx +6 -7
- data/ext/couchbase/operations/document_touch.hxx +5 -2
- data/ext/couchbase/operations/document_unlock.hxx +3 -0
- data/ext/couchbase/operations/document_upsert.hxx +5 -2
- data/ext/couchbase/operations/query_index_build_deferred.hxx +3 -3
- data/ext/couchbase/operations/query_index_create.hxx +3 -3
- data/ext/couchbase/operations/query_index_drop.hxx +3 -3
- data/ext/couchbase/operations/query_index_get_all.hxx +3 -3
- data/ext/couchbase/operations/scope_create.hxx +4 -2
- data/ext/couchbase/operations/scope_drop.hxx +4 -2
- data/ext/couchbase/operations/scope_get_all.hxx +4 -2
- data/ext/couchbase/operations/search_index_analyze_document.hxx +2 -2
- data/ext/couchbase/operations/search_index_control_ingest.hxx +2 -2
- data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +2 -2
- data/ext/couchbase/operations/search_index_control_query.hxx +2 -2
- data/ext/couchbase/operations/search_index_drop.hxx +2 -2
- data/ext/couchbase/operations/search_index_get.hxx +2 -2
- data/ext/couchbase/operations/search_index_get_all.hxx +2 -2
- data/ext/couchbase/operations/search_index_get_documents_count.hxx +2 -2
- data/ext/couchbase/operations/search_index_upsert.hxx +2 -2
- data/ext/couchbase/origin.hxx +148 -0
- data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +1 -6
- data/ext/couchbase/protocol/cmd_decrement.hxx +5 -5
- data/ext/couchbase/protocol/cmd_get_and_touch.hxx +5 -5
- data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +1 -6
- data/ext/couchbase/protocol/cmd_increment.hxx +5 -5
- data/ext/couchbase/protocol/cmd_info.hxx +0 -11
- data/ext/couchbase/protocol/cmd_insert.hxx +5 -5
- data/ext/couchbase/protocol/cmd_mutate_in.hxx +6 -6
- data/ext/couchbase/protocol/cmd_replace.hxx +5 -5
- data/ext/couchbase/protocol/cmd_touch.hxx +1 -1
- data/ext/couchbase/protocol/cmd_upsert.hxx +5 -5
- data/ext/couchbase/timeout_defaults.hxx +7 -0
- data/ext/couchbase/utils/connection_string.hxx +139 -0
- data/ext/extconf.rb +44 -11
- data/ext/test/main.cxx +93 -15
- data/ext/third_party/http_parser/Makefile +160 -0
- data/ext/third_party/json/Makefile +77 -0
- data/lib/couchbase/analytics_options.rb +18 -4
- data/lib/couchbase/binary_collection.rb +2 -2
- data/lib/couchbase/binary_collection_options.rb +2 -2
- data/lib/couchbase/bucket.rb +4 -4
- data/lib/couchbase/cluster.rb +60 -46
- data/lib/couchbase/collection.rb +13 -13
- data/lib/couchbase/collection_options.rb +15 -9
- data/{bin/console → lib/couchbase/datastructures.rb} +4 -7
- data/lib/couchbase/datastructures/couchbase_list.rb +171 -0
- data/lib/couchbase/datastructures/couchbase_map.rb +205 -0
- data/lib/couchbase/datastructures/couchbase_queue.rb +145 -0
- data/lib/couchbase/datastructures/couchbase_set.rb +138 -0
- data/lib/couchbase/errors.rb +66 -63
- data/lib/couchbase/management/user_manager.rb +1 -1
- data/lib/couchbase/mutation_state.rb +1 -0
- data/lib/couchbase/query_options.rb +25 -2
- data/lib/couchbase/scope.rb +0 -7
- data/lib/couchbase/search_options.rb +7 -0
- data/lib/couchbase/version.rb +1 -1
- data/lib/couchbase/view_options.rb +4 -3
- metadata +20 -82
- data/.github/workflows/tests-6.0.3.yml +0 -52
- data/.github/workflows/tests-dev-preview.yml +0 -55
- data/.github/workflows/tests.yml +0 -50
- data/.gitignore +0 -20
- data/.gitmodules +0 -21
- data/.idea/.gitignore +0 -5
- data/.idea/dictionaries/gem_terms.xml +0 -18
- data/.idea/inspectionProfiles/Project_Default.xml +0 -8
- data/.idea/vcs.xml +0 -13
- data/bin/check-cluster +0 -31
- data/bin/fetch-stats +0 -19
- data/bin/init-cluster +0 -82
- data/bin/jenkins/build-extension +0 -35
- data/bin/jenkins/install-dependencies +0 -47
- data/bin/jenkins/test-with-cbdyncluster +0 -58
- data/bin/setup +0 -24
- data/ext/couchbase/configuration_monitor.hxx +0 -93
- data/ext/couchbase/operations/command.hxx +0 -163
- data/rbi/couchbase.rbi +0 -79
@@ -39,7 +39,7 @@ struct decrement_request {
|
|
39
39
|
document_id id;
|
40
40
|
std::uint16_t partition{};
|
41
41
|
std::uint32_t opaque{};
|
42
|
-
std::uint32_t
|
42
|
+
std::uint32_t expiry{ 0 };
|
43
43
|
std::uint64_t delta{ 1 };
|
44
44
|
std::optional<std::uint64_t> initial_value{};
|
45
45
|
protocol::durability_level durability_level{ protocol::durability_level::none };
|
@@ -54,10 +54,10 @@ struct decrement_request {
|
|
54
54
|
encoded.body().delta(delta);
|
55
55
|
if (initial_value) {
|
56
56
|
encoded.body().initial_value(initial_value.value());
|
57
|
-
encoded.body().
|
57
|
+
encoded.body().expiry(expiry);
|
58
58
|
} else {
|
59
59
|
encoded.body().initial_value(0);
|
60
|
-
encoded.body().
|
60
|
+
encoded.body().expiry(0xffff'ffff);
|
61
61
|
}
|
62
62
|
if (durability_level != protocol::durability_level::none) {
|
63
63
|
encoded.body().durability(durability_level, durability_timeout);
|
@@ -69,6 +69,9 @@ decrement_response
|
|
69
69
|
make_response(std::error_code ec, decrement_request& request, decrement_request::encoded_response_type encoded)
|
70
70
|
{
|
71
71
|
decrement_response response{ request.id, encoded.opaque(), ec };
|
72
|
+
if (ec && response.opaque == 0) {
|
73
|
+
response.opaque = request.opaque;
|
74
|
+
}
|
72
75
|
if (!ec) {
|
73
76
|
response.cas = encoded.cas();
|
74
77
|
response.content = encoded.body().content();
|
@@ -53,6 +53,9 @@ get_response
|
|
53
53
|
make_response(std::error_code ec, get_request& request, get_request::encoded_response_type encoded)
|
54
54
|
{
|
55
55
|
get_response response{ request.id, encoded.opaque(), ec };
|
56
|
+
if (ec && response.opaque == 0) {
|
57
|
+
response.opaque = request.opaque;
|
58
|
+
}
|
56
59
|
if (!ec) {
|
57
60
|
response.value = std::move(encoded.body().value());
|
58
61
|
response.cas = encoded.cas();
|
@@ -55,6 +55,9 @@ get_and_lock_response
|
|
55
55
|
make_response(std::error_code ec, get_and_lock_request& request, get_and_lock_request::encoded_response_type encoded)
|
56
56
|
{
|
57
57
|
get_and_lock_response response{ request.id, encoded.opaque(), ec };
|
58
|
+
if (ec && response.opaque == 0) {
|
59
|
+
response.opaque = request.opaque;
|
60
|
+
}
|
58
61
|
if (!ec) {
|
59
62
|
response.value = std::move(encoded.body().value());
|
60
63
|
response.cas = encoded.cas();
|
@@ -39,7 +39,7 @@ struct get_and_touch_request {
|
|
39
39
|
document_id id;
|
40
40
|
uint16_t partition{};
|
41
41
|
uint32_t opaque{};
|
42
|
-
uint32_t
|
42
|
+
uint32_t expiry{};
|
43
43
|
std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
|
44
44
|
|
45
45
|
void encode_to(encoded_request_type& encoded)
|
@@ -47,7 +47,7 @@ struct get_and_touch_request {
|
|
47
47
|
encoded.opaque(opaque);
|
48
48
|
encoded.partition(partition);
|
49
49
|
encoded.body().id(id);
|
50
|
-
encoded.body().
|
50
|
+
encoded.body().expiry(expiry);
|
51
51
|
}
|
52
52
|
};
|
53
53
|
|
@@ -55,6 +55,9 @@ get_and_touch_response
|
|
55
55
|
make_response(std::error_code ec, get_and_touch_request& request, get_and_touch_request::encoded_response_type encoded)
|
56
56
|
{
|
57
57
|
get_and_touch_response response{ request.id, encoded.opaque(), ec };
|
58
|
+
if (ec && response.opaque == 0) {
|
59
|
+
response.opaque = request.opaque;
|
60
|
+
}
|
58
61
|
if (!ec) {
|
59
62
|
response.value = std::move(encoded.body().value());
|
60
63
|
response.cas = encoded.cas();
|
@@ -30,7 +30,7 @@ struct get_projected_response {
|
|
30
30
|
std::string value{};
|
31
31
|
std::uint64_t cas{};
|
32
32
|
std::uint32_t flags{};
|
33
|
-
std::optional<std::uint32_t>
|
33
|
+
std::optional<std::uint32_t> expiry{};
|
34
34
|
};
|
35
35
|
|
36
36
|
struct get_projected_request {
|
@@ -41,7 +41,7 @@ struct get_projected_request {
|
|
41
41
|
std::uint16_t partition{};
|
42
42
|
std::uint32_t opaque{};
|
43
43
|
std::vector<std::string> projections{};
|
44
|
-
bool
|
44
|
+
bool with_expiry{ false };
|
45
45
|
std::vector<std::string> effective_projections{};
|
46
46
|
bool preserve_array_indexes{ false };
|
47
47
|
std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
|
@@ -54,7 +54,7 @@ struct get_projected_request {
|
|
54
54
|
|
55
55
|
effective_projections = projections;
|
56
56
|
std::size_t num_projections = effective_projections.size();
|
57
|
-
if (
|
57
|
+
if (with_expiry) {
|
58
58
|
num_projections++;
|
59
59
|
}
|
60
60
|
if (num_projections > 16) {
|
@@ -63,7 +63,7 @@ struct get_projected_request {
|
|
63
63
|
}
|
64
64
|
|
65
65
|
protocol::lookup_in_request_body::lookup_in_specs specs{};
|
66
|
-
if (
|
66
|
+
if (with_expiry) {
|
67
67
|
specs.add_spec(protocol::subdoc_opcode::get, true, "$document.exptime");
|
68
68
|
}
|
69
69
|
if (effective_projections.empty()) {
|
@@ -198,18 +198,21 @@ get_projected_response
|
|
198
198
|
make_response(std::error_code ec, get_projected_request& request, get_projected_request::encoded_response_type encoded)
|
199
199
|
{
|
200
200
|
get_projected_response response{ request.id, encoded.opaque(), ec };
|
201
|
+
if (ec && response.opaque == 0) {
|
202
|
+
response.opaque = request.opaque;
|
203
|
+
}
|
201
204
|
if (!ec) {
|
202
205
|
response.cas = encoded.cas();
|
203
|
-
if (request.
|
204
|
-
response.
|
206
|
+
if (request.with_expiry) {
|
207
|
+
response.expiry = gsl::narrow_cast<std::uint32_t>(std::stoul(encoded.body().fields()[0].value));
|
205
208
|
}
|
206
209
|
if (request.effective_projections.empty()) {
|
207
210
|
// from full document
|
208
|
-
if (request.projections.empty() && request.
|
211
|
+
if (request.projections.empty() && request.with_expiry) {
|
209
212
|
// special case when user only wanted full+expiration
|
210
213
|
response.value = encoded.body().fields()[1].value;
|
211
214
|
} else {
|
212
|
-
tao::json::value full_doc = tao::json::from_string(encoded.body().fields()[request.
|
215
|
+
tao::json::value full_doc = tao::json::from_string(encoded.body().fields()[request.with_expiry ? 1 : 0].value);
|
213
216
|
tao::json::value new_doc;
|
214
217
|
for (const auto& projection : request.projections) {
|
215
218
|
auto value_to_apply = priv::subdoc_lookup(full_doc, projection);
|
@@ -224,7 +227,7 @@ make_response(std::error_code ec, get_projected_request& request, get_projected_
|
|
224
227
|
}
|
225
228
|
} else {
|
226
229
|
tao::json::value new_doc = tao::json::empty_object;
|
227
|
-
std::size_t offset = request.
|
230
|
+
std::size_t offset = request.with_expiry ? 1 : 0;
|
228
231
|
for (const auto& projection : request.projections) {
|
229
232
|
auto& field = encoded.body().fields()[offset++];
|
230
233
|
if (field.status == protocol::status::success && !field.value.empty()) {
|
@@ -41,7 +41,7 @@ struct increment_request {
|
|
41
41
|
document_id id;
|
42
42
|
std::uint16_t partition{};
|
43
43
|
std::uint32_t opaque{};
|
44
|
-
std::uint32_t
|
44
|
+
std::uint32_t expiry{ 0 };
|
45
45
|
std::uint64_t delta{ 1 };
|
46
46
|
std::optional<std::uint64_t> initial_value{};
|
47
47
|
protocol::durability_level durability_level{ protocol::durability_level::none };
|
@@ -56,10 +56,10 @@ struct increment_request {
|
|
56
56
|
encoded.body().delta(delta);
|
57
57
|
if (initial_value) {
|
58
58
|
encoded.body().initial_value(initial_value.value());
|
59
|
-
encoded.body().
|
59
|
+
encoded.body().expiry(expiry);
|
60
60
|
} else {
|
61
61
|
encoded.body().initial_value(0);
|
62
|
-
encoded.body().
|
62
|
+
encoded.body().expiry(0xffff'ffff);
|
63
63
|
}
|
64
64
|
if (durability_level != protocol::durability_level::none) {
|
65
65
|
encoded.body().durability(durability_level, durability_timeout);
|
@@ -71,6 +71,9 @@ increment_response
|
|
71
71
|
make_response(std::error_code ec, increment_request& request, increment_request::encoded_response_type encoded)
|
72
72
|
{
|
73
73
|
increment_response response{ request.id, encoded.opaque(), ec };
|
74
|
+
if (ec && response.opaque == 0) {
|
75
|
+
response.opaque = request.opaque;
|
76
|
+
}
|
74
77
|
if (!ec) {
|
75
78
|
response.cas = encoded.cas();
|
76
79
|
response.content = encoded.body().content();
|
@@ -41,7 +41,7 @@ struct insert_request {
|
|
41
41
|
uint16_t partition{};
|
42
42
|
uint32_t opaque{};
|
43
43
|
uint32_t flags{ 0 };
|
44
|
-
uint32_t
|
44
|
+
uint32_t expiry{ 0 };
|
45
45
|
protocol::durability_level durability_level{ protocol::durability_level::none };
|
46
46
|
std::optional<std::uint16_t> durability_timeout{};
|
47
47
|
std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
|
@@ -51,7 +51,7 @@ struct insert_request {
|
|
51
51
|
encoded.opaque(opaque);
|
52
52
|
encoded.partition(partition);
|
53
53
|
encoded.body().id(id);
|
54
|
-
encoded.body().
|
54
|
+
encoded.body().expiry(expiry);
|
55
55
|
encoded.body().flags(flags);
|
56
56
|
encoded.body().content(value);
|
57
57
|
if (durability_level != protocol::durability_level::none) {
|
@@ -64,6 +64,9 @@ insert_response
|
|
64
64
|
make_response(std::error_code ec, insert_request& request, insert_request::encoded_response_type encoded)
|
65
65
|
{
|
66
66
|
insert_response response{ request.id, encoded.opaque(), ec };
|
67
|
+
if (ec && response.opaque == 0) {
|
68
|
+
response.opaque = request.opaque;
|
69
|
+
}
|
67
70
|
if (!ec) {
|
68
71
|
response.cas = encoded.cas();
|
69
72
|
response.token = encoded.body().token();
|
@@ -77,6 +77,9 @@ lookup_in_response
|
|
77
77
|
make_response(std::error_code ec, lookup_in_request& request, lookup_in_request::encoded_response_type encoded)
|
78
78
|
{
|
79
79
|
lookup_in_response response{ request.id, encoded.opaque(), ec };
|
80
|
+
if (ec && response.opaque == 0) {
|
81
|
+
response.opaque = request.opaque;
|
82
|
+
}
|
80
83
|
if (!ec) {
|
81
84
|
response.cas = encoded.cas();
|
82
85
|
response.fields.resize(request.specs.entries.size());
|
@@ -59,7 +59,7 @@ struct mutate_in_request {
|
|
59
59
|
uint32_t opaque{};
|
60
60
|
uint64_t cas{ 0 };
|
61
61
|
bool access_deleted{ false };
|
62
|
-
std::optional<std::uint32_t>
|
62
|
+
std::optional<std::uint32_t> expiry{};
|
63
63
|
protocol::mutate_in_request_body::store_semantics_type store_semantics{
|
64
64
|
protocol::mutate_in_request_body::store_semantics_type::replace
|
65
65
|
};
|
@@ -86,8 +86,8 @@ struct mutate_in_request {
|
|
86
86
|
encoded.partition(partition);
|
87
87
|
encoded.body().id(id);
|
88
88
|
encoded.cas(cas);
|
89
|
-
if (
|
90
|
-
encoded.body().
|
89
|
+
if (expiry) {
|
90
|
+
encoded.body().expiry(*expiry);
|
91
91
|
}
|
92
92
|
encoded.body().access_deleted(access_deleted);
|
93
93
|
encoded.body().store_semantics(store_semantics);
|
@@ -102,6 +102,9 @@ mutate_in_response
|
|
102
102
|
make_response(std::error_code ec, mutate_in_request& request, mutate_in_request::encoded_response_type encoded)
|
103
103
|
{
|
104
104
|
mutate_in_response response{ request.id, encoded.opaque(), ec };
|
105
|
+
if (ec && response.opaque == 0) {
|
106
|
+
response.opaque = request.opaque;
|
107
|
+
}
|
105
108
|
if (!ec) {
|
106
109
|
response.cas = encoded.cas();
|
107
110
|
response.token = encoded.body().token();
|
@@ -57,6 +57,9 @@ remove_response
|
|
57
57
|
make_response(std::error_code ec, remove_request& request, remove_request::encoded_response_type encoded)
|
58
58
|
{
|
59
59
|
remove_response response{ request.id, encoded.opaque(), ec };
|
60
|
+
if (ec && response.opaque == 0) {
|
61
|
+
response.opaque = request.opaque;
|
62
|
+
}
|
60
63
|
if (!ec) {
|
61
64
|
response.cas = encoded.cas();
|
62
65
|
response.token = encoded.body().token();
|
@@ -41,7 +41,7 @@ struct replace_request {
|
|
41
41
|
uint16_t partition{};
|
42
42
|
uint32_t opaque{};
|
43
43
|
uint32_t flags{ 0 };
|
44
|
-
uint32_t
|
44
|
+
uint32_t expiry{ 0 };
|
45
45
|
uint64_t cas{ 0 };
|
46
46
|
protocol::durability_level durability_level{ protocol::durability_level::none };
|
47
47
|
std::optional<std::uint16_t> durability_timeout{};
|
@@ -53,7 +53,7 @@ struct replace_request {
|
|
53
53
|
encoded.partition(partition);
|
54
54
|
encoded.cas(cas);
|
55
55
|
encoded.body().id(id);
|
56
|
-
encoded.body().
|
56
|
+
encoded.body().expiry(expiry);
|
57
57
|
encoded.body().flags(flags);
|
58
58
|
encoded.body().content(value);
|
59
59
|
if (durability_level != protocol::durability_level::none) {
|
@@ -66,6 +66,9 @@ replace_response
|
|
66
66
|
make_response(std::error_code ec, replace_request& request, replace_request::encoded_response_type encoded)
|
67
67
|
{
|
68
68
|
replace_response response{ request.id, encoded.opaque(), ec };
|
69
|
+
if (ec && response.opaque == 0) {
|
70
|
+
response.opaque = request.opaque;
|
71
|
+
}
|
69
72
|
if (!ec) {
|
70
73
|
response.cas = encoded.cas();
|
71
74
|
response.token = encoded.body().token();
|
@@ -59,20 +59,20 @@ struct search_response {
|
|
59
59
|
|
60
60
|
struct search_facet {
|
61
61
|
struct term_facet {
|
62
|
-
std::string term;
|
63
|
-
std::uint64_t count;
|
62
|
+
std::string term{};
|
63
|
+
std::uint64_t count{};
|
64
64
|
};
|
65
65
|
|
66
66
|
struct date_range_facet {
|
67
|
-
std::string name;
|
68
|
-
std::uint64_t count;
|
67
|
+
std::string name{};
|
68
|
+
std::uint64_t count{};
|
69
69
|
std::optional<std::string> start{};
|
70
70
|
std::optional<std::string> end{};
|
71
71
|
};
|
72
72
|
|
73
73
|
struct numeric_range_facet {
|
74
|
-
std::string name;
|
75
|
-
std::uint64_t count;
|
74
|
+
std::string name{};
|
75
|
+
std::uint64_t count{};
|
76
76
|
std::variant<std::monostate, std::uint64_t, double> min{};
|
77
77
|
std::variant<std::monostate, std::uint64_t, double> max{};
|
78
78
|
};
|
@@ -189,7 +189,6 @@ struct search_request {
|
|
189
189
|
|
190
190
|
encoded.type = type;
|
191
191
|
encoded.headers["content-type"] = "application/json";
|
192
|
-
encoded.headers["client-context-id"] = client_context_id;
|
193
192
|
encoded.method = "POST";
|
194
193
|
encoded.path = fmt::format("/api/index/{}/query", index_name);
|
195
194
|
encoded.body = tao::json::to_string(body);
|
@@ -37,7 +37,7 @@ struct touch_request {
|
|
37
37
|
document_id id;
|
38
38
|
std::uint16_t partition{};
|
39
39
|
std::uint32_t opaque{};
|
40
|
-
std::uint32_t
|
40
|
+
std::uint32_t expiry{};
|
41
41
|
std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
|
42
42
|
|
43
43
|
void encode_to(encoded_request_type& encoded)
|
@@ -45,7 +45,7 @@ struct touch_request {
|
|
45
45
|
encoded.opaque(opaque);
|
46
46
|
encoded.partition(partition);
|
47
47
|
encoded.body().id(id);
|
48
|
-
encoded.body().
|
48
|
+
encoded.body().expiry(expiry);
|
49
49
|
}
|
50
50
|
};
|
51
51
|
|
@@ -53,6 +53,9 @@ touch_response
|
|
53
53
|
make_response(std::error_code ec, touch_request& request, touch_request::encoded_response_type encoded)
|
54
54
|
{
|
55
55
|
touch_response response{ request.id, encoded.opaque(), ec };
|
56
|
+
if (ec && response.opaque == 0) {
|
57
|
+
response.opaque = request.opaque;
|
58
|
+
}
|
56
59
|
if (!ec) {
|
57
60
|
response.cas = encoded.cas();
|
58
61
|
}
|
@@ -53,6 +53,9 @@ unlock_response
|
|
53
53
|
make_response(std::error_code ec, unlock_request& request, unlock_request::encoded_response_type encoded)
|
54
54
|
{
|
55
55
|
unlock_response response{ request.id, encoded.opaque(), ec };
|
56
|
+
if (ec && response.opaque == 0) {
|
57
|
+
response.opaque = request.opaque;
|
58
|
+
}
|
56
59
|
if (!ec) {
|
57
60
|
response.cas = encoded.cas();
|
58
61
|
}
|
@@ -41,7 +41,7 @@ struct upsert_request {
|
|
41
41
|
uint16_t partition{};
|
42
42
|
uint32_t opaque{};
|
43
43
|
uint32_t flags{ 0 };
|
44
|
-
uint32_t
|
44
|
+
uint32_t expiry{ 0 };
|
45
45
|
protocol::durability_level durability_level{ protocol::durability_level::none };
|
46
46
|
std::optional<std::uint16_t> durability_timeout{};
|
47
47
|
std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
|
@@ -51,7 +51,7 @@ struct upsert_request {
|
|
51
51
|
encoded.opaque(opaque);
|
52
52
|
encoded.partition(partition);
|
53
53
|
encoded.body().id(id);
|
54
|
-
encoded.body().
|
54
|
+
encoded.body().expiry(expiry);
|
55
55
|
encoded.body().flags(flags);
|
56
56
|
encoded.body().content(value);
|
57
57
|
if (durability_level != protocol::durability_level::none) {
|
@@ -64,6 +64,9 @@ upsert_response
|
|
64
64
|
make_response(std::error_code ec, upsert_request& request, upsert_request::encoded_response_type encoded)
|
65
65
|
{
|
66
66
|
upsert_response response{ request.id, encoded.opaque(), ec };
|
67
|
+
if (ec && response.opaque == 0) {
|
68
|
+
response.opaque = request.opaque;
|
69
|
+
}
|
67
70
|
if (!ec) {
|
68
71
|
response.cas = encoded.cas();
|
69
72
|
response.token = encoded.body().token();
|
@@ -28,7 +28,7 @@ struct query_index_build_deferred_response {
|
|
28
28
|
std::uint64_t code;
|
29
29
|
std::string message;
|
30
30
|
};
|
31
|
-
|
31
|
+
std::string client_context_id;
|
32
32
|
std::error_code ec;
|
33
33
|
std::string status{};
|
34
34
|
std::vector<query_problem> errors{};
|
@@ -41,7 +41,7 @@ struct query_index_build_deferred_request {
|
|
41
41
|
|
42
42
|
static const inline service_type type = service_type::query;
|
43
43
|
|
44
|
-
|
44
|
+
std::string client_context_id{ uuid::to_string(uuid::random()) };
|
45
45
|
std::string bucket_name;
|
46
46
|
std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
|
47
47
|
|
@@ -53,7 +53,7 @@ struct query_index_build_deferred_request {
|
|
53
53
|
fmt::format(R"(BUILD INDEX ON `{}` ((SELECT RAW name FROM system:indexes WHERE keyspace_id = "{}" AND state = "deferred")))",
|
54
54
|
bucket_name,
|
55
55
|
bucket_name) },
|
56
|
-
{ "client_context_id",
|
56
|
+
{ "client_context_id", client_context_id }
|
57
57
|
};
|
58
58
|
encoded.method = "POST";
|
59
59
|
encoded.path = "/query/service";
|
@@ -28,7 +28,7 @@ struct query_index_create_response {
|
|
28
28
|
std::uint64_t code;
|
29
29
|
std::string message;
|
30
30
|
};
|
31
|
-
|
31
|
+
std::string client_context_id;
|
32
32
|
std::error_code ec;
|
33
33
|
std::string status{};
|
34
34
|
std::vector<query_problem> errors{};
|
@@ -41,7 +41,7 @@ struct query_index_create_request {
|
|
41
41
|
|
42
42
|
static const inline service_type type = service_type::query;
|
43
43
|
|
44
|
-
|
44
|
+
std::string client_context_id{ uuid::to_string(uuid::random()) };
|
45
45
|
std::string bucket_name;
|
46
46
|
std::string index_name{};
|
47
47
|
std::vector<std::string> fields;
|
@@ -81,7 +81,7 @@ struct query_index_create_request {
|
|
81
81
|
fmt::join(fields, ", "),
|
82
82
|
where_clause,
|
83
83
|
with_clause) },
|
84
|
-
{ "client_context_id",
|
84
|
+
{ "client_context_id", client_context_id } };
|
85
85
|
encoded.method = "POST";
|
86
86
|
encoded.path = "/query/service";
|
87
87
|
encoded.body = tao::json::to_string(body);
|
@@ -28,7 +28,7 @@ struct query_index_drop_response {
|
|
28
28
|
std::uint64_t code;
|
29
29
|
std::string message;
|
30
30
|
};
|
31
|
-
|
31
|
+
std::string client_context_id;
|
32
32
|
std::error_code ec;
|
33
33
|
std::string status{};
|
34
34
|
std::vector<query_problem> errors{};
|
@@ -41,7 +41,7 @@ struct query_index_drop_request {
|
|
41
41
|
|
42
42
|
static const inline service_type type = service_type::query;
|
43
43
|
|
44
|
-
|
44
|
+
std::string client_context_id{ uuid::to_string(uuid::random()) };
|
45
45
|
std::string bucket_name;
|
46
46
|
std::string index_name;
|
47
47
|
bool is_primary{ false };
|
@@ -54,7 +54,7 @@ struct query_index_drop_request {
|
|
54
54
|
tao::json::value body{ { "statement",
|
55
55
|
is_primary ? fmt::format(R"(DROP PRIMARY INDEX ON `{}` USING GSI)", bucket_name)
|
56
56
|
: fmt::format(R"(DROP INDEX `{}`.`{}` USING GSI)", bucket_name, index_name) },
|
57
|
-
{ "client_context_id",
|
57
|
+
{ "client_context_id", client_context_id } };
|
58
58
|
encoded.method = "POST";
|
59
59
|
encoded.path = "/query/service";
|
60
60
|
encoded.body = tao::json::to_string(body);
|