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
|
@@ -17,75 +17,50 @@
|
|
|
17
17
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
|
-
#include "opentelemetry/sdk/metrics/meter.h"
|
|
21
20
|
#include <couchbase/metrics/meter.hxx>
|
|
22
21
|
|
|
22
|
+
#include <opentelemetry/context/context.h>
|
|
23
|
+
#include <opentelemetry/metrics/meter.h>
|
|
24
|
+
#include <opentelemetry/metrics/sync_instruments.h>
|
|
25
|
+
|
|
23
26
|
#include <algorithm>
|
|
24
|
-
#include <
|
|
25
|
-
#include <
|
|
27
|
+
#include <memory>
|
|
28
|
+
#include <mutex>
|
|
29
|
+
#include <shared_mutex>
|
|
26
30
|
#include <utility>
|
|
27
|
-
|
|
28
|
-
using couchbase::metrics::meter;
|
|
29
|
-
using couchbase::metrics::value_recorder;
|
|
30
|
-
|
|
31
|
-
namespace nostd = opentelemetry::nostd;
|
|
32
|
-
namespace metrics_api = opentelemetry::metrics;
|
|
33
|
-
namespace metrics_sdk = opentelemetry::sdk::metrics;
|
|
31
|
+
#include <variant>
|
|
34
32
|
|
|
35
33
|
namespace couchbase::metrics
|
|
36
34
|
{
|
|
37
|
-
|
|
38
|
-
class otel_sync_histogram
|
|
39
|
-
{
|
|
40
|
-
public:
|
|
41
|
-
otel_sync_histogram(nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter)
|
|
42
|
-
: histogram_counter_(histogram_counter)
|
|
43
|
-
{
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
void record(std::uint64_t value,
|
|
47
|
-
const opentelemetry::common::KeyValueIterable& tags,
|
|
48
|
-
opentelemetry::context::Context& ctx)
|
|
49
|
-
{
|
|
50
|
-
histogram_counter_->Record(value, tags, ctx);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
private:
|
|
54
|
-
nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter_;
|
|
55
|
-
std::mutex mutex_;
|
|
56
|
-
};
|
|
57
|
-
|
|
35
|
+
template<typename T>
|
|
58
36
|
class otel_value_recorder : public couchbase::metrics::value_recorder
|
|
59
37
|
{
|
|
60
38
|
public:
|
|
61
39
|
explicit otel_value_recorder(
|
|
62
|
-
nostd::shared_ptr<
|
|
40
|
+
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<T>> histogram,
|
|
63
41
|
const std::map<std::string, std::string>& tags)
|
|
64
|
-
:
|
|
65
|
-
, tags_
|
|
66
|
-
{
|
|
67
|
-
}
|
|
68
|
-
void record_value(std::int64_t value) override
|
|
42
|
+
: histogram_{ std::move(histogram) }
|
|
43
|
+
, tags_{ tags }
|
|
69
44
|
{
|
|
70
|
-
|
|
71
|
-
auto uvalue = static_cast<std::uint64_t>(value);
|
|
72
|
-
histogram_counter_->Record(
|
|
73
|
-
uvalue, opentelemetry::common::KeyValueIterableView<decltype(tags_)>{ tags_ }, context_);
|
|
45
|
+
tags_.erase("__unit");
|
|
74
46
|
}
|
|
75
47
|
|
|
76
|
-
|
|
77
|
-
{
|
|
78
|
-
return tags_;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter()
|
|
48
|
+
void record_value(std::int64_t value) override
|
|
82
49
|
{
|
|
83
|
-
|
|
50
|
+
if constexpr (std::is_same_v<T, double>) {
|
|
51
|
+
auto value_in_seconds = static_cast<double>(value) / 1'000'000.0;
|
|
52
|
+
histogram_->Record(
|
|
53
|
+
value_in_seconds, opentelemetry::common::KeyValueIterableView{ tags_ }, context_);
|
|
54
|
+
} else {
|
|
55
|
+
value = std::max<int64_t>(value, 0);
|
|
56
|
+
auto uvalue = static_cast<std::uint64_t>(value);
|
|
57
|
+
histogram_->Record(uvalue, opentelemetry::common::KeyValueIterableView{ tags_ }, context_);
|
|
58
|
+
}
|
|
84
59
|
}
|
|
85
60
|
|
|
86
61
|
private:
|
|
87
|
-
nostd::shared_ptr<
|
|
88
|
-
|
|
62
|
+
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<T>> histogram_;
|
|
63
|
+
std::map<std::string, std::string> tags_{};
|
|
89
64
|
opentelemetry::context::Context context_{};
|
|
90
65
|
std::mutex mutex_;
|
|
91
66
|
};
|
|
@@ -93,47 +68,67 @@ private:
|
|
|
93
68
|
class otel_meter : public couchbase::metrics::meter
|
|
94
69
|
{
|
|
95
70
|
public:
|
|
96
|
-
explicit otel_meter(nostd::shared_ptr<
|
|
97
|
-
: meter_(meter)
|
|
71
|
+
explicit otel_meter(opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Meter> meter)
|
|
72
|
+
: meter_{ std::move(meter) }
|
|
98
73
|
{
|
|
99
74
|
}
|
|
100
75
|
|
|
101
76
|
auto get_value_recorder(const std::string& name, const std::map<std::string, std::string>& tags)
|
|
102
77
|
-> std::shared_ptr<value_recorder> override
|
|
103
78
|
{
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// Note we'd like to make one with more buckets than default, given the range of
|
|
110
|
-
// response times we'd like to display (queries vs kv for instance), but otel
|
|
111
|
-
// api doesn't seem to allow this.
|
|
112
|
-
return recorders_
|
|
113
|
-
.insert({ name,
|
|
114
|
-
std::make_shared<otel_value_recorder>(
|
|
115
|
-
meter_->CreateUInt64Histogram(name, "", "us"), tags) })
|
|
116
|
-
->second;
|
|
79
|
+
bool in_seconds{ false };
|
|
80
|
+
if (tags.count("__unit") > 0) {
|
|
81
|
+
if (tags.at("__unit") == "s") {
|
|
82
|
+
in_seconds = true;
|
|
83
|
+
}
|
|
117
84
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
85
|
+
|
|
86
|
+
{
|
|
87
|
+
// Check if we already have the histogram
|
|
88
|
+
std::shared_lock lock(mutex_);
|
|
89
|
+
if (in_seconds) {
|
|
90
|
+
if (const auto it = double_histograms_.find(name); it != double_histograms_.end()) {
|
|
91
|
+
return std::make_shared<otel_value_recorder<double>>(it->second, tags);
|
|
92
|
+
}
|
|
93
|
+
} else {
|
|
94
|
+
if (const auto it = uint_histograms_.find(name); it != uint_histograms_.end()) {
|
|
95
|
+
return std::make_shared<otel_value_recorder<std::uint64_t>>(it->second, tags);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
{
|
|
101
|
+
// We have to check if we already have the histogram again, before creating it, in case
|
|
102
|
+
// another thread created it while we were waiting for the exclusive lock
|
|
103
|
+
std::scoped_lock lock(mutex_);
|
|
104
|
+
if (in_seconds) {
|
|
105
|
+
if (const auto it = double_histograms_.find(name); it != double_histograms_.end()) {
|
|
106
|
+
return std::make_shared<otel_value_recorder<double>>(it->second, tags);
|
|
107
|
+
}
|
|
108
|
+
// Not found, we have to create it
|
|
109
|
+
auto histogram = meter_->CreateDoubleHistogram(name, "", "s");
|
|
110
|
+
double_histograms_.emplace(name, std::move(histogram));
|
|
111
|
+
return std::make_shared<otel_value_recorder<double>>(double_histograms_.at(name), tags);
|
|
112
|
+
} else {
|
|
113
|
+
if (const auto it = uint_histograms_.find(name); it != uint_histograms_.end()) {
|
|
114
|
+
return std::make_shared<otel_value_recorder<std::uint64_t>>(it->second, tags);
|
|
115
|
+
}
|
|
116
|
+
// Not found, we have to create it
|
|
117
|
+
auto histogram = meter_->CreateUInt64Histogram(name);
|
|
118
|
+
uint_histograms_.emplace(name, std::move(histogram));
|
|
119
|
+
return std::make_shared<otel_value_recorder<std::uint64_t>>(uint_histograms_.at(name),
|
|
120
|
+
tags);
|
|
123
121
|
}
|
|
124
122
|
}
|
|
125
|
-
// if you are here, we need to add one with these tags and the histogram associated with the
|
|
126
|
-
// name.
|
|
127
|
-
return recorders_
|
|
128
|
-
.insert(
|
|
129
|
-
{ name,
|
|
130
|
-
std::make_shared<otel_value_recorder>(it.first->second->histogram_counter(), tags) })
|
|
131
|
-
->second;
|
|
132
123
|
}
|
|
133
124
|
|
|
134
125
|
private:
|
|
135
|
-
nostd::shared_ptr<
|
|
136
|
-
std::
|
|
137
|
-
std::
|
|
126
|
+
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Meter> meter_;
|
|
127
|
+
std::shared_mutex mutex_;
|
|
128
|
+
std::map<std::string, opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<double>>>
|
|
129
|
+
double_histograms_;
|
|
130
|
+
std::map<std::string,
|
|
131
|
+
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<std::uint64_t>>>
|
|
132
|
+
uint_histograms_;
|
|
138
133
|
};
|
|
139
134
|
} // namespace couchbase::metrics
|
|
@@ -114,6 +114,22 @@ public:
|
|
|
114
114
|
return *this;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
+
/**
|
|
118
|
+
* Enables or disables lazy connection of data endpoints.
|
|
119
|
+
*
|
|
120
|
+
* When enabled, connections are established only when the first operation for a given endpoint is
|
|
121
|
+
* scheduled, rather than at cluster object construction time.
|
|
122
|
+
*
|
|
123
|
+
* @volatile This option is considered unstable and may change in future releases.
|
|
124
|
+
*
|
|
125
|
+
* @since 1.3.0
|
|
126
|
+
*/
|
|
127
|
+
auto enable_lazy_connections(bool enable) -> network_options&
|
|
128
|
+
{
|
|
129
|
+
enable_lazy_connections_ = enable;
|
|
130
|
+
return *this;
|
|
131
|
+
}
|
|
132
|
+
|
|
117
133
|
struct built {
|
|
118
134
|
std::string network;
|
|
119
135
|
std::string server_group;
|
|
@@ -123,6 +139,7 @@ public:
|
|
|
123
139
|
std::chrono::milliseconds config_poll_interval;
|
|
124
140
|
std::chrono::milliseconds idle_http_connection_timeout;
|
|
125
141
|
std::optional<std::size_t> max_http_connections;
|
|
142
|
+
bool enable_lazy_connections;
|
|
126
143
|
};
|
|
127
144
|
|
|
128
145
|
[[nodiscard]] auto build() const -> built
|
|
@@ -136,6 +153,7 @@ public:
|
|
|
136
153
|
config_poll_interval_,
|
|
137
154
|
idle_http_connection_timeout_,
|
|
138
155
|
max_http_connections_,
|
|
156
|
+
enable_lazy_connections_,
|
|
139
157
|
};
|
|
140
158
|
}
|
|
141
159
|
|
|
@@ -149,5 +167,6 @@ private:
|
|
|
149
167
|
std::chrono::milliseconds config_poll_floor_{ default_config_poll_floor };
|
|
150
168
|
std::chrono::milliseconds idle_http_connection_timeout_{ default_idle_http_connection_timeout };
|
|
151
169
|
std::optional<std::size_t> max_http_connections_{};
|
|
170
|
+
bool enable_lazy_connections_{ false };
|
|
152
171
|
};
|
|
153
172
|
} // namespace couchbase
|
|
@@ -0,0 +1,123 @@
|
|
|
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 <cstdint>
|
|
21
|
+
#include <functional>
|
|
22
|
+
#include <string>
|
|
23
|
+
|
|
24
|
+
namespace couchbase
|
|
25
|
+
{
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Uniquely identifies a cluster node.
|
|
29
|
+
*
|
|
30
|
+
* On Couchbase Server 8.0.1+ the identifier is the server-assigned node UUID.
|
|
31
|
+
* On older releases, a stable opaque token is derived from the node's hostname
|
|
32
|
+
* and management port.
|
|
33
|
+
*
|
|
34
|
+
* The type is equality-comparable, ordered, and hashable.
|
|
35
|
+
*
|
|
36
|
+
* @since 1.3.2
|
|
37
|
+
* @uncommitted
|
|
38
|
+
*/
|
|
39
|
+
class node_id
|
|
40
|
+
{
|
|
41
|
+
public:
|
|
42
|
+
/**
|
|
43
|
+
* Creates an empty (invalid) node_id.
|
|
44
|
+
*
|
|
45
|
+
* @since 1.3.2
|
|
46
|
+
* @uncommitted
|
|
47
|
+
*/
|
|
48
|
+
node_id() = default;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* User-facing identifier string.
|
|
52
|
+
*
|
|
53
|
+
* Returns node_uuid when the server provides one, otherwise a stable
|
|
54
|
+
* hex-encoded hash derived from hostname and management port.
|
|
55
|
+
*
|
|
56
|
+
* @return opaque identifier string (empty for default-constructed instances)
|
|
57
|
+
*
|
|
58
|
+
* @since 1.3.2
|
|
59
|
+
* @uncommitted
|
|
60
|
+
*/
|
|
61
|
+
[[nodiscard]] auto id() const -> const std::string&;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The server-assigned node UUID (empty on servers before 8.0.1).
|
|
65
|
+
*
|
|
66
|
+
* @since 1.3.2
|
|
67
|
+
* @uncommitted
|
|
68
|
+
*/
|
|
69
|
+
[[nodiscard]] auto node_uuid() const -> const std::string&;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The hostname of the node.
|
|
73
|
+
*
|
|
74
|
+
* @since 1.3.2
|
|
75
|
+
* @uncommitted
|
|
76
|
+
*/
|
|
77
|
+
[[nodiscard]] auto hostname() const -> const std::string&;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The port of the node's key-value service.
|
|
81
|
+
*
|
|
82
|
+
* This reflects the port actually used by the client: the TLS port when the
|
|
83
|
+
* cluster connection is TLS-enabled, otherwise the plain port.
|
|
84
|
+
*
|
|
85
|
+
* @since 1.3.2
|
|
86
|
+
* @uncommitted
|
|
87
|
+
*/
|
|
88
|
+
[[nodiscard]] auto port() const -> std::uint16_t;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Returns true when the node_id was properly initialized (not default-constructed).
|
|
92
|
+
*
|
|
93
|
+
* @since 1.3.2
|
|
94
|
+
* @uncommitted
|
|
95
|
+
*/
|
|
96
|
+
explicit operator bool() const;
|
|
97
|
+
|
|
98
|
+
auto operator==(const node_id& other) const -> bool;
|
|
99
|
+
auto operator!=(const node_id& other) const -> bool;
|
|
100
|
+
auto operator<(const node_id& other) const -> bool;
|
|
101
|
+
|
|
102
|
+
private:
|
|
103
|
+
friend class internal_node_id;
|
|
104
|
+
|
|
105
|
+
node_id(std::string node_uuid, std::string hostname, std::uint16_t port);
|
|
106
|
+
|
|
107
|
+
std::string node_uuid_{};
|
|
108
|
+
std::string hostname_{};
|
|
109
|
+
std::uint16_t port_{ 0 };
|
|
110
|
+
// Computed once at construction: node_uuid_ if non-empty, otherwise a
|
|
111
|
+
// deterministic hex-encoded CRC32 hash of "hostname:port".
|
|
112
|
+
std::string id_{};
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
} // namespace couchbase
|
|
116
|
+
|
|
117
|
+
template<>
|
|
118
|
+
struct std::hash<couchbase::node_id> {
|
|
119
|
+
auto operator()(const couchbase::node_id& nid) const noexcept -> std::size_t
|
|
120
|
+
{
|
|
121
|
+
return std::hash<std::string>{}(nid.id());
|
|
122
|
+
}
|
|
123
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
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/common_options.hxx>
|
|
21
|
+
#include <couchbase/error.hxx>
|
|
22
|
+
#include <couchbase/node_id.hxx>
|
|
23
|
+
|
|
24
|
+
#include <functional>
|
|
25
|
+
|
|
26
|
+
namespace couchbase
|
|
27
|
+
{
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Options for @ref collection#node_id_for().
|
|
31
|
+
*
|
|
32
|
+
* @since 1.3.2
|
|
33
|
+
* @uncommitted
|
|
34
|
+
*/
|
|
35
|
+
struct node_id_for_options : public common_options<node_id_for_options> {
|
|
36
|
+
/**
|
|
37
|
+
* Immutable value object representing consistent options.
|
|
38
|
+
*
|
|
39
|
+
* @since 1.3.2
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
struct built : public common_options<node_id_for_options>::built {
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Validates options and returns them as an immutable value.
|
|
47
|
+
*
|
|
48
|
+
* @return consistent options as an immutable value
|
|
49
|
+
*
|
|
50
|
+
* @since 1.3.2
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
[[nodiscard]] auto build() const -> built
|
|
54
|
+
{
|
|
55
|
+
return { build_common_options() };
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
using node_id_for_handler = std::function<void(error, node_id)>;
|
|
60
|
+
|
|
61
|
+
} // namespace couchbase
|
|
@@ -0,0 +1,62 @@
|
|
|
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/common_options.hxx>
|
|
21
|
+
#include <couchbase/error.hxx>
|
|
22
|
+
#include <couchbase/node_id.hxx>
|
|
23
|
+
|
|
24
|
+
#include <functional>
|
|
25
|
+
#include <vector>
|
|
26
|
+
|
|
27
|
+
namespace couchbase
|
|
28
|
+
{
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Options for @ref collection#node_ids().
|
|
32
|
+
*
|
|
33
|
+
* @since 1.3.2
|
|
34
|
+
* @uncommitted
|
|
35
|
+
*/
|
|
36
|
+
struct node_ids_options : public common_options<node_ids_options> {
|
|
37
|
+
/**
|
|
38
|
+
* Immutable value object representing consistent options.
|
|
39
|
+
*
|
|
40
|
+
* @since 1.3.2
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
struct built : public common_options<node_ids_options>::built {
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Validates options and returns them as an immutable value.
|
|
48
|
+
*
|
|
49
|
+
* @return consistent options as an immutable value
|
|
50
|
+
*
|
|
51
|
+
* @since 1.3.2
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
[[nodiscard]] auto build() const -> built
|
|
55
|
+
{
|
|
56
|
+
return { build_common_options() };
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
using node_ids_handler = std::function<void(error, std::vector<node_id>)>;
|
|
61
|
+
|
|
62
|
+
} // namespace couchbase
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
20
|
#include <couchbase/cas.hxx>
|
|
21
|
+
#include <couchbase/node_id.hxx>
|
|
22
|
+
|
|
23
|
+
#include <utility>
|
|
21
24
|
|
|
22
25
|
namespace couchbase
|
|
23
26
|
{
|
|
@@ -48,6 +51,19 @@ public:
|
|
|
48
51
|
{
|
|
49
52
|
}
|
|
50
53
|
|
|
54
|
+
/**
|
|
55
|
+
* @param cas
|
|
56
|
+
* @param node_id identity of the node that served the request
|
|
57
|
+
*
|
|
58
|
+
* @since 1.3.2
|
|
59
|
+
* @uncommitted
|
|
60
|
+
*/
|
|
61
|
+
result(couchbase::cas cas, couchbase::node_id node_id)
|
|
62
|
+
: cas_(cas)
|
|
63
|
+
, node_id_(std::move(node_id))
|
|
64
|
+
{
|
|
65
|
+
}
|
|
66
|
+
|
|
51
67
|
/**
|
|
52
68
|
* @return
|
|
53
69
|
*
|
|
@@ -59,8 +75,34 @@ public:
|
|
|
59
75
|
return cas_;
|
|
60
76
|
}
|
|
61
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Returns the identity of the cluster node that served this request.
|
|
80
|
+
*
|
|
81
|
+
* The returned node_id is default-constructed (falsy) when the node
|
|
82
|
+
* could not be determined.
|
|
83
|
+
*
|
|
84
|
+
* @return identity of the serving node
|
|
85
|
+
*
|
|
86
|
+
* @since 1.3.2
|
|
87
|
+
* @uncommitted
|
|
88
|
+
*/
|
|
89
|
+
[[nodiscard]] auto node_id() const -> const couchbase::node_id&
|
|
90
|
+
{
|
|
91
|
+
return node_id_;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @since 1.3.2
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
void node_id(couchbase::node_id id)
|
|
99
|
+
{
|
|
100
|
+
node_id_ = std::move(id);
|
|
101
|
+
}
|
|
102
|
+
|
|
62
103
|
private:
|
|
63
104
|
couchbase::cas cas_{ 0U };
|
|
105
|
+
couchbase::node_id node_id_{};
|
|
64
106
|
};
|
|
65
107
|
|
|
66
108
|
} // namespace couchbase
|
|
@@ -18,18 +18,15 @@
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
20
|
#include <couchbase/tracing/request_tracer.hxx>
|
|
21
|
-
|
|
22
|
-
#include <opentelemetry/sdk/trace/simple_processor.h>
|
|
23
|
-
#include <opentelemetry/sdk/trace/tracer_provider.h>
|
|
21
|
+
|
|
24
22
|
#include <opentelemetry/trace/tracer.h>
|
|
25
23
|
|
|
26
|
-
namespace nostd = opentelemetry::nostd;
|
|
27
24
|
namespace couchbase::tracing
|
|
28
25
|
{
|
|
29
26
|
class otel_request_span : public couchbase::tracing::request_span
|
|
30
27
|
{
|
|
31
28
|
public:
|
|
32
|
-
explicit otel_request_span(nostd::shared_ptr<opentelemetry::trace::Span> span)
|
|
29
|
+
explicit otel_request_span(opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span)
|
|
33
30
|
: span_(std::move(span))
|
|
34
31
|
{
|
|
35
32
|
}
|
|
@@ -45,42 +42,43 @@ public:
|
|
|
45
42
|
{
|
|
46
43
|
span_->End();
|
|
47
44
|
}
|
|
48
|
-
nostd::shared_ptr<opentelemetry::trace::Span>
|
|
45
|
+
auto wrapped_span() -> opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span>
|
|
49
46
|
{
|
|
50
47
|
return span_;
|
|
51
48
|
}
|
|
52
49
|
|
|
53
50
|
private:
|
|
54
|
-
nostd::shared_ptr<opentelemetry::trace::Span> span_;
|
|
51
|
+
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span_;
|
|
55
52
|
};
|
|
56
53
|
|
|
57
54
|
class otel_request_tracer : public couchbase::tracing::request_tracer
|
|
58
55
|
{
|
|
59
56
|
public:
|
|
60
|
-
otel_request_tracer(
|
|
57
|
+
explicit otel_request_tracer(
|
|
58
|
+
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> tracer)
|
|
61
59
|
: tracer_(std::move(tracer))
|
|
62
60
|
{
|
|
63
61
|
}
|
|
64
62
|
|
|
65
|
-
auto start_span(std::string name, std::shared_ptr<couchbase::tracing::request_span> parent
|
|
63
|
+
auto start_span(std::string name, std::shared_ptr<couchbase::tracing::request_span> parent)
|
|
66
64
|
-> std::shared_ptr<couchbase::tracing::request_span> override
|
|
67
65
|
{
|
|
68
|
-
auto wrapped_parent = std::dynamic_pointer_cast<otel_request_span>(parent);
|
|
66
|
+
const auto wrapped_parent = std::dynamic_pointer_cast<otel_request_span>(parent);
|
|
67
|
+
opentelemetry::trace::StartSpanOptions opts;
|
|
68
|
+
opts.kind = opentelemetry::trace::SpanKind::kClient;
|
|
69
69
|
if (wrapped_parent) {
|
|
70
|
-
opentelemetry::trace::StartSpanOptions opts;
|
|
71
70
|
opts.parent = wrapped_parent->wrapped_span()->GetContext();
|
|
72
|
-
return std::make_shared<otel_request_span>(tracer_->StartSpan(name, opts));
|
|
73
71
|
}
|
|
74
|
-
return std::make_shared<otel_request_span>(tracer_->StartSpan(name));
|
|
72
|
+
return std::make_shared<otel_request_span>(tracer_->StartSpan(name, opts));
|
|
75
73
|
}
|
|
76
74
|
|
|
77
|
-
auto wrap_span(nostd::shared_ptr<opentelemetry::trace::Span> span)
|
|
75
|
+
auto wrap_span(opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span)
|
|
78
76
|
-> std::shared_ptr<couchbase::tracing::otel_request_span>
|
|
79
77
|
{
|
|
80
|
-
return std::make_shared<couchbase::tracing::otel_request_span>(span);
|
|
78
|
+
return std::make_shared<couchbase::tracing::otel_request_span>(std::move(span));
|
|
81
79
|
}
|
|
82
80
|
|
|
83
81
|
private:
|
|
84
|
-
nostd::shared_ptr<opentelemetry::trace::Tracer> tracer_;
|
|
82
|
+
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> tracer_;
|
|
85
83
|
};
|
|
86
|
-
} // namespace couchbase::tracing
|
|
84
|
+
} // namespace couchbase::tracing
|
|
@@ -51,12 +51,12 @@ public:
|
|
|
51
51
|
return name_;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
[[nodiscard]] auto parent() const -> std::shared_ptr<request_span>
|
|
54
|
+
[[nodiscard]] virtual auto parent() const -> std::shared_ptr<request_span>
|
|
55
55
|
{
|
|
56
56
|
return parent_;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
virtual auto uses_tags() const -> bool
|
|
59
|
+
[[nodiscard]] virtual auto uses_tags() const -> bool
|
|
60
60
|
{
|
|
61
61
|
return true;
|
|
62
62
|
}
|
data/ext/couchbase.cxx
CHANGED
|
@@ -25,8 +25,10 @@
|
|
|
25
25
|
#include "rcb_diagnostics.hxx"
|
|
26
26
|
#include "rcb_exceptions.hxx"
|
|
27
27
|
#include "rcb_extras.hxx"
|
|
28
|
+
#include "rcb_hdr_histogram.hxx"
|
|
28
29
|
#include "rcb_logger.hxx"
|
|
29
30
|
#include "rcb_multi.hxx"
|
|
31
|
+
#include "rcb_observability.hxx"
|
|
30
32
|
#include "rcb_query.hxx"
|
|
31
33
|
#include "rcb_range_scan.hxx"
|
|
32
34
|
#include "rcb_search.hxx"
|
|
@@ -64,5 +66,7 @@ Init_libcouchbase(void)
|
|
|
64
66
|
couchbase::ruby::init_diagnostics(cBackend);
|
|
65
67
|
couchbase::ruby::init_extras(cBackend);
|
|
66
68
|
couchbase::ruby::init_logger_methods(cBackend);
|
|
69
|
+
couchbase::ruby::init_hdr_histogram(mCouchbase);
|
|
70
|
+
couchbase::ruby::init_observability(cBackend);
|
|
67
71
|
}
|
|
68
72
|
}
|
data/ext/extconf.rb
CHANGED