couchbase 3.4.4 → 3.4.5
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 +1 -1
- data/ext/couchbase/CMakeLists.txt +7 -0
- data/ext/couchbase/core/cluster.hxx +7 -0
- data/ext/couchbase/core/impl/create_bucket.cxx +3 -0
- data/ext/couchbase/core/impl/create_collection.cxx +83 -0
- data/ext/couchbase/core/impl/create_scope.cxx +69 -0
- data/ext/couchbase/core/impl/drop_collection.cxx +76 -0
- data/ext/couchbase/core/impl/drop_scope.cxx +68 -0
- data/ext/couchbase/core/impl/get_all_buckets.cxx +19 -4
- data/ext/couchbase/core/impl/get_all_scopes.cxx +94 -0
- data/ext/couchbase/core/impl/get_bucket.cxx +19 -4
- data/ext/couchbase/core/impl/lookup_in_all_replicas.cxx +2 -0
- data/ext/couchbase/core/impl/lookup_in_any_replica.cxx +2 -0
- data/ext/couchbase/core/impl/lookup_in_replica.cxx +8 -1
- data/ext/couchbase/core/impl/update_bucket.cxx +3 -0
- data/ext/couchbase/core/impl/update_collection.cxx +83 -0
- data/ext/couchbase/core/management/bucket_settings.hxx +8 -5
- data/ext/couchbase/core/management/bucket_settings_json.hxx +12 -2
- data/ext/couchbase/core/meta/features.hxx +17 -0
- data/ext/couchbase/core/operations/document_lookup_in.cxx +8 -1
- data/ext/couchbase/core/operations/management/CMakeLists.txt +1 -0
- data/ext/couchbase/core/operations/management/bucket_create.cxx +30 -9
- data/ext/couchbase/core/operations/management/bucket_update.cxx +27 -6
- data/ext/couchbase/core/operations/management/collection_create.cxx +5 -1
- data/ext/couchbase/core/operations/management/collection_create.hxx +1 -0
- data/ext/couchbase/core/operations/management/collection_update.cxx +87 -0
- data/ext/couchbase/core/operations/management/collection_update.hxx +54 -0
- data/ext/couchbase/core/operations/management/collections.hxx +1 -0
- data/ext/couchbase/core/timeout_defaults.hxx +1 -1
- data/ext/couchbase/core/topology/capabilities.hxx +1 -0
- data/ext/couchbase/core/topology/capabilities_fmt.hxx +3 -0
- data/ext/couchbase/core/topology/collections_manifest.hxx +2 -0
- data/ext/couchbase/core/topology/collections_manifest_json.hxx +3 -0
- data/ext/couchbase/core/topology/configuration.hxx +5 -0
- data/ext/couchbase/core/topology/configuration_json.hxx +2 -0
- data/ext/couchbase/couchbase/bucket.hxx +14 -0
- data/ext/couchbase/couchbase/collection_manager.hxx +160 -0
- data/ext/couchbase/couchbase/create_collection_options.hxx +44 -0
- data/ext/couchbase/couchbase/create_scope_options.hxx +41 -0
- data/ext/couchbase/couchbase/drop_collection_options.hxx +41 -0
- data/ext/couchbase/couchbase/drop_scope_options.hxx +41 -0
- data/ext/couchbase/couchbase/get_all_scopes_options.hxx +44 -0
- data/ext/couchbase/couchbase/management/bucket_settings.hxx +8 -5
- data/ext/couchbase/couchbase/management/collection_spec.hxx +29 -0
- data/ext/couchbase/couchbase/management/scope_spec.hxx +29 -0
- data/ext/couchbase/couchbase/update_collection_options.hxx +44 -0
- data/ext/couchbase/test/test_integration_management.cxx +305 -48
- data/ext/couchbase/test/test_integration_subdoc.cxx +81 -22
- data/ext/couchbase.cxx +155 -34
- data/ext/revisions.rb +3 -3
- data/lib/couchbase/collection_options.rb +1 -2
- data/lib/couchbase/management/bucket_manager.rb +22 -15
- data/lib/couchbase/management/collection_manager.rb +158 -9
- data/lib/couchbase/version.rb +1 -1
- metadata +23 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85cf5d55d22898824be380bb1a1da7e8b29e294d06a9c5789964220afcb916f8
|
4
|
+
data.tar.gz: c56798cd37877f4b4560d224f7ae31d522c7b84ebf643e6f530e73111bca8347
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3453198ae619b3ca540fc909688a3132aaf1f2ef47b402eeec7ae63a8110328f4bad6cfec356a218c35a3f1aafc8abf2a51869b2808ec14cc4521064ddb8a41
|
7
|
+
data.tar.gz: 05bd481ed690587544062493db78198b07f13728e65df45cdfbb5538c6a3c9f1e25fca5b78e1385d10d88c8a802d146cb363e115f206b679ff4e58bb1cfe0391
|
data/README.md
CHANGED
@@ -170,6 +170,7 @@ set(couchbase_cxx_client_FILES
|
|
170
170
|
core/operations/management/cluster_developer_preview_enable.cxx
|
171
171
|
core/operations/management/collection_create.cxx
|
172
172
|
core/operations/management/collection_drop.cxx
|
173
|
+
core/operations/management/collection_update.cxx
|
173
174
|
core/operations/management/collections_manifest_get.cxx
|
174
175
|
core/operations/management/error_utils.cxx
|
175
176
|
core/operations/management/eventing_deploy_function.cxx
|
@@ -271,7 +272,9 @@ set(couchbase_cxx_client_FILES
|
|
271
272
|
core/impl/configuration_profiles_registry.cxx
|
272
273
|
core/impl/conjunction_query.cxx
|
273
274
|
core/impl/create_bucket.cxx
|
275
|
+
core/impl/create_collection.cxx
|
274
276
|
core/impl/create_query_index.cxx
|
277
|
+
core/impl/create_scope.cxx
|
275
278
|
core/impl/date_range.cxx
|
276
279
|
core/impl/date_range_facet.cxx
|
277
280
|
core/impl/date_range_facet_result.cxx
|
@@ -280,7 +283,9 @@ set(couchbase_cxx_client_FILES
|
|
280
283
|
core/impl/disjunction_query.cxx
|
281
284
|
core/impl/dns_srv_tracker.cxx
|
282
285
|
core/impl/drop_bucket.cxx
|
286
|
+
core/impl/drop_collection.cxx
|
283
287
|
core/impl/drop_query_index.cxx
|
288
|
+
core/impl/drop_scope.cxx
|
284
289
|
core/impl/exists.cxx
|
285
290
|
core/impl/expiry.cxx
|
286
291
|
core/impl/fail_fast_retry_strategy.cxx
|
@@ -293,6 +298,7 @@ set(couchbase_cxx_client_FILES
|
|
293
298
|
core/impl/get_all_buckets.cxx
|
294
299
|
core/impl/get_all_query_indexes.cxx
|
295
300
|
core/impl/get_all_replicas.cxx
|
301
|
+
core/impl/get_all_scopes.cxx
|
296
302
|
core/impl/get_and_lock.cxx
|
297
303
|
core/impl/get_and_touch.cxx
|
298
304
|
core/impl/get_any_replica.cxx
|
@@ -380,6 +386,7 @@ set(couchbase_cxx_client_FILES
|
|
380
386
|
core/impl/transaction_op_error_category.cxx
|
381
387
|
core/impl/unlock.cxx
|
382
388
|
core/impl/update_bucket.cxx
|
389
|
+
core/impl/update_collection.cxx
|
383
390
|
core/impl/upsert.cxx
|
384
391
|
core/impl/view_error_category.cxx
|
385
392
|
core/impl/watch_query_indexes.cxx
|
@@ -336,6 +336,13 @@ class cluster : public std::enable_shared_from_this<cluster>
|
|
336
336
|
template<typename Handler>
|
337
337
|
void do_open(Handler&& handler)
|
338
338
|
{
|
339
|
+
// Warn users if idle_http_connection_timeout is too close to server idle timeouts
|
340
|
+
if (origin_.options().idle_http_connection_timeout > std::chrono::milliseconds(4'500)) {
|
341
|
+
CB_LOG_INFO("[{}]: The SDK may produce trivial warnings due to the idle HTTP connection timeout being set above the idle"
|
342
|
+
"timeout of various services",
|
343
|
+
id_);
|
344
|
+
}
|
345
|
+
|
339
346
|
// Warn users if they attempt to use Capella without TLS being enabled.
|
340
347
|
bool has_capella_host = false;
|
341
348
|
{
|
@@ -59,6 +59,9 @@ map_bucket_settings(const couchbase::management::cluster::bucket_settings& bucke
|
|
59
59
|
bucket_settings.num_replicas = bucket.num_replicas;
|
60
60
|
bucket_settings.replica_indexes = bucket.replica_indexes;
|
61
61
|
bucket_settings.flush_enabled = bucket.flush_enabled;
|
62
|
+
bucket_settings.history_retention_collection_default = bucket.history_retention_collection_default;
|
63
|
+
bucket_settings.history_retention_bytes = bucket.history_retention_bytes;
|
64
|
+
bucket_settings.history_retention_duration = bucket.history_retention_duration;
|
62
65
|
switch (bucket.conflict_resolution_type) {
|
63
66
|
case management::cluster::bucket_conflict_resolution::unknown:
|
64
67
|
bucket_settings.conflict_resolution_type = core::management::cluster::bucket_conflict_resolution::unknown;
|
@@ -0,0 +1,83 @@
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* Copyright 2020-Present Couchbase, Inc.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#include <couchbase/manager_error_context.hxx>
|
19
|
+
|
20
|
+
#include "core/cluster.hxx"
|
21
|
+
#include "core/operations/management/collection_create.hxx"
|
22
|
+
#include "couchbase/collection_manager.hxx"
|
23
|
+
|
24
|
+
namespace couchbase
|
25
|
+
{
|
26
|
+
template<typename Response>
|
27
|
+
static manager_error_context
|
28
|
+
build_context(Response& resp)
|
29
|
+
{
|
30
|
+
return manager_error_context(internal_manager_error_context{ resp.ctx.ec,
|
31
|
+
resp.ctx.last_dispatched_to,
|
32
|
+
resp.ctx.last_dispatched_from,
|
33
|
+
resp.ctx.retry_attempts,
|
34
|
+
std::move(resp.ctx.retry_reasons),
|
35
|
+
std::move(resp.ctx.client_context_id),
|
36
|
+
resp.ctx.http_status,
|
37
|
+
std::move(resp.ctx.http_body),
|
38
|
+
std::move(resp.ctx.path) });
|
39
|
+
}
|
40
|
+
|
41
|
+
static core::operations::management::collection_create_request
|
42
|
+
build_collection_create_request(std::string bucket_name,
|
43
|
+
std::string scope_name,
|
44
|
+
std::string collection_name,
|
45
|
+
const create_collection_settings& settings,
|
46
|
+
const create_collection_options::built& options)
|
47
|
+
{
|
48
|
+
core::operations::management::collection_create_request request{
|
49
|
+
std::move(bucket_name), std::move(scope_name), std::move(collection_name), settings.max_expiry, settings.history, {},
|
50
|
+
options.timeout
|
51
|
+
};
|
52
|
+
return request;
|
53
|
+
}
|
54
|
+
|
55
|
+
void
|
56
|
+
collection_manager::create_collection(std::string scope_name,
|
57
|
+
std::string collection_name,
|
58
|
+
const couchbase::create_collection_settings& settings,
|
59
|
+
const couchbase::create_collection_options& options,
|
60
|
+
couchbase::create_collection_handler&& handler) const
|
61
|
+
{
|
62
|
+
auto request =
|
63
|
+
build_collection_create_request(bucket_name_, std::move(scope_name), std::move(collection_name), settings, options.build());
|
64
|
+
|
65
|
+
core_->execute(std::move(request),
|
66
|
+
[handler = std::move(handler)](core::operations::management::collection_create_response resp) mutable {
|
67
|
+
return handler(build_context(resp));
|
68
|
+
});
|
69
|
+
}
|
70
|
+
|
71
|
+
auto
|
72
|
+
collection_manager::create_collection(std::string scope_name,
|
73
|
+
std::string collection_name,
|
74
|
+
const couchbase::create_collection_settings& settings,
|
75
|
+
const couchbase::create_collection_options& options) const -> std::future<manager_error_context>
|
76
|
+
{
|
77
|
+
auto barrier = std::make_shared<std::promise<manager_error_context>>();
|
78
|
+
create_collection(std::move(scope_name), std::move(collection_name), settings, options, [barrier](auto ctx) mutable {
|
79
|
+
barrier->set_value(std::move(ctx));
|
80
|
+
});
|
81
|
+
return barrier->get_future();
|
82
|
+
}
|
83
|
+
} // namespace couchbase
|
@@ -0,0 +1,69 @@
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* Copyright 2020-Present Couchbase, Inc.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#include <couchbase/manager_error_context.hxx>
|
19
|
+
#include <utility>
|
20
|
+
|
21
|
+
#include "core/cluster.hxx"
|
22
|
+
#include "core/operations/management/scope_create.hxx"
|
23
|
+
#include "couchbase/collection_manager.hxx"
|
24
|
+
|
25
|
+
namespace couchbase
|
26
|
+
{
|
27
|
+
template<typename Response>
|
28
|
+
static manager_error_context
|
29
|
+
build_context(Response& resp)
|
30
|
+
{
|
31
|
+
return manager_error_context(internal_manager_error_context{ resp.ctx.ec,
|
32
|
+
resp.ctx.last_dispatched_to,
|
33
|
+
resp.ctx.last_dispatched_from,
|
34
|
+
resp.ctx.retry_attempts,
|
35
|
+
std::move(resp.ctx.retry_reasons),
|
36
|
+
std::move(resp.ctx.client_context_id),
|
37
|
+
resp.ctx.http_status,
|
38
|
+
std::move(resp.ctx.http_body),
|
39
|
+
std::move(resp.ctx.path) });
|
40
|
+
}
|
41
|
+
|
42
|
+
static core::operations::management::scope_create_request
|
43
|
+
build_scope_create_request(std::string bucket_name, std::string scope_name, const create_scope_options::built& options)
|
44
|
+
{
|
45
|
+
core::operations::management::scope_create_request request{ std::move(bucket_name), std::move(scope_name), {}, options.timeout };
|
46
|
+
return request;
|
47
|
+
}
|
48
|
+
|
49
|
+
void
|
50
|
+
collection_manager::create_scope(std::string scope_name,
|
51
|
+
const couchbase::create_scope_options& options,
|
52
|
+
couchbase::create_scope_handler&& handler) const
|
53
|
+
{
|
54
|
+
auto request = build_scope_create_request(bucket_name_, std::move(scope_name), options.build());
|
55
|
+
|
56
|
+
core_->execute(std::move(request), [handler = std::move(handler)](core::operations::management::scope_create_response resp) mutable {
|
57
|
+
return handler(build_context(resp));
|
58
|
+
});
|
59
|
+
}
|
60
|
+
|
61
|
+
auto
|
62
|
+
collection_manager::create_scope(std::string scope_name, const couchbase::create_scope_options& options) const
|
63
|
+
-> std::future<manager_error_context>
|
64
|
+
{
|
65
|
+
auto barrier = std::make_shared<std::promise<manager_error_context>>();
|
66
|
+
create_scope(std::move(scope_name), options, [barrier](auto ctx) mutable { barrier->set_value(std::move(ctx)); });
|
67
|
+
return barrier->get_future();
|
68
|
+
}
|
69
|
+
} // namespace couchbase
|
@@ -0,0 +1,76 @@
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* Copyright 2020-Present Couchbase, Inc.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#include <couchbase/manager_error_context.hxx>
|
19
|
+
|
20
|
+
#include "core/cluster.hxx"
|
21
|
+
#include "core/operations/management/collection_drop.hxx"
|
22
|
+
#include "couchbase/collection_manager.hxx"
|
23
|
+
|
24
|
+
namespace couchbase
|
25
|
+
{
|
26
|
+
template<typename Response>
|
27
|
+
static manager_error_context
|
28
|
+
build_context(Response& resp)
|
29
|
+
{
|
30
|
+
return manager_error_context(internal_manager_error_context{ resp.ctx.ec,
|
31
|
+
resp.ctx.last_dispatched_to,
|
32
|
+
resp.ctx.last_dispatched_from,
|
33
|
+
resp.ctx.retry_attempts,
|
34
|
+
std::move(resp.ctx.retry_reasons),
|
35
|
+
std::move(resp.ctx.client_context_id),
|
36
|
+
resp.ctx.http_status,
|
37
|
+
std::move(resp.ctx.http_body),
|
38
|
+
std::move(resp.ctx.path) });
|
39
|
+
}
|
40
|
+
|
41
|
+
static core::operations::management::collection_drop_request
|
42
|
+
build_collection_drop_request(std::string bucket_name,
|
43
|
+
std::string scope_name,
|
44
|
+
std::string collection_name,
|
45
|
+
const drop_collection_options::built& options)
|
46
|
+
{
|
47
|
+
core::operations::management::collection_drop_request request{
|
48
|
+
std::move(bucket_name), std::move(scope_name), std::move(collection_name), {}, options.timeout
|
49
|
+
};
|
50
|
+
return request;
|
51
|
+
}
|
52
|
+
|
53
|
+
void
|
54
|
+
collection_manager::drop_collection(std::string scope_name,
|
55
|
+
std::string collection_name,
|
56
|
+
const couchbase::drop_collection_options& options,
|
57
|
+
couchbase::drop_collection_handler&& handler) const
|
58
|
+
{
|
59
|
+
auto request = build_collection_drop_request(bucket_name_, std::move(scope_name), std::move(collection_name), options.build());
|
60
|
+
|
61
|
+
core_->execute(std::move(request), [handler = std::move(handler)](core::operations::management::collection_drop_response resp) mutable {
|
62
|
+
return handler(build_context(resp));
|
63
|
+
});
|
64
|
+
}
|
65
|
+
|
66
|
+
auto
|
67
|
+
collection_manager::drop_collection(std::string scope_name,
|
68
|
+
std::string collection_name,
|
69
|
+
const couchbase::drop_collection_options& options) const -> std::future<manager_error_context>
|
70
|
+
{
|
71
|
+
auto barrier = std::make_shared<std::promise<manager_error_context>>();
|
72
|
+
drop_collection(
|
73
|
+
std::move(scope_name), std::move(collection_name), options, [barrier](auto ctx) mutable { barrier->set_value(std::move(ctx)); });
|
74
|
+
return barrier->get_future();
|
75
|
+
}
|
76
|
+
} // namespace couchbase
|
@@ -0,0 +1,68 @@
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* Copyright 2020-Present Couchbase, Inc.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#include <couchbase/manager_error_context.hxx>
|
19
|
+
|
20
|
+
#include "core/cluster.hxx"
|
21
|
+
#include "core/operations/management/scope_drop.hxx"
|
22
|
+
#include "couchbase/collection_manager.hxx"
|
23
|
+
|
24
|
+
namespace couchbase
|
25
|
+
{
|
26
|
+
template<typename Response>
|
27
|
+
static manager_error_context
|
28
|
+
build_context(Response& resp)
|
29
|
+
{
|
30
|
+
return manager_error_context(internal_manager_error_context{ resp.ctx.ec,
|
31
|
+
resp.ctx.last_dispatched_to,
|
32
|
+
resp.ctx.last_dispatched_from,
|
33
|
+
resp.ctx.retry_attempts,
|
34
|
+
std::move(resp.ctx.retry_reasons),
|
35
|
+
std::move(resp.ctx.client_context_id),
|
36
|
+
resp.ctx.http_status,
|
37
|
+
std::move(resp.ctx.http_body),
|
38
|
+
std::move(resp.ctx.path) });
|
39
|
+
}
|
40
|
+
|
41
|
+
static core::operations::management::scope_drop_request
|
42
|
+
build_drop_scope_request(std::string bucket_name, std::string scope_name, const drop_scope_options::built& options)
|
43
|
+
{
|
44
|
+
core::operations::management::scope_drop_request request{ std::move(bucket_name), std::move(scope_name), {}, options.timeout };
|
45
|
+
return request;
|
46
|
+
}
|
47
|
+
|
48
|
+
void
|
49
|
+
collection_manager::drop_scope(std::string scope_name,
|
50
|
+
const couchbase::drop_scope_options& options,
|
51
|
+
couchbase::drop_scope_handler&& handler) const
|
52
|
+
{
|
53
|
+
auto request = build_drop_scope_request(bucket_name_, std::move(scope_name), options.build());
|
54
|
+
|
55
|
+
core_->execute(std::move(request), [handler = std::move(handler)](core::operations::management::scope_drop_response resp) mutable {
|
56
|
+
return handler(build_context(resp));
|
57
|
+
});
|
58
|
+
}
|
59
|
+
|
60
|
+
auto
|
61
|
+
collection_manager::drop_scope(std::string scope_name, const couchbase::drop_scope_options& options) const
|
62
|
+
-> std::future<manager_error_context>
|
63
|
+
{
|
64
|
+
auto barrier = std::make_shared<std::promise<manager_error_context>>();
|
65
|
+
drop_scope(std::move(scope_name), options, [barrier](auto ctx) mutable { barrier->set_value(std::move(ctx)); });
|
66
|
+
return barrier->get_future();
|
67
|
+
}
|
68
|
+
} // namespace couchbase
|
@@ -52,11 +52,26 @@ map_bucket_settings(const couchbase::core::management::cluster::bucket_settings&
|
|
52
52
|
couchbase::management::cluster::bucket_settings bucket_settings{};
|
53
53
|
bucket_settings.name = bucket.name;
|
54
54
|
bucket_settings.ram_quota_mb = bucket.ram_quota_mb;
|
55
|
-
bucket_settings.max_expiry = bucket.max_expiry;
|
56
55
|
bucket_settings.minimum_durability_level = bucket.minimum_durability_level;
|
57
|
-
bucket_settings.
|
58
|
-
|
59
|
-
|
56
|
+
bucket_settings.history_retention_collection_default = bucket.history_retention_collection_default;
|
57
|
+
if (bucket.max_expiry.has_value()) {
|
58
|
+
bucket_settings.max_expiry = bucket.max_expiry.value();
|
59
|
+
}
|
60
|
+
if (bucket.num_replicas.has_value()) {
|
61
|
+
bucket_settings.num_replicas = bucket.num_replicas.value();
|
62
|
+
}
|
63
|
+
if (bucket.replica_indexes.has_value()) {
|
64
|
+
bucket_settings.replica_indexes = bucket.replica_indexes.value();
|
65
|
+
}
|
66
|
+
if (bucket.flush_enabled.has_value()) {
|
67
|
+
bucket_settings.flush_enabled = bucket.flush_enabled.value();
|
68
|
+
}
|
69
|
+
if (bucket.history_retention_bytes.has_value()) {
|
70
|
+
bucket_settings.history_retention_bytes = bucket.history_retention_bytes.value();
|
71
|
+
}
|
72
|
+
if (bucket.history_retention_duration.has_value()) {
|
73
|
+
bucket_settings.history_retention_duration = bucket.history_retention_duration.value();
|
74
|
+
}
|
60
75
|
switch (bucket.conflict_resolution_type) {
|
61
76
|
case core::management::cluster::bucket_conflict_resolution::unknown:
|
62
77
|
bucket_settings.conflict_resolution_type = management::cluster::bucket_conflict_resolution::unknown;
|
@@ -0,0 +1,94 @@
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* Copyright 2020-Present Couchbase, Inc.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#include <couchbase/manager_error_context.hxx>
|
19
|
+
|
20
|
+
#include "core/cluster.hxx"
|
21
|
+
#include "core/operations/management/scope_get_all.hxx"
|
22
|
+
#include "couchbase/collection_manager.hxx"
|
23
|
+
|
24
|
+
namespace couchbase
|
25
|
+
{
|
26
|
+
template<typename Response>
|
27
|
+
static manager_error_context
|
28
|
+
build_context(Response& resp)
|
29
|
+
{
|
30
|
+
return manager_error_context(internal_manager_error_context{ resp.ctx.ec,
|
31
|
+
resp.ctx.last_dispatched_to,
|
32
|
+
resp.ctx.last_dispatched_from,
|
33
|
+
resp.ctx.retry_attempts,
|
34
|
+
std::move(resp.ctx.retry_reasons),
|
35
|
+
std::move(resp.ctx.client_context_id),
|
36
|
+
resp.ctx.http_status,
|
37
|
+
std::move(resp.ctx.http_body),
|
38
|
+
std::move(resp.ctx.path) });
|
39
|
+
}
|
40
|
+
|
41
|
+
static core::operations::management::scope_get_all_request
|
42
|
+
build_get_all_scopes_request(std::string bucket_name, const get_all_scopes_options::built& options)
|
43
|
+
{
|
44
|
+
core::operations::management::scope_get_all_request request{ std::move(bucket_name), {}, options.timeout };
|
45
|
+
return request;
|
46
|
+
}
|
47
|
+
|
48
|
+
static management::bucket::collection_spec
|
49
|
+
map_collection(std::string scope_name, const core::topology::collections_manifest::collection& collection)
|
50
|
+
{
|
51
|
+
management::bucket::collection_spec spec{};
|
52
|
+
spec.name = collection.name;
|
53
|
+
spec.scope_name = std::move(scope_name);
|
54
|
+
spec.max_expiry = collection.max_expiry;
|
55
|
+
spec.history = collection.history;
|
56
|
+
return spec;
|
57
|
+
}
|
58
|
+
|
59
|
+
static std::vector<couchbase::management::bucket::scope_spec>
|
60
|
+
map_scope_specs(core::topology::collections_manifest& manifest)
|
61
|
+
{
|
62
|
+
std::vector<couchbase::management::bucket::scope_spec> scope_specs{};
|
63
|
+
for (const auto& scope : manifest.scopes) {
|
64
|
+
couchbase::management::bucket::scope_spec converted_scope{};
|
65
|
+
converted_scope.name = scope.name;
|
66
|
+
for (const auto& collection : scope.collections) {
|
67
|
+
auto collection_spec = map_collection(scope.name, collection);
|
68
|
+
converted_scope.collections.emplace_back(collection_spec);
|
69
|
+
}
|
70
|
+
scope_specs.emplace_back(converted_scope);
|
71
|
+
}
|
72
|
+
return scope_specs;
|
73
|
+
}
|
74
|
+
|
75
|
+
void
|
76
|
+
collection_manager::get_all_scopes(const get_all_scopes_options& options, get_all_scopes_handler&& handler) const
|
77
|
+
{
|
78
|
+
auto request = build_get_all_scopes_request(bucket_name_, options.build());
|
79
|
+
|
80
|
+
core_->execute(std::move(request), [handler = std::move(handler)](core::operations::management::scope_get_all_response resp) mutable {
|
81
|
+
return handler(build_context(resp), map_scope_specs(resp.manifest));
|
82
|
+
});
|
83
|
+
}
|
84
|
+
|
85
|
+
auto
|
86
|
+
collection_manager::get_all_scopes(const couchbase::get_all_scopes_options& options) const
|
87
|
+
-> std::future<std::pair<manager_error_context, std::vector<management::bucket::scope_spec>>>
|
88
|
+
{
|
89
|
+
auto barrier = std::make_shared<std::promise<std::pair<manager_error_context, std::vector<management::bucket::scope_spec>>>>();
|
90
|
+
get_all_scopes(options,
|
91
|
+
[barrier](auto ctx, auto result) mutable { barrier->set_value(std::make_pair(std::move(ctx), std::move(result))); });
|
92
|
+
return barrier->get_future();
|
93
|
+
}
|
94
|
+
} // namespace couchbase
|
@@ -52,11 +52,26 @@ map_bucket_settings(const couchbase::core::management::cluster::bucket_settings&
|
|
52
52
|
couchbase::management::cluster::bucket_settings bucket_settings{};
|
53
53
|
bucket_settings.name = bucket.name;
|
54
54
|
bucket_settings.ram_quota_mb = bucket.ram_quota_mb;
|
55
|
-
bucket_settings.max_expiry = bucket.max_expiry;
|
56
55
|
bucket_settings.minimum_durability_level = bucket.minimum_durability_level;
|
57
|
-
bucket_settings.
|
58
|
-
|
59
|
-
|
56
|
+
bucket_settings.history_retention_collection_default = bucket.history_retention_collection_default;
|
57
|
+
if (bucket.max_expiry.has_value()) {
|
58
|
+
bucket_settings.max_expiry = bucket.max_expiry.value();
|
59
|
+
}
|
60
|
+
if (bucket.num_replicas.has_value()) {
|
61
|
+
bucket_settings.num_replicas = bucket.num_replicas.value();
|
62
|
+
}
|
63
|
+
if (bucket.replica_indexes.has_value()) {
|
64
|
+
bucket_settings.replica_indexes = bucket.replica_indexes.value();
|
65
|
+
}
|
66
|
+
if (bucket.flush_enabled.has_value()) {
|
67
|
+
bucket_settings.flush_enabled = bucket.flush_enabled.value();
|
68
|
+
}
|
69
|
+
if (bucket.history_retention_bytes.has_value()) {
|
70
|
+
bucket_settings.history_retention_bytes = bucket.history_retention_bytes.value();
|
71
|
+
}
|
72
|
+
if (bucket.history_retention_duration.has_value()) {
|
73
|
+
bucket_settings.history_retention_duration = bucket.history_retention_duration.value();
|
74
|
+
}
|
60
75
|
switch (bucket.conflict_resolution_type) {
|
61
76
|
case core::management::cluster::bucket_conflict_resolution::unknown:
|
62
77
|
bucket_settings.conflict_resolution_type = management::cluster::bucket_conflict_resolution::unknown;
|
@@ -113,6 +113,7 @@ initiate_lookup_in_all_replicas_operation(std::shared_ptr<cluster> core,
|
|
113
113
|
lookup_in_entry.value = field.value;
|
114
114
|
lookup_in_entry.exists = field.exists;
|
115
115
|
lookup_in_entry.original_index = field.original_index;
|
116
|
+
lookup_in_entry.ec = field.ec;
|
116
117
|
entries.emplace_back(lookup_in_entry);
|
117
118
|
}
|
118
119
|
ctx->result_.emplace_back(lookup_in_replica_result{ resp.cas, entries, resp.deleted, true /* replica */ });
|
@@ -155,6 +156,7 @@ initiate_lookup_in_all_replicas_operation(std::shared_ptr<cluster> core,
|
|
155
156
|
lookup_in_entry.value = field.value;
|
156
157
|
lookup_in_entry.exists = field.exists;
|
157
158
|
lookup_in_entry.original_index = field.original_index;
|
159
|
+
lookup_in_entry.ec = field.ec;
|
158
160
|
entries.emplace_back(lookup_in_entry);
|
159
161
|
}
|
160
162
|
ctx->result_.emplace_back(lookup_in_replica_result{ resp.cas, entries, resp.deleted, false /* active */ });
|
@@ -118,6 +118,7 @@ initiate_lookup_in_any_replica_operation(std::shared_ptr<cluster> core,
|
|
118
118
|
entry.original_index = field.original_index;
|
119
119
|
entry.exists = field.exists;
|
120
120
|
entry.value = field.value;
|
121
|
+
entry.ec = field.ec;
|
121
122
|
entries.emplace_back(entry);
|
122
123
|
}
|
123
124
|
return local_handler(std::move(resp.ctx),
|
@@ -156,6 +157,7 @@ initiate_lookup_in_any_replica_operation(std::shared_ptr<cluster> core,
|
|
156
157
|
entry.original_index = field.original_index;
|
157
158
|
entry.exists = field.exists;
|
158
159
|
entry.value = field.value;
|
160
|
+
entry.ec = field.ec;
|
159
161
|
entries.emplace_back(entry);
|
160
162
|
}
|
161
163
|
return local_handler(std::move(resp.ctx),
|
@@ -70,6 +70,9 @@ lookup_in_replica_request::make_response(key_value_error_context&& ctx, const en
|
|
70
70
|
fields[i].status = res_entry.status;
|
71
71
|
fields[i].ec =
|
72
72
|
protocol::map_status_code(protocol::client_opcode::subdoc_multi_mutation, static_cast<std::uint16_t>(res_entry.status));
|
73
|
+
if (fields[i].opcode == protocol::subdoc_opcode::exists && fields[i].ec == errc::key_value::path_not_found) {
|
74
|
+
fields[i].ec.clear();
|
75
|
+
}
|
73
76
|
if (!fields[i].ec && !ctx.ec()) {
|
74
77
|
ec = fields[i].ec;
|
75
78
|
}
|
@@ -79,7 +82,11 @@ lookup_in_replica_request::make_response(key_value_error_context&& ctx, const en
|
|
79
82
|
}
|
80
83
|
fields[i].exists =
|
81
84
|
res_entry.status == key_value_status_code::success || res_entry.status == key_value_status_code::subdoc_success_deleted;
|
82
|
-
fields[i].
|
85
|
+
if (fields[i].opcode == protocol::subdoc_opcode::exists && !fields[i].ec) {
|
86
|
+
fields[i].value = utils::json::generate_binary(fields[i].exists);
|
87
|
+
} else {
|
88
|
+
fields[i].value = utils::to_binary(res_entry.value);
|
89
|
+
}
|
83
90
|
}
|
84
91
|
if (!ec) {
|
85
92
|
cas = encoded.cas();
|
@@ -59,6 +59,9 @@ map_bucket_settings(const couchbase::management::cluster::bucket_settings& bucke
|
|
59
59
|
bucket_settings.num_replicas = bucket.num_replicas;
|
60
60
|
bucket_settings.replica_indexes = bucket.replica_indexes;
|
61
61
|
bucket_settings.flush_enabled = bucket.flush_enabled;
|
62
|
+
bucket_settings.history_retention_collection_default = bucket.history_retention_collection_default;
|
63
|
+
bucket_settings.history_retention_bytes = bucket.history_retention_bytes;
|
64
|
+
bucket_settings.history_retention_duration = bucket.history_retention_duration;
|
62
65
|
switch (bucket.conflict_resolution_type) {
|
63
66
|
case management::cluster::bucket_conflict_resolution::unknown:
|
64
67
|
bucket_settings.conflict_resolution_type = core::management::cluster::bucket_conflict_resolution::unknown;
|