couchbase 4.4.3 → 4.4.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|