couchbase 3.7.0 → 3.8.1
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 -665
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +26 -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/error_context/base_error_context.hxx +32 -0
- data/ext/couchbase/core/error_context/key_value.cxx +1 -0
- data/ext/couchbase/core/error_context/key_value.hxx +23 -0
- data/ext/couchbase/core/error_context/key_value_error_context.hxx +35 -0
- data/ext/couchbase/core/error_context/subdocument_error_context.hxx +41 -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 +239 -128
- data/ext/couchbase/core/impl/bucket_manager.cxx +87 -35
- data/ext/couchbase/core/impl/collection.cxx +914 -372
- 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 +49 -17
- 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/invoke_with_node_id.hxx +44 -0
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +1 -1
- data/ext/couchbase/core/impl/node_id.cxx +110 -0
- data/ext/couchbase/core/impl/node_id.hxx +40 -0
- 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 +245 -270
- 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 +89 -29
- 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.cxx +3 -4
- 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 +50 -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.cxx +12 -12
- 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.cxx +11 -11
- data/ext/couchbase/core/operations/management/collection_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_drop.cxx +11 -11
- data/ext/couchbase/core/operations/management/collection_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_update.cxx +11 -11
- 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 +13 -7
- 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.cxx +5 -4
- data/ext/couchbase/core/operations/management/query_index_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_drop.cxx +7 -6
- 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.cxx +12 -13
- data/ext/couchbase/core/operations/management/scope_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_drop.cxx +8 -9
- 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/topology/configuration.cxx +21 -0
- data/ext/couchbase/core/topology/configuration.hxx +28 -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/core/utils/contains_string.cxx +61 -0
- data/ext/couchbase/core/utils/contains_string.hxx +26 -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 +133 -15
- data/ext/couchbase/couchbase/error.hxx +16 -0
- 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/node_id.hxx +123 -0
- data/ext/couchbase/couchbase/node_id_for_options.hxx +61 -0
- data/ext/couchbase/couchbase/node_ids_options.hxx +62 -0
- data/ext/couchbase/couchbase/password_authenticator.hxx +1 -0
- data/ext/couchbase/couchbase/result.hxx +42 -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 +589 -294
- data/ext/rcb_hdr_histogram.cxx +219 -0
- data/ext/rcb_hdr_histogram.hxx +28 -0
- data/ext/rcb_logger.cxx +15 -17
- 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 +82 -50
- data/lib/couchbase/datastructures/couchbase_map.rb +87 -50
- data/lib/couchbase/datastructures/couchbase_queue.rb +65 -38
- data/lib/couchbase/datastructures/couchbase_set.rb +58 -41
- data/lib/couchbase/deprecations.rb +1 -1
- data/lib/couchbase/diagnostics.rb +8 -8
- data/lib/couchbase/errors.rb +7 -1
- data/lib/couchbase/json_transcoder.rb +1 -1
- 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 +71 -5
- data/lib/couchbase/protostellar/client.rb +0 -2
- data/lib/couchbase/protostellar/cluster.rb +7 -0
- data/lib/couchbase/protostellar/generated/admin/analytics/v1/analytics_pb.rb +54 -0
- data/lib/couchbase/protostellar/generated/admin/analytics/v1/analytics_services_pb.rb +51 -0
- data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_pb.rb +5 -24
- data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_services_pb.rb +16 -0
- data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_pb.rb +5 -24
- data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_services_pb.rb +16 -0
- data/lib/couchbase/protostellar/generated/admin/query/v1/query_pb.rb +5 -24
- data/lib/couchbase/protostellar/generated/admin/query/v1/query_services_pb.rb +18 -0
- data/lib/couchbase/protostellar/generated/admin/search/v1/search_pb.rb +2 -23
- data/lib/couchbase/protostellar/generated/admin/search/v1/search_services_pb.rb +23 -0
- data/lib/couchbase/protostellar/generated/analytics/v1/analytics_pb.rb +4 -25
- data/lib/couchbase/protostellar/generated/analytics/v1/analytics_services_pb.rb +10 -0
- data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_pb.rb +6 -25
- data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_services_pb.rb +18 -0
- data/lib/couchbase/protostellar/generated/internal/xdcr/v1/xdcr_pb.rb +46 -0
- data/lib/couchbase/protostellar/generated/internal/xdcr/v1/xdcr_services_pb.rb +56 -0
- data/lib/couchbase/protostellar/generated/kv/v1/kv_pb.rb +3 -26
- data/lib/couchbase/protostellar/generated/kv/v1/kv_services_pb.rb +47 -0
- data/lib/couchbase/protostellar/generated/query/v1/query_pb.rb +4 -26
- data/lib/couchbase/protostellar/generated/query/v1/query_services_pb.rb +10 -0
- data/lib/couchbase/protostellar/generated/routing/v2/routing_pb.rb +26 -0
- data/lib/couchbase/protostellar/generated/routing/v2/routing_services_pb.rb +43 -0
- data/lib/couchbase/protostellar/generated/search/v1/search_pb.rb +5 -26
- data/lib/couchbase/protostellar/generated/search/v1/search_services_pb.rb +11 -0
- data/lib/couchbase/protostellar/generated/transactions/v1/transactions_pb.rb +2 -23
- data/lib/couchbase/protostellar/generated/transactions/v1/transactions_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated/view/v1/view_pb.rb +2 -23
- data/lib/couchbase/protostellar/generated/view/v1/view_services_pb.rb +9 -0
- data/lib/couchbase/protostellar/request_generator/admin/collection.rb +4 -2
- data/lib/couchbase/protostellar/request_generator/admin/query.rb +2 -0
- data/lib/couchbase/protostellar/request_generator/kv.rb +1 -1
- data/lib/couchbase/protostellar/scope.rb +4 -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 +263 -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 +72 -8
- data/lib/couchbase/protostellar/generated/routing/v1/routing_pb.rb +0 -52
- data/lib/couchbase/protostellar/generated/routing/v1/routing_services_pb.rb +0 -30
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2024-Present Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#pragma once
|
|
19
|
+
|
|
20
|
+
#include <couchbase/node_id.hxx>
|
|
21
|
+
|
|
22
|
+
#include <cstdint>
|
|
23
|
+
#include <string>
|
|
24
|
+
|
|
25
|
+
namespace couchbase
|
|
26
|
+
{
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Internal factory for constructing node_id instances from core-level data.
|
|
30
|
+
*
|
|
31
|
+
* This class is a friend of node_id and provides the only way to construct
|
|
32
|
+
* a non-default node_id outside the couchbase namespace.
|
|
33
|
+
*/
|
|
34
|
+
class internal_node_id
|
|
35
|
+
{
|
|
36
|
+
public:
|
|
37
|
+
static auto build(std::string node_uuid, std::string hostname, std::uint16_t port) -> node_id;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
} // namespace couchbase
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2025. Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include "observability_recorder.hxx"
|
|
19
|
+
#include "core/tracing/attribute_helpers.hxx"
|
|
20
|
+
|
|
21
|
+
namespace couchbase::core::impl
|
|
22
|
+
{
|
|
23
|
+
auto
|
|
24
|
+
observability_recorder::create(std::string op_name,
|
|
25
|
+
std::shared_ptr<couchbase::tracing::request_span> parent_span,
|
|
26
|
+
std::weak_ptr<tracing::tracer_wrapper> tracer,
|
|
27
|
+
std::weak_ptr<metrics::meter_wrapper> meter)
|
|
28
|
+
-> std::unique_ptr<observability_recorder>
|
|
29
|
+
{
|
|
30
|
+
auto rec = std::make_unique<observability_recorder>(
|
|
31
|
+
std::move(op_name), std::move(parent_span), std::move(tracer), std::move(meter));
|
|
32
|
+
if (rec->span_->uses_tags()) {
|
|
33
|
+
rec->span_->add_tag(tracing::attributes::op::operation_name, rec->op_name_);
|
|
34
|
+
}
|
|
35
|
+
rec->metric_attributes_.operation = rec->op_name_;
|
|
36
|
+
return rec;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
auto
|
|
40
|
+
observability_recorder::operation_span() -> const std::shared_ptr<couchbase::tracing::request_span>&
|
|
41
|
+
{
|
|
42
|
+
return span_;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
void
|
|
46
|
+
observability_recorder::finish(const std::error_code ec)
|
|
47
|
+
{
|
|
48
|
+
metric_attributes_.ec = ec;
|
|
49
|
+
meter_.lock()->record_value(std::move(metric_attributes_), start_time_);
|
|
50
|
+
span_->end();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void
|
|
54
|
+
observability_recorder::finish(const std::size_t retry_attempts, const std::error_code ec)
|
|
55
|
+
{
|
|
56
|
+
if (span_->uses_tags()) {
|
|
57
|
+
span_->add_tag(tracing::attributes::op::retry_count, retry_attempts);
|
|
58
|
+
}
|
|
59
|
+
finish(ec);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
auto
|
|
63
|
+
observability_recorder::create_request_encoding_span() const
|
|
64
|
+
-> std::shared_ptr<couchbase::tracing::request_span>
|
|
65
|
+
{
|
|
66
|
+
return tracer_.lock()->create_span(tracing::operation::step_request_encoding, span_);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
auto
|
|
70
|
+
observability_recorder::record_suboperation(std::string subop_name) const
|
|
71
|
+
-> std::unique_ptr<observability_recorder>
|
|
72
|
+
{
|
|
73
|
+
return create(std::move(subop_name), span_, tracer_, meter_);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
void
|
|
77
|
+
observability_recorder::with_service(const std::string& service)
|
|
78
|
+
{
|
|
79
|
+
metric_attributes_.service = service;
|
|
80
|
+
if (span_->uses_tags()) {
|
|
81
|
+
span_->add_tag(tracing::attributes::op::service, service);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
void
|
|
86
|
+
observability_recorder::with_collection_name(const std::string& collection_name)
|
|
87
|
+
|
|
88
|
+
{
|
|
89
|
+
metric_attributes_.collection_name = collection_name;
|
|
90
|
+
if (span_->uses_tags()) {
|
|
91
|
+
span_->add_tag(tracing::attributes::op::collection_name, collection_name);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
void
|
|
96
|
+
observability_recorder::with_scope_name(const std::string& scope_name)
|
|
97
|
+
{
|
|
98
|
+
metric_attributes_.scope_name = scope_name;
|
|
99
|
+
if (span_->uses_tags()) {
|
|
100
|
+
span_->add_tag(tracing::attributes::op::scope_name, scope_name);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
void
|
|
105
|
+
observability_recorder::with_bucket_name(const std::string& bucket_name)
|
|
106
|
+
{
|
|
107
|
+
metric_attributes_.bucket_name = bucket_name;
|
|
108
|
+
if (span_->uses_tags()) {
|
|
109
|
+
span_->add_tag(tracing::attributes::op::bucket_name, bucket_name);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
void
|
|
114
|
+
observability_recorder::with_durability(const couchbase::durability_level durability)
|
|
115
|
+
|
|
116
|
+
{
|
|
117
|
+
if (span_->uses_tags()) {
|
|
118
|
+
tracing::set_durability_level_attribute(span_, durability);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
void
|
|
123
|
+
observability_recorder::with_query_statement(const std::string& statement,
|
|
124
|
+
const query_options::built& query_options)
|
|
125
|
+
|
|
126
|
+
{
|
|
127
|
+
if (query_options.positional_parameters.empty() && query_options.named_parameters.empty()) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (span_->uses_tags()) {
|
|
131
|
+
span_->add_tag(tracing::attributes::op::query_statement, statement);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
void
|
|
136
|
+
observability_recorder::with_query_statement(const std::string& statement,
|
|
137
|
+
const analytics_options::built& analytics_options)
|
|
138
|
+
|
|
139
|
+
{
|
|
140
|
+
if (analytics_options.positional_parameters.empty() &&
|
|
141
|
+
analytics_options.named_parameters.empty()) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (span_->uses_tags()) {
|
|
145
|
+
span_->add_tag(tracing::attributes::op::query_statement, statement);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
observability_recorder::observability_recorder(
|
|
150
|
+
std::string op_name,
|
|
151
|
+
std::shared_ptr<couchbase::tracing::request_span> parent_span,
|
|
152
|
+
std::weak_ptr<tracing::tracer_wrapper> tracer,
|
|
153
|
+
std::weak_ptr<metrics::meter_wrapper> meter)
|
|
154
|
+
: op_name_{ std::move(op_name) }
|
|
155
|
+
, tracer_{ std::move(tracer) }
|
|
156
|
+
, meter_{ std::move(meter) }
|
|
157
|
+
, span_{ tracer_.lock()->create_span(op_name_, std::move(parent_span)) }
|
|
158
|
+
, start_time_{ std::chrono::steady_clock::now() }
|
|
159
|
+
{
|
|
160
|
+
}
|
|
161
|
+
} // namespace couchbase::core::impl
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2025. Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#pragma once
|
|
19
|
+
|
|
20
|
+
#include <couchbase/analytics_options.hxx>
|
|
21
|
+
#include <couchbase/collection.hxx>
|
|
22
|
+
#include <couchbase/durability_level.hxx>
|
|
23
|
+
#include <couchbase/query_options.hxx>
|
|
24
|
+
#include <couchbase/tracing/request_span.hxx>
|
|
25
|
+
|
|
26
|
+
#include "core/metrics/meter_wrapper.hxx"
|
|
27
|
+
#include "core/tracing/constants.hxx"
|
|
28
|
+
#include "core/tracing/tracer_wrapper.hxx"
|
|
29
|
+
|
|
30
|
+
#include <memory>
|
|
31
|
+
#include <string>
|
|
32
|
+
|
|
33
|
+
namespace couchbase::core::impl
|
|
34
|
+
{
|
|
35
|
+
class observability_recorder
|
|
36
|
+
{
|
|
37
|
+
public:
|
|
38
|
+
static auto create(std::string op_name,
|
|
39
|
+
std::shared_ptr<couchbase::tracing::request_span> parent_span,
|
|
40
|
+
std::weak_ptr<tracing::tracer_wrapper> tracer,
|
|
41
|
+
std::weak_ptr<metrics::meter_wrapper> meter)
|
|
42
|
+
-> std::unique_ptr<observability_recorder>;
|
|
43
|
+
|
|
44
|
+
[[nodiscard]] auto operation_span() -> const std::shared_ptr<couchbase::tracing::request_span>&;
|
|
45
|
+
|
|
46
|
+
[[nodiscard]] auto create_request_encoding_span() const
|
|
47
|
+
-> std::shared_ptr<couchbase::tracing::request_span>;
|
|
48
|
+
[[nodiscard]] auto record_suboperation(std::string subop_name) const
|
|
49
|
+
-> std::unique_ptr<observability_recorder>;
|
|
50
|
+
|
|
51
|
+
void with_service(const std::string& service);
|
|
52
|
+
void with_collection_name(const std::string& collection_name);
|
|
53
|
+
void with_scope_name(const std::string& scope_name);
|
|
54
|
+
void with_bucket_name(const std::string& bucket_name);
|
|
55
|
+
void with_durability(couchbase::durability_level durability);
|
|
56
|
+
void with_query_statement(const std::string& statement,
|
|
57
|
+
const query_options::built& query_options);
|
|
58
|
+
void with_query_statement(const std::string& statement,
|
|
59
|
+
const analytics_options::built& analytics_options);
|
|
60
|
+
|
|
61
|
+
void finish(std::error_code ec);
|
|
62
|
+
void finish(std::size_t retry_attempts, std::error_code ec);
|
|
63
|
+
|
|
64
|
+
observability_recorder(std::string op_name,
|
|
65
|
+
std::shared_ptr<couchbase::tracing::request_span> parent_span,
|
|
66
|
+
std::weak_ptr<tracing::tracer_wrapper> tracer,
|
|
67
|
+
std::weak_ptr<metrics::meter_wrapper> meter);
|
|
68
|
+
|
|
69
|
+
private:
|
|
70
|
+
std::string op_name_;
|
|
71
|
+
std::weak_ptr<tracing::tracer_wrapper> tracer_;
|
|
72
|
+
std::weak_ptr<metrics::meter_wrapper> meter_;
|
|
73
|
+
std::shared_ptr<couchbase::tracing::request_span> span_;
|
|
74
|
+
std::chrono::time_point<std::chrono::steady_clock> start_time_;
|
|
75
|
+
metrics::metric_attributes metric_attributes_{};
|
|
76
|
+
};
|
|
77
|
+
} // namespace couchbase::core::impl
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
#include "core/io/retry_context.hxx"
|
|
24
24
|
#include "core/protocol/client_request.hxx"
|
|
25
25
|
#include "core/protocol/cmd_observe_seqno.hxx"
|
|
26
|
+
#include "core/public_fwd.hxx"
|
|
26
27
|
#include "core/timeout_defaults.hxx"
|
|
27
28
|
|
|
28
29
|
namespace couchbase::core::impl
|
|
@@ -59,6 +60,7 @@ struct observe_seqno_request {
|
|
|
59
60
|
std::uint16_t partition{};
|
|
60
61
|
std::uint32_t opaque{};
|
|
61
62
|
io::retry_context<true> retries{};
|
|
63
|
+
std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
|
|
62
64
|
|
|
63
65
|
[[nodiscard]] auto encode_to(encoded_request_type& encoded,
|
|
64
66
|
core::mcbp_context&& context) const -> std::error_code;
|
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
#include <couchbase/bucket.hxx>
|
|
19
19
|
|
|
20
20
|
#include "core/cluster.hxx"
|
|
21
|
+
#include "core/tracing/constants.hxx"
|
|
22
|
+
#include "core/tracing/tracer_wrapper.hxx"
|
|
21
23
|
#include "diagnostics.hxx"
|
|
24
|
+
#include "observability_recorder.hxx"
|
|
22
25
|
|
|
23
26
|
#include <couchbase/collection.hxx>
|
|
24
27
|
#include <couchbase/collection_manager.hxx>
|
|
@@ -63,16 +66,37 @@ public:
|
|
|
63
66
|
|
|
64
67
|
void ping(const ping_options::built& options, ping_handler&& handler) const
|
|
65
68
|
{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
auto obs_rec = create_observability_recorder(
|
|
70
|
+
core::tracing::operation::ping, std::nullopt, options.parent_span);
|
|
71
|
+
return core_.ping(
|
|
72
|
+
options.report_id,
|
|
73
|
+
name_,
|
|
74
|
+
core::impl::to_core_service_types(options.service_types),
|
|
75
|
+
options.timeout,
|
|
76
|
+
[obs_rec = std::move(obs_rec), handler = std::move(handler)](const auto& resp) mutable {
|
|
77
|
+
obs_rec->finish({});
|
|
78
|
+
return handler({}, core::impl::build_result(resp));
|
|
79
|
+
});
|
|
73
80
|
}
|
|
74
81
|
|
|
75
82
|
private:
|
|
83
|
+
[[nodiscard]] auto create_observability_recorder(
|
|
84
|
+
const std::string& operation_name,
|
|
85
|
+
const std::optional<core::service_type> service,
|
|
86
|
+
const std::shared_ptr<tracing::request_span>& parent_span) const
|
|
87
|
+
-> std::unique_ptr<core::impl::observability_recorder>
|
|
88
|
+
{
|
|
89
|
+
auto rec = core::impl::observability_recorder::create(
|
|
90
|
+
operation_name, parent_span, core_.tracer(), core_.meter());
|
|
91
|
+
|
|
92
|
+
rec->with_bucket_name(name_);
|
|
93
|
+
if (service.has_value()) {
|
|
94
|
+
rec->with_service(core::tracing::service_name_for_http_service(service.value()));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return rec;
|
|
98
|
+
}
|
|
99
|
+
|
|
76
100
|
core::cluster core_;
|
|
77
101
|
std::string name_;
|
|
78
102
|
std::shared_ptr<crypto::manager> crypto_manager_;
|
|
@@ -25,12 +25,15 @@
|
|
|
25
25
|
#include "core/io/ip_protocol.hxx"
|
|
26
26
|
#include "core/origin.hxx"
|
|
27
27
|
#include "core/tls_verify_mode.hxx"
|
|
28
|
+
#include "core/tracing/constants.hxx"
|
|
29
|
+
#include "core/tracing/tracer_wrapper.hxx"
|
|
28
30
|
#include "core/transactions.hxx"
|
|
29
31
|
#include "core/utils/connection_string.hxx"
|
|
30
32
|
#include "core/utils/movable_function.hxx"
|
|
31
33
|
#include "diagnostics.hxx"
|
|
32
34
|
#include "error.hxx"
|
|
33
35
|
#include "internal_search_result.hxx"
|
|
36
|
+
#include "observability_recorder.hxx"
|
|
34
37
|
#include "query.hxx"
|
|
35
38
|
#include "search.hxx"
|
|
36
39
|
|
|
@@ -87,6 +90,7 @@ options_to_origin(const std::string& connection_string, cluster_options::built o
|
|
|
87
90
|
auth.password = std::move(opts.password);
|
|
88
91
|
auth.certificate_path = std::move(opts.certificate_path);
|
|
89
92
|
auth.key_path = std::move(opts.key_path);
|
|
93
|
+
auth.jwt_token = std::move(opts.jwt_token);
|
|
90
94
|
auth.allowed_sasl_mechanisms = std::move(opts.allowed_sasl_mechanisms);
|
|
91
95
|
|
|
92
96
|
core::cluster_options user_options;
|
|
@@ -146,6 +150,7 @@ options_to_origin(const std::string& connection_string, cluster_options::built o
|
|
|
146
150
|
user_options.tcp_keep_alive_interval = opts.network.tcp_keep_alive_interval;
|
|
147
151
|
user_options.config_poll_interval = opts.network.config_poll_interval;
|
|
148
152
|
user_options.idle_http_connection_timeout = opts.network.idle_http_connection_timeout;
|
|
153
|
+
user_options.enable_lazy_connections = opts.network.enable_lazy_connections;
|
|
149
154
|
if (opts.network.max_http_connections) {
|
|
150
155
|
user_options.max_http_connections = opts.network.max_http_connections.value();
|
|
151
156
|
}
|
|
@@ -178,8 +183,8 @@ options_to_origin(const std::string& connection_string, cluster_options::built o
|
|
|
178
183
|
user_options.enable_tracing = opts.tracing.enabled;
|
|
179
184
|
if (opts.tracing.enabled) {
|
|
180
185
|
user_options.tracer = opts.tracing.tracer;
|
|
181
|
-
user_options.
|
|
182
|
-
user_options.
|
|
186
|
+
user_options.orphan_options.emit_interval = opts.tracing.orphaned_emit_interval;
|
|
187
|
+
user_options.orphan_options.sample_size = opts.tracing.orphaned_sample_size;
|
|
183
188
|
|
|
184
189
|
user_options.tracing_options.threshold_emit_interval = opts.tracing.threshold_emit_interval;
|
|
185
190
|
user_options.tracing_options.threshold_sample_size = opts.tracing.threshold_sample_size;
|
|
@@ -320,9 +325,16 @@ public:
|
|
|
320
325
|
|
|
321
326
|
void query(std::string statement, query_options::built options, query_handler&& handler) const
|
|
322
327
|
{
|
|
328
|
+
auto obs_rec = create_observability_recorder(
|
|
329
|
+
core::tracing::operation::query, core::service_type::query, options.parent_span);
|
|
330
|
+
obs_rec->with_query_statement(statement, options);
|
|
331
|
+
|
|
332
|
+
auto request = core::impl::build_query_request(
|
|
333
|
+
std::move(statement), {}, std::move(options), obs_rec->operation_span());
|
|
334
|
+
|
|
323
335
|
return core_.execute(
|
|
324
|
-
|
|
325
|
-
|
|
336
|
+
std::move(request), [obs_rec = std::move(obs_rec), handler = std::move(handler)](auto resp) {
|
|
337
|
+
obs_rec->finish(resp.ctx.retry_attempts, resp.ctx.ec);
|
|
326
338
|
return handler(core::impl::make_error(resp.ctx), core::impl::build_result(resp));
|
|
327
339
|
});
|
|
328
340
|
}
|
|
@@ -331,30 +343,45 @@ public:
|
|
|
331
343
|
analytics_options::built options,
|
|
332
344
|
analytics_handler&& handler) const
|
|
333
345
|
{
|
|
346
|
+
auto obs_rec = create_observability_recorder(
|
|
347
|
+
core::tracing::operation::analytics, core::service_type::analytics, options.parent_span);
|
|
348
|
+
obs_rec->with_query_statement(statement, options);
|
|
349
|
+
|
|
350
|
+
auto request = core::impl::build_analytics_request(
|
|
351
|
+
std::move(statement), std::move(options), {}, {}, obs_rec->operation_span());
|
|
352
|
+
|
|
334
353
|
return core_.execute(
|
|
335
|
-
|
|
336
|
-
|
|
354
|
+
std::move(request), [obs_rec = std::move(obs_rec), handler = std::move(handler)](auto resp) {
|
|
355
|
+
obs_rec->finish(resp.ctx.retry_attempts, resp.ctx.ec);
|
|
337
356
|
return handler(core::impl::make_error(resp.ctx), core::impl::build_result(resp));
|
|
338
357
|
});
|
|
339
358
|
}
|
|
340
359
|
|
|
341
360
|
void ping(const ping_options::built& options, ping_handler&& handler) const
|
|
342
361
|
{
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
362
|
+
auto obs_rec = create_observability_recorder(
|
|
363
|
+
core::tracing::operation::ping, std::nullopt, options.parent_span);
|
|
364
|
+
return core_.ping(
|
|
365
|
+
options.report_id,
|
|
366
|
+
{},
|
|
367
|
+
core::impl::to_core_service_types(options.service_types),
|
|
368
|
+
options.timeout,
|
|
369
|
+
[obs_rec = std::move(obs_rec), handler = std::move(handler)](const auto& resp) mutable {
|
|
370
|
+
obs_rec->finish({});
|
|
371
|
+
return handler({}, core::impl::build_result(resp));
|
|
372
|
+
});
|
|
350
373
|
};
|
|
351
374
|
|
|
352
375
|
void diagnostics(const diagnostics_options::built& options, diagnostics_handler&& handler) const
|
|
353
376
|
{
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
377
|
+
auto obs_rec = create_observability_recorder(
|
|
378
|
+
core::tracing::operation::diagnostics, std::nullopt, options.parent_span);
|
|
379
|
+
return core_.diagnostics(
|
|
380
|
+
options.report_id,
|
|
381
|
+
[obs_rec = std::move(obs_rec), handler = std::move(handler)](const auto& resp) mutable {
|
|
382
|
+
obs_rec->finish({});
|
|
383
|
+
return handler({}, core::impl::build_result(resp));
|
|
384
|
+
});
|
|
358
385
|
}
|
|
359
386
|
|
|
360
387
|
void search(std::string index_name,
|
|
@@ -362,14 +389,29 @@ public:
|
|
|
362
389
|
const search_options::built& options,
|
|
363
390
|
search_handler&& handler) const
|
|
364
391
|
{
|
|
392
|
+
auto obs_rec = create_observability_recorder(
|
|
393
|
+
core::tracing::operation::search, core::service_type::search, options.parent_span);
|
|
394
|
+
|
|
395
|
+
auto core_req = core::impl::build_search_request(
|
|
396
|
+
std::move(index_name), std::move(request), options, {}, {}, obs_rec->operation_span());
|
|
365
397
|
return core_.execute(
|
|
366
|
-
|
|
367
|
-
[handler = std::move(handler)](const auto& resp) mutable {
|
|
398
|
+
std::move(core_req),
|
|
399
|
+
[obs_rec = std::move(obs_rec), handler = std::move(handler)](const auto& resp) mutable {
|
|
400
|
+
obs_rec->finish(resp.ctx.retry_attempts, resp.ctx.ec);
|
|
368
401
|
return handler(core::impl::make_error(resp.ctx),
|
|
369
402
|
search_result{ internal_search_result{ resp } });
|
|
370
403
|
});
|
|
371
404
|
}
|
|
372
405
|
|
|
406
|
+
auto set_authenticator(const core::cluster_credentials& auth) const -> error
|
|
407
|
+
{
|
|
408
|
+
auto e = core_.update_credentials(auth);
|
|
409
|
+
if (e.ec) {
|
|
410
|
+
return core::impl::make_error(e);
|
|
411
|
+
}
|
|
412
|
+
return {};
|
|
413
|
+
}
|
|
414
|
+
|
|
373
415
|
void notify_fork(fork_event event)
|
|
374
416
|
{
|
|
375
417
|
if (event == fork_event::prepare) {
|
|
@@ -427,6 +469,20 @@ private:
|
|
|
427
469
|
}
|
|
428
470
|
}
|
|
429
471
|
|
|
472
|
+
[[nodiscard]] auto create_observability_recorder(
|
|
473
|
+
const std::string& operation_name,
|
|
474
|
+
const std::optional<core::service_type> service,
|
|
475
|
+
const std::shared_ptr<tracing::request_span>& parent_span) const
|
|
476
|
+
-> std::unique_ptr<core::impl::observability_recorder>
|
|
477
|
+
{
|
|
478
|
+
auto rec = core::impl::observability_recorder::create(
|
|
479
|
+
operation_name, parent_span, core_.tracer(), core_.meter());
|
|
480
|
+
if (service.has_value()) {
|
|
481
|
+
rec->with_service(core::tracing::service_name_for_http_service(service.value()));
|
|
482
|
+
}
|
|
483
|
+
return rec;
|
|
484
|
+
}
|
|
485
|
+
|
|
430
486
|
std::string connection_string_;
|
|
431
487
|
cluster_options::built options_;
|
|
432
488
|
asio::io_context io_{ ASIO_CONCURRENCY_HINT_SAFE };
|
|
@@ -633,6 +689,38 @@ cluster::close() -> std::future<void>
|
|
|
633
689
|
return future;
|
|
634
690
|
}
|
|
635
691
|
|
|
692
|
+
auto
|
|
693
|
+
cluster::set_authenticator(const password_authenticator& authenticator) -> couchbase::error
|
|
694
|
+
{
|
|
695
|
+
core::cluster_credentials auth;
|
|
696
|
+
auth.username = authenticator.username_;
|
|
697
|
+
auth.password = authenticator.password_;
|
|
698
|
+
if (authenticator.ldap_compatible_) {
|
|
699
|
+
auth.allowed_sasl_mechanisms = { { "PLAIN" } };
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
return impl_->set_authenticator(auth);
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
auto
|
|
706
|
+
cluster::set_authenticator(const certificate_authenticator& authenticator) -> couchbase::error
|
|
707
|
+
{
|
|
708
|
+
core::cluster_credentials auth;
|
|
709
|
+
auth.certificate_path = authenticator.certificate_path_;
|
|
710
|
+
auth.key_path = authenticator.key_path_;
|
|
711
|
+
|
|
712
|
+
return impl_->set_authenticator(auth);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
auto
|
|
716
|
+
cluster::set_authenticator(const jwt_authenticator& authenticator) -> error
|
|
717
|
+
{
|
|
718
|
+
core::cluster_credentials auth;
|
|
719
|
+
auth.jwt_token = authenticator.token_;
|
|
720
|
+
|
|
721
|
+
return impl_->set_authenticator(auth);
|
|
722
|
+
}
|
|
723
|
+
|
|
636
724
|
auto
|
|
637
725
|
cluster::query_indexes() const -> query_index_manager
|
|
638
726
|
{
|
|
@@ -167,7 +167,9 @@ build_result(operations::query_response& resp) -> query_result
|
|
|
167
167
|
auto
|
|
168
168
|
build_query_request(std::string statement,
|
|
169
169
|
std::optional<std::string> query_context,
|
|
170
|
-
query_options::built options
|
|
170
|
+
query_options::built options,
|
|
171
|
+
std::shared_ptr<couchbase::tracing::request_span> op_span)
|
|
172
|
+
-> core::operations::query_request
|
|
171
173
|
{
|
|
172
174
|
operations::query_request request{
|
|
173
175
|
std::move(statement), options.adhoc,
|
|
@@ -180,7 +182,7 @@ build_query_request(std::string statement,
|
|
|
180
182
|
std::move(query_context), std::move(options.client_context_id),
|
|
181
183
|
options.timeout, options.profile,
|
|
182
184
|
};
|
|
183
|
-
request.parent_span =
|
|
185
|
+
request.parent_span = std::move(op_span);
|
|
184
186
|
if (!options.raw.empty()) {
|
|
185
187
|
for (auto& [name, value] : options.raw) {
|
|
186
188
|
request.raw[name] = std::move(value);
|
|
@@ -232,6 +234,7 @@ build_transaction_query_result(operations::query_response resp,
|
|
|
232
234
|
auto
|
|
233
235
|
build_transaction_query_request(query_options::built opts) -> core::operations::query_request
|
|
234
236
|
{
|
|
235
|
-
|
|
237
|
+
auto parent_span_from_caller = opts.parent_span;
|
|
238
|
+
return core::impl::build_query_request("", {}, std::move(opts), parent_span_from_caller);
|
|
236
239
|
}
|
|
237
240
|
} // namespace couchbase::core::impl
|
|
@@ -26,7 +26,9 @@ namespace couchbase::core::impl
|
|
|
26
26
|
auto
|
|
27
27
|
build_query_request(std::string statement,
|
|
28
28
|
std::optional<std::string> query_context,
|
|
29
|
-
query_options::built options
|
|
29
|
+
query_options::built options,
|
|
30
|
+
std::shared_ptr<couchbase::tracing::request_span> op_span)
|
|
31
|
+
-> core::operations::query_request;
|
|
30
32
|
|
|
31
33
|
auto
|
|
32
34
|
build_result(operations::query_response& resp) -> query_result;
|