couchbase 3.4.3 → 3.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/couchbase/CMakeLists.txt +15 -1
- data/ext/couchbase/core/bucket.cxx +183 -152
- data/ext/couchbase/core/bucket.hxx +17 -4
- data/ext/couchbase/core/cluster.hxx +34 -13
- data/ext/couchbase/core/cluster_options.hxx +3 -0
- data/ext/couchbase/core/crud_component.cxx +51 -22
- data/ext/couchbase/core/error_context/key_value.cxx +2 -1
- data/ext/couchbase/core/error_context/key_value.hxx +10 -12
- data/ext/couchbase/core/impl/build_deferred_query_indexes.cxx +115 -50
- data/ext/couchbase/core/impl/cluster.cxx +6 -0
- data/ext/couchbase/core/impl/create_bucket.cxx +155 -0
- data/ext/couchbase/core/impl/create_query_index.cxx +172 -59
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +2 -1
- data/ext/couchbase/core/impl/drop_bucket.cxx +66 -0
- data/ext/couchbase/core/impl/drop_query_index.cxx +138 -59
- data/ext/couchbase/core/impl/flush_bucket.cxx +66 -0
- data/ext/couchbase/core/impl/get_all_buckets.cxx +163 -0
- data/ext/couchbase/core/impl/get_all_query_indexes.cxx +67 -37
- data/ext/couchbase/core/impl/get_bucket.cxx +153 -0
- data/ext/couchbase/core/impl/internal_manager_error_context.cxx +113 -0
- data/ext/couchbase/core/impl/internal_manager_error_context.hxx +60 -0
- data/ext/couchbase/core/impl/key_value_error_category.cxx +2 -4
- data/ext/couchbase/core/impl/key_value_error_context.cxx +98 -0
- data/ext/couchbase/core/impl/lookup_in.cxx +1 -0
- data/ext/couchbase/core/impl/lookup_in_all_replicas.cxx +176 -0
- data/ext/couchbase/core/impl/lookup_in_all_replicas.hxx +80 -0
- data/ext/couchbase/core/impl/lookup_in_any_replica.cxx +167 -0
- data/ext/couchbase/core/impl/lookup_in_any_replica.hxx +75 -0
- data/ext/couchbase/core/impl/lookup_in_replica.cxx +97 -0
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +67 -0
- data/ext/couchbase/core/impl/manager_error_context.cxx +100 -0
- data/ext/couchbase/core/impl/query.cxx +1 -0
- data/ext/couchbase/core/impl/query_error_context.cxx +75 -0
- data/ext/couchbase/core/impl/update_bucket.cxx +130 -0
- data/ext/couchbase/core/impl/watch_query_indexes.cxx +53 -29
- data/ext/couchbase/core/io/dns_client.cxx +111 -40
- data/ext/couchbase/core/io/dns_config.cxx +5 -4
- data/ext/couchbase/core/io/http_session.hxx +24 -1
- data/ext/couchbase/core/io/mcbp_command.hxx +9 -2
- data/ext/couchbase/core/io/mcbp_session.cxx +80 -43
- data/ext/couchbase/core/io/mcbp_session.hxx +4 -3
- data/ext/couchbase/core/logger/custom_rotating_file_sink.cxx +1 -1
- data/ext/couchbase/core/logger/logger.cxx +80 -20
- data/ext/couchbase/core/logger/logger.hxx +31 -0
- data/ext/couchbase/core/meta/features.hxx +25 -0
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +192 -0
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +188 -0
- data/ext/couchbase/core/operations/document_query.cxx +11 -0
- data/ext/couchbase/core/operations/document_query.hxx +1 -0
- data/ext/couchbase/core/operations.hxx +2 -0
- data/ext/couchbase/core/origin.cxx +270 -0
- data/ext/couchbase/core/origin.hxx +2 -0
- data/ext/couchbase/core/protocol/client_response.hxx +1 -0
- data/ext/couchbase/core/protocol/cmd_hello.hxx +1 -0
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +107 -0
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.hxx +137 -0
- data/ext/couchbase/core/protocol/hello_feature.hxx +6 -0
- data/ext/couchbase/core/protocol/hello_feature_fmt.hxx +3 -0
- data/ext/couchbase/core/protocol/status.cxx +2 -2
- data/ext/couchbase/core/range_scan_options.cxx +3 -27
- data/ext/couchbase/core/range_scan_options.hxx +13 -17
- data/ext/couchbase/core/range_scan_orchestrator.cxx +388 -170
- data/ext/couchbase/core/range_scan_orchestrator.hxx +13 -2
- data/ext/couchbase/core/range_scan_orchestrator_options.hxx +5 -3
- data/ext/couchbase/core/scan_options.hxx +0 -19
- data/ext/couchbase/core/scan_result.cxx +19 -5
- data/ext/couchbase/core/scan_result.hxx +5 -2
- data/ext/couchbase/core/timeout_defaults.hxx +2 -3
- data/ext/couchbase/core/topology/capabilities.hxx +3 -0
- data/ext/couchbase/core/topology/capabilities_fmt.hxx +8 -0
- data/ext/couchbase/core/topology/collections_manifest_fmt.hxx +1 -1
- data/ext/couchbase/core/topology/configuration.hxx +15 -0
- data/ext/couchbase/core/topology/configuration_json.hxx +6 -1
- data/ext/couchbase/core/utils/connection_string.cxx +62 -47
- data/ext/couchbase/core/utils/connection_string.hxx +1 -0
- data/ext/couchbase/couchbase/analytics_error_context.hxx +1 -1
- data/ext/couchbase/couchbase/behavior_options.hxx +19 -2
- data/ext/couchbase/couchbase/bucket_manager.hxx +135 -0
- data/ext/couchbase/couchbase/build_query_index_options.hxx +0 -30
- data/ext/couchbase/couchbase/cluster.hxx +14 -0
- data/ext/couchbase/couchbase/collection.hxx +111 -0
- data/ext/couchbase/couchbase/collection_query_index_manager.hxx +7 -48
- data/ext/couchbase/couchbase/create_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/create_primary_query_index_options.hxx +0 -29
- data/ext/couchbase/couchbase/create_query_index_options.hxx +0 -33
- data/ext/couchbase/couchbase/drop_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/drop_primary_query_index_options.hxx +0 -30
- data/ext/couchbase/couchbase/drop_query_index_options.hxx +0 -31
- data/ext/couchbase/couchbase/error_codes.hxx +1 -2
- data/ext/couchbase/couchbase/error_context.hxx +10 -2
- data/ext/couchbase/couchbase/flush_bucket_options.hxx +41 -0
- data/ext/couchbase/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
- data/ext/couchbase/couchbase/get_all_buckets_options.hxx +44 -0
- data/ext/couchbase/couchbase/get_all_query_indexes_options.hxx +0 -30
- data/ext/couchbase/couchbase/get_and_lock_options.hxx +2 -2
- data/ext/couchbase/couchbase/get_and_touch_options.hxx +2 -2
- data/ext/couchbase/couchbase/get_bucket_options.hxx +43 -0
- data/ext/couchbase/couchbase/get_options.hxx +2 -2
- data/ext/couchbase/couchbase/insert_options.hxx +3 -3
- data/ext/couchbase/couchbase/key_value_error_context.hxx +7 -2
- data/ext/couchbase/couchbase/lookup_in_all_replicas_options.hxx +109 -0
- data/ext/couchbase/couchbase/lookup_in_any_replica_options.hxx +101 -0
- data/ext/couchbase/couchbase/lookup_in_options.hxx +2 -2
- data/ext/couchbase/couchbase/lookup_in_replica_result.hxx +74 -0
- data/ext/couchbase/couchbase/lookup_in_result.hxx +26 -0
- data/ext/couchbase/couchbase/management/bucket_settings.hxx +116 -0
- data/ext/couchbase/couchbase/manager_error_context.hxx +29 -53
- data/ext/couchbase/couchbase/mutate_in_options.hxx +2 -2
- data/ext/couchbase/couchbase/query_error_context.hxx +3 -1
- data/ext/couchbase/couchbase/query_index_manager.hxx +16 -83
- data/ext/couchbase/couchbase/query_options.hxx +18 -0
- data/ext/couchbase/couchbase/remove_options.hxx +2 -2
- data/ext/couchbase/couchbase/replace_options.hxx +3 -3
- data/ext/couchbase/couchbase/security_options.hxx +15 -0
- data/ext/couchbase/couchbase/subdocument_error_context.hxx +4 -2
- data/ext/couchbase/couchbase/touch_options.hxx +2 -2
- data/ext/couchbase/couchbase/unlock_options.hxx +2 -2
- data/ext/couchbase/couchbase/update_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
- data/ext/couchbase/couchbase/watch_query_indexes_options.hxx +0 -31
- data/ext/couchbase/test/CMakeLists.txt +1 -0
- data/ext/couchbase/test/test_integration_collections.cxx +6 -0
- data/ext/couchbase/test/test_integration_crud.cxx +5 -0
- data/ext/couchbase/test/test_integration_examples.cxx +137 -1
- data/ext/couchbase/test/test_integration_management.cxx +709 -266
- data/ext/couchbase/test/test_integration_query.cxx +19 -7
- data/ext/couchbase/test/test_integration_range_scan.cxx +351 -112
- data/ext/couchbase/test/test_integration_search.cxx +10 -1
- data/ext/couchbase/test/test_integration_subdoc.cxx +655 -0
- data/ext/couchbase/test/test_transaction_public_async_api.cxx +13 -12
- data/ext/couchbase/test/test_transaction_public_blocking_api.cxx +27 -21
- data/ext/couchbase/test/test_unit_connection_string.cxx +29 -0
- data/ext/couchbase/test/test_unit_query.cxx +75 -0
- data/ext/couchbase.cxx +583 -29
- data/ext/revisions.rb +3 -3
- data/lib/couchbase/cluster.rb +1 -1
- data/lib/couchbase/collection.rb +108 -0
- data/lib/couchbase/collection_options.rb +100 -0
- data/lib/couchbase/errors.rb +5 -0
- data/lib/couchbase/key_value_scan.rb +125 -0
- data/lib/couchbase/options.rb +151 -0
- data/lib/couchbase/scope.rb +1 -1
- data/lib/couchbase/utils/time.rb +14 -1
- data/lib/couchbase/version.rb +1 -1
- metadata +41 -7
- data/ext/couchbase/core/impl/collection_query_index_manager.cxx +0 -93
@@ -45,11 +45,20 @@ class security_options
|
|
45
45
|
return *this;
|
46
46
|
}
|
47
47
|
|
48
|
+
auto trust_certificate_value(std::string certificate_value) -> security_options&
|
49
|
+
{
|
50
|
+
trust_certificate_value_ = certificate_value;
|
51
|
+
return *this;
|
52
|
+
}
|
53
|
+
|
48
54
|
struct built {
|
49
55
|
bool enabled;
|
50
56
|
tls_verify_mode tls_verify;
|
51
57
|
std::optional<std::string> trust_certificate;
|
58
|
+
std::optional<std::string> trust_certificate_value;
|
52
59
|
bool disable_mozilla_ca_certificates;
|
60
|
+
bool disable_deprecated_protocols;
|
61
|
+
bool disable_tls_v1_2;
|
53
62
|
};
|
54
63
|
|
55
64
|
[[nodiscard]] auto build() const -> built
|
@@ -58,7 +67,10 @@ class security_options
|
|
58
67
|
enabled_,
|
59
68
|
tls_verify_,
|
60
69
|
trust_certificate_,
|
70
|
+
trust_certificate_value_,
|
61
71
|
disable_mozilla_ca_certificates_,
|
72
|
+
disable_deprecated_protocols,
|
73
|
+
disable_tls_v1_2,
|
62
74
|
};
|
63
75
|
}
|
64
76
|
|
@@ -66,6 +78,9 @@ class security_options
|
|
66
78
|
bool enabled_{ true };
|
67
79
|
tls_verify_mode tls_verify_{ tls_verify_mode::peer };
|
68
80
|
std::optional<std::string> trust_certificate_{};
|
81
|
+
std::optional<std::string> trust_certificate_value_{};
|
69
82
|
bool disable_mozilla_ca_certificates_{ false };
|
83
|
+
bool disable_deprecated_protocols{ true };
|
84
|
+
bool disable_tls_v1_2{ false };
|
70
85
|
};
|
71
86
|
} // namespace couchbase
|
@@ -62,7 +62,8 @@ class subdocument_error_context : public key_value_error_context
|
|
62
62
|
* @since 1.0.0
|
63
63
|
* @internal
|
64
64
|
*/
|
65
|
-
subdocument_error_context(std::
|
65
|
+
subdocument_error_context(std::string operation_id,
|
66
|
+
std::error_code ec,
|
66
67
|
std::optional<std::string> last_dispatched_to,
|
67
68
|
std::optional<std::string> last_dispatched_from,
|
68
69
|
std::size_t retry_attempts,
|
@@ -79,7 +80,8 @@ class subdocument_error_context : public key_value_error_context
|
|
79
80
|
std::optional<std::string> first_error_path,
|
80
81
|
std::optional<std::uint64_t> first_error_index,
|
81
82
|
bool deleted)
|
82
|
-
: key_value_error_context{
|
83
|
+
: key_value_error_context{ std::move(operation_id),
|
84
|
+
ec,
|
83
85
|
std::move(last_dispatched_to),
|
84
86
|
std::move(last_dispatched_from),
|
85
87
|
retry_attempts,
|
@@ -86,8 +86,8 @@ initiate_touch_operation(std::shared_ptr<couchbase::core::cluster> core,
|
|
86
86
|
std::string collection_name,
|
87
87
|
std::string document_key,
|
88
88
|
std::uint32_t expiry,
|
89
|
-
touch_options::built options,
|
90
|
-
touch_handler&& handler);
|
89
|
+
couchbase::touch_options::built options,
|
90
|
+
couchbase::touch_handler&& handler);
|
91
91
|
#endif
|
92
92
|
} // namespace impl
|
93
93
|
} // namespace core
|
@@ -89,8 +89,8 @@ initiate_unlock_operation(std::shared_ptr<couchbase::core::cluster> core,
|
|
89
89
|
std::string collection_name,
|
90
90
|
std::string document_key,
|
91
91
|
couchbase::cas cas,
|
92
|
-
unlock_options::built options,
|
93
|
-
unlock_handler&& handler);
|
92
|
+
couchbase::unlock_options::built options,
|
93
|
+
couchbase::unlock_handler&& handler);
|
94
94
|
#endif
|
95
95
|
} // namespace impl
|
96
96
|
} // namespace core
|
@@ -0,0 +1,41 @@
|
|
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
|
+
#pragma once
|
19
|
+
|
20
|
+
#include <functional>
|
21
|
+
#include <memory>
|
22
|
+
#include <optional>
|
23
|
+
#include <string>
|
24
|
+
|
25
|
+
namespace couchbase
|
26
|
+
{
|
27
|
+
struct update_bucket_options : public common_options<update_bucket_options> {
|
28
|
+
public:
|
29
|
+
struct built : public common_options<update_bucket_options>::built {
|
30
|
+
};
|
31
|
+
|
32
|
+
[[nodiscard]] auto build() const -> built
|
33
|
+
{
|
34
|
+
return { build_common_options() };
|
35
|
+
}
|
36
|
+
|
37
|
+
private:
|
38
|
+
};
|
39
|
+
|
40
|
+
using update_bucket_handler = std::function<void(couchbase::manager_error_context)>;
|
41
|
+
} // namespace couchbase
|
@@ -149,9 +149,9 @@ initiate_upsert_operation(std::shared_ptr<couchbase::core::cluster> core,
|
|
149
149
|
std::string scope_name,
|
150
150
|
std::string collection_name,
|
151
151
|
std::string document_key,
|
152
|
-
codec::encoded_value encoded,
|
153
|
-
upsert_options::built options,
|
154
|
-
upsert_handler&& handler);
|
152
|
+
couchbase::codec::encoded_value encoded,
|
153
|
+
couchbase::upsert_options::built options,
|
154
|
+
couchbase::upsert_handler&& handler);
|
155
155
|
#endif
|
156
156
|
} // namespace impl
|
157
157
|
} // namespace core
|
@@ -81,35 +81,4 @@ class watch_query_indexes_options : public common_options<watch_query_indexes_op
|
|
81
81
|
*/
|
82
82
|
|
83
83
|
using watch_query_indexes_handler = std::function<void(couchbase::manager_error_context)>;
|
84
|
-
|
85
|
-
#ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
|
86
|
-
namespace core
|
87
|
-
{
|
88
|
-
class cluster;
|
89
|
-
class query_context;
|
90
|
-
namespace impl
|
91
|
-
{
|
92
|
-
|
93
|
-
/**
|
94
|
-
* @since 1.0.0
|
95
|
-
* @internal
|
96
|
-
*/
|
97
|
-
void
|
98
|
-
initiate_watch_query_indexes(std::shared_ptr<couchbase::core::cluster> core,
|
99
|
-
std::string bucket_name,
|
100
|
-
std::vector<std::string> index_names,
|
101
|
-
couchbase::watch_query_indexes_options::built options,
|
102
|
-
query_context query_ctx,
|
103
|
-
std::string collection_name,
|
104
|
-
watch_query_indexes_handler&& handler);
|
105
|
-
void
|
106
|
-
initiate_watch_query_indexes(std::shared_ptr<couchbase::core::cluster> core,
|
107
|
-
std::string bucket_name,
|
108
|
-
std::vector<std::string> index_names,
|
109
|
-
couchbase::watch_query_indexes_options::built options,
|
110
|
-
watch_query_indexes_handler&& handler);
|
111
|
-
|
112
|
-
#endif
|
113
|
-
} // namespace impl
|
114
|
-
} // namespace core
|
115
84
|
} // namespace couchbase
|
@@ -113,6 +113,12 @@ TEST_CASE("integration: get and insert non default scope and collection", "[inte
|
|
113
113
|
REQUIRE_SUCCESS(resp.ctx.ec());
|
114
114
|
REQUIRE(resp.value == couchbase::core::utils::to_binary(key));
|
115
115
|
}
|
116
|
+
|
117
|
+
{
|
118
|
+
couchbase::core::operations::management::scope_drop_request req{ integration.ctx.bucket, scope_name };
|
119
|
+
auto resp = test::utils::execute(integration.cluster, req);
|
120
|
+
REQUIRE_SUCCESS(resp.ctx.ec);
|
121
|
+
}
|
116
122
|
}
|
117
123
|
|
118
124
|
TEST_CASE("integration: insert into dropped scope", "[integration]")
|
@@ -315,6 +315,11 @@ TEST_CASE("integration: lock/unlock without lock time", "[integration]")
|
|
315
315
|
TEST_CASE("integration: touch with zero expiry resets expiry", "[integration]")
|
316
316
|
{
|
317
317
|
test::utils::integration_test_guard integration;
|
318
|
+
|
319
|
+
if (integration.ctx.deployment == test::utils::deployment_type::elixir) {
|
320
|
+
SKIP("Timeout is too strict for sanity test env");
|
321
|
+
}
|
322
|
+
|
318
323
|
test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
|
319
324
|
|
320
325
|
couchbase::core::document_id id{ integration.ctx.bucket, "_default", "_default", test::utils::uniq_id("get_reset_expiry_key") };
|
@@ -132,6 +132,9 @@ row: {"airline":{"callsign":"MILE-AIR","country":"United States","iata":"Q5","ic
|
|
132
132
|
TEST_CASE("example: start using", "[integration]")
|
133
133
|
{
|
134
134
|
test::utils::integration_test_guard integration;
|
135
|
+
if (integration.cluster_version().is_capella()) {
|
136
|
+
SKIP("Capella does not allow to use REST API to load sample buckets");
|
137
|
+
}
|
135
138
|
if (!integration.cluster_version().supports_collections()) {
|
136
139
|
SKIP("cluster does not support collections");
|
137
140
|
}
|
@@ -438,8 +441,12 @@ row: {"airline":{"callsign":"MILE-AIR","country":"United States","iata":"Q5","ic
|
|
438
441
|
TEST_CASE("example: search", "[integration]")
|
439
442
|
{
|
440
443
|
test::utils::integration_test_guard integration;
|
444
|
+
|
445
|
+
if (integration.cluster_version().is_capella()) {
|
446
|
+
SKIP("Capella does not allow to use REST API to load sample buckets");
|
447
|
+
}
|
441
448
|
if (!integration.cluster_version().supports_collections()) {
|
442
|
-
|
449
|
+
SKIP("cluster does not support collections");
|
443
450
|
}
|
444
451
|
|
445
452
|
const auto env = test::utils::test_context::load_from_environment();
|
@@ -452,3 +459,132 @@ TEST_CASE("example: search", "[integration]")
|
|
452
459
|
|
453
460
|
REQUIRE(example_search::main(4, argv) == 0);
|
454
461
|
}
|
462
|
+
|
463
|
+
namespace example_buckets
|
464
|
+
{
|
465
|
+
//! [example-buckets]
|
466
|
+
#include <couchbase/cluster.hxx>
|
467
|
+
|
468
|
+
int
|
469
|
+
main(int argc, const char* argv[])
|
470
|
+
{
|
471
|
+
if (argc != 4) {
|
472
|
+
fmt::print("USAGE: ./example_buckets couchbase://127.0.0.1 Administrator password\n");
|
473
|
+
return 1;
|
474
|
+
}
|
475
|
+
|
476
|
+
std::string connection_string{ argv[1] }; // "couchbase://127.0.0.1"
|
477
|
+
std::string username{ argv[2] }; // "Administrator"
|
478
|
+
std::string password{ argv[3] }; // "password"
|
479
|
+
std::string bucket_name{ "travel-sample" };
|
480
|
+
|
481
|
+
// run IO context on separate thread
|
482
|
+
asio::io_context io;
|
483
|
+
auto guard = asio::make_work_guard(io);
|
484
|
+
std::thread io_thread([&io]() { io.run(); });
|
485
|
+
|
486
|
+
auto options = couchbase::cluster_options(username, password);
|
487
|
+
// customize through the 'options'.
|
488
|
+
// For example, optimize timeouts for WAN
|
489
|
+
options.apply_profile("wan_development");
|
490
|
+
|
491
|
+
auto [cluster, ec] = couchbase::cluster::connect(io, connection_string, options).get();
|
492
|
+
if (ec) {
|
493
|
+
fmt::print("unable to connect to the cluster: {}\n", ec.message());
|
494
|
+
return 1;
|
495
|
+
}
|
496
|
+
auto manager = cluster.buckets();
|
497
|
+
|
498
|
+
couchbase::management::cluster::bucket_settings bucket_settings{};
|
499
|
+
std::string test_bucket_name = "cxx_test_integration_examples_bucket";
|
500
|
+
bucket_settings.name = test_bucket_name;
|
501
|
+
bucket_settings.ram_quota_mb = 150;
|
502
|
+
bucket_settings.bucket_type = couchbase::management::cluster::bucket_type::couchbase;
|
503
|
+
bucket_settings.eviction_policy = couchbase::management::cluster::bucket_eviction_policy::value_only;
|
504
|
+
bucket_settings.flush_enabled = true;
|
505
|
+
bucket_settings.replica_indexes = true;
|
506
|
+
bucket_settings.conflict_resolution_type = couchbase::management::cluster::bucket_conflict_resolution::sequence_number;
|
507
|
+
{
|
508
|
+
fmt::print("--- create bucket\n");
|
509
|
+
auto ctx = manager.create_bucket(bucket_settings).get();
|
510
|
+
if (ctx.ec()) {
|
511
|
+
if (ctx.ec() == couchbase::errc::common::invalid_argument) {
|
512
|
+
fmt::print("bucket already exists\n");
|
513
|
+
} else {
|
514
|
+
fmt::print("unable to create the bucket: {}\n", ctx.ec().message());
|
515
|
+
return 1;
|
516
|
+
}
|
517
|
+
} else {
|
518
|
+
fmt::print("--- bucket has been successfully created\n");
|
519
|
+
}
|
520
|
+
}
|
521
|
+
{
|
522
|
+
fmt::print("--- get bucket\n");
|
523
|
+
auto [ctx, bucket] = manager.get_bucket(bucket_name).get();
|
524
|
+
if (ctx.ec()) {
|
525
|
+
fmt::print("unable to get the bucket: {}\n", ctx.ec().message());
|
526
|
+
return 1;
|
527
|
+
}
|
528
|
+
fmt::print("name of fetched bucket: {}\n", bucket.name);
|
529
|
+
}
|
530
|
+
{
|
531
|
+
fmt::print("--- get all buckets\n");
|
532
|
+
auto [ctx, buckets] = manager.get_all_buckets().get();
|
533
|
+
if (ctx.ec()) {
|
534
|
+
fmt::print("unable to get all buckets: {}\n", ctx.ec().message());
|
535
|
+
return 1;
|
536
|
+
}
|
537
|
+
for (const auto& fetched_bucket : buckets) {
|
538
|
+
fmt::print("Bucket name: {}\n", fetched_bucket.name);
|
539
|
+
}
|
540
|
+
}
|
541
|
+
{
|
542
|
+
fmt::print("--- update bucket\n");
|
543
|
+
bucket_settings.ram_quota_mb = 150;
|
544
|
+
auto ctx = manager.update_bucket(bucket_settings).get();
|
545
|
+
if (ctx.ec()) {
|
546
|
+
fmt::print("unable to update the bucket: {}\n", ctx.ec().message());
|
547
|
+
return 1;
|
548
|
+
}
|
549
|
+
fmt::print("bucket has been updated\n");
|
550
|
+
}
|
551
|
+
{
|
552
|
+
fmt::print("--- drop bucket\n");
|
553
|
+
auto ctx = manager.drop_bucket(test_bucket_name).get();
|
554
|
+
if (ctx.ec()) {
|
555
|
+
fmt::print("unable to drop the bucket: {}\n", ctx.ec().message());
|
556
|
+
return 1;
|
557
|
+
}
|
558
|
+
fmt::print("bucket has been dropped\n");
|
559
|
+
}
|
560
|
+
|
561
|
+
// close cluster connection
|
562
|
+
cluster.close();
|
563
|
+
guard.reset();
|
564
|
+
|
565
|
+
io_thread.join();
|
566
|
+
return 0;
|
567
|
+
}
|
568
|
+
|
569
|
+
//! [example-buckets]
|
570
|
+
} // namespace example_buckets
|
571
|
+
|
572
|
+
TEST_CASE("example: bucket management", "[integration]")
|
573
|
+
{
|
574
|
+
test::utils::integration_test_guard integration;
|
575
|
+
|
576
|
+
if (integration.cluster_version().is_capella()) {
|
577
|
+
SKIP("Capella does not allow to use REST API to load sample buckets");
|
578
|
+
}
|
579
|
+
|
580
|
+
const auto env = test::utils::test_context::load_from_environment();
|
581
|
+
|
582
|
+
const char* argv[] = {
|
583
|
+
"example_buckets", // name of the "executable"
|
584
|
+
env.connection_string.c_str(),
|
585
|
+
env.username.c_str(),
|
586
|
+
env.password.c_str(),
|
587
|
+
};
|
588
|
+
|
589
|
+
REQUIRE(example_buckets::main(4, argv) == 0);
|
590
|
+
}
|