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
|
@@ -28,13 +28,6 @@ struct supports_sticky_node : public std::false_type {
|
|
|
28
28
|
template<typename T>
|
|
29
29
|
inline constexpr bool supports_sticky_node_v = supports_sticky_node<T>::value;
|
|
30
30
|
|
|
31
|
-
template<typename T>
|
|
32
|
-
struct supports_parent_span : public std::false_type {
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
template<typename T>
|
|
36
|
-
inline constexpr bool supports_parent_span_v = supports_parent_span<T>::value;
|
|
37
|
-
|
|
38
31
|
template<typename T>
|
|
39
32
|
struct supports_readonly : public std::false_type {
|
|
40
33
|
};
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
#include "core/document_id_fmt.hxx"
|
|
22
22
|
#include "core/error_context/key_value_error_map_info.hxx"
|
|
23
23
|
#include "core/metrics/meter_wrapper.hxx"
|
|
24
|
+
#include "core/operations/operation_traits.hxx"
|
|
24
25
|
#include "core/platform/uuid.h"
|
|
25
26
|
#include "core/protocol/client_request.hxx"
|
|
26
27
|
#include "core/protocol/client_response.hxx"
|
|
@@ -66,10 +67,14 @@ struct mcbp_command : public std::enable_shared_from_this<mcbp_command<Manager,
|
|
|
66
67
|
std::string id_{ fmt::format("{:02x}/{}",
|
|
67
68
|
static_cast<std::uint8_t>(encoded_request_type::body_type::opcode),
|
|
68
69
|
uuid::to_string(uuid::random())) };
|
|
70
|
+
#ifdef COUCHBASE_CXX_CLIENT_CREATE_OPERATION_SPAN_IN_CORE
|
|
69
71
|
std::shared_ptr<couchbase::tracing::request_span> span_{ nullptr };
|
|
70
|
-
|
|
72
|
+
#endif
|
|
73
|
+
std::shared_ptr<couchbase::tracing::request_span> parent_span_{ nullptr };
|
|
71
74
|
std::optional<std::string> last_dispatched_from_{};
|
|
72
75
|
std::optional<std::string> last_dispatched_to_{};
|
|
76
|
+
std::chrono::time_point<std::chrono::steady_clock> started_at_{};
|
|
77
|
+
std::vector<std::chrono::microseconds> server_durations_{};
|
|
73
78
|
|
|
74
79
|
mcbp_command(asio::io_context& ctx,
|
|
75
80
|
std::shared_ptr<Manager> manager,
|
|
@@ -80,6 +85,7 @@ struct mcbp_command : public std::enable_shared_from_this<mcbp_command<Manager,
|
|
|
80
85
|
, request(req)
|
|
81
86
|
, manager_(manager)
|
|
82
87
|
, timeout_(request.timeout.value_or(default_timeout))
|
|
88
|
+
, parent_span_(request.parent_span)
|
|
83
89
|
{
|
|
84
90
|
if constexpr (io::mcbp_traits::supports_durability_v<Request>) {
|
|
85
91
|
if (request.durability_level != durability_level::none &&
|
|
@@ -93,19 +99,19 @@ struct mcbp_command : public std::enable_shared_from_this<mcbp_command<Manager,
|
|
|
93
99
|
timeout_ = durability_timeout_floor;
|
|
94
100
|
}
|
|
95
101
|
}
|
|
96
|
-
if constexpr (io::mcbp_traits::supports_parent_span_v<Request>) {
|
|
97
|
-
parent_span = request.parent_span;
|
|
98
|
-
}
|
|
99
102
|
}
|
|
100
103
|
|
|
101
104
|
void start(mcbp_command_handler&& handler)
|
|
102
105
|
{
|
|
106
|
+
started_at_ = std::chrono::steady_clock::now();
|
|
107
|
+
#ifdef COUCHBASE_CXX_CLIENT_CREATE_OPERATION_SPAN_IN_CORE
|
|
103
108
|
span_ = manager_->tracer()->create_span(
|
|
104
|
-
tracing::span_name_for_mcbp_command(encoded_request_type::body_type::opcode),
|
|
109
|
+
tracing::span_name_for_mcbp_command(encoded_request_type::body_type::opcode), parent_span_);
|
|
105
110
|
if (span_->uses_tags()) {
|
|
106
|
-
span_->add_tag(tracing::attributes::service, tracing::service::key_value);
|
|
107
|
-
span_->add_tag(tracing::attributes::
|
|
111
|
+
span_->add_tag(tracing::attributes::op::service, tracing::service::key_value);
|
|
112
|
+
span_->add_tag(tracing::attributes::op::bucket_name, request.id.bucket());
|
|
108
113
|
}
|
|
114
|
+
#endif
|
|
109
115
|
|
|
110
116
|
handler_ = std::move(handler);
|
|
111
117
|
deadline.expires_after(timeout_);
|
|
@@ -115,20 +121,32 @@ struct mcbp_command : public std::enable_shared_from_this<mcbp_command<Manager,
|
|
|
115
121
|
}
|
|
116
122
|
self->cancel(retry_reason::do_not_retry);
|
|
117
123
|
});
|
|
124
|
+
|
|
125
|
+
if constexpr (is_cancellable_operation_v<Request>) {
|
|
126
|
+
request.cancel_token->setup([weak_self = this->weak_from_this()] {
|
|
127
|
+
if (auto self = weak_self.lock()) {
|
|
128
|
+
self->cancel(retry_reason::do_not_retry, false);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
118
132
|
}
|
|
119
133
|
|
|
120
|
-
void cancel(retry_reason reason)
|
|
134
|
+
void cancel(retry_reason reason, bool is_timeout = true)
|
|
121
135
|
{
|
|
122
136
|
if (opaque_ && session_) {
|
|
123
137
|
if (session_->cancel(opaque_.value(), asio::error::operation_aborted, reason)) {
|
|
124
138
|
handler_ = nullptr;
|
|
125
139
|
}
|
|
126
140
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
141
|
+
if (is_timeout) {
|
|
142
|
+
invoke_handler(
|
|
143
|
+
request.retries.idempotent() || !opaque_.has_value()
|
|
144
|
+
? errc::common::unambiguous_timeout // safe to retry or has not been sent to the server
|
|
145
|
+
: errc::common::ambiguous_timeout // non-idempotent and has been sent to the server
|
|
146
|
+
);
|
|
147
|
+
} else {
|
|
148
|
+
invoke_handler(errc::common::request_canceled);
|
|
149
|
+
}
|
|
132
150
|
}
|
|
133
151
|
|
|
134
152
|
void invoke_handler(std::error_code ec, std::optional<io::mcbp_message>&& msg = {})
|
|
@@ -137,15 +155,12 @@ struct mcbp_command : public std::enable_shared_from_this<mcbp_command<Manager,
|
|
|
137
155
|
deadline.cancel();
|
|
138
156
|
mcbp_command_handler handler{};
|
|
139
157
|
std::swap(handler, handler_);
|
|
158
|
+
#ifdef COUCHBASE_CXX_CLIENT_CREATE_OPERATION_SPAN_IN_CORE
|
|
140
159
|
if (span_ != nullptr) {
|
|
141
|
-
if (msg) {
|
|
142
|
-
auto server_duration_us =
|
|
143
|
-
static_cast<std::uint64_t>(protocol::parse_server_duration_us(msg.value()));
|
|
144
|
-
span_->add_tag(tracing::attributes::server_duration, server_duration_us);
|
|
145
|
-
}
|
|
146
160
|
span_->end();
|
|
147
161
|
span_ = nullptr;
|
|
148
162
|
}
|
|
163
|
+
#endif
|
|
149
164
|
if (handler) {
|
|
150
165
|
const auto& node_uuid = session_ ? session_->node_uuid() : "";
|
|
151
166
|
auto telemetry_recorder =
|
|
@@ -232,9 +247,6 @@ struct mcbp_command : public std::enable_shared_from_this<mcbp_command<Manager,
|
|
|
232
247
|
{
|
|
233
248
|
opaque_ = session_->next_opaque();
|
|
234
249
|
request.opaque = *opaque_;
|
|
235
|
-
if (span_->uses_tags()) {
|
|
236
|
-
span_->add_tag(tracing::attributes::operation_id, fmt::format("0x{:x}", request.opaque));
|
|
237
|
-
}
|
|
238
250
|
if (request.id.use_collections() && !request.id.is_collection_resolved()) {
|
|
239
251
|
if (session_->supports_feature(protocol::hello_feature::collections)) {
|
|
240
252
|
auto collection_id = session_->get_collection_uid(request.id.collection_path());
|
|
@@ -267,14 +279,23 @@ struct mcbp_command : public std::enable_shared_from_this<mcbp_command<Manager,
|
|
|
267
279
|
}
|
|
268
280
|
}
|
|
269
281
|
|
|
282
|
+
auto dispatch_span = create_dispatch_span();
|
|
270
283
|
session_->write_and_subscribe(
|
|
271
284
|
request.opaque,
|
|
272
285
|
encoded.data(session_->supports_feature(protocol::hello_feature::snappy)),
|
|
273
|
-
[self = this->shared_from_this(),
|
|
286
|
+
[self = this->shared_from_this(),
|
|
287
|
+
start = std::chrono::steady_clock::now(),
|
|
288
|
+
dispatch_span = std::move(dispatch_span)](
|
|
274
289
|
std::error_code ec,
|
|
275
290
|
retry_reason reason,
|
|
276
291
|
io::mcbp_message&& msg,
|
|
277
292
|
std::optional<key_value_error_map_info> /* error_info */) mutable {
|
|
293
|
+
{
|
|
294
|
+
const auto server_duration_us =
|
|
295
|
+
static_cast<std::uint64_t>(protocol::parse_server_duration_us(msg));
|
|
296
|
+
self->server_durations_.emplace_back(std::chrono::microseconds(server_duration_us));
|
|
297
|
+
self->close_dispatch_span(dispatch_span, server_duration_us);
|
|
298
|
+
}
|
|
278
299
|
{
|
|
279
300
|
auto latency = std::chrono::duration_cast<std::chrono::milliseconds>(
|
|
280
301
|
std::chrono::steady_clock::now() - start);
|
|
@@ -304,30 +325,30 @@ struct mcbp_command : public std::enable_shared_from_this<mcbp_command<Manager,
|
|
|
304
325
|
telemetry_recorder->record_latency(category, latency);
|
|
305
326
|
}
|
|
306
327
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
328
|
+
#ifdef COUCHBASE_CXX_CLIENT_CREATE_OPERATION_SPAN_IN_CORE
|
|
329
|
+
{
|
|
330
|
+
metrics::metric_attributes attrs{
|
|
331
|
+
service_type::key_value,
|
|
332
|
+
self->request.observability_identifier,
|
|
333
|
+
ec,
|
|
334
|
+
self->request.id.bucket(),
|
|
335
|
+
self->request.id.scope(),
|
|
336
|
+
self->request.id.collection(),
|
|
337
|
+
};
|
|
338
|
+
self->manager_->meter()->record_value(std::move(attrs), start);
|
|
339
|
+
}
|
|
340
|
+
#endif
|
|
316
341
|
|
|
317
342
|
self->retry_backoff.cancel();
|
|
318
343
|
if (ec == asio::error::operation_aborted) {
|
|
319
|
-
|
|
320
|
-
self->span_->add_tag(tracing::attributes::orphan, "aborted");
|
|
321
|
-
}
|
|
344
|
+
self->manager_->orphan_reporter()->add_orphan(self->create_orphan_attributes());
|
|
322
345
|
return self->invoke_handler(make_error_code(self->request.retries.idempotent()
|
|
323
346
|
? errc::common::unambiguous_timeout
|
|
324
347
|
: errc::common::ambiguous_timeout));
|
|
325
348
|
}
|
|
326
349
|
if (ec == errc::common::request_canceled) {
|
|
327
350
|
if (!self->request.retries.idempotent() && !allows_non_idempotent_retry(reason)) {
|
|
328
|
-
|
|
329
|
-
self->span_->add_tag(tracing::attributes::orphan, "canceled");
|
|
330
|
-
}
|
|
351
|
+
self->manager_->orphan_reporter()->add_orphan(self->create_orphan_attributes());
|
|
331
352
|
return self->invoke_handler(ec);
|
|
332
353
|
}
|
|
333
354
|
return io::retry_orchestrator::maybe_retry(self->manager_, self, reason, ec);
|
|
@@ -395,18 +416,76 @@ struct mcbp_command : public std::enable_shared_from_this<mcbp_command<Manager,
|
|
|
395
416
|
|
|
396
417
|
void send_to(io::mcbp_session session)
|
|
397
418
|
{
|
|
398
|
-
if (!handler_
|
|
419
|
+
if (!handler_) {
|
|
420
|
+
#ifdef COUCHBASE_CXX_CLIENT_CREATE_OPERATION_SPAN_IN_CORE
|
|
421
|
+
if (!span_) {
|
|
422
|
+
// TODO(DC): Is this necessary? Background:
|
|
423
|
+
// https://github.com/couchbase/couchbase-cxx-client/pull/160
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
#endif
|
|
399
427
|
return;
|
|
400
428
|
}
|
|
401
429
|
session_ = std::move(session);
|
|
402
|
-
if (span_->uses_tags())
|
|
403
|
-
span_->add_tag(tracing::attributes::remote_socket, session_->remote_address());
|
|
404
|
-
if (span_->uses_tags())
|
|
405
|
-
span_->add_tag(tracing::attributes::local_socket, session_->local_address());
|
|
406
|
-
if (span_->uses_tags())
|
|
407
|
-
span_->add_tag(tracing::attributes::local_id, session_->id());
|
|
408
430
|
send();
|
|
409
431
|
}
|
|
432
|
+
|
|
433
|
+
private:
|
|
434
|
+
[[nodiscard]] auto create_orphan_attributes() -> orphan_attributes
|
|
435
|
+
{
|
|
436
|
+
orphan_attributes attrs;
|
|
437
|
+
|
|
438
|
+
attrs.operation_name = Request::observability_identifier;
|
|
439
|
+
attrs.connection_id = session_->id();
|
|
440
|
+
attrs.operation_id = fmt::format("0x{:x}", request.opaque);
|
|
441
|
+
attrs.last_remote_socket = session_->remote_address();
|
|
442
|
+
attrs.last_local_socket = session_->local_address();
|
|
443
|
+
if (!server_durations_.empty()) {
|
|
444
|
+
attrs.last_server_duration = server_durations_.back();
|
|
445
|
+
for (const auto d : server_durations_) {
|
|
446
|
+
attrs.total_server_duration += d;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
attrs.total_duration = std::chrono::duration_cast<std::chrono::microseconds>(
|
|
450
|
+
std::chrono::steady_clock::now() - started_at_);
|
|
451
|
+
|
|
452
|
+
return attrs;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
[[nodiscard]] auto create_dispatch_span() const
|
|
456
|
+
-> std::shared_ptr<couchbase::tracing::request_span>
|
|
457
|
+
{
|
|
458
|
+
#ifdef COUCHBASE_CXX_CLIENT_CREATE_OPERATION_SPAN_IN_CORE
|
|
459
|
+
std::shared_ptr<couchbase::tracing::request_span> dispatch_span =
|
|
460
|
+
manager_->tracer()->create_span(tracing::operation::step_dispatch, span_);
|
|
461
|
+
#else
|
|
462
|
+
std::shared_ptr<couchbase::tracing::request_span> dispatch_span =
|
|
463
|
+
manager_->tracer()->create_span(tracing::operation::step_dispatch, parent_span_);
|
|
464
|
+
#endif
|
|
465
|
+
if (dispatch_span->uses_tags()) {
|
|
466
|
+
dispatch_span->add_tag(tracing::attributes::dispatch::network_transport, "tcp");
|
|
467
|
+
dispatch_span->add_tag(tracing::attributes::dispatch::operation_id,
|
|
468
|
+
fmt::format("0x{:x}", request.opaque));
|
|
469
|
+
dispatch_span->add_tag(tracing::attributes::dispatch::local_id, session_->id());
|
|
470
|
+
}
|
|
471
|
+
return dispatch_span;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
void close_dispatch_span(const std::shared_ptr<couchbase::tracing::request_span>& dispatch_span,
|
|
475
|
+
const std::uint64_t server_duration_us) const
|
|
476
|
+
{
|
|
477
|
+
if (dispatch_span->uses_tags()) {
|
|
478
|
+
dispatch_span->add_tag(tracing::attributes::dispatch::server_duration, server_duration_us);
|
|
479
|
+
dispatch_span->add_tag(tracing::attributes::dispatch::server_address,
|
|
480
|
+
session_->canonical_hostname());
|
|
481
|
+
dispatch_span->add_tag(tracing::attributes::dispatch::server_port,
|
|
482
|
+
session_->canonical_port_number());
|
|
483
|
+
dispatch_span->add_tag(tracing::attributes::dispatch::peer_address,
|
|
484
|
+
session_->remote_hostname());
|
|
485
|
+
dispatch_span->add_tag(tracing::attributes::dispatch::peer_port, session_->remote_port());
|
|
486
|
+
}
|
|
487
|
+
dispatch_span->end();
|
|
488
|
+
}
|
|
410
489
|
};
|
|
411
490
|
|
|
412
491
|
} // namespace couchbase::core::operations
|