couchbase 3.7.0 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/ext/CMakeLists.txt +4 -1
- data/ext/cache/extconf_include.rb +4 -3
- data/ext/cache/mozilla-ca-bundle.crt +66 -93
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +24 -11
- data/ext/couchbase/cmake/APKBUILD.in +17 -1
- data/ext/couchbase/cmake/Bundler.cmake +9 -1
- data/ext/couchbase/cmake/Cache.cmake +48 -19
- data/ext/couchbase/cmake/CompilerOptions.cmake +3 -1
- data/ext/couchbase/cmake/OpenSSL.cmake +10 -2
- data/ext/couchbase/cmake/Packaging.cmake +48 -8
- data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +43 -1
- data/ext/couchbase/cmake/build_config.hxx.in +2 -0
- data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +18 -0
- data/ext/couchbase/cmake/tarball_glob.txt +10 -0
- data/ext/couchbase/core/app_telemetry_meter.cxx +1 -0
- data/ext/couchbase/core/app_telemetry_reporter.cxx +45 -43
- data/ext/couchbase/core/app_telemetry_reporter.hxx +4 -3
- data/ext/couchbase/core/bucket.cxx +128 -13
- data/ext/couchbase/core/bucket.hxx +12 -2
- data/ext/couchbase/core/cluster.cxx +304 -152
- data/ext/couchbase/core/cluster.hxx +32 -0
- data/ext/couchbase/core/cluster_credentials.cxx +25 -0
- data/ext/couchbase/core/cluster_credentials.hxx +5 -0
- data/ext/couchbase/core/cluster_label_listener.cxx +72 -0
- data/ext/couchbase/core/cluster_label_listener.hxx +46 -0
- data/ext/couchbase/core/cluster_options.hxx +4 -0
- data/ext/couchbase/core/deprecation_utils.hxx +26 -0
- data/ext/couchbase/core/error.hxx +27 -0
- data/ext/couchbase/core/free_form_http_request.hxx +0 -2
- data/ext/couchbase/core/http_component.cxx +12 -48
- data/ext/couchbase/core/impl/analytics.cxx +3 -2
- data/ext/couchbase/core/impl/analytics.hxx +2 -1
- data/ext/couchbase/core/impl/analytics_index_manager.cxx +249 -137
- data/ext/couchbase/core/impl/binary_collection.cxx +134 -58
- data/ext/couchbase/core/impl/bucket_manager.cxx +87 -35
- data/ext/couchbase/core/impl/collection.cxx +560 -245
- data/ext/couchbase/core/impl/collection_manager.cxx +89 -49
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +4 -4
- data/ext/couchbase/core/impl/error.cxx +20 -13
- data/ext/couchbase/core/impl/error.hxx +15 -10
- data/ext/couchbase/core/impl/get_all_replicas.hxx +1 -1
- data/ext/couchbase/core/impl/get_any_replica.hxx +2 -1
- data/ext/couchbase/core/impl/get_replica.hxx +2 -0
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +1 -1
- data/ext/couchbase/core/impl/observability_recorder.cxx +161 -0
- data/ext/couchbase/core/impl/observability_recorder.hxx +77 -0
- data/ext/couchbase/core/impl/observe_seqno.hxx +2 -0
- data/ext/couchbase/core/impl/public_bucket.cxx +31 -7
- data/ext/couchbase/core/impl/public_cluster.cxx +107 -19
- data/ext/couchbase/core/impl/query.cxx +6 -3
- data/ext/couchbase/core/impl/query.hxx +3 -1
- data/ext/couchbase/core/impl/query_index_manager.cxx +267 -102
- data/ext/couchbase/core/impl/scope.cxx +53 -11
- data/ext/couchbase/core/impl/search.cxx +8 -4
- data/ext/couchbase/core/impl/search.hxx +6 -2
- data/ext/couchbase/core/impl/search_index_manager.cxx +131 -41
- data/ext/couchbase/core/impl/with_cancellation.hxx +75 -0
- data/ext/couchbase/core/io/config_tracker.cxx +9 -9
- data/ext/couchbase/core/io/config_tracker.hxx +2 -1
- data/ext/couchbase/core/io/http_command.hxx +98 -49
- data/ext/couchbase/core/io/http_context.hxx +2 -0
- data/ext/couchbase/core/io/http_session.cxx +23 -10
- data/ext/couchbase/core/io/http_session.hxx +17 -9
- data/ext/couchbase/core/io/http_session_manager.hxx +163 -228
- data/ext/couchbase/core/io/http_traits.hxx +0 -7
- data/ext/couchbase/core/io/mcbp_command.hxx +123 -44
- data/ext/couchbase/core/io/mcbp_session.cxx +251 -26
- data/ext/couchbase/core/io/mcbp_session.hxx +9 -1
- data/ext/couchbase/core/io/mcbp_traits.hxx +0 -8
- data/ext/couchbase/core/io/streams.cxx +3 -3
- data/ext/couchbase/core/io/streams.hxx +3 -2
- data/ext/couchbase/core/meta/features.hxx +15 -0
- data/ext/couchbase/core/meta/version.cxx +13 -0
- data/ext/couchbase/core/meta/version.hxx +3 -0
- data/ext/couchbase/core/metrics/constants.hxx +23 -0
- data/ext/couchbase/core/metrics/logging_meter.cxx +5 -5
- data/ext/couchbase/core/metrics/meter_wrapper.cxx +65 -63
- data/ext/couchbase/core/metrics/meter_wrapper.hxx +12 -10
- data/ext/couchbase/core/operations/document_analytics.hxx +0 -5
- data/ext/couchbase/core/operations/document_append.hxx +0 -4
- data/ext/couchbase/core/operations/document_decrement.hxx +0 -5
- data/ext/couchbase/core/operations/document_exists.hxx +0 -7
- data/ext/couchbase/core/operations/document_get.hxx +0 -7
- data/ext/couchbase/core/operations/document_get_all_replicas.hxx +77 -27
- data/ext/couchbase/core/operations/document_get_and_lock.hxx +0 -9
- data/ext/couchbase/core/operations/document_get_and_touch.hxx +0 -9
- data/ext/couchbase/core/operations/document_get_any_replica.hxx +83 -2
- data/ext/couchbase/core/operations/document_get_projected.hxx +0 -9
- data/ext/couchbase/core/operations/document_increment.hxx +0 -5
- data/ext/couchbase/core/operations/document_insert.hxx +0 -4
- data/ext/couchbase/core/operations/document_lookup_in.hxx +0 -9
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +46 -4
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +121 -43
- data/ext/couchbase/core/operations/document_mutate_in.hxx +0 -5
- data/ext/couchbase/core/operations/document_prepend.hxx +0 -4
- data/ext/couchbase/core/operations/document_query.hxx +0 -4
- data/ext/couchbase/core/operations/document_remove.hxx +0 -4
- data/ext/couchbase/core/operations/document_replace.hxx +0 -4
- data/ext/couchbase/core/operations/document_search.hxx +0 -7
- data/ext/couchbase/core/operations/document_touch.hxx +0 -7
- data/ext/couchbase/core/operations/document_unlock.hxx +0 -6
- data/ext/couchbase/core/operations/document_upsert.hxx +0 -4
- data/ext/couchbase/core/operations/document_view.cxx +2 -0
- data/ext/couchbase/core/operations/document_view.hxx +10 -13
- data/ext/couchbase/core/operations/http_noop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataverse_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataverse_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_connect.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_disconnect.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_replace.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_describe.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_flush.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_update.hxx +2 -0
- data/ext/couchbase/core/operations/management/change_password.hxx +2 -0
- data/ext/couchbase/core/operations/management/cluster_describe.hxx +2 -0
- data/ext/couchbase/core/operations/management/cluster_developer_preview_enable.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_update.hxx +2 -0
- data/ext/couchbase/core/operations/management/collections_manifest_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/error_utils.cxx +4 -1
- data/ext/couchbase/core/operations/management/eventing_deploy_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_drop_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_all_functions.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_status.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_pause_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_resume_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_undeploy_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_upsert_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/freeform.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_build.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_build_deferred.hxx +68 -30
- data/ext/couchbase/core/operations/management/query_index_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_get_all.hxx +4 -3
- data/ext/couchbase/core/operations/management/query_index_get_all_deferred.hxx +2 -1
- data/ext/couchbase/core/operations/management/role_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_get_stats.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_analyze_document.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_ingest.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_query.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_documents_count.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_stats.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/operation_traits.hxx +6 -0
- data/ext/couchbase/core/operations.hxx +0 -1
- data/ext/couchbase/core/operations_fwd.hxx +8 -0
- data/ext/couchbase/core/origin.cxx +67 -12
- data/ext/couchbase/core/origin.hxx +13 -8
- data/ext/couchbase/core/orphan_reporter.cxx +164 -0
- data/ext/couchbase/core/orphan_reporter.hxx +65 -0
- data/ext/couchbase/core/sasl/CMakeLists.txt +1 -0
- data/ext/couchbase/core/sasl/client.cc +6 -0
- data/ext/couchbase/core/sasl/mechanism.cc +2 -1
- data/ext/couchbase/core/sasl/mechanism.h +2 -1
- data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.cc +41 -0
- data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.h +47 -0
- data/ext/couchbase/core/tls_context_provider.cxx +44 -0
- data/ext/couchbase/core/tls_context_provider.hxx +44 -0
- data/ext/couchbase/core/tracing/attribute_helpers.hxx +45 -0
- data/ext/couchbase/core/tracing/constants.hxx +148 -68
- data/ext/couchbase/core/tracing/threshold_logging_options.hxx +0 -3
- data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +122 -170
- data/ext/couchbase/core/tracing/tracer_wrapper.cxx +17 -24
- data/ext/couchbase/core/tracing/tracer_wrapper.hxx +8 -10
- data/ext/couchbase/core/tracing/wrapper_sdk_tracer.cxx +114 -0
- data/ext/couchbase/core/tracing/wrapper_sdk_tracer.hxx +85 -0
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +16 -14
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +4 -4
- data/ext/couchbase/core/transactions/transactions.cxx +1 -1
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +1 -2
- data/ext/couchbase/core/utils/byteswap.hxx +12 -0
- data/ext/couchbase/core/utils/concurrent_fixed_priority_queue.hxx +102 -0
- data/ext/couchbase/core/utils/connection_string.cxx +2 -0
- data/ext/couchbase/couchbase/certificate_authenticator.hxx +1 -0
- data/ext/couchbase/couchbase/cluster.hxx +47 -0
- data/ext/couchbase/couchbase/cluster_options.hxx +16 -0
- data/ext/couchbase/couchbase/collection.hxx +60 -15
- data/ext/couchbase/couchbase/error_codes.hxx +48 -48
- data/ext/couchbase/couchbase/jwt_authenticator.hxx +52 -0
- data/ext/couchbase/couchbase/metrics/meter.hxx +2 -1
- data/ext/couchbase/couchbase/metrics/otel_meter.hxx +75 -80
- data/ext/couchbase/couchbase/network_options.hxx +19 -0
- data/ext/couchbase/couchbase/password_authenticator.hxx +1 -0
- data/ext/couchbase/couchbase/tracing/otel_tracer.hxx +15 -17
- data/ext/couchbase/couchbase/tracing/request_span.hxx +2 -2
- data/ext/couchbase.cxx +4 -0
- data/ext/extconf.rb +1 -0
- data/ext/rcb_analytics.cxx +157 -47
- data/ext/rcb_backend.cxx +118 -71
- data/ext/rcb_buckets.cxx +39 -16
- data/ext/rcb_collections.cxx +36 -12
- data/ext/rcb_crud.cxx +587 -294
- data/ext/rcb_hdr_histogram.cxx +219 -0
- data/ext/rcb_hdr_histogram.hxx +28 -0
- data/ext/rcb_multi.cxx +142 -59
- data/ext/rcb_observability.cxx +132 -0
- data/ext/rcb_observability.hxx +49 -0
- data/ext/rcb_query.cxx +77 -27
- data/ext/rcb_search.cxx +92 -31
- data/ext/rcb_users.cxx +69 -26
- data/ext/rcb_utils.cxx +91 -0
- data/ext/rcb_utils.hxx +141 -168
- data/ext/rcb_views.cxx +36 -12
- data/lib/active_support/cache/couchbase_store.rb +6 -6
- data/lib/couchbase/authenticator.rb +14 -0
- data/lib/couchbase/binary_collection.rb +37 -22
- data/lib/couchbase/bucket.rb +46 -31
- data/lib/couchbase/cluster.rb +146 -61
- data/lib/couchbase/collection.rb +257 -186
- data/lib/couchbase/datastructures/couchbase_list.rb +81 -50
- data/lib/couchbase/datastructures/couchbase_map.rb +86 -50
- data/lib/couchbase/datastructures/couchbase_queue.rb +64 -38
- data/lib/couchbase/datastructures/couchbase_set.rb +57 -41
- data/lib/couchbase/deprecations.rb +1 -1
- data/lib/couchbase/diagnostics.rb +8 -8
- data/lib/couchbase/errors.rb +6 -0
- data/lib/couchbase/management/analytics_index_manager.rb +90 -59
- data/lib/couchbase/management/bucket_manager.rb +73 -45
- data/lib/couchbase/management/collection_manager.rb +86 -43
- data/lib/couchbase/management/collection_query_index_manager.rb +56 -33
- data/lib/couchbase/management/query_index_manager.rb +88 -36
- data/lib/couchbase/management/scope_search_index_manager.rb +119 -52
- data/lib/couchbase/management/search_index_manager.rb +401 -178
- data/lib/couchbase/management/user_manager.rb +343 -174
- data/lib/couchbase/management/view_index_manager.rb +166 -73
- data/lib/couchbase/metrics/logging_meter.rb +108 -0
- data/lib/couchbase/metrics/logging_value_recorder.rb +50 -0
- data/lib/couchbase/metrics/meter.rb +27 -0
- data/lib/couchbase/metrics/noop_meter.rb +30 -0
- data/lib/couchbase/metrics/noop_value_recorder.rb +27 -0
- data/lib/couchbase/metrics/value_recorder.rb +25 -0
- data/lib/couchbase/options.rb +69 -3
- data/lib/couchbase/protostellar/cluster.rb +3 -0
- data/lib/couchbase/scope.rb +62 -48
- data/lib/couchbase/search_options.rb +18 -18
- data/lib/couchbase/tracing/noop_span.rb +29 -0
- data/lib/couchbase/tracing/noop_tracer.rb +29 -0
- data/lib/couchbase/tracing/request_span.rb +34 -0
- data/lib/couchbase/tracing/request_tracer.rb +28 -0
- data/lib/couchbase/tracing/threshold_logging_span.rb +112 -0
- data/lib/couchbase/tracing/threshold_logging_tracer.rb +231 -0
- data/lib/couchbase/utils/hdr_histogram.rb +55 -0
- data/lib/couchbase/utils/observability.rb +257 -0
- data/lib/couchbase/utils/observability_constants.rb +200 -0
- data/lib/couchbase/utils/stdlib_logger_adapter.rb +1 -3
- data/lib/couchbase/version.rb +1 -1
- data/lib/couchbase.rb +2 -2
- metadata +58 -6
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
#include "collection_id_cache_entry.hxx"
|
|
21
21
|
#include "core/app_telemetry_meter.hxx"
|
|
22
|
+
#include "core/cluster_options.hxx"
|
|
22
23
|
#include "core/config_listener.hxx"
|
|
23
24
|
#include "core/document_id.hxx"
|
|
24
25
|
#include "core/error_context/key_value_error_map_info.hxx"
|
|
@@ -85,20 +86,22 @@ public:
|
|
|
85
86
|
couchbase::core::origin origin,
|
|
86
87
|
std::shared_ptr<tracing::tracer_wrapper> tracer,
|
|
87
88
|
std::shared_ptr<metrics::meter_wrapper> meter,
|
|
89
|
+
std::shared_ptr<orphan_reporter> orphan_reporter,
|
|
88
90
|
std::shared_ptr<core::app_telemetry_meter> app_telemetry,
|
|
89
91
|
std::vector<protocol::hello_feature> known_features,
|
|
90
92
|
std::shared_ptr<impl::bootstrap_state_listener> state_listener,
|
|
91
93
|
asio::io_context& ctx,
|
|
92
|
-
|
|
94
|
+
tls_context_provider& tls)
|
|
93
95
|
: client_id_{ std::move(client_id) }
|
|
94
96
|
, name_{ std::move(name) }
|
|
95
97
|
, log_prefix_{ fmt::format("[{}/{}]", client_id_, name_) }
|
|
96
|
-
, origin_{ std::move(origin) }
|
|
97
98
|
, tracer_{ std::move(tracer) }
|
|
98
99
|
, meter_{ std::move(meter) }
|
|
100
|
+
, orphan_reporter_{ std::move(orphan_reporter) }
|
|
99
101
|
, app_telemetry_meter_{ std::move(app_telemetry) }
|
|
100
102
|
, known_features_{ std::move(known_features) }
|
|
101
103
|
, state_listener_{ std::move(state_listener) }
|
|
104
|
+
, origin_{ std::move(origin) }
|
|
102
105
|
, codec_{ { known_features_.begin(), known_features_.end() } }
|
|
103
106
|
, ctx_{ ctx }
|
|
104
107
|
, tls_{ tls }
|
|
@@ -117,11 +120,13 @@ public:
|
|
|
117
120
|
std::optional<key_value_error_map_info> error_info)
|
|
118
121
|
{
|
|
119
122
|
// TODO(SA): copy from mcbp_command, subject to refactor later
|
|
123
|
+
#ifdef COUCHBASE_CXX_CLIENT_CREATE_OPERATION_SPAN_IN_CORE
|
|
120
124
|
metrics::metric_attributes attrs{
|
|
121
125
|
service_type::key_value, fmt::format("{}", req->command_), ec, name_, req->scope_name_,
|
|
122
126
|
req->collection_name_,
|
|
123
127
|
};
|
|
124
128
|
meter_->record_value(std::move(attrs), req->dispatched_time_);
|
|
129
|
+
#endif
|
|
125
130
|
|
|
126
131
|
if (ec == asio::error::operation_aborted) {
|
|
127
132
|
// TODO(SA): fix tracing
|
|
@@ -317,11 +322,11 @@ public:
|
|
|
317
322
|
{
|
|
318
323
|
if (req->key_.empty()) {
|
|
319
324
|
if (auto server = server_by_vbucket(req->vbucket_, req->replica_index_); server) {
|
|
320
|
-
return
|
|
325
|
+
return find_or_connect_session_by_index(server.value());
|
|
321
326
|
}
|
|
322
327
|
} else if (auto [partition, server] = map_id(req->key_, req->replica_index_); server) {
|
|
323
328
|
req->vbucket_ = partition;
|
|
324
|
-
return
|
|
329
|
+
return find_or_connect_session_by_index(server.value());
|
|
325
330
|
}
|
|
326
331
|
return std::nullopt;
|
|
327
332
|
}
|
|
@@ -365,6 +370,53 @@ public:
|
|
|
365
370
|
return { 0, std::nullopt };
|
|
366
371
|
}
|
|
367
372
|
|
|
373
|
+
void connect_session(std::size_t index)
|
|
374
|
+
{
|
|
375
|
+
const std::scoped_lock lock(config_mutex_, sessions_mutex_);
|
|
376
|
+
if (!config_) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
const auto& node = config_->nodes[index];
|
|
381
|
+
|
|
382
|
+
const auto& hostname = node.hostname_for(origin_.options().network);
|
|
383
|
+
auto port = node.port_or(
|
|
384
|
+
origin_.options().network, service_type::key_value, origin_.options().enable_tls, 0);
|
|
385
|
+
if (port == 0) {
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
const couchbase::core::origin origin(origin_.credentials(), hostname, port, origin_.options());
|
|
390
|
+
io::mcbp_session session =
|
|
391
|
+
origin_.options().enable_tls
|
|
392
|
+
? io::mcbp_session(
|
|
393
|
+
client_id_, node.node_uuid, ctx_, tls_, origin, state_listener_, name_, known_features_)
|
|
394
|
+
: io::mcbp_session(
|
|
395
|
+
client_id_, node.node_uuid, ctx_, origin, state_listener_, name_, known_features_);
|
|
396
|
+
CB_LOG_DEBUG(R"({} rev={}, connect idx={}, session="{}", address="{}:{}")",
|
|
397
|
+
log_prefix_,
|
|
398
|
+
config_->rev_str(),
|
|
399
|
+
node.index,
|
|
400
|
+
session.id(),
|
|
401
|
+
hostname,
|
|
402
|
+
port);
|
|
403
|
+
session.bootstrap(
|
|
404
|
+
[self = shared_from_this(), session](std::error_code err,
|
|
405
|
+
topology::configuration cfg) mutable -> void {
|
|
406
|
+
if (err) {
|
|
407
|
+
return self->remove_session(session.id());
|
|
408
|
+
}
|
|
409
|
+
self->update_config(std::move(cfg));
|
|
410
|
+
session.on_configuration_update(self);
|
|
411
|
+
session.on_stop([id = session.id(), self]() -> void {
|
|
412
|
+
self->remove_session(id);
|
|
413
|
+
});
|
|
414
|
+
self->drain_deferred_queue({});
|
|
415
|
+
},
|
|
416
|
+
true);
|
|
417
|
+
sessions_.insert_or_assign(index, std::move(session));
|
|
418
|
+
}
|
|
419
|
+
|
|
368
420
|
void restart_sessions()
|
|
369
421
|
{
|
|
370
422
|
const std::scoped_lock lock(config_mutex_, sessions_mutex_);
|
|
@@ -594,9 +646,9 @@ public:
|
|
|
594
646
|
{
|
|
595
647
|
const std::scoped_lock lock(sessions_mutex_);
|
|
596
648
|
if (sessions_.empty()) {
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
649
|
+
CB_LOG_DEBUG(R"({} unable to find connected session (sessions_ is empty), retry in {})",
|
|
650
|
+
log_prefix_,
|
|
651
|
+
heartbeat_interval_);
|
|
600
652
|
return;
|
|
601
653
|
}
|
|
602
654
|
|
|
@@ -616,9 +668,9 @@ public:
|
|
|
616
668
|
req.opaque(session->next_opaque());
|
|
617
669
|
session->write_and_flush(req.data());
|
|
618
670
|
} else {
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
671
|
+
CB_LOG_DEBUG(R"({} unable to find connected session with GCCCP support, retry in {})",
|
|
672
|
+
log_prefix_,
|
|
673
|
+
heartbeat_interval_);
|
|
622
674
|
}
|
|
623
675
|
}
|
|
624
676
|
|
|
@@ -698,6 +750,11 @@ public:
|
|
|
698
750
|
}
|
|
699
751
|
}
|
|
700
752
|
|
|
753
|
+
void update_credentials(cluster_credentials credentials)
|
|
754
|
+
{
|
|
755
|
+
origin_.update_credentials(std::move(credentials));
|
|
756
|
+
}
|
|
757
|
+
|
|
701
758
|
void update_config(topology::configuration config) override
|
|
702
759
|
{
|
|
703
760
|
std::vector<topology::configuration::node> added{};
|
|
@@ -810,6 +867,10 @@ public:
|
|
|
810
867
|
continue;
|
|
811
868
|
}
|
|
812
869
|
|
|
870
|
+
if (origin_.options().enable_lazy_connections) {
|
|
871
|
+
++next_index;
|
|
872
|
+
continue;
|
|
873
|
+
}
|
|
813
874
|
const couchbase::core::origin origin(
|
|
814
875
|
origin_.credentials(), hostname, port, origin_.options());
|
|
815
876
|
io::mcbp_session session =
|
|
@@ -883,6 +944,16 @@ public:
|
|
|
883
944
|
return {};
|
|
884
945
|
}
|
|
885
946
|
|
|
947
|
+
[[nodiscard]] auto find_or_connect_session_by_index(std::size_t index)
|
|
948
|
+
-> std::optional<io::mcbp_session>
|
|
949
|
+
{
|
|
950
|
+
if (auto session = find_session_by_index(index); session) {
|
|
951
|
+
return session;
|
|
952
|
+
}
|
|
953
|
+
connect_session(index);
|
|
954
|
+
return {};
|
|
955
|
+
}
|
|
956
|
+
|
|
886
957
|
[[nodiscard]] auto next_session_index() -> std::size_t
|
|
887
958
|
{
|
|
888
959
|
const std::scoped_lock lock(sessions_mutex_);
|
|
@@ -929,6 +1000,11 @@ public:
|
|
|
929
1000
|
return meter_;
|
|
930
1001
|
}
|
|
931
1002
|
|
|
1003
|
+
[[nodiscard]] auto orphan_reporter() const -> std::shared_ptr<core::orphan_reporter>
|
|
1004
|
+
{
|
|
1005
|
+
return orphan_reporter_;
|
|
1006
|
+
}
|
|
1007
|
+
|
|
932
1008
|
[[nodiscard]] auto app_telemetry_meter() const -> std::shared_ptr<core::app_telemetry_meter>
|
|
933
1009
|
{
|
|
934
1010
|
return app_telemetry_meter_;
|
|
@@ -977,20 +1053,33 @@ public:
|
|
|
977
1053
|
return {};
|
|
978
1054
|
}
|
|
979
1055
|
|
|
1056
|
+
void for_each_session(utils::movable_function<void(io::mcbp_session&)> handler)
|
|
1057
|
+
{
|
|
1058
|
+
std::map<size_t, io::mcbp_session> sessions;
|
|
1059
|
+
{
|
|
1060
|
+
const std::scoped_lock lock(sessions_mutex_);
|
|
1061
|
+
sessions = sessions_;
|
|
1062
|
+
}
|
|
1063
|
+
for (auto& [index, session] : sessions) {
|
|
1064
|
+
handler(session);
|
|
1065
|
+
}
|
|
1066
|
+
}
|
|
1067
|
+
|
|
980
1068
|
private:
|
|
981
1069
|
const std::string client_id_;
|
|
982
1070
|
const std::string name_;
|
|
983
1071
|
const std::string log_prefix_;
|
|
984
|
-
const origin origin_;
|
|
985
1072
|
const std::shared_ptr<tracing::tracer_wrapper> tracer_;
|
|
986
1073
|
const std::shared_ptr<metrics::meter_wrapper> meter_;
|
|
1074
|
+
const std::shared_ptr<core::orphan_reporter> orphan_reporter_;
|
|
987
1075
|
const std::shared_ptr<core::app_telemetry_meter> app_telemetry_meter_;
|
|
988
1076
|
const std::vector<protocol::hello_feature> known_features_;
|
|
989
1077
|
const std::shared_ptr<impl::bootstrap_state_listener> state_listener_;
|
|
1078
|
+
origin origin_;
|
|
990
1079
|
mcbp::codec codec_;
|
|
991
1080
|
|
|
992
1081
|
asio::io_context& ctx_;
|
|
993
|
-
|
|
1082
|
+
tls_context_provider& tls_;
|
|
994
1083
|
|
|
995
1084
|
asio::steady_timer heartbeat_timer_;
|
|
996
1085
|
std::chrono::milliseconds heartbeat_interval_;
|
|
@@ -1015,9 +1104,10 @@ private:
|
|
|
1015
1104
|
|
|
1016
1105
|
bucket::bucket(std::string client_id,
|
|
1017
1106
|
asio::io_context& ctx,
|
|
1018
|
-
|
|
1107
|
+
tls_context_provider& tls,
|
|
1019
1108
|
std::shared_ptr<tracing::tracer_wrapper> tracer,
|
|
1020
1109
|
std::shared_ptr<metrics::meter_wrapper> meter,
|
|
1110
|
+
std::shared_ptr<core::orphan_reporter> orphan_reporter,
|
|
1021
1111
|
std::shared_ptr<core::app_telemetry_meter> app_telemetry_meter,
|
|
1022
1112
|
std::string name,
|
|
1023
1113
|
couchbase::core::origin origin,
|
|
@@ -1030,6 +1120,7 @@ bucket::bucket(std::string client_id,
|
|
|
1030
1120
|
std::move(origin),
|
|
1031
1121
|
std::move(tracer),
|
|
1032
1122
|
std::move(meter),
|
|
1123
|
+
std::move(orphan_reporter),
|
|
1033
1124
|
std::move(app_telemetry_meter),
|
|
1034
1125
|
std::move(known_features),
|
|
1035
1126
|
std::move(state_listener),
|
|
@@ -1068,6 +1159,12 @@ bucket::update_config(topology::configuration config)
|
|
|
1068
1159
|
return impl_->update_config(std::move(config));
|
|
1069
1160
|
}
|
|
1070
1161
|
|
|
1162
|
+
void
|
|
1163
|
+
bucket::update_credentials(cluster_credentials credentials)
|
|
1164
|
+
{
|
|
1165
|
+
return impl_->update_credentials(std::move(credentials));
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1071
1168
|
auto
|
|
1072
1169
|
bucket::name() const -> const std::string&
|
|
1073
1170
|
{
|
|
@@ -1098,6 +1195,12 @@ bucket::meter() const -> std::shared_ptr<metrics::meter_wrapper>
|
|
|
1098
1195
|
return impl_->meter();
|
|
1099
1196
|
}
|
|
1100
1197
|
|
|
1198
|
+
auto
|
|
1199
|
+
bucket::orphan_reporter() const -> std::shared_ptr<core::orphan_reporter>
|
|
1200
|
+
{
|
|
1201
|
+
return impl_->orphan_reporter();
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1101
1204
|
auto
|
|
1102
1205
|
bucket::app_telemetry_meter() const -> std::shared_ptr<core::app_telemetry_meter>
|
|
1103
1206
|
{
|
|
@@ -1148,6 +1251,12 @@ bucket::defer_command(utils::movable_function<void(std::error_code)> command)
|
|
|
1148
1251
|
impl_->defer_command(std::move(command));
|
|
1149
1252
|
}
|
|
1150
1253
|
|
|
1254
|
+
void
|
|
1255
|
+
bucket::for_each_session(utils::movable_function<void(io::mcbp_session&)> handler)
|
|
1256
|
+
{
|
|
1257
|
+
impl_->for_each_session(std::move(handler));
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1151
1260
|
auto
|
|
1152
1261
|
bucket::default_timeout() const -> std::chrono::milliseconds
|
|
1153
1262
|
{
|
|
@@ -1190,4 +1299,10 @@ bucket::direct_re_queue(const std::shared_ptr<mcbp::queue_request>& req, bool is
|
|
|
1190
1299
|
{
|
|
1191
1300
|
return impl_->direct_re_queue(req, is_retry);
|
|
1192
1301
|
}
|
|
1302
|
+
|
|
1303
|
+
void
|
|
1304
|
+
bucket::connect_session(std::size_t index)
|
|
1305
|
+
{
|
|
1306
|
+
return impl_->connect_session(index);
|
|
1307
|
+
}
|
|
1193
1308
|
} // namespace couchbase::core
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#include "config_listener.hxx"
|
|
21
21
|
#include "io/mcbp_command.hxx"
|
|
22
22
|
#include "operations.hxx"
|
|
23
|
+
#include "tls_context_provider.hxx"
|
|
23
24
|
|
|
24
25
|
#include <asio/bind_executor.hpp>
|
|
25
26
|
#include <asio/io_context.hpp>
|
|
@@ -67,10 +68,11 @@ class bucket
|
|
|
67
68
|
public:
|
|
68
69
|
bucket(std::string client_id,
|
|
69
70
|
asio::io_context& ctx,
|
|
70
|
-
|
|
71
|
+
tls_context_provider& tls,
|
|
71
72
|
std::shared_ptr<tracing::tracer_wrapper> tracer,
|
|
72
73
|
std::shared_ptr<metrics::meter_wrapper> meter,
|
|
73
|
-
std::shared_ptr<
|
|
74
|
+
std::shared_ptr<orphan_reporter> orphan_reporter,
|
|
75
|
+
std::shared_ptr<app_telemetry_meter> app_telemetry_meter,
|
|
74
76
|
std::string name,
|
|
75
77
|
couchbase::core::origin origin,
|
|
76
78
|
std::vector<protocol::hello_feature> known_features,
|
|
@@ -104,6 +106,8 @@ public:
|
|
|
104
106
|
});
|
|
105
107
|
}
|
|
106
108
|
|
|
109
|
+
void connect_session(std::size_t index);
|
|
110
|
+
|
|
107
111
|
template<typename Request>
|
|
108
112
|
void map_and_send(std::shared_ptr<operations::mcbp_command<bucket, Request>> cmd)
|
|
109
113
|
{
|
|
@@ -141,6 +145,9 @@ public:
|
|
|
141
145
|
session.has_value() ? session->bootstrap_address() : "",
|
|
142
146
|
session.has_value() && session->has_config(),
|
|
143
147
|
config_rev());
|
|
148
|
+
if (!session) {
|
|
149
|
+
connect_session(index);
|
|
150
|
+
}
|
|
144
151
|
return defer_command([self = shared_from_this(), cmd](std::error_code ec) {
|
|
145
152
|
if (ec == errc::common::request_canceled) {
|
|
146
153
|
return cmd->cancel(retry_reason::do_not_retry);
|
|
@@ -194,6 +201,7 @@ public:
|
|
|
194
201
|
|
|
195
202
|
void fetch_config();
|
|
196
203
|
void update_config(topology::configuration config) override;
|
|
204
|
+
void update_credentials(cluster_credentials credentials);
|
|
197
205
|
void bootstrap(utils::movable_function<void(std::error_code, topology::configuration)>&& handler);
|
|
198
206
|
void with_configuration(
|
|
199
207
|
utils::movable_function<void(std::error_code, std::shared_ptr<topology::configuration>)>&&
|
|
@@ -205,11 +213,13 @@ public:
|
|
|
205
213
|
void ping(const std::shared_ptr<diag::ping_collector>& collector,
|
|
206
214
|
std::optional<std::chrono::milliseconds> timeout);
|
|
207
215
|
void defer_command(utils::movable_function<void(std::error_code)> command);
|
|
216
|
+
void for_each_session(utils::movable_function<void(io::mcbp_session&)> handler);
|
|
208
217
|
|
|
209
218
|
[[nodiscard]] auto name() const -> const std::string&;
|
|
210
219
|
[[nodiscard]] auto log_prefix() const -> const std::string&;
|
|
211
220
|
[[nodiscard]] auto tracer() const -> std::shared_ptr<tracing::tracer_wrapper>;
|
|
212
221
|
[[nodiscard]] auto meter() const -> std::shared_ptr<metrics::meter_wrapper>;
|
|
222
|
+
[[nodiscard]] auto orphan_reporter() const -> std::shared_ptr<orphan_reporter>;
|
|
213
223
|
[[nodiscard]] auto app_telemetry_meter() const -> std::shared_ptr<app_telemetry_meter>;
|
|
214
224
|
[[nodiscard]] auto default_retry_strategy() const -> std::shared_ptr<couchbase::retry_strategy>;
|
|
215
225
|
[[nodiscard]] auto is_closed() const -> bool;
|