couchbase 4.4.3 → 4.4.4
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.
- package/BUILDING.md +182 -0
- package/CMakeLists.txt +11 -0
- package/CONTRIBUTING.md +1 -1
- package/README.md +4 -2
- package/deps/couchbase-cxx-cache/boringssl/e31ea00c1ea52052d2d78d44006cc88c80fa24a9/boringssl/src/BUILDING.md +206 -0
- package/deps/couchbase-cxx-client/CMakeLists.txt +3 -1
- package/deps/couchbase-cxx-client/README.md +2 -2
- package/deps/couchbase-cxx-client/cmake/APKBUILD.in +54 -0
- package/deps/couchbase-cxx-client/cmake/CompilerWarnings.cmake +0 -5
- package/deps/couchbase-cxx-client/cmake/Packaging.cmake +174 -11
- package/deps/couchbase-cxx-client/cmake/RPath.cmake +10 -0
- package/deps/couchbase-cxx-client/cmake/VersionInfo.cmake +4 -0
- package/deps/couchbase-cxx-client/cmake/build_version.hxx.in +1 -0
- package/deps/couchbase-cxx-client/cmake/couchbase-cxx-client.spec.in +2 -2
- package/deps/couchbase-cxx-client/cmake/couchbase_cxx_client.pc.in +2 -2
- package/deps/couchbase-cxx-client/cmake/debian/changelog.in +5 -0
- package/deps/couchbase-cxx-client/cmake/debian/compat +1 -0
- package/deps/couchbase-cxx-client/cmake/debian/control +40 -0
- package/deps/couchbase-cxx-client/cmake/debian/rules +41 -0
- package/deps/couchbase-cxx-client/cmake/debian/source/format +1 -0
- package/deps/couchbase-cxx-client/core/impl/analytics.cxx +1 -0
- package/deps/couchbase-cxx-client/core/impl/collection.cxx +27 -3
- package/deps/couchbase-cxx-client/core/impl/error.cxx +24 -3
- package/deps/couchbase-cxx-client/core/impl/get_replica.hxx +2 -0
- package/deps/couchbase-cxx-client/core/impl/lookup_in_replica.hxx +2 -0
- package/deps/couchbase-cxx-client/core/impl/observe_seqno.hxx +2 -0
- package/deps/couchbase-cxx-client/core/impl/query.cxx +1 -0
- package/deps/couchbase-cxx-client/core/impl/search.cxx +2 -0
- package/deps/couchbase-cxx-client/core/io/http_command.hxx +2 -2
- package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +1 -1
- package/deps/couchbase-cxx-client/core/meta/features.hxx +11 -0
- package/deps/couchbase-cxx-client/core/meta/version.cxx +47 -6
- package/deps/couchbase-cxx-client/core/operations/document_analytics.cxx +23 -17
- package/deps/couchbase-cxx-client/core/operations/document_analytics.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/document_append.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_decrement.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_exists.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_get.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_get_all_replicas.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_get_and_lock.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_get_and_touch.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_get_any_replica.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_get_projected.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_increment.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_insert.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_lookup_in.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_lookup_in_all_replicas.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_lookup_in_any_replica.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_mutate_in.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_prepend.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_query.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/document_remove.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_replace.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_search.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/document_touch.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_unlock.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_upsert.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_view.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/http_noop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_create.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_get_all.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_create.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_get_pending_mutations.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_index_create.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_index_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_index_get_all.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_connect.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_create.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_disconnect.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_get_all.cxx +23 -15
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_get_all.hxx +4 -3
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_replace.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_create.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_describe.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_flush.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_get.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_get_all.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_update.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/change_password.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/cluster_describe.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/cluster_developer_preview_enable.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/collection_create.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/collection_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/collection_update.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/collections_manifest_get.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_deploy_function.hxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/eventing_drop_function.hxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/eventing_get_all_functions.hxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/eventing_get_function.hxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/eventing_get_status.hxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/eventing_pause_function.hxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/eventing_resume_function.hxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/eventing_undeploy_function.hxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/eventing_upsert_function.hxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/freeform.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_get.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_get_all.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_upsert.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_build.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_build_deferred.hxx +3 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_create.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all_deferred.hxx +3 -0
- package/deps/couchbase-cxx-client/core/operations/management/role_get_all.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/scope_create.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/scope_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/scope_get_all.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_get_stats.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_stats.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/user_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/user_get.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/user_get_all.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/user_upsert.cxx +3 -3
- package/deps/couchbase-cxx-client/core/operations/management/user_upsert.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_drop.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_get.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_upsert.hxx +1 -0
- package/deps/couchbase-cxx-client/core/transactions/async_attempt_context.hxx +9 -21
- package/deps/couchbase-cxx-client/core/transactions/attempt_context.hxx +6 -33
- package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.cxx +41 -41
- package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.hxx +15 -16
- package/deps/couchbase-cxx-client/core/transactions/transaction_context.cxx +2 -2
- package/deps/couchbase-cxx-client/core/transactions/transaction_get_result.hxx +0 -20
- package/deps/couchbase-cxx-client/couchbase/common_options.hxx +16 -1
- package/deps/couchbase-cxx-client/couchbase/metrics/otel_meter.hxx +16 -20
- package/dist/analyticsindexmanager.d.ts +98 -14
- package/dist/analyticsindexmanager.js +452 -411
- package/dist/binding.d.ts +53 -4
- package/dist/bindingutilities.d.ts +26 -1
- package/dist/bindingutilities.js +108 -1
- package/dist/couchbase.d.ts +3 -1
- package/dist/couchbase.js +2 -0
- package/dist/rangeScan.d.ts +1 -1
- package/dist/rangeScan.js +1 -1
- package/dist/transactions.d.ts +34 -3
- package/dist/transactions.js +25 -18
- package/dist/transcoders.d.ts +68 -0
- package/dist/transcoders.js +194 -1
- package/dist/usermanager.d.ts +14 -14
- package/dist/usermanager.js +178 -228
- package/dist/utilities.js +4 -6
- package/dist/utilities_internal.js +1 -2
- package/package.json +9 -8
- package/src/connection.cpp +22 -0
- package/src/connection.hpp +12 -0
- package/src/connection_autogen.cpp +100 -0
- package/src/jstocbpp_autogen.hpp +315 -8
- package/src/jstocbpp_transactions.hpp +1 -2
- package/tools/gen-bindings-js.js +38 -3
- package/tools/gen-bindings-json.py +575 -328
|
@@ -37,6 +37,7 @@ struct user_get_all_request {
|
|
|
37
37
|
using encoded_response_type = io::http_response;
|
|
38
38
|
using error_context_type = error_context::http;
|
|
39
39
|
|
|
40
|
+
static const inline std::string observability_identifier = "manager_users_get_all_users";
|
|
40
41
|
static const inline service_type type = service_type::management;
|
|
41
42
|
|
|
42
43
|
couchbase::core::management::rbac::auth_domain domain{
|
|
@@ -51,11 +51,11 @@ user_upsert_request::encode_to(encoded_request_type& encoded,
|
|
|
51
51
|
for (const auto& role : user.roles) {
|
|
52
52
|
std::string spec = role.name;
|
|
53
53
|
if (role.bucket) {
|
|
54
|
-
spec += fmt::format("[{}", role.bucket.value());
|
|
54
|
+
spec += fmt::format("[{}", utils::string_codec::v2::path_escape(role.bucket.value()));
|
|
55
55
|
if (role.scope) {
|
|
56
|
-
spec += fmt::format(":{}", role.scope.value());
|
|
56
|
+
spec += fmt::format(":{}", utils::string_codec::v2::path_escape(role.scope.value()));
|
|
57
57
|
if (role.collection) {
|
|
58
|
-
spec += fmt::format(":{}", role.collection.value());
|
|
58
|
+
spec += fmt::format(":{}", utils::string_codec::v2::path_escape(role.collection.value()));
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
spec += "]";
|
|
@@ -37,6 +37,7 @@ struct user_upsert_request {
|
|
|
37
37
|
using encoded_response_type = io::http_response;
|
|
38
38
|
using error_context_type = error_context::http;
|
|
39
39
|
|
|
40
|
+
static const inline std::string observability_identifier = "manager_users_upsert_user";
|
|
40
41
|
static const inline service_type type = service_type::management;
|
|
41
42
|
|
|
42
43
|
couchbase::core::management::rbac::auth_domain domain{
|
|
@@ -37,6 +37,7 @@ struct view_index_drop_request {
|
|
|
37
37
|
using error_context_type = error_context::http;
|
|
38
38
|
|
|
39
39
|
static const inline service_type type = service_type::view;
|
|
40
|
+
static const inline std::string observability_identifier = "manager_views_drop_design_document";
|
|
40
41
|
|
|
41
42
|
std::string bucket_name;
|
|
42
43
|
std::string document_name;
|
|
@@ -38,6 +38,7 @@ struct view_index_get_request {
|
|
|
38
38
|
using error_context_type = error_context::http;
|
|
39
39
|
|
|
40
40
|
static const inline service_type type = service_type::view;
|
|
41
|
+
static const inline std::string observability_identifier = "manager_views_get_design_document";
|
|
41
42
|
|
|
42
43
|
std::string bucket_name;
|
|
43
44
|
std::string document_name;
|
|
@@ -38,6 +38,8 @@ struct view_index_get_all_request {
|
|
|
38
38
|
using error_context_type = error_context::http;
|
|
39
39
|
|
|
40
40
|
static const inline service_type type = service_type::management;
|
|
41
|
+
static const inline std::string observability_identifier =
|
|
42
|
+
"manager_views_get_all_design_documents";
|
|
41
43
|
|
|
42
44
|
std::string bucket_name;
|
|
43
45
|
design_document_namespace ns;
|
|
@@ -37,6 +37,7 @@ struct view_index_upsert_request {
|
|
|
37
37
|
using error_context_type = error_context::http;
|
|
38
38
|
|
|
39
39
|
static const inline service_type type = service_type::view;
|
|
40
|
+
static const inline std::string observability_identifier = "manager_views_upsert_design_document";
|
|
40
41
|
|
|
41
42
|
std::string bucket_name;
|
|
42
43
|
couchbase::core::management::views::design_document document;
|
|
@@ -42,7 +42,9 @@ public:
|
|
|
42
42
|
using VoidCallback = std::function<void(std::exception_ptr)>;
|
|
43
43
|
using QueryCallback =
|
|
44
44
|
std::function<void(std::exception_ptr, std::optional<core::operations::query_response>)>;
|
|
45
|
+
|
|
45
46
|
virtual ~async_attempt_context() = default;
|
|
47
|
+
|
|
46
48
|
/**
|
|
47
49
|
* Gets a document from the specified Couchbase collection matching the
|
|
48
50
|
* specified id.
|
|
@@ -91,6 +93,7 @@ public:
|
|
|
91
93
|
*
|
|
92
94
|
* If the mutation fails, the transaction will automatically rollback this
|
|
93
95
|
* attempt, then retry.
|
|
96
|
+
*
|
|
94
97
|
* @param document the doc to be updated
|
|
95
98
|
* @param content the content to replace the doc with.
|
|
96
99
|
* @param cb callback function called with the updated @ref
|
|
@@ -98,11 +101,10 @@ public:
|
|
|
98
101
|
* transaction_operation_failed
|
|
99
102
|
*
|
|
100
103
|
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
104
|
+
virtual void replace(const transaction_get_result& document,
|
|
105
|
+
codec::encoded_value content,
|
|
106
|
+
Callback&& cb) = 0;
|
|
107
|
+
|
|
106
108
|
/**
|
|
107
109
|
* Inserts a new document into the specified Couchbase collection.
|
|
108
110
|
*
|
|
@@ -119,11 +121,8 @@ public:
|
|
|
119
121
|
* @param cb callback function called with a @ref transaction_get_result with
|
|
120
122
|
* the new CAS value when successful, or @ref transaction_operation_failed
|
|
121
123
|
*/
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
{
|
|
125
|
-
return insert_raw(id, Transcoder::encode(content), std::move(cb));
|
|
126
|
-
}
|
|
124
|
+
virtual void insert(const core::document_id& id, codec::encoded_value content, Callback&& cb) = 0;
|
|
125
|
+
|
|
127
126
|
/**
|
|
128
127
|
* Removes the specified document, using the document's last
|
|
129
128
|
* TransactionDocument#cas
|
|
@@ -195,17 +194,6 @@ public:
|
|
|
195
194
|
* @param cb callback which is called when the rollback succeeds
|
|
196
195
|
*/
|
|
197
196
|
virtual void rollback(VoidCallback&& cb) = 0;
|
|
198
|
-
|
|
199
|
-
protected:
|
|
200
|
-
/** @internal */
|
|
201
|
-
virtual void insert_raw(const core::document_id& id,
|
|
202
|
-
codec::encoded_value content,
|
|
203
|
-
Callback&& cb) = 0;
|
|
204
|
-
|
|
205
|
-
/** @internal */
|
|
206
|
-
virtual void replace_raw(const transaction_get_result& document,
|
|
207
|
-
codec::encoded_value content,
|
|
208
|
-
Callback&& cb) = 0;
|
|
209
197
|
};
|
|
210
198
|
|
|
211
199
|
} // namespace couchbase::core::transactions
|
|
@@ -101,19 +101,8 @@ public:
|
|
|
101
101
|
* @throws transaction_operation_failed which either should not be caught by
|
|
102
102
|
* the lambda, or rethrown if it is caught.
|
|
103
103
|
*/
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const Content& content) -> transaction_get_result
|
|
107
|
-
{
|
|
108
|
-
codec::encoded_value data;
|
|
109
|
-
try {
|
|
110
|
-
data = Transcoder::encode(content);
|
|
111
|
-
} catch (std::runtime_error& e) {
|
|
112
|
-
throw transaction_operation_failed(
|
|
113
|
-
FAIL_OTHER, std::string("failed to encode content as JSON: ") + e.what());
|
|
114
|
-
}
|
|
115
|
-
return replace_raw(document, data);
|
|
116
|
-
}
|
|
104
|
+
virtual auto replace(const transaction_get_result& document,
|
|
105
|
+
codec::encoded_value content) -> transaction_get_result = 0;
|
|
117
106
|
|
|
118
107
|
/**
|
|
119
108
|
* Inserts a new document into the specified Couchbase collection.
|
|
@@ -135,18 +124,9 @@ public:
|
|
|
135
124
|
* @throws transaction_operation_failed which either should not be caught by
|
|
136
125
|
* the lambda, or rethrown if it is caught.
|
|
137
126
|
*/
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
codec::encoded_value data;
|
|
142
|
-
try {
|
|
143
|
-
data = Transcoder::encode(content);
|
|
144
|
-
} catch (std::runtime_error& e) {
|
|
145
|
-
throw transaction_operation_failed(
|
|
146
|
-
FAIL_OTHER, std::string("failed to encode content as JSON: ") + e.what());
|
|
147
|
-
}
|
|
148
|
-
return insert_raw(id, data);
|
|
149
|
-
}
|
|
127
|
+
virtual auto insert(const core::document_id& id,
|
|
128
|
+
codec::encoded_value content) -> transaction_get_result = 0;
|
|
129
|
+
|
|
150
130
|
/**
|
|
151
131
|
* Removes the specified document, using the document's last
|
|
152
132
|
* TransactionDocument#cas
|
|
@@ -179,6 +159,7 @@ public:
|
|
|
179
159
|
{
|
|
180
160
|
return do_core_query(statement, opts, query_context);
|
|
181
161
|
};
|
|
162
|
+
|
|
182
163
|
/**
|
|
183
164
|
* Performs a Query, within the current transaction.
|
|
184
165
|
*
|
|
@@ -218,14 +199,6 @@ public:
|
|
|
218
199
|
virtual void rollback() = 0;
|
|
219
200
|
|
|
220
201
|
protected:
|
|
221
|
-
/** @internal */
|
|
222
|
-
virtual auto insert_raw(const core::document_id& id,
|
|
223
|
-
codec::encoded_value content) -> transaction_get_result = 0;
|
|
224
|
-
|
|
225
|
-
/** @internal */
|
|
226
|
-
virtual auto replace_raw(const transaction_get_result& document,
|
|
227
|
-
codec::encoded_value content) -> transaction_get_result = 0;
|
|
228
|
-
|
|
229
202
|
virtual auto do_core_query(const std::string&,
|
|
230
203
|
const couchbase::transactions::transaction_query_options& opts,
|
|
231
204
|
std::optional<std::string> query_context)
|
|
@@ -587,9 +587,9 @@ attempt_context_impl::create_document_metadata(
|
|
|
587
587
|
}
|
|
588
588
|
|
|
589
589
|
void
|
|
590
|
-
attempt_context_impl::
|
|
591
|
-
|
|
592
|
-
|
|
590
|
+
attempt_context_impl::replace(const transaction_get_result& document,
|
|
591
|
+
codec::encoded_value content,
|
|
592
|
+
Callback&& cb)
|
|
593
593
|
{
|
|
594
594
|
|
|
595
595
|
if (op_list_.get_mode().is_query()) {
|
|
@@ -852,19 +852,19 @@ attempt_context_impl::create_staged_replace(const transaction_get_result& docume
|
|
|
852
852
|
}
|
|
853
853
|
|
|
854
854
|
auto
|
|
855
|
-
attempt_context_impl::
|
|
856
|
-
|
|
855
|
+
attempt_context_impl::replace(const transaction_get_result& document,
|
|
856
|
+
codec::encoded_value content) -> transaction_get_result
|
|
857
857
|
{
|
|
858
858
|
auto barrier = std::make_shared<std::promise<transaction_get_result>>();
|
|
859
859
|
auto f = barrier->get_future();
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
860
|
+
replace(document,
|
|
861
|
+
std::move(content),
|
|
862
|
+
[barrier](const std::exception_ptr& err, std::optional<transaction_get_result> res) {
|
|
863
|
+
if (err) {
|
|
864
|
+
return barrier->set_exception(err);
|
|
865
|
+
}
|
|
866
|
+
barrier->set_value(std::move(*res));
|
|
867
|
+
});
|
|
868
868
|
return f.get();
|
|
869
869
|
}
|
|
870
870
|
|
|
@@ -873,12 +873,12 @@ attempt_context_impl::replace_raw(couchbase::transactions::transaction_get_resul
|
|
|
873
873
|
codec::encoded_value content,
|
|
874
874
|
couchbase::transactions::async_result_handler&& handler)
|
|
875
875
|
{
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
876
|
+
replace(core::transactions::transaction_get_result(doc),
|
|
877
|
+
std::move(content),
|
|
878
|
+
[handler = std::move(handler)](const std::exception_ptr& err,
|
|
879
|
+
std::optional<transaction_get_result> res) mutable {
|
|
880
|
+
wrap_callback_for_async_public_api(err, std::move(res), std::move(handler));
|
|
881
|
+
});
|
|
882
882
|
}
|
|
883
883
|
|
|
884
884
|
auto
|
|
@@ -888,7 +888,7 @@ attempt_context_impl::replace_raw(const couchbase::transactions::transaction_get
|
|
|
888
888
|
{
|
|
889
889
|
return wrap_call_for_public_api(
|
|
890
890
|
[self = shared_from_this(), doc, content = std::move(content)]() -> transaction_get_result {
|
|
891
|
-
return self->
|
|
891
|
+
return self->replace(transaction_get_result(doc), content);
|
|
892
892
|
});
|
|
893
893
|
}
|
|
894
894
|
|
|
@@ -900,8 +900,8 @@ attempt_context_impl::insert_raw(const collection& coll,
|
|
|
900
900
|
{
|
|
901
901
|
return wrap_call_for_public_api(
|
|
902
902
|
[self = shared_from_this(), coll, &id, content = std::move(content)]() mutable {
|
|
903
|
-
return self->
|
|
904
|
-
|
|
903
|
+
return self->insert({ coll.bucket_name(), coll.scope_name(), coll.name(), id },
|
|
904
|
+
std::move(content));
|
|
905
905
|
});
|
|
906
906
|
}
|
|
907
907
|
|
|
@@ -911,35 +911,35 @@ attempt_context_impl::insert_raw(const collection& coll,
|
|
|
911
911
|
codec::encoded_value content,
|
|
912
912
|
couchbase::transactions::async_result_handler&& handler)
|
|
913
913
|
{
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
914
|
+
insert({ coll.bucket_name(), coll.scope_name(), coll.name(), std::move(id) },
|
|
915
|
+
std::move(content),
|
|
916
|
+
[handler = std::move(handler)](const std::exception_ptr& err,
|
|
917
|
+
std::optional<transaction_get_result> res) mutable {
|
|
918
|
+
wrap_callback_for_async_public_api(err, std::move(res), std::move(handler));
|
|
919
|
+
});
|
|
920
920
|
}
|
|
921
921
|
|
|
922
922
|
auto
|
|
923
|
-
attempt_context_impl::
|
|
924
|
-
|
|
923
|
+
attempt_context_impl::insert(const core::document_id& id,
|
|
924
|
+
codec::encoded_value content) -> transaction_get_result
|
|
925
925
|
{
|
|
926
926
|
auto barrier = std::make_shared<std::promise<transaction_get_result>>();
|
|
927
927
|
auto f = barrier->get_future();
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
928
|
+
insert(id,
|
|
929
|
+
std::move(content),
|
|
930
|
+
[barrier](const std::exception_ptr& err, std::optional<transaction_get_result> res) {
|
|
931
|
+
if (err) {
|
|
932
|
+
return barrier->set_exception(err);
|
|
933
|
+
}
|
|
934
|
+
barrier->set_value(std::move(*res));
|
|
935
|
+
});
|
|
936
936
|
return f.get();
|
|
937
937
|
}
|
|
938
938
|
|
|
939
939
|
void
|
|
940
|
-
attempt_context_impl::
|
|
941
|
-
|
|
942
|
-
|
|
940
|
+
attempt_context_impl::insert(const core::document_id& id,
|
|
941
|
+
codec::encoded_value content,
|
|
942
|
+
Callback&& cb)
|
|
943
943
|
{
|
|
944
944
|
if (op_list_.get_mode().is_query()) {
|
|
945
945
|
return insert_raw_with_query(id, std::move(content), std::move(cb));
|
|
@@ -92,37 +92,36 @@ private:
|
|
|
92
92
|
// transaction_context needs access to the two functions below
|
|
93
93
|
friend class transaction_context;
|
|
94
94
|
|
|
95
|
+
void insert(const core::document_id& id,
|
|
96
|
+
codec::encoded_value content,
|
|
97
|
+
core::transactions::async_attempt_context::Callback&& cb) override;
|
|
98
|
+
|
|
99
|
+
auto insert(const core::document_id& id,
|
|
100
|
+
codec::encoded_value content) -> core::transactions::transaction_get_result override;
|
|
101
|
+
|
|
102
|
+
void replace(const transaction_get_result& document,
|
|
103
|
+
codec::encoded_value content,
|
|
104
|
+
core::transactions::async_attempt_context::Callback&& cb) override;
|
|
105
|
+
|
|
106
|
+
auto replace(const transaction_get_result& document,
|
|
107
|
+
codec::encoded_value content) -> transaction_get_result override;
|
|
108
|
+
|
|
95
109
|
auto insert_raw(const collection& coll, const std::string& id, codec::encoded_value content)
|
|
96
110
|
-> std::pair<couchbase::error, couchbase::transactions::transaction_get_result> override;
|
|
97
|
-
auto insert_raw(const core::document_id& id, codec::encoded_value content)
|
|
98
|
-
-> core::transactions::transaction_get_result override;
|
|
99
111
|
|
|
100
112
|
void insert_raw(const collection& coll,
|
|
101
113
|
std::string id,
|
|
102
114
|
codec::encoded_value content,
|
|
103
115
|
couchbase::transactions::async_result_handler&& handler) override;
|
|
104
116
|
|
|
105
|
-
void insert_raw(
|
|
106
|
-
const core::document_id& id,
|
|
107
|
-
codec::encoded_value content,
|
|
108
|
-
std::function<void(std::exception_ptr, std::optional<transaction_get_result>)>&& cb) override;
|
|
109
|
-
|
|
110
117
|
auto replace_raw(const couchbase::transactions::transaction_get_result& doc,
|
|
111
118
|
codec::encoded_value content)
|
|
112
119
|
-> std::pair<couchbase::error, couchbase::transactions::transaction_get_result> override;
|
|
113
120
|
|
|
114
|
-
auto replace_raw(const transaction_get_result& document,
|
|
115
|
-
codec::encoded_value content) -> transaction_get_result override;
|
|
116
|
-
|
|
117
121
|
void replace_raw(couchbase::transactions::transaction_get_result doc,
|
|
118
122
|
codec::encoded_value content,
|
|
119
123
|
couchbase::transactions::async_result_handler&& handler) override;
|
|
120
124
|
|
|
121
|
-
void replace_raw(
|
|
122
|
-
const transaction_get_result& document,
|
|
123
|
-
codec::encoded_value content,
|
|
124
|
-
std::function<void(std::exception_ptr, std::optional<transaction_get_result>)>&& cb) override;
|
|
125
|
-
|
|
126
125
|
void remove_staged_insert(const core::document_id& id, VoidCallback&& cb);
|
|
127
126
|
|
|
128
127
|
void get_with_query(
|
|
@@ -200,7 +199,7 @@ private:
|
|
|
200
199
|
std::exception_ptr&& err)
|
|
201
200
|
{
|
|
202
201
|
try {
|
|
203
|
-
std::rethrow_exception(
|
|
202
|
+
std::rethrow_exception(err);
|
|
204
203
|
} catch (const transaction_operation_failed& e) {
|
|
205
204
|
// if this is a transaction_operation_failed, we need to cache it before
|
|
206
205
|
// moving on...
|
|
@@ -180,7 +180,7 @@ transaction_context::insert(const core::document_id& id,
|
|
|
180
180
|
async_attempt_context::Callback&& cb)
|
|
181
181
|
{
|
|
182
182
|
if (current_attempt_context_) {
|
|
183
|
-
return current_attempt_context_->
|
|
183
|
+
return current_attempt_context_->insert(id, std::move(content), std::move(cb));
|
|
184
184
|
}
|
|
185
185
|
throw transaction_operation_failed(FAIL_OTHER, "no current attempt context");
|
|
186
186
|
}
|
|
@@ -191,7 +191,7 @@ transaction_context::replace(const transaction_get_result& doc,
|
|
|
191
191
|
async_attempt_context::Callback&& cb)
|
|
192
192
|
{
|
|
193
193
|
if (current_attempt_context_) {
|
|
194
|
-
return current_attempt_context_->
|
|
194
|
+
return current_attempt_context_->replace(doc, std::move(content), std::move(cb));
|
|
195
195
|
}
|
|
196
196
|
throw transaction_operation_failed(FAIL_OTHER, "no current attempt context");
|
|
197
197
|
}
|
|
@@ -199,26 +199,6 @@ public:
|
|
|
199
199
|
return os;
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
-
/**
|
|
203
|
-
* Content of the document.
|
|
204
|
-
*
|
|
205
|
-
* @return content of the document.
|
|
206
|
-
*/
|
|
207
|
-
template<typename Document,
|
|
208
|
-
typename Transcoder = codec::default_json_transcoder,
|
|
209
|
-
std::enable_if_t<!codec::is_transcoder_v<Document>, bool> = true,
|
|
210
|
-
std::enable_if_t<codec::is_transcoder_v<Transcoder>, bool> = true>
|
|
211
|
-
[[nodiscard]] auto content() const -> Document
|
|
212
|
-
{
|
|
213
|
-
return Transcoder::template decode<Document>(content_);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
template<typename Transcoder, std::enable_if_t<codec::is_transcoder_v<Transcoder>, bool> = true>
|
|
217
|
-
[[nodiscard]] auto content() const -> typename Transcoder::document_type
|
|
218
|
-
{
|
|
219
|
-
return Transcoder::decode(content_);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
202
|
/**
|
|
223
203
|
* Content of the document as raw byte vector
|
|
224
204
|
*
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
20
|
#include <couchbase/retry_strategy.hxx>
|
|
21
|
+
#include <couchbase/tracing/request_span.hxx>
|
|
21
22
|
|
|
22
23
|
#include <chrono>
|
|
23
24
|
#include <memory>
|
|
@@ -69,6 +70,18 @@ public:
|
|
|
69
70
|
return self();
|
|
70
71
|
}
|
|
71
72
|
|
|
73
|
+
/**
|
|
74
|
+
* @param span
|
|
75
|
+
*
|
|
76
|
+
* @since 1.0.4
|
|
77
|
+
* @volatile
|
|
78
|
+
*/
|
|
79
|
+
auto parent_span(std::shared_ptr<tracing::request_span> span) -> derived_class&
|
|
80
|
+
{
|
|
81
|
+
parent_span_ = std::move(span);
|
|
82
|
+
return self();
|
|
83
|
+
}
|
|
84
|
+
|
|
72
85
|
/**
|
|
73
86
|
* Immutable value object representing consistent options.
|
|
74
87
|
*
|
|
@@ -78,6 +91,7 @@ public:
|
|
|
78
91
|
struct built {
|
|
79
92
|
const std::optional<std::chrono::milliseconds> timeout;
|
|
80
93
|
const std::shared_ptr<couchbase::retry_strategy> retry_strategy;
|
|
94
|
+
const std::shared_ptr<tracing::request_span> parent_span;
|
|
81
95
|
};
|
|
82
96
|
|
|
83
97
|
protected:
|
|
@@ -88,7 +102,7 @@ protected:
|
|
|
88
102
|
*/
|
|
89
103
|
[[nodiscard]] auto build_common_options() const -> built
|
|
90
104
|
{
|
|
91
|
-
return { timeout_, retry_strategy_ };
|
|
105
|
+
return { timeout_, retry_strategy_, parent_span_ };
|
|
92
106
|
}
|
|
93
107
|
|
|
94
108
|
/**
|
|
@@ -107,6 +121,7 @@ protected:
|
|
|
107
121
|
private:
|
|
108
122
|
std::optional<std::chrono::milliseconds> timeout_{};
|
|
109
123
|
std::shared_ptr<couchbase::retry_strategy> retry_strategy_{ nullptr };
|
|
124
|
+
std::shared_ptr<tracing::request_span> parent_span_{ nullptr };
|
|
110
125
|
};
|
|
111
126
|
|
|
112
127
|
} // namespace couchbase
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#include "opentelemetry/sdk/metrics/meter.h"
|
|
21
21
|
#include <couchbase/metrics/meter.hxx>
|
|
22
22
|
|
|
23
|
+
#include <algorithm>
|
|
23
24
|
#include <iostream>
|
|
24
25
|
#include <thread>
|
|
25
26
|
#include <utility>
|
|
@@ -37,44 +38,39 @@ namespace couchbase::metrics
|
|
|
37
38
|
class otel_sync_histogram
|
|
38
39
|
{
|
|
39
40
|
public:
|
|
40
|
-
otel_sync_histogram(nostd::shared_ptr<metrics_api::Histogram<
|
|
41
|
+
otel_sync_histogram(nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter)
|
|
41
42
|
: histogram_counter_(histogram_counter)
|
|
42
43
|
{
|
|
43
44
|
}
|
|
44
|
-
|
|
45
|
+
|
|
46
|
+
void record(std::uint64_t value,
|
|
45
47
|
const opentelemetry::common::KeyValueIterable& tags,
|
|
46
48
|
opentelemetry::context::Context& ctx)
|
|
47
49
|
{
|
|
48
|
-
|
|
49
|
-
if (value > LONG_MAX) {
|
|
50
|
-
value = LONG_MAX;
|
|
51
|
-
}
|
|
52
|
-
long lvalue = static_cast<long>(value);
|
|
53
|
-
histogram_counter_->Record(lvalue, tags, ctx);
|
|
50
|
+
histogram_counter_->Record(value, tags, ctx);
|
|
54
51
|
}
|
|
55
52
|
|
|
56
53
|
private:
|
|
57
|
-
nostd::shared_ptr<metrics_api::Histogram<
|
|
54
|
+
nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter_;
|
|
58
55
|
std::mutex mutex_;
|
|
59
56
|
};
|
|
60
57
|
|
|
61
58
|
class otel_value_recorder : public couchbase::metrics::value_recorder
|
|
62
59
|
{
|
|
63
60
|
public:
|
|
64
|
-
explicit otel_value_recorder(
|
|
65
|
-
|
|
61
|
+
explicit otel_value_recorder(
|
|
62
|
+
nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter,
|
|
63
|
+
const std::map<std::string, std::string>& tags)
|
|
66
64
|
: histogram_counter_(histogram_counter)
|
|
67
65
|
, tags_(tags)
|
|
68
66
|
{
|
|
69
67
|
}
|
|
70
68
|
void record_value(std::int64_t value) override
|
|
71
69
|
{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
long lvalue = static_cast<long>(value);
|
|
70
|
+
value = std::max<int64_t>(value, 0);
|
|
71
|
+
auto uvalue = static_cast<std::uint64_t>(value);
|
|
76
72
|
histogram_counter_->Record(
|
|
77
|
-
|
|
73
|
+
uvalue, opentelemetry::common::KeyValueIterableView<decltype(tags_)>{ tags_ }, context_);
|
|
78
74
|
}
|
|
79
75
|
|
|
80
76
|
const std::map<std::string, std::string> tags()
|
|
@@ -82,13 +78,13 @@ public:
|
|
|
82
78
|
return tags_;
|
|
83
79
|
}
|
|
84
80
|
|
|
85
|
-
nostd::shared_ptr<metrics_api::Histogram<
|
|
81
|
+
nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter()
|
|
86
82
|
{
|
|
87
83
|
return histogram_counter_;
|
|
88
84
|
}
|
|
89
85
|
|
|
90
86
|
private:
|
|
91
|
-
nostd::shared_ptr<metrics_api::Histogram<
|
|
87
|
+
nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter_;
|
|
92
88
|
const std::map<std::string, std::string> tags_;
|
|
93
89
|
opentelemetry::context::Context context_{};
|
|
94
90
|
std::mutex mutex_;
|
|
@@ -115,8 +111,8 @@ public:
|
|
|
115
111
|
// api doesn't seem to allow this.
|
|
116
112
|
return recorders_
|
|
117
113
|
.insert({ name,
|
|
118
|
-
std::make_shared<otel_value_recorder>(
|
|
119
|
-
|
|
114
|
+
std::make_shared<otel_value_recorder>(
|
|
115
|
+
meter_->CreateUInt64Histogram(name, "", "us"), tags) })
|
|
120
116
|
->second;
|
|
121
117
|
}
|
|
122
118
|
// so it is already, lets see if we already have one with those tags, or need
|