couchbase 4.4.2 → 4.4.3
Sign up to get free protection for your applications and to get access to all the features.
- package/CMakeLists.txt +2 -0
- package/deps/couchbase-cxx-client/CMakeLists.txt +17 -14
- package/deps/couchbase-cxx-client/README.md +2 -2
- package/deps/couchbase-cxx-client/cmake/Packaging.cmake +4 -0
- package/deps/couchbase-cxx-client/cmake/Testing.cmake +1 -1
- package/deps/couchbase-cxx-client/cmake/VersionInfo.cmake +24 -2
- package/deps/couchbase-cxx-client/cmake/couchbase-cxx-client.spec.in +43 -4
- package/deps/couchbase-cxx-client/core/agent_group.cxx +8 -0
- package/deps/couchbase-cxx-client/core/agent_group.hxx +4 -0
- package/deps/couchbase-cxx-client/core/bucket.cxx +16 -20
- package/deps/couchbase-cxx-client/core/bucket.hxx +12 -12
- package/deps/couchbase-cxx-client/core/cluster.cxx +44 -52
- package/deps/couchbase-cxx-client/core/cluster_agent.cxx +8 -0
- package/deps/couchbase-cxx-client/core/cluster_agent.hxx +4 -0
- package/deps/couchbase-cxx-client/core/collections_component.cxx +2 -2
- package/deps/couchbase-cxx-client/core/columnar/agent.cxx +2 -2
- package/deps/couchbase-cxx-client/core/columnar/agent.hxx +1 -1
- package/deps/couchbase-cxx-client/core/columnar/management_component.cxx +3 -3
- package/deps/couchbase-cxx-client/core/columnar/query_component.cxx +103 -45
- package/deps/couchbase-cxx-client/core/columnar/query_component.hxx +1 -0
- package/deps/couchbase-cxx-client/core/free_form_http_request.hxx +8 -0
- package/deps/couchbase-cxx-client/core/http_component.cxx +55 -24
- package/deps/couchbase-cxx-client/core/http_component.hxx +4 -0
- package/deps/couchbase-cxx-client/core/impl/analytics_index_manager.cxx +15 -15
- package/deps/couchbase-cxx-client/core/impl/bootstrap_error.hxx +10 -2
- package/deps/couchbase-cxx-client/core/impl/bucket.cxx +1 -1
- package/deps/couchbase-cxx-client/core/impl/bucket_manager.cxx +6 -6
- package/deps/couchbase-cxx-client/core/impl/cluster.cxx +36 -40
- package/deps/couchbase-cxx-client/core/impl/collection.cxx +2 -2
- package/deps/couchbase-cxx-client/core/impl/collection_manager.cxx +5 -5
- package/deps/couchbase-cxx-client/core/impl/observe_poll.cxx +13 -5
- package/deps/couchbase-cxx-client/core/impl/observe_poll.hxx +1 -3
- package/deps/couchbase-cxx-client/core/impl/query_index_manager.cxx +6 -6
- package/deps/couchbase-cxx-client/core/impl/scan_result.cxx +1 -1
- package/deps/couchbase-cxx-client/core/impl/search_index_manager.cxx +12 -12
- package/deps/couchbase-cxx-client/core/io/http_command.hxx +31 -20
- package/deps/couchbase-cxx-client/core/io/http_session.cxx +5 -0
- package/deps/couchbase-cxx-client/core/io/http_session.hxx +17 -4
- package/deps/couchbase-cxx-client/core/io/http_session_manager.hxx +97 -49
- package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +15 -14
- package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +48 -33
- package/deps/couchbase-cxx-client/core/io/streams.cxx +256 -0
- package/deps/couchbase-cxx-client/core/io/streams.hxx +31 -155
- package/deps/couchbase-cxx-client/core/logger/configuration.hxx +5 -0
- package/deps/couchbase-cxx-client/core/logger/custom_rotating_file_sink.cxx +2 -3
- package/deps/couchbase-cxx-client/core/logger/logger.cxx +39 -7
- package/deps/couchbase-cxx-client/core/logger/logger.hxx +7 -0
- package/deps/couchbase-cxx-client/core/metrics/meter_wrapper.cxx +188 -0
- package/deps/couchbase-cxx-client/core/metrics/meter_wrapper.hxx +73 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_describe.cxx +2 -1
- package/deps/couchbase-cxx-client/core/operations/management/bucket_drop.cxx +3 -1
- package/deps/couchbase-cxx-client/core/operations/management/bucket_flush.cxx +3 -1
- package/deps/couchbase-cxx-client/core/operations/management/bucket_get.cxx +3 -1
- package/deps/couchbase-cxx-client/core/operations/management/bucket_update.cxx +3 -1
- package/deps/couchbase-cxx-client/core/operations/management/collection_create.cxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/collection_drop.cxx +5 -2
- package/deps/couchbase-cxx-client/core/operations/management/collection_update.cxx +4 -2
- package/deps/couchbase-cxx-client/core/operations/management/group_upsert.cxx +3 -3
- package/deps/couchbase-cxx-client/core/operations/management/scope_create.cxx +2 -1
- package/deps/couchbase-cxx-client/core/operations/management/scope_drop.cxx +4 -1
- package/deps/couchbase-cxx-client/core/operations/management/scope_get_all.cxx +3 -1
- package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.cxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.cxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.cxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.cxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.cxx +5 -2
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get.cxx +5 -2
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.cxx +4 -2
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.cxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.cxx +5 -2
- package/deps/couchbase-cxx-client/core/operations/management/view_index_drop.cxx +2 -1
- package/deps/couchbase-cxx-client/core/operations/management/view_index_get.cxx +2 -1
- package/deps/couchbase-cxx-client/core/operations/management/view_index_get_all.cxx +3 -1
- package/deps/couchbase-cxx-client/core/operations/management/view_index_upsert.cxx +2 -1
- package/deps/couchbase-cxx-client/core/origin.cxx +37 -17
- package/deps/couchbase-cxx-client/core/platform/base64.cc +1 -1
- package/deps/couchbase-cxx-client/core/platform/random.cc +2 -0
- package/deps/couchbase-cxx-client/core/platform/uuid.h +6 -6
- package/deps/couchbase-cxx-client/core/row_streamer.cxx +1 -1
- package/deps/couchbase-cxx-client/core/sasl/scram-sha/stringutils.cc +1 -1
- package/deps/couchbase-cxx-client/core/sasl/scram-sha/stringutils.h +4 -4
- package/deps/couchbase-cxx-client/core/topology/configuration.hxx +2 -0
- package/deps/couchbase-cxx-client/core/topology/configuration_json.hxx +8 -0
- package/deps/couchbase-cxx-client/core/tracing/constants.hxx +3 -0
- package/deps/couchbase-cxx-client/core/tracing/tracer_wrapper.cxx +87 -0
- package/deps/couchbase-cxx-client/core/tracing/tracer_wrapper.hxx +57 -0
- package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.cxx +16 -15
- package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.hxx +2 -2
- package/deps/couchbase-cxx-client/core/transactions/staged_mutation.cxx +2 -2
- package/deps/couchbase-cxx-client/core/transactions/transactions.cxx +2 -2
- package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +128 -52
- package/deps/couchbase-cxx-client/couchbase/analytics_options.hxx +4 -3
- package/deps/couchbase-cxx-client/couchbase/codec/tao_json_serializer.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/mutate_in_specs.hxx +2 -2
- package/deps/couchbase-cxx-client/couchbase/query_options.hxx +4 -3
- package/deps/couchbase-cxx-client/couchbase/search_options.hxx +1 -1
- package/package.json +8 -8
- package/src/binding.cpp +13 -13
@@ -269,7 +269,7 @@ public:
|
|
269
269
|
{},
|
270
270
|
options.timeout,
|
271
271
|
},
|
272
|
-
[handler = std::move(handler)](auto resp) mutable {
|
272
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
273
273
|
return handler(core::impl::make_error(resp.ctx), map_bucket_settings(resp.bucket));
|
274
274
|
});
|
275
275
|
}
|
@@ -282,7 +282,7 @@ public:
|
|
282
282
|
{},
|
283
283
|
options.timeout,
|
284
284
|
},
|
285
|
-
[handler = std::move(handler)](auto resp) mutable {
|
285
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
286
286
|
return handler(core::impl::make_error(resp.ctx), map_all_bucket_settings(resp.buckets));
|
287
287
|
});
|
288
288
|
}
|
@@ -297,7 +297,7 @@ public:
|
|
297
297
|
{},
|
298
298
|
options.timeout,
|
299
299
|
},
|
300
|
-
[handler = std::move(handler)](auto resp) mutable {
|
300
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
301
301
|
return handler(core::impl::make_error(resp.ctx));
|
302
302
|
});
|
303
303
|
}
|
@@ -312,7 +312,7 @@ public:
|
|
312
312
|
{},
|
313
313
|
options.timeout,
|
314
314
|
},
|
315
|
-
[handler = std::move(handler)](auto resp) mutable {
|
315
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
316
316
|
return handler(core::impl::make_error(resp.ctx));
|
317
317
|
});
|
318
318
|
}
|
@@ -327,7 +327,7 @@ public:
|
|
327
327
|
{},
|
328
328
|
options.timeout,
|
329
329
|
},
|
330
|
-
[handler = std::move(handler)](auto resp) mutable {
|
330
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
331
331
|
return handler(core::impl::make_error(resp.ctx));
|
332
332
|
});
|
333
333
|
}
|
@@ -342,7 +342,7 @@ public:
|
|
342
342
|
{},
|
343
343
|
options.timeout,
|
344
344
|
},
|
345
|
-
[handler = std::move(handler)](auto resp) mutable {
|
345
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
346
346
|
return handler(core::impl::make_error(resp.ctx));
|
347
347
|
});
|
348
348
|
}
|
@@ -230,21 +230,8 @@ public:
|
|
230
230
|
// We cannot use close() method here, as it is capturing self as a shared
|
231
231
|
// pointer to extend lifetime for the user's callback. Here the reference
|
232
232
|
// counter has reached zero already, so we can only capture `*this`.
|
233
|
-
std::thread([this,
|
234
|
-
|
235
|
-
// blocks until cleanup is finished
|
236
|
-
txns->close();
|
237
|
-
}
|
238
|
-
std::promise<void> core_stopped;
|
239
|
-
auto f = core_stopped.get_future();
|
240
|
-
core_.close([&core_stopped]() {
|
241
|
-
core_stopped.set_value();
|
242
|
-
});
|
243
|
-
f.get();
|
244
|
-
io_.stop();
|
245
|
-
if (io_thread_.joinable()) {
|
246
|
-
io_thread_.join();
|
247
|
-
}
|
233
|
+
std::thread([this, barrier = std::move(barrier)]() mutable {
|
234
|
+
do_close();
|
248
235
|
barrier.set_value();
|
249
236
|
}).detach();
|
250
237
|
|
@@ -291,7 +278,7 @@ public:
|
|
291
278
|
}));
|
292
279
|
return;
|
293
280
|
}
|
294
|
-
impl->transactions_ = txns;
|
281
|
+
impl->transactions_ = std::move(txns);
|
295
282
|
handler(ec, couchbase::cluster(std::move(impl)));
|
296
283
|
});
|
297
284
|
});
|
@@ -323,16 +310,17 @@ public:
|
|
323
310
|
{},
|
324
311
|
core::impl::to_core_service_types(options.service_types),
|
325
312
|
options.timeout,
|
326
|
-
[handler = std::move(handler)](auto resp) mutable {
|
313
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
327
314
|
return handler({}, core::impl::build_result(resp));
|
328
315
|
});
|
329
316
|
};
|
330
317
|
|
331
318
|
void diagnostics(const diagnostics_options::built& options, diagnostics_handler&& handler) const
|
332
319
|
{
|
333
|
-
return core_.diagnostics(options.report_id,
|
334
|
-
|
335
|
-
|
320
|
+
return core_.diagnostics(options.report_id,
|
321
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
322
|
+
return handler({}, core::impl::build_result(resp));
|
323
|
+
});
|
336
324
|
}
|
337
325
|
|
338
326
|
void search(std::string index_name,
|
@@ -342,7 +330,7 @@ public:
|
|
342
330
|
{
|
343
331
|
return core_.execute(
|
344
332
|
core::impl::build_search_request(std::move(index_name), std::move(request), options, {}, {}),
|
345
|
-
[handler = std::move(handler)](auto resp) mutable {
|
333
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
346
334
|
return handler(core::impl::make_error(resp.ctx),
|
347
335
|
search_result{ internal_search_result{ resp } });
|
348
336
|
});
|
@@ -371,20 +359,7 @@ public:
|
|
371
359
|
{
|
372
360
|
// Spawn new thread to avoid joining IO thread from the same thread
|
373
361
|
std::thread([self = shared_from_this(), handler = std::move(handler)]() mutable {
|
374
|
-
|
375
|
-
// blocks until cleanup is finished
|
376
|
-
txns->close();
|
377
|
-
}
|
378
|
-
std::promise<void> barrier;
|
379
|
-
auto future = barrier.get_future();
|
380
|
-
self->core_.close([&barrier]() {
|
381
|
-
barrier.set_value();
|
382
|
-
});
|
383
|
-
future.get();
|
384
|
-
self->io_.stop();
|
385
|
-
if (self->io_thread_.joinable()) {
|
386
|
-
self->io_thread_.join();
|
387
|
-
}
|
362
|
+
self->do_close();
|
388
363
|
handler();
|
389
364
|
}).detach();
|
390
365
|
}
|
@@ -400,7 +375,25 @@ public:
|
|
400
375
|
}
|
401
376
|
|
402
377
|
private:
|
403
|
-
|
378
|
+
void do_close()
|
379
|
+
{
|
380
|
+
if (auto txns = std::move(transactions_); txns != nullptr) {
|
381
|
+
// blocks until cleanup is finished
|
382
|
+
txns->close();
|
383
|
+
}
|
384
|
+
std::promise<void> core_stopped;
|
385
|
+
auto f = core_stopped.get_future();
|
386
|
+
core_.close([core_stopped = std::move(core_stopped)]() mutable {
|
387
|
+
core_stopped.set_value();
|
388
|
+
});
|
389
|
+
f.get();
|
390
|
+
io_.stop();
|
391
|
+
if (io_thread_.joinable()) {
|
392
|
+
io_thread_.join();
|
393
|
+
}
|
394
|
+
}
|
395
|
+
|
396
|
+
asio::io_context io_{ ASIO_CONCURRENCY_HINT_SAFE };
|
404
397
|
core::cluster core_{ io_ };
|
405
398
|
std::shared_ptr<core::transactions::transactions> transactions_{ nullptr };
|
406
399
|
std::thread io_thread_{ [&io = io_] {
|
@@ -539,12 +532,15 @@ cluster::connect(const std::string& connection_string,
|
|
539
532
|
// Spawn new thread for connection to ensure that cluster_impl pointer will
|
540
533
|
// not be deallocated in IO thread in case of error.
|
541
534
|
std::thread([connection_string, options, handler = std::move(handler)]() {
|
542
|
-
auto impl = std::make_shared<cluster_impl>();
|
543
535
|
auto barrier = std::make_shared<std::promise<std::pair<error, cluster>>>();
|
544
536
|
auto future = barrier->get_future();
|
545
|
-
|
546
|
-
|
547
|
-
|
537
|
+
{
|
538
|
+
auto impl = std::make_shared<cluster_impl>();
|
539
|
+
impl->open(connection_string, options, [barrier](auto err, auto c) {
|
540
|
+
barrier->set_value({ std::move(err), std::move(c) });
|
541
|
+
});
|
542
|
+
}
|
543
|
+
|
548
544
|
auto [err, c] = future.get();
|
549
545
|
handler(std::move(err), std::move(c));
|
550
546
|
}).detach();
|
@@ -211,7 +211,7 @@ public:
|
|
211
211
|
options.timeout,
|
212
212
|
{ options.retry_strategy },
|
213
213
|
},
|
214
|
-
[handler = std::move(handler)](auto resp) mutable {
|
214
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
215
215
|
return handler(core::impl::make_error(std::move(resp.ctx)), result{ resp.cas });
|
216
216
|
});
|
217
217
|
}
|
@@ -1390,7 +1390,7 @@ collection::scan(const couchbase::scan_type& scan_type, const couchbase::scan_op
|
|
1390
1390
|
{
|
1391
1391
|
auto barrier = std::make_shared<std::promise<std::pair<error, scan_result>>>();
|
1392
1392
|
auto future = barrier->get_future();
|
1393
|
-
scan(scan_type, options, [barrier](auto err, auto result) {
|
1393
|
+
scan(scan_type, options, [barrier](const auto& err, auto result) {
|
1394
1394
|
barrier->set_value({ err, std::move(result) });
|
1395
1395
|
});
|
1396
1396
|
return future;
|
@@ -101,7 +101,7 @@ public:
|
|
101
101
|
{},
|
102
102
|
options.timeout,
|
103
103
|
},
|
104
|
-
[handler = std::move(handler)](auto resp) mutable {
|
104
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
105
105
|
return handler(core::impl::make_error(resp.ctx));
|
106
106
|
});
|
107
107
|
}
|
@@ -122,7 +122,7 @@ public:
|
|
122
122
|
{},
|
123
123
|
options.timeout,
|
124
124
|
},
|
125
|
-
[handler = std::move(handler)](auto resp) mutable {
|
125
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
126
126
|
return handler(core::impl::make_error(resp.ctx));
|
127
127
|
});
|
128
128
|
}
|
@@ -143,7 +143,7 @@ public:
|
|
143
143
|
{},
|
144
144
|
options.timeout,
|
145
145
|
},
|
146
|
-
[handler = std::move(handler)](auto resp) mutable {
|
146
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
147
147
|
return handler(core::impl::make_error(resp.ctx));
|
148
148
|
});
|
149
149
|
}
|
@@ -173,7 +173,7 @@ public:
|
|
173
173
|
{},
|
174
174
|
options.timeout,
|
175
175
|
},
|
176
|
-
[handler = std::move(handler)](auto resp) mutable {
|
176
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
177
177
|
return handler(core::impl::make_error(resp.ctx));
|
178
178
|
});
|
179
179
|
}
|
@@ -189,7 +189,7 @@ public:
|
|
189
189
|
{},
|
190
190
|
options.timeout,
|
191
191
|
},
|
192
|
-
[handler = std::move(handler)](auto resp) mutable {
|
192
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
193
193
|
return handler(core::impl::make_error(resp.ctx));
|
194
194
|
});
|
195
195
|
}
|
@@ -26,6 +26,7 @@
|
|
26
26
|
|
27
27
|
#include <memory>
|
28
28
|
#include <mutex>
|
29
|
+
#include <system_error>
|
29
30
|
|
30
31
|
namespace couchbase::core::impl
|
31
32
|
{
|
@@ -240,8 +241,7 @@ public:
|
|
240
241
|
void handle_response(observe_seqno_response&& response)
|
241
242
|
{
|
242
243
|
--expect_number_of_responses_;
|
243
|
-
|
244
|
-
status_.examine(r);
|
244
|
+
status_.examine(response);
|
245
245
|
maybe_finish();
|
246
246
|
}
|
247
247
|
|
@@ -249,6 +249,8 @@ public:
|
|
249
249
|
{
|
250
250
|
poll_backoff_.cancel();
|
251
251
|
poll_deadline_.cancel();
|
252
|
+
on_last_response(0, [](std::error_code) {
|
253
|
+
});
|
252
254
|
observe_handler handler{};
|
253
255
|
{
|
254
256
|
const std::scoped_lock lock(handler_mutex_);
|
@@ -268,10 +270,16 @@ public:
|
|
268
270
|
return;
|
269
271
|
}
|
270
272
|
if (status_.meets_condition(persist_to_, replicate_to_)) {
|
273
|
+
poll_backoff_.cancel();
|
274
|
+
poll_deadline_.cancel();
|
275
|
+
on_last_response(0, [](std::error_code) {
|
276
|
+
});
|
271
277
|
std::swap(handler_, handler);
|
272
|
-
} else if (expect_number_of_responses_ == 0
|
273
|
-
|
274
|
-
|
278
|
+
} else if (expect_number_of_responses_ == 0) {
|
279
|
+
if (auto on_last_response = std::move(on_last_response_); on_last_response) {
|
280
|
+
poll_backoff_.expires_after(poll_backoff_interval_);
|
281
|
+
return poll_backoff_.async_wait(std::move(on_last_response));
|
282
|
+
}
|
275
283
|
}
|
276
284
|
}
|
277
285
|
if (handler) {
|
@@ -17,7 +17,6 @@
|
|
17
17
|
|
18
18
|
#pragma once
|
19
19
|
|
20
|
-
#include "core/error_context/key_value_error_context.hxx"
|
21
20
|
#include <couchbase/mutation_token.hxx>
|
22
21
|
#include <couchbase/persist_to.hxx>
|
23
22
|
#include <couchbase/replicate_to.hxx>
|
@@ -26,8 +25,7 @@
|
|
26
25
|
#include "core/utils/movable_function.hxx"
|
27
26
|
|
28
27
|
#include <chrono>
|
29
|
-
#include <
|
30
|
-
#include <memory>
|
28
|
+
#include <system_error>
|
31
29
|
|
32
30
|
namespace couchbase::core
|
33
31
|
{
|
@@ -232,7 +232,7 @@ public:
|
|
232
232
|
{},
|
233
233
|
options.timeout,
|
234
234
|
},
|
235
|
-
[handler = std::move(handler)](auto resp) {
|
235
|
+
[handler = std::move(handler)](const auto& resp) {
|
236
236
|
handler(core::impl::make_error(resp.ctx));
|
237
237
|
});
|
238
238
|
}
|
@@ -259,7 +259,7 @@ public:
|
|
259
259
|
{},
|
260
260
|
options.timeout,
|
261
261
|
},
|
262
|
-
[handler = std::move(handler)](auto resp) {
|
262
|
+
[handler = std::move(handler)](const auto& resp) {
|
263
263
|
handler(core::impl::make_error(resp.ctx));
|
264
264
|
});
|
265
265
|
}
|
@@ -283,7 +283,7 @@ public:
|
|
283
283
|
{},
|
284
284
|
options.timeout,
|
285
285
|
},
|
286
|
-
[handler = std::move(handler)](auto resp) {
|
286
|
+
[handler = std::move(handler)](const auto& resp) {
|
287
287
|
handler(core::impl::make_error(resp.ctx));
|
288
288
|
});
|
289
289
|
}
|
@@ -342,7 +342,7 @@ public:
|
|
342
342
|
std::move(list_resp.index_names),
|
343
343
|
{},
|
344
344
|
timeout },
|
345
|
-
[handler = std::move(handler)](auto build_resp) {
|
345
|
+
[handler = std::move(handler)](const auto& build_resp) {
|
346
346
|
return handler(core::impl::make_error(build_resp.ctx));
|
347
347
|
});
|
348
348
|
});
|
@@ -390,7 +390,7 @@ query_index_manager::get_all_indexes(const std::string& bucket_name,
|
|
390
390
|
auto barrier =
|
391
391
|
std::make_shared<std::promise<std::pair<error, std::vector<management::query_index>>>>();
|
392
392
|
auto future = barrier->get_future();
|
393
|
-
get_all_indexes(bucket_name, options, [barrier](auto err, auto resp) mutable {
|
393
|
+
get_all_indexes(bucket_name, options, [barrier](auto err, const auto& resp) mutable {
|
394
394
|
barrier->set_value({ std::move(err), resp });
|
395
395
|
});
|
396
396
|
return future;
|
@@ -563,7 +563,7 @@ collection_query_index_manager::get_all_indexes(const get_all_query_indexes_opti
|
|
563
563
|
auto barrier =
|
564
564
|
std::make_shared<std::promise<std::pair<error, std::vector<management::query_index>>>>();
|
565
565
|
auto future = barrier->get_future();
|
566
|
-
get_all_indexes(options, [barrier](auto err, auto resp) mutable {
|
566
|
+
get_all_indexes(options, [barrier](auto err, const auto& resp) mutable {
|
567
567
|
barrier->set_value({ std::move(err), resp });
|
568
568
|
});
|
569
569
|
return future;
|
@@ -97,7 +97,7 @@ scan_result::next() const -> std::future<std::pair<error, std::optional<scan_res
|
|
97
97
|
{
|
98
98
|
auto barrier =
|
99
99
|
std::make_shared<std::promise<std::pair<error, std::optional<scan_result_item>>>>();
|
100
|
-
internal_->next([barrier](auto err, auto item) mutable {
|
100
|
+
internal_->next([barrier](const auto& err, const auto& item) mutable {
|
101
101
|
barrier->set_value({ err, item });
|
102
102
|
});
|
103
103
|
return barrier->get_future();
|
@@ -150,7 +150,7 @@ public:
|
|
150
150
|
core_.execute(
|
151
151
|
core::operations::management::search_index_get_request{
|
152
152
|
std::move(index_name), bucket_name_, scope_name_, {}, options.timeout },
|
153
|
-
[handler = std::move(handler)](auto resp) mutable {
|
153
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
154
154
|
return handler(core::impl::make_error(resp.ctx), map_search_index(resp.index));
|
155
155
|
});
|
156
156
|
}
|
@@ -161,7 +161,7 @@ public:
|
|
161
161
|
core_.execute(
|
162
162
|
core::operations::management::search_index_get_all_request{
|
163
163
|
bucket_name_, scope_name_, {}, options.timeout },
|
164
|
-
[handler = std::move(handler)](auto resp) mutable {
|
164
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
165
165
|
return handler(core::impl::make_error(resp.ctx), map_all_search_indexes(resp.indexes));
|
166
166
|
});
|
167
167
|
}
|
@@ -173,7 +173,7 @@ public:
|
|
173
173
|
core_.execute(
|
174
174
|
core::operations::management::search_index_upsert_request{
|
175
175
|
map_search_index(search_index), bucket_name_, scope_name_, {}, options.timeout },
|
176
|
-
[handler = std::move(handler)](auto resp) mutable {
|
176
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
177
177
|
return handler(core::impl::make_error(resp.ctx));
|
178
178
|
});
|
179
179
|
}
|
@@ -185,7 +185,7 @@ public:
|
|
185
185
|
core_.execute(
|
186
186
|
core::operations::management::search_index_drop_request{
|
187
187
|
std::move(index_name), bucket_name_, scope_name_, {}, options.timeout },
|
188
|
-
[handler = std::move(handler)](auto resp) mutable {
|
188
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
189
189
|
return handler(core::impl::make_error(resp.ctx));
|
190
190
|
});
|
191
191
|
}
|
@@ -197,7 +197,7 @@ public:
|
|
197
197
|
core_.execute(
|
198
198
|
core::operations::management::search_index_get_documents_count_request{
|
199
199
|
std::move(index_name), bucket_name_, scope_name_, {}, options.timeout },
|
200
|
-
[handler = std::move(handler)](auto resp) mutable {
|
200
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
201
201
|
return handler(core::impl::make_error(resp.ctx), resp.count);
|
202
202
|
});
|
203
203
|
}
|
@@ -209,7 +209,7 @@ public:
|
|
209
209
|
core_.execute(
|
210
210
|
core::operations::management::search_index_control_ingest_request{
|
211
211
|
std::move(index_name), true, bucket_name_, scope_name_, {}, options.timeout },
|
212
|
-
[handler = std::move(handler)](auto resp) mutable {
|
212
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
213
213
|
return handler(core::impl::make_error(resp.ctx));
|
214
214
|
});
|
215
215
|
}
|
@@ -221,7 +221,7 @@ public:
|
|
221
221
|
core_.execute(
|
222
222
|
core::operations::management::search_index_control_ingest_request{
|
223
223
|
std::move(index_name), false, bucket_name_, scope_name_, {}, options.timeout },
|
224
|
-
[handler = std::move(handler)](auto resp) mutable {
|
224
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
225
225
|
return handler(core::impl::make_error(resp.ctx));
|
226
226
|
});
|
227
227
|
}
|
@@ -233,7 +233,7 @@ public:
|
|
233
233
|
core_.execute(
|
234
234
|
core::operations::management::search_index_control_query_request{
|
235
235
|
std::move(index_name), true, bucket_name_, scope_name_, {}, options.timeout },
|
236
|
-
[handler = std::move(handler)](auto resp) mutable {
|
236
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
237
237
|
return handler(core::impl::make_error(resp.ctx));
|
238
238
|
});
|
239
239
|
}
|
@@ -245,7 +245,7 @@ public:
|
|
245
245
|
core_.execute(
|
246
246
|
core::operations::management::search_index_control_query_request{
|
247
247
|
std::move(index_name), false, bucket_name_, scope_name_, {}, options.timeout },
|
248
|
-
[handler = std::move(handler)](auto resp) mutable {
|
248
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
249
249
|
return handler(core::impl::make_error(resp.ctx));
|
250
250
|
});
|
251
251
|
}
|
@@ -257,7 +257,7 @@ public:
|
|
257
257
|
core_.execute(
|
258
258
|
core::operations::management::search_index_control_plan_freeze_request{
|
259
259
|
std::move(index_name), true, bucket_name_, scope_name_, {}, options.timeout },
|
260
|
-
[handler = std::move(handler)](auto resp) mutable {
|
260
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
261
261
|
return handler(core::impl::make_error(resp.ctx));
|
262
262
|
});
|
263
263
|
}
|
@@ -269,7 +269,7 @@ public:
|
|
269
269
|
core_.execute(
|
270
270
|
core::operations::management::search_index_control_plan_freeze_request{
|
271
271
|
std::move(index_name), false, bucket_name_, scope_name_, {}, options.timeout },
|
272
|
-
[handler = std::move(handler)](auto resp) mutable {
|
272
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
273
273
|
return handler(core::impl::make_error(resp.ctx));
|
274
274
|
});
|
275
275
|
}
|
@@ -286,7 +286,7 @@ public:
|
|
286
286
|
scope_name_,
|
287
287
|
{},
|
288
288
|
options.timeout },
|
289
|
-
[handler = std::move(handler)](auto resp) mutable {
|
289
|
+
[handler = std::move(handler)](const auto& resp) mutable {
|
290
290
|
return handler(core::impl::make_error(resp.ctx), convert_analysis(resp.analysis));
|
291
291
|
});
|
292
292
|
}
|
@@ -19,13 +19,15 @@
|
|
19
19
|
|
20
20
|
#include <couchbase/build_config.hxx>
|
21
21
|
|
22
|
+
#include "core/impl/bootstrap_error.hxx"
|
23
|
+
#include "core/metrics/meter_wrapper.hxx"
|
22
24
|
#include "core/service_type_fmt.hxx"
|
23
25
|
#include "core/tracing/constants.hxx"
|
26
|
+
#include "core/tracing/tracer_wrapper.hxx"
|
24
27
|
#include "core/utils/movable_function.hxx"
|
25
28
|
#include "http_session.hxx"
|
26
29
|
#include "http_traits.hxx"
|
27
30
|
|
28
|
-
#include <couchbase/metrics/meter.hxx>
|
29
31
|
#include <couchbase/tracing/request_tracer.hxx>
|
30
32
|
|
31
33
|
#include <utility>
|
@@ -33,7 +35,11 @@
|
|
33
35
|
namespace couchbase::core::operations
|
34
36
|
{
|
35
37
|
|
38
|
+
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
39
|
+
using http_command_handler = utils::movable_function<void(error_union, io::http_response&&)>;
|
40
|
+
#else
|
36
41
|
using http_command_handler = utils::movable_function<void(std::error_code, io::http_response&&)>;
|
42
|
+
#endif
|
37
43
|
|
38
44
|
template<typename Request>
|
39
45
|
struct http_command : public std::enable_shared_from_this<http_command<Request>> {
|
@@ -43,9 +49,9 @@ struct http_command : public std::enable_shared_from_this<http_command<Request>>
|
|
43
49
|
asio::steady_timer deadline;
|
44
50
|
Request request;
|
45
51
|
encoded_request_type encoded;
|
46
|
-
std::shared_ptr<
|
52
|
+
std::shared_ptr<tracing::tracer_wrapper> tracer_;
|
47
53
|
std::shared_ptr<couchbase::tracing::request_span> span_{ nullptr };
|
48
|
-
std::shared_ptr<
|
54
|
+
std::shared_ptr<metrics::meter_wrapper> meter_{};
|
49
55
|
std::shared_ptr<io::http_session> session_{};
|
50
56
|
http_command_handler handler_{};
|
51
57
|
std::chrono::milliseconds timeout_{};
|
@@ -57,8 +63,8 @@ struct http_command : public std::enable_shared_from_this<http_command<Request>>
|
|
57
63
|
|
58
64
|
http_command(asio::io_context& ctx,
|
59
65
|
Request req,
|
60
|
-
std::shared_ptr<
|
61
|
-
std::shared_ptr<
|
66
|
+
std::shared_ptr<tracing::tracer_wrapper> tracer,
|
67
|
+
std::shared_ptr<metrics::meter_wrapper> meter,
|
62
68
|
std::chrono::milliseconds default_timeout,
|
63
69
|
std::chrono::milliseconds dispatch_timeout)
|
64
70
|
: deadline(ctx)
|
@@ -77,8 +83,8 @@ struct http_command : public std::enable_shared_from_this<http_command<Request>>
|
|
77
83
|
#else
|
78
84
|
http_command(asio::io_context& ctx,
|
79
85
|
Request req,
|
80
|
-
std::shared_ptr<
|
81
|
-
std::shared_ptr<
|
86
|
+
std::shared_ptr<tracing::tracer_wrapper> tracer,
|
87
|
+
std::shared_ptr<metrics::meter_wrapper> meter,
|
82
88
|
std::chrono::milliseconds default_timeout)
|
83
89
|
: deadline(ctx)
|
84
90
|
, request(req)
|
@@ -108,12 +114,13 @@ struct http_command : public std::enable_shared_from_this<http_command<Request>>
|
|
108
114
|
|
109
115
|
void start(http_command_handler&& handler)
|
110
116
|
{
|
111
|
-
span_ = tracer_->
|
112
|
-
if (span_->uses_tags())
|
117
|
+
span_ = tracer_->create_span(tracing::span_name_for_http_service(request.type), parent_span);
|
118
|
+
if (span_->uses_tags()) {
|
113
119
|
span_->add_tag(tracing::attributes::service,
|
114
120
|
tracing::service_name_for_http_service(request.type));
|
115
|
-
if (span_->uses_tags())
|
116
121
|
span_->add_tag(tracing::attributes::operation_id, client_context_id_);
|
122
|
+
}
|
123
|
+
|
117
124
|
handler_ = std::move(handler);
|
118
125
|
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
119
126
|
dispatch_deadline_.expires_after(dispatch_timeout_);
|
@@ -158,17 +165,24 @@ struct http_command : public std::enable_shared_from_this<http_command<Request>>
|
|
158
165
|
}
|
159
166
|
}
|
160
167
|
|
168
|
+
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
169
|
+
void invoke_handler(error_union error, io::http_response&& msg)
|
170
|
+
#else
|
161
171
|
void invoke_handler(std::error_code ec, io::http_response&& msg)
|
172
|
+
#endif
|
162
173
|
{
|
163
174
|
if (span_ != nullptr) {
|
164
175
|
span_->end();
|
165
176
|
span_ = nullptr;
|
166
177
|
}
|
167
178
|
if (auto handler = std::move(handler_); handler) {
|
168
|
-
handler(ec, std::move(msg));
|
169
|
-
}
|
170
179
|
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
180
|
+
handler(error, std::move(msg));
|
181
|
+
}
|
171
182
|
dispatch_deadline_.cancel();
|
183
|
+
#else
|
184
|
+
handler(ec, std::move(msg));
|
185
|
+
}
|
172
186
|
#endif
|
173
187
|
deadline.cancel();
|
174
188
|
}
|
@@ -231,15 +245,12 @@ private:
|
|
231
245
|
return self->invoke_handler(errc::common::ambiguous_timeout, std::move(msg));
|
232
246
|
}
|
233
247
|
if (self->meter_) {
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
248
|
+
metrics::metric_attributes attrs{
|
249
|
+
service_type::key_value,
|
250
|
+
fmt::format("{}", self->encoded.path),
|
251
|
+
ec,
|
238
252
|
};
|
239
|
-
self->meter_->
|
240
|
-
->record_value(std::chrono::duration_cast<std::chrono::microseconds>(
|
241
|
-
std::chrono::steady_clock::now() - start)
|
242
|
-
.count());
|
253
|
+
self->meter_->record_value(std::move(attrs), start);
|
243
254
|
}
|
244
255
|
self->deadline.cancel();
|
245
256
|
self->finish_dispatch(self->session_->remote_address(), self->session_->local_address());
|
@@ -395,7 +395,12 @@ http_session::flush()
|
|
395
395
|
void
|
396
396
|
http_session::write_and_stream(
|
397
397
|
io::http_request& request,
|
398
|
+
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
399
|
+
utils::movable_function<void(couchbase::core::error_union, io::http_streaming_response)>
|
400
|
+
resp_handler,
|
401
|
+
#else
|
398
402
|
utils::movable_function<void(std::error_code, io::http_streaming_response)> resp_handler,
|
403
|
+
#endif
|
399
404
|
utils::movable_function<void()> stream_end_handler)
|
400
405
|
{
|
401
406
|
if (stopped_) {
|
@@ -17,7 +17,10 @@
|
|
17
17
|
|
18
18
|
#pragma once
|
19
19
|
|
20
|
+
#include <couchbase/build_config.hxx>
|
21
|
+
|
20
22
|
#include "core/diagnostics.hxx"
|
23
|
+
#include "core/impl/bootstrap_error.hxx"
|
21
24
|
#include "core/origin.hxx"
|
22
25
|
#include "core/platform/base64.h"
|
23
26
|
#include "core/utils/movable_function.hxx"
|
@@ -140,10 +143,15 @@ public:
|
|
140
143
|
flush();
|
141
144
|
}
|
142
145
|
|
143
|
-
void write_and_stream(
|
144
|
-
|
145
|
-
|
146
|
-
|
146
|
+
void write_and_stream(io::http_request& request,
|
147
|
+
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
148
|
+
utils::movable_function<void(couchbase::core::error_union,
|
149
|
+
io::http_streaming_response)> resp_handler,
|
150
|
+
#else
|
151
|
+
utils::movable_function<void(std::error_code, io::http_streaming_response)>
|
152
|
+
resp_handler,
|
153
|
+
#endif
|
154
|
+
utils::movable_function<void()> stream_end_handler);
|
147
155
|
|
148
156
|
void set_idle(std::chrono::milliseconds timeout);
|
149
157
|
auto reset_idle() -> bool;
|
@@ -155,7 +163,12 @@ public:
|
|
155
163
|
|
156
164
|
private:
|
157
165
|
struct streaming_response_context {
|
166
|
+
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
167
|
+
utils::movable_function<void(couchbase::core::error_union, io::http_streaming_response)>
|
168
|
+
resp_handler{};
|
169
|
+
#else
|
158
170
|
utils::movable_function<void(std::error_code, io::http_streaming_response)> resp_handler{};
|
171
|
+
#endif
|
159
172
|
utils::movable_function<void()> stream_end_handler{};
|
160
173
|
std::optional<io::http_streaming_response> resp{};
|
161
174
|
http_streaming_parser parser{};
|