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
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#include "core/cluster.hxx"
|
|
19
19
|
|
|
20
20
|
#include "core/impl/error.hxx"
|
|
21
|
+
#include "core/impl/observability_recorder.hxx"
|
|
21
22
|
#include "core/operations/management/collection_create.hxx"
|
|
22
23
|
#include "core/operations/management/collection_drop.hxx"
|
|
23
24
|
#include "core/operations/management/collection_update.hxx"
|
|
@@ -25,6 +26,8 @@
|
|
|
25
26
|
#include "core/operations/management/scope_drop.hxx"
|
|
26
27
|
#include "core/operations/management/scope_get_all.hxx"
|
|
27
28
|
#include "core/topology/collections_manifest.hxx"
|
|
29
|
+
#include "core/tracing/constants.hxx"
|
|
30
|
+
#include "core/tracing/tracer_wrapper.hxx"
|
|
28
31
|
|
|
29
32
|
#include <couchbase/collection_manager.hxx>
|
|
30
33
|
#include <couchbase/create_collection_options.hxx>
|
|
@@ -93,15 +96,19 @@ public:
|
|
|
93
96
|
const couchbase::drop_collection_options::built& options,
|
|
94
97
|
couchbase::drop_collection_handler&& handler) const
|
|
95
98
|
{
|
|
99
|
+
auto obs_rec =
|
|
100
|
+
create_observability_recorder(core::tracing::operation::mgr_collections_drop_collection,
|
|
101
|
+
scope_name,
|
|
102
|
+
collection_name,
|
|
103
|
+
options.parent_span);
|
|
104
|
+
core::operations::management::collection_drop_request request{
|
|
105
|
+
bucket_name_, std::move(scope_name), std::move(collection_name),
|
|
106
|
+
{}, options.timeout, obs_rec->operation_span(),
|
|
107
|
+
};
|
|
96
108
|
return core_.execute(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
std::move(collection_name),
|
|
101
|
-
{},
|
|
102
|
-
options.timeout,
|
|
103
|
-
},
|
|
104
|
-
[handler = std::move(handler)](const auto& resp) mutable {
|
|
109
|
+
std::move(request),
|
|
110
|
+
[obs_rec = std::move(obs_rec), handler = std::move(handler)](const auto& resp) mutable {
|
|
111
|
+
obs_rec->finish(resp.ctx.retry_attempts, resp.ctx.ec);
|
|
105
112
|
return handler(core::impl::make_error(resp.ctx));
|
|
106
113
|
});
|
|
107
114
|
}
|
|
@@ -112,17 +119,20 @@ public:
|
|
|
112
119
|
const couchbase::update_collection_options::built& options,
|
|
113
120
|
couchbase::update_collection_handler&& handler) const
|
|
114
121
|
{
|
|
122
|
+
auto obs_rec =
|
|
123
|
+
create_observability_recorder(core::tracing::operation::mgr_collections_update_collection,
|
|
124
|
+
scope_name,
|
|
125
|
+
collection_name,
|
|
126
|
+
options.parent_span);
|
|
127
|
+
core::operations::management::collection_update_request request{
|
|
128
|
+
bucket_name_, std::move(scope_name), std::move(collection_name),
|
|
129
|
+
settings.max_expiry, settings.history, {},
|
|
130
|
+
options.timeout, obs_rec->operation_span(),
|
|
131
|
+
};
|
|
115
132
|
return core_.execute(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
std::move(collection_name),
|
|
120
|
-
settings.max_expiry,
|
|
121
|
-
settings.history,
|
|
122
|
-
{},
|
|
123
|
-
options.timeout,
|
|
124
|
-
},
|
|
125
|
-
[handler = std::move(handler)](const auto& resp) mutable {
|
|
133
|
+
std::move(request),
|
|
134
|
+
[obs_rec = std::move(obs_rec), handler = std::move(handler)](const auto& resp) mutable {
|
|
135
|
+
obs_rec->finish(resp.ctx.retry_attempts, resp.ctx.ec);
|
|
126
136
|
return handler(core::impl::make_error(resp.ctx));
|
|
127
137
|
});
|
|
128
138
|
}
|
|
@@ -133,17 +143,20 @@ public:
|
|
|
133
143
|
const couchbase::create_collection_options::built& options,
|
|
134
144
|
couchbase::update_collection_handler&& handler) const
|
|
135
145
|
{
|
|
146
|
+
auto obs_rec =
|
|
147
|
+
create_observability_recorder(core::tracing::operation::mgr_collections_create_collection,
|
|
148
|
+
scope_name,
|
|
149
|
+
collection_name,
|
|
150
|
+
options.parent_span);
|
|
151
|
+
core::operations::management::collection_create_request request{
|
|
152
|
+
bucket_name_, std::move(scope_name), std::move(collection_name),
|
|
153
|
+
settings.max_expiry, settings.history, {},
|
|
154
|
+
options.timeout, obs_rec->operation_span(),
|
|
155
|
+
};
|
|
136
156
|
return core_.execute(
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
std::move(collection_name),
|
|
141
|
-
settings.max_expiry,
|
|
142
|
-
settings.history,
|
|
143
|
-
{},
|
|
144
|
-
options.timeout,
|
|
145
|
-
},
|
|
146
|
-
[handler = std::move(handler)](const auto& resp) mutable {
|
|
157
|
+
std::move(request),
|
|
158
|
+
[obs_rec = std::move(obs_rec), handler = std::move(handler)](const auto& resp) mutable {
|
|
159
|
+
obs_rec->finish(resp.ctx.retry_attempts, resp.ctx.ec);
|
|
147
160
|
return handler(core::impl::make_error(resp.ctx));
|
|
148
161
|
});
|
|
149
162
|
}
|
|
@@ -151,13 +164,18 @@ public:
|
|
|
151
164
|
void get_all_scopes(const get_all_scopes_options::built& options,
|
|
152
165
|
get_all_scopes_handler&& handler) const
|
|
153
166
|
{
|
|
167
|
+
auto obs_rec = create_observability_recorder(
|
|
168
|
+
core::tracing::operation::mgr_collections_get_all_scopes, {}, {}, options.parent_span);
|
|
169
|
+
core::operations::management::scope_get_all_request request{
|
|
170
|
+
bucket_name_,
|
|
171
|
+
{},
|
|
172
|
+
options.timeout,
|
|
173
|
+
obs_rec->operation_span(),
|
|
174
|
+
};
|
|
154
175
|
return core_.execute(
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
options.timeout,
|
|
159
|
-
},
|
|
160
|
-
[handler = std::move(handler)](auto resp) mutable {
|
|
176
|
+
std::move(request),
|
|
177
|
+
[obs_rec = std::move(obs_rec), handler = std::move(handler)](auto resp) mutable {
|
|
178
|
+
obs_rec->finish(resp.ctx.retry_attempts, resp.ctx.ec);
|
|
161
179
|
return handler(core::impl::make_error(resp.ctx), map_scope_specs(resp.manifest));
|
|
162
180
|
});
|
|
163
181
|
}
|
|
@@ -166,14 +184,15 @@ public:
|
|
|
166
184
|
const couchbase::create_scope_options::built& options,
|
|
167
185
|
couchbase::create_scope_handler&& handler) const
|
|
168
186
|
{
|
|
187
|
+
auto obs_rec = create_observability_recorder(
|
|
188
|
+
core::tracing::operation::mgr_collections_create_scope, scope_name, {}, options.parent_span);
|
|
189
|
+
core::operations::management::scope_create_request request{
|
|
190
|
+
bucket_name_, std::move(scope_name), {}, options.timeout, obs_rec->operation_span(),
|
|
191
|
+
};
|
|
169
192
|
return core_.execute(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
{},
|
|
174
|
-
options.timeout,
|
|
175
|
-
},
|
|
176
|
-
[handler = std::move(handler)](const auto& resp) mutable {
|
|
193
|
+
std::move(request),
|
|
194
|
+
[obs_rec = std::move(obs_rec), handler = std::move(handler)](const auto& resp) mutable {
|
|
195
|
+
obs_rec->finish(resp.ctx.retry_attempts, resp.ctx.ec);
|
|
177
196
|
return handler(core::impl::make_error(resp.ctx));
|
|
178
197
|
});
|
|
179
198
|
}
|
|
@@ -182,19 +201,40 @@ public:
|
|
|
182
201
|
const couchbase::drop_scope_options::built& options,
|
|
183
202
|
couchbase::drop_scope_handler&& handler) const
|
|
184
203
|
{
|
|
185
|
-
|
|
186
|
-
core::
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
[handler = std::move(handler)](const auto& resp) mutable {
|
|
204
|
+
auto obs_rec = create_observability_recorder(
|
|
205
|
+
core::tracing::operation::mgr_collections_drop_scope, scope_name, {}, options.parent_span);
|
|
206
|
+
core::operations::management::scope_drop_request request{
|
|
207
|
+
bucket_name_, std::move(scope_name), {}, options.timeout, obs_rec->operation_span(),
|
|
208
|
+
};
|
|
209
|
+
return core_.execute(
|
|
210
|
+
std::move(request),
|
|
211
|
+
[obs_rec = std::move(obs_rec), handler = std::move(handler)](const auto& resp) mutable {
|
|
212
|
+
obs_rec->finish(resp.ctx.retry_attempts, resp.ctx.ec);
|
|
193
213
|
return handler(core::impl::make_error(resp.ctx));
|
|
194
214
|
});
|
|
195
215
|
}
|
|
196
216
|
|
|
197
217
|
private:
|
|
218
|
+
[[nodiscard]] auto create_observability_recorder(
|
|
219
|
+
const std::string& operation_name,
|
|
220
|
+
const std::optional<std::string>& scope_name,
|
|
221
|
+
const std::optional<std::string>& collection_name,
|
|
222
|
+
const std::shared_ptr<tracing::request_span>& parent_span) const
|
|
223
|
+
-> std::unique_ptr<core::impl::observability_recorder>
|
|
224
|
+
{
|
|
225
|
+
auto obs_rec = core::impl::observability_recorder::create(
|
|
226
|
+
operation_name, parent_span, core_.tracer(), core_.meter());
|
|
227
|
+
obs_rec->with_service(core::tracing::service::management);
|
|
228
|
+
obs_rec->with_bucket_name(bucket_name_);
|
|
229
|
+
if (scope_name.has_value()) {
|
|
230
|
+
obs_rec->with_scope_name(scope_name.value());
|
|
231
|
+
}
|
|
232
|
+
if (collection_name.has_value()) {
|
|
233
|
+
obs_rec->with_collection_name(collection_name.value());
|
|
234
|
+
}
|
|
235
|
+
return obs_rec;
|
|
236
|
+
}
|
|
237
|
+
|
|
198
238
|
core::cluster core_;
|
|
199
239
|
std::string bucket_name_;
|
|
200
240
|
};
|
|
@@ -78,9 +78,9 @@ dns_srv_tracker::get_srv_nodes(
|
|
|
78
78
|
self->address_,
|
|
79
79
|
resp.ec.message());
|
|
80
80
|
} else if (resp.targets.empty() && self->address_ != "localhost") {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
CB_LOG_DEBUG("DNS SRV query returned 0 records for \"{}\", assuming "
|
|
82
|
+
"that cluster is listening this address",
|
|
83
|
+
self->address_);
|
|
84
84
|
} else {
|
|
85
85
|
nodes.reserve(resp.targets.size());
|
|
86
86
|
for (const auto& address : resp.targets) {
|
|
@@ -136,7 +136,7 @@ dns_srv_tracker::report_bootstrap_error(const std::string& endpoint, std::error_
|
|
|
136
136
|
{
|
|
137
137
|
bool trigger_dns_srv_refresh = false;
|
|
138
138
|
|
|
139
|
-
if (ec && ec != errc::common::request_canceled) {
|
|
139
|
+
if (ec && ec != errc::common::request_canceled && ec != errc::common::bucket_not_found) {
|
|
140
140
|
const std::scoped_lock lock(known_endpoints_mutex_);
|
|
141
141
|
known_endpoints_.erase(endpoint);
|
|
142
142
|
if (known_endpoints_.empty()) {
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
#include "error.hxx"
|
|
19
19
|
|
|
20
|
+
#include "core/error.hxx"
|
|
20
21
|
#include "core/error_context/analytics.hxx"
|
|
21
22
|
#include "core/error_context/analytics_json.hxx"
|
|
22
23
|
#include "core/error_context/http.hxx"
|
|
@@ -74,6 +75,17 @@ error::error(std::error_code ec,
|
|
|
74
75
|
{
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
error::error(std::error_code ec,
|
|
79
|
+
std::string message,
|
|
80
|
+
couchbase::error_context ctx,
|
|
81
|
+
couchbase::node_id node_id)
|
|
82
|
+
: ec_{ ec }
|
|
83
|
+
, message_{ std::move(message) }
|
|
84
|
+
, ctx_{ std::move(ctx) }
|
|
85
|
+
, node_id_{ std::move(node_id) }
|
|
86
|
+
{
|
|
87
|
+
}
|
|
88
|
+
|
|
77
89
|
auto
|
|
78
90
|
error::ec() const -> std::error_code
|
|
79
91
|
{
|
|
@@ -102,6 +114,12 @@ error::cause() const -> std::optional<error>
|
|
|
102
114
|
return *cause_;
|
|
103
115
|
}
|
|
104
116
|
|
|
117
|
+
auto
|
|
118
|
+
error::node_id() const -> const couchbase::node_id&
|
|
119
|
+
{
|
|
120
|
+
return node_id_;
|
|
121
|
+
}
|
|
122
|
+
|
|
105
123
|
error::operator bool() const
|
|
106
124
|
{
|
|
107
125
|
return ec_.value() != 0;
|
|
@@ -116,7 +134,7 @@ error::operator==(const couchbase::error& other) const -> bool
|
|
|
116
134
|
namespace core::impl
|
|
117
135
|
{
|
|
118
136
|
auto
|
|
119
|
-
make_error(const core::error_context::query& core_ctx) -> error
|
|
137
|
+
make_error(const core::error_context::query& core_ctx) -> couchbase::error
|
|
120
138
|
{
|
|
121
139
|
if (!core_ctx.ec) {
|
|
122
140
|
return {};
|
|
@@ -125,7 +143,7 @@ make_error(const core::error_context::query& core_ctx) -> error
|
|
|
125
143
|
}
|
|
126
144
|
|
|
127
145
|
auto
|
|
128
|
-
make_error(const query_error_context& core_ctx) -> error
|
|
146
|
+
make_error(const query_error_context& core_ctx) -> couchbase::error
|
|
129
147
|
{
|
|
130
148
|
if (!core_ctx.ec()) {
|
|
131
149
|
return {};
|
|
@@ -134,7 +152,7 @@ make_error(const query_error_context& core_ctx) -> error
|
|
|
134
152
|
}
|
|
135
153
|
|
|
136
154
|
auto
|
|
137
|
-
make_error(const core::error_context::search& core_ctx) -> error
|
|
155
|
+
make_error(const core::error_context::search& core_ctx) -> couchbase::error
|
|
138
156
|
{
|
|
139
157
|
if (!core_ctx.ec) {
|
|
140
158
|
return {};
|
|
@@ -143,7 +161,7 @@ make_error(const core::error_context::search& core_ctx) -> error
|
|
|
143
161
|
}
|
|
144
162
|
|
|
145
163
|
auto
|
|
146
|
-
make_error(const core::error_context::analytics& core_ctx) -> error
|
|
164
|
+
make_error(const core::error_context::analytics& core_ctx) -> couchbase::error
|
|
147
165
|
{
|
|
148
166
|
if (!core_ctx.ec) {
|
|
149
167
|
return {};
|
|
@@ -152,7 +170,7 @@ make_error(const core::error_context::analytics& core_ctx) -> error
|
|
|
152
170
|
}
|
|
153
171
|
|
|
154
172
|
auto
|
|
155
|
-
make_error(const core::error_context::http& core_ctx) -> error
|
|
173
|
+
make_error(const core::error_context::http& core_ctx) -> couchbase::error
|
|
156
174
|
{
|
|
157
175
|
if (!core_ctx.ec) {
|
|
158
176
|
return {};
|
|
@@ -161,33 +179,41 @@ make_error(const core::error_context::http& core_ctx) -> error
|
|
|
161
179
|
}
|
|
162
180
|
|
|
163
181
|
auto
|
|
164
|
-
make_error(const couchbase::core::key_value_error_context& core_ctx) -> error
|
|
182
|
+
make_error(const couchbase::core::key_value_error_context& core_ctx) -> couchbase::error
|
|
165
183
|
{
|
|
184
|
+
// Always preserve the node_id so that callers on both success and error
|
|
185
|
+
// paths can identify which node handled the request.
|
|
166
186
|
if (!core_ctx.ec()) {
|
|
167
|
-
return {};
|
|
187
|
+
return { {}, {}, {}, core_ctx.last_dispatched_to_node_id() };
|
|
168
188
|
}
|
|
169
|
-
return { core_ctx.ec(),
|
|
189
|
+
return { core_ctx.ec(),
|
|
190
|
+
{},
|
|
191
|
+
internal_error_context::build_error_context(core_ctx),
|
|
192
|
+
core_ctx.last_dispatched_to_node_id() };
|
|
170
193
|
}
|
|
171
194
|
|
|
172
195
|
auto
|
|
173
|
-
make_error(const couchbase::core::subdocument_error_context& core_ctx) -> error
|
|
196
|
+
make_error(const couchbase::core::subdocument_error_context& core_ctx) -> couchbase::error
|
|
174
197
|
{
|
|
175
198
|
if (!core_ctx.ec()) {
|
|
176
|
-
return {};
|
|
199
|
+
return { {}, {}, {}, core_ctx.last_dispatched_to_node_id() };
|
|
177
200
|
}
|
|
178
|
-
return { core_ctx.ec(),
|
|
201
|
+
return { core_ctx.ec(),
|
|
202
|
+
{},
|
|
203
|
+
internal_error_context::build_error_context(core_ctx),
|
|
204
|
+
core_ctx.last_dispatched_to_node_id() };
|
|
179
205
|
}
|
|
180
206
|
|
|
181
207
|
auto
|
|
182
|
-
make_error(const couchbase::core::transaction_error_context& ctx) -> error
|
|
208
|
+
make_error(const couchbase::core::transaction_error_context& ctx) -> couchbase::error
|
|
183
209
|
{
|
|
184
210
|
return { ctx.ec(), {}, {}, { ctx.cause() } };
|
|
185
211
|
}
|
|
186
212
|
|
|
187
213
|
auto
|
|
188
|
-
make_error(const core::transactions::op_exception& exc) -> error
|
|
214
|
+
make_error(const core::transactions::op_exception& exc) -> couchbase::error
|
|
189
215
|
{
|
|
190
|
-
std::optional<error> cause;
|
|
216
|
+
std::optional<couchbase::error> cause;
|
|
191
217
|
if (std::holds_alternative<key_value_error_context>(exc.ctx().cause())) {
|
|
192
218
|
cause = make_error(std::get<key_value_error_context>(exc.ctx().cause()));
|
|
193
219
|
}
|
|
@@ -196,7 +222,7 @@ make_error(const core::transactions::op_exception& exc) -> error
|
|
|
196
222
|
}
|
|
197
223
|
|
|
198
224
|
if (cause.has_value()) {
|
|
199
|
-
return error{
|
|
225
|
+
return couchbase::error{
|
|
200
226
|
transaction_op_errc_from_external_exception(exc.cause()),
|
|
201
227
|
exc.what(),
|
|
202
228
|
{},
|
|
@@ -204,7 +230,7 @@ make_error(const core::transactions::op_exception& exc) -> error
|
|
|
204
230
|
};
|
|
205
231
|
}
|
|
206
232
|
|
|
207
|
-
return error{
|
|
233
|
+
return couchbase::error{
|
|
208
234
|
transaction_op_errc_from_external_exception(exc.cause()),
|
|
209
235
|
exc.what(),
|
|
210
236
|
{},
|
|
@@ -218,7 +244,13 @@ make_error(const couchbase::core::transactions::transaction_operation_failed& co
|
|
|
218
244
|
return { couchbase::errc::transaction_op::transaction_op_failed,
|
|
219
245
|
core_tof.what(),
|
|
220
246
|
internal_error_context::build_error_context(tao::json::empty_object, core_tof),
|
|
221
|
-
error(transaction_op_errc_from_external_exception(core_tof.cause())) };
|
|
247
|
+
couchbase::error(transaction_op_errc_from_external_exception(core_tof.cause())) };
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
auto
|
|
251
|
+
make_error(const core::error& err) -> couchbase::error
|
|
252
|
+
{
|
|
253
|
+
return { err.ec, err.message };
|
|
222
254
|
}
|
|
223
255
|
} // namespace core::impl
|
|
224
256
|
} // namespace couchbase
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
|
+
#include "core/error.hxx"
|
|
20
21
|
#include "core/error_context/key_value_error_context.hxx"
|
|
21
22
|
#include "core/error_context/query_error_context.hxx"
|
|
22
23
|
#include "core/error_context/subdocument_error_context.hxx"
|
|
@@ -33,32 +34,36 @@
|
|
|
33
34
|
namespace couchbase::core::impl
|
|
34
35
|
{
|
|
35
36
|
auto
|
|
36
|
-
make_error(const core::error_context::query& core_ctx) -> error;
|
|
37
|
+
make_error(const core::error_context::query& core_ctx) -> couchbase::error;
|
|
37
38
|
|
|
38
39
|
auto
|
|
39
|
-
make_error(const core::error_context::search& core_ctx) -> error;
|
|
40
|
+
make_error(const core::error_context::search& core_ctx) -> couchbase::error;
|
|
40
41
|
|
|
41
42
|
auto
|
|
42
|
-
make_error(const core::error_context::analytics& core_ctx) -> error;
|
|
43
|
+
make_error(const core::error_context::analytics& core_ctx) -> couchbase::error;
|
|
43
44
|
|
|
44
45
|
auto
|
|
45
|
-
make_error(const core::error_context::http& core_ctx) -> error;
|
|
46
|
+
make_error(const core::error_context::http& core_ctx) -> couchbase::error;
|
|
46
47
|
|
|
47
48
|
auto
|
|
48
|
-
make_error(const couchbase::core::key_value_error_context& core_ctx) -> error;
|
|
49
|
+
make_error(const couchbase::core::key_value_error_context& core_ctx) -> couchbase::error;
|
|
49
50
|
|
|
50
51
|
auto
|
|
51
|
-
make_error(const couchbase::core::subdocument_error_context& core_ctx) -> error;
|
|
52
|
+
make_error(const couchbase::core::subdocument_error_context& core_ctx) -> couchbase::error;
|
|
52
53
|
|
|
53
54
|
auto
|
|
54
|
-
make_error(const couchbase::core::query_error_context& core_ctx) -> error;
|
|
55
|
+
make_error(const couchbase::core::query_error_context& core_ctx) -> couchbase::error;
|
|
55
56
|
|
|
56
57
|
auto
|
|
57
|
-
make_error(const couchbase::core::transaction_error_context& core_ctx) -> error;
|
|
58
|
+
make_error(const couchbase::core::transaction_error_context& core_ctx) -> couchbase::error;
|
|
58
59
|
|
|
59
60
|
auto
|
|
60
|
-
make_error(const couchbase::core::transactions::op_exception& exc) -> error;
|
|
61
|
+
make_error(const couchbase::core::transactions::op_exception& exc) -> couchbase::error;
|
|
61
62
|
|
|
62
63
|
auto
|
|
63
|
-
make_error(const couchbase::core::transactions::transaction_operation_failed& core_tof)
|
|
64
|
+
make_error(const couchbase::core::transactions::transaction_operation_failed& core_tof)
|
|
65
|
+
-> couchbase::error;
|
|
66
|
+
|
|
67
|
+
auto
|
|
68
|
+
make_error(const core::error& err) -> couchbase::error;
|
|
64
69
|
} // namespace couchbase::core::impl
|
|
@@ -70,7 +70,7 @@ private:
|
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
using movable_get_all_replicas_handler =
|
|
73
|
-
utils::movable_function<void(error, get_all_replicas_result)>;
|
|
73
|
+
utils::movable_function<void(couchbase::error, get_all_replicas_result)>;
|
|
74
74
|
|
|
75
75
|
void
|
|
76
76
|
initiate_get_all_replicas_operation(std::shared_ptr<cluster> core,
|
|
@@ -65,7 +65,8 @@ private:
|
|
|
65
65
|
std::optional<std::chrono::milliseconds> timeout_{};
|
|
66
66
|
};
|
|
67
67
|
|
|
68
|
-
using movable_get_any_replica_handler =
|
|
68
|
+
using movable_get_any_replica_handler =
|
|
69
|
+
utils::movable_function<void(couchbase::error, get_replica_result)>;
|
|
69
70
|
|
|
70
71
|
void
|
|
71
72
|
initiate_get_any_replica_operation(std::shared_ptr<cluster> core,
|
|
@@ -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_get_replica.hxx"
|
|
26
|
+
#include "core/public_fwd.hxx"
|
|
26
27
|
#include "core/timeout_defaults.hxx"
|
|
27
28
|
|
|
28
29
|
namespace couchbase::core::impl
|
|
@@ -48,6 +49,7 @@ struct get_replica_request {
|
|
|
48
49
|
std::uint16_t partition{};
|
|
49
50
|
std::uint32_t opaque{};
|
|
50
51
|
io::retry_context<true> retries{};
|
|
52
|
+
std::shared_ptr<couchbase::tracing::request_span> parent_span{ nullptr };
|
|
51
53
|
|
|
52
54
|
[[nodiscard]] auto encode_to(encoded_request_type& encoded,
|
|
53
55
|
core::mcbp_context&& context) const -> std::error_code;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2026-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/error.hxx>
|
|
21
|
+
|
|
22
|
+
#include <utility>
|
|
23
|
+
|
|
24
|
+
namespace couchbase::core::impl
|
|
25
|
+
{
|
|
26
|
+
/**
|
|
27
|
+
* Forwards (err, result) to the caller's handler, propagating the node_id
|
|
28
|
+
* carried by the error (which make_error populates for KV contexts) onto
|
|
29
|
+
* the result. Using a plain function template avoids the extra std::function
|
|
30
|
+
* allocation a type-erasing wrapper would introduce for the sole purpose of
|
|
31
|
+
* setting node_id - that extra allocation was the source of the 18
|
|
32
|
+
* "Potential memory leak" reports clang-static-analyzer flagged against the
|
|
33
|
+
* previous wrap_with_node_id helper. The handler is taken by forwarding
|
|
34
|
+
* reference and perfect-forwarded to the invocation so that callers moving
|
|
35
|
+
* an rvalue handler consume it without an intermediate copy.
|
|
36
|
+
*/
|
|
37
|
+
template<typename Handler, typename Result>
|
|
38
|
+
void
|
|
39
|
+
invoke_with_node_id(Handler&& handler, couchbase::error err, Result result)
|
|
40
|
+
{
|
|
41
|
+
result.node_id(err.node_id());
|
|
42
|
+
std::forward<Handler>(handler)(std::move(err), std::move(result));
|
|
43
|
+
}
|
|
44
|
+
} // namespace couchbase::core::impl
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
20
|
#include "core/error_context/key_value.hxx"
|
|
21
|
+
#include "core/error_context/subdocument_error_context.hxx"
|
|
21
22
|
#include "core/impl/subdoc/command.hxx"
|
|
22
23
|
#include "core/io/mcbp_context.hxx"
|
|
23
24
|
#include "core/io/retry_context.hxx"
|
|
@@ -26,7 +27,6 @@
|
|
|
26
27
|
#include "core/public_fwd.hxx"
|
|
27
28
|
#include "core/timeout_defaults.hxx"
|
|
28
29
|
|
|
29
|
-
#include "core/error_context/subdocument_error_context.hxx"
|
|
30
30
|
#include <couchbase/lookup_in_result.hxx>
|
|
31
31
|
|
|
32
32
|
namespace couchbase::core::impl
|
|
@@ -0,0 +1,110 @@
|
|
|
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
|
+
#include "node_id.hxx"
|
|
19
|
+
|
|
20
|
+
#include "core/utils/crc32.hxx"
|
|
21
|
+
|
|
22
|
+
#include <spdlog/fmt/bundled/core.h>
|
|
23
|
+
|
|
24
|
+
#include <cstdint>
|
|
25
|
+
#include <string>
|
|
26
|
+
|
|
27
|
+
namespace couchbase
|
|
28
|
+
{
|
|
29
|
+
|
|
30
|
+
namespace
|
|
31
|
+
{
|
|
32
|
+
/**
|
|
33
|
+
* Produces a stable, opaque hex string from hostname + KV port.
|
|
34
|
+
*
|
|
35
|
+
* Uses CRC32 (already in-tree for vBucket mapping) rather than a
|
|
36
|
+
* cryptographic hash — collision resistance across a handful of cluster
|
|
37
|
+
* nodes is more than sufficient, and this avoids pulling in OpenSSL headers.
|
|
38
|
+
*/
|
|
39
|
+
auto
|
|
40
|
+
derive_fallback_id(const std::string& hostname, std::uint16_t port) -> std::string
|
|
41
|
+
{
|
|
42
|
+
auto input = fmt::format("{}:{}", hostname, port);
|
|
43
|
+
auto crc = core::utils::hash_crc32(input.data(), input.size());
|
|
44
|
+
return fmt::format("{:08x}", crc);
|
|
45
|
+
}
|
|
46
|
+
} // namespace
|
|
47
|
+
|
|
48
|
+
node_id::node_id(std::string node_uuid, std::string hostname, std::uint16_t port)
|
|
49
|
+
: node_uuid_{ std::move(node_uuid) }
|
|
50
|
+
, hostname_{ std::move(hostname) }
|
|
51
|
+
, port_{ port }
|
|
52
|
+
, id_{ node_uuid_.empty() ? derive_fallback_id(hostname_, port_) : node_uuid_ }
|
|
53
|
+
{
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
auto
|
|
57
|
+
node_id::id() const -> const std::string&
|
|
58
|
+
{
|
|
59
|
+
return id_;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
auto
|
|
63
|
+
node_id::node_uuid() const -> const std::string&
|
|
64
|
+
{
|
|
65
|
+
return node_uuid_;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
auto
|
|
69
|
+
node_id::hostname() const -> const std::string&
|
|
70
|
+
{
|
|
71
|
+
return hostname_;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
auto
|
|
75
|
+
node_id::port() const -> std::uint16_t
|
|
76
|
+
{
|
|
77
|
+
return port_;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
node_id::
|
|
81
|
+
operator bool() const
|
|
82
|
+
{
|
|
83
|
+
return !id_.empty();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
auto
|
|
87
|
+
node_id::operator==(const node_id& other) const -> bool
|
|
88
|
+
{
|
|
89
|
+
return id_ == other.id_;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
auto
|
|
93
|
+
node_id::operator!=(const node_id& other) const -> bool
|
|
94
|
+
{
|
|
95
|
+
return !(*this == other);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
auto
|
|
99
|
+
node_id::operator<(const node_id& other) const -> bool
|
|
100
|
+
{
|
|
101
|
+
return id_ < other.id_;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
auto
|
|
105
|
+
internal_node_id::build(std::string node_uuid, std::string hostname, std::uint16_t port) -> node_id
|
|
106
|
+
{
|
|
107
|
+
return { std::move(node_uuid), std::move(hostname), port };
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
} // namespace couchbase
|