couchbase 3.7.0 → 3.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/ext/CMakeLists.txt +4 -1
- data/ext/cache/extconf_include.rb +4 -3
- data/ext/cache/mozilla-ca-bundle.crt +66 -665
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +26 -11
- data/ext/couchbase/cmake/APKBUILD.in +17 -1
- data/ext/couchbase/cmake/Bundler.cmake +9 -1
- data/ext/couchbase/cmake/Cache.cmake +48 -19
- data/ext/couchbase/cmake/CompilerOptions.cmake +3 -1
- data/ext/couchbase/cmake/OpenSSL.cmake +10 -2
- data/ext/couchbase/cmake/Packaging.cmake +48 -8
- data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +43 -1
- data/ext/couchbase/cmake/build_config.hxx.in +2 -0
- data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +18 -0
- data/ext/couchbase/cmake/tarball_glob.txt +10 -0
- data/ext/couchbase/core/app_telemetry_meter.cxx +1 -0
- data/ext/couchbase/core/app_telemetry_reporter.cxx +45 -43
- data/ext/couchbase/core/app_telemetry_reporter.hxx +4 -3
- data/ext/couchbase/core/bucket.cxx +128 -13
- data/ext/couchbase/core/bucket.hxx +12 -2
- data/ext/couchbase/core/cluster.cxx +304 -152
- data/ext/couchbase/core/cluster.hxx +32 -0
- data/ext/couchbase/core/cluster_credentials.cxx +25 -0
- data/ext/couchbase/core/cluster_credentials.hxx +5 -0
- data/ext/couchbase/core/cluster_label_listener.cxx +72 -0
- data/ext/couchbase/core/cluster_label_listener.hxx +46 -0
- data/ext/couchbase/core/cluster_options.hxx +4 -0
- data/ext/couchbase/core/deprecation_utils.hxx +26 -0
- data/ext/couchbase/core/error.hxx +27 -0
- data/ext/couchbase/core/error_context/base_error_context.hxx +32 -0
- data/ext/couchbase/core/error_context/key_value.cxx +1 -0
- data/ext/couchbase/core/error_context/key_value.hxx +23 -0
- data/ext/couchbase/core/error_context/key_value_error_context.hxx +35 -0
- data/ext/couchbase/core/error_context/subdocument_error_context.hxx +41 -0
- data/ext/couchbase/core/free_form_http_request.hxx +0 -2
- data/ext/couchbase/core/http_component.cxx +12 -48
- data/ext/couchbase/core/impl/analytics.cxx +3 -2
- data/ext/couchbase/core/impl/analytics.hxx +2 -1
- data/ext/couchbase/core/impl/analytics_index_manager.cxx +249 -137
- data/ext/couchbase/core/impl/binary_collection.cxx +239 -128
- data/ext/couchbase/core/impl/bucket_manager.cxx +87 -35
- data/ext/couchbase/core/impl/collection.cxx +914 -372
- data/ext/couchbase/core/impl/collection_manager.cxx +89 -49
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +4 -4
- data/ext/couchbase/core/impl/error.cxx +49 -17
- data/ext/couchbase/core/impl/error.hxx +15 -10
- data/ext/couchbase/core/impl/get_all_replicas.hxx +1 -1
- data/ext/couchbase/core/impl/get_any_replica.hxx +2 -1
- data/ext/couchbase/core/impl/get_replica.hxx +2 -0
- data/ext/couchbase/core/impl/invoke_with_node_id.hxx +44 -0
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +1 -1
- data/ext/couchbase/core/impl/node_id.cxx +110 -0
- data/ext/couchbase/core/impl/node_id.hxx +40 -0
- data/ext/couchbase/core/impl/observability_recorder.cxx +161 -0
- data/ext/couchbase/core/impl/observability_recorder.hxx +77 -0
- data/ext/couchbase/core/impl/observe_seqno.hxx +2 -0
- data/ext/couchbase/core/impl/public_bucket.cxx +31 -7
- data/ext/couchbase/core/impl/public_cluster.cxx +107 -19
- data/ext/couchbase/core/impl/query.cxx +6 -3
- data/ext/couchbase/core/impl/query.hxx +3 -1
- data/ext/couchbase/core/impl/query_index_manager.cxx +267 -102
- data/ext/couchbase/core/impl/scope.cxx +53 -11
- data/ext/couchbase/core/impl/search.cxx +8 -4
- data/ext/couchbase/core/impl/search.hxx +6 -2
- data/ext/couchbase/core/impl/search_index_manager.cxx +131 -41
- data/ext/couchbase/core/impl/with_cancellation.hxx +75 -0
- data/ext/couchbase/core/io/config_tracker.cxx +9 -9
- data/ext/couchbase/core/io/config_tracker.hxx +2 -1
- data/ext/couchbase/core/io/http_command.hxx +98 -49
- data/ext/couchbase/core/io/http_context.hxx +2 -0
- data/ext/couchbase/core/io/http_session.cxx +23 -10
- data/ext/couchbase/core/io/http_session.hxx +17 -9
- data/ext/couchbase/core/io/http_session_manager.hxx +245 -270
- data/ext/couchbase/core/io/http_traits.hxx +0 -7
- data/ext/couchbase/core/io/mcbp_command.hxx +123 -44
- data/ext/couchbase/core/io/mcbp_session.cxx +251 -26
- data/ext/couchbase/core/io/mcbp_session.hxx +9 -1
- data/ext/couchbase/core/io/mcbp_traits.hxx +0 -8
- data/ext/couchbase/core/io/streams.cxx +3 -3
- data/ext/couchbase/core/io/streams.hxx +3 -2
- data/ext/couchbase/core/meta/features.hxx +15 -0
- data/ext/couchbase/core/meta/version.cxx +13 -0
- data/ext/couchbase/core/meta/version.hxx +3 -0
- data/ext/couchbase/core/metrics/constants.hxx +23 -0
- data/ext/couchbase/core/metrics/logging_meter.cxx +5 -5
- data/ext/couchbase/core/metrics/meter_wrapper.cxx +65 -63
- data/ext/couchbase/core/metrics/meter_wrapper.hxx +12 -10
- data/ext/couchbase/core/operations/document_analytics.hxx +0 -5
- data/ext/couchbase/core/operations/document_append.hxx +0 -4
- data/ext/couchbase/core/operations/document_decrement.hxx +0 -5
- data/ext/couchbase/core/operations/document_exists.hxx +0 -7
- data/ext/couchbase/core/operations/document_get.hxx +0 -7
- data/ext/couchbase/core/operations/document_get_all_replicas.hxx +89 -29
- data/ext/couchbase/core/operations/document_get_and_lock.hxx +0 -9
- data/ext/couchbase/core/operations/document_get_and_touch.hxx +0 -9
- data/ext/couchbase/core/operations/document_get_any_replica.hxx +83 -2
- data/ext/couchbase/core/operations/document_get_projected.cxx +3 -4
- data/ext/couchbase/core/operations/document_get_projected.hxx +0 -9
- data/ext/couchbase/core/operations/document_increment.hxx +0 -5
- data/ext/couchbase/core/operations/document_insert.hxx +0 -4
- data/ext/couchbase/core/operations/document_lookup_in.hxx +0 -9
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +50 -4
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +121 -43
- data/ext/couchbase/core/operations/document_mutate_in.hxx +0 -5
- data/ext/couchbase/core/operations/document_prepend.hxx +0 -4
- data/ext/couchbase/core/operations/document_query.cxx +12 -12
- data/ext/couchbase/core/operations/document_query.hxx +0 -4
- data/ext/couchbase/core/operations/document_remove.hxx +0 -4
- data/ext/couchbase/core/operations/document_replace.hxx +0 -4
- data/ext/couchbase/core/operations/document_search.hxx +0 -7
- data/ext/couchbase/core/operations/document_touch.hxx +0 -7
- data/ext/couchbase/core/operations/document_unlock.hxx +0 -6
- data/ext/couchbase/core/operations/document_upsert.hxx +0 -4
- data/ext/couchbase/core/operations/document_view.cxx +2 -0
- data/ext/couchbase/core/operations/document_view.hxx +10 -13
- data/ext/couchbase/core/operations/http_noop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataverse_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataverse_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_connect.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_disconnect.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_replace.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_describe.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_flush.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_update.hxx +2 -0
- data/ext/couchbase/core/operations/management/change_password.hxx +2 -0
- data/ext/couchbase/core/operations/management/cluster_describe.hxx +2 -0
- data/ext/couchbase/core/operations/management/cluster_developer_preview_enable.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_create.cxx +11 -11
- data/ext/couchbase/core/operations/management/collection_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_drop.cxx +11 -11
- data/ext/couchbase/core/operations/management/collection_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_update.cxx +11 -11
- data/ext/couchbase/core/operations/management/collection_update.hxx +2 -0
- data/ext/couchbase/core/operations/management/collections_manifest_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/error_utils.cxx +13 -7
- data/ext/couchbase/core/operations/management/eventing_deploy_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_drop_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_all_functions.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_status.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_pause_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_resume_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_undeploy_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_upsert_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/freeform.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_build.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_build_deferred.hxx +68 -30
- data/ext/couchbase/core/operations/management/query_index_create.cxx +5 -4
- data/ext/couchbase/core/operations/management/query_index_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_drop.cxx +7 -6
- data/ext/couchbase/core/operations/management/query_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_get_all.hxx +4 -3
- data/ext/couchbase/core/operations/management/query_index_get_all_deferred.hxx +2 -1
- data/ext/couchbase/core/operations/management/role_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_create.cxx +12 -13
- data/ext/couchbase/core/operations/management/scope_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_drop.cxx +8 -9
- data/ext/couchbase/core/operations/management/scope_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_get_stats.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_analyze_document.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_ingest.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_query.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_documents_count.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_stats.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/operation_traits.hxx +6 -0
- data/ext/couchbase/core/operations.hxx +0 -1
- data/ext/couchbase/core/operations_fwd.hxx +8 -0
- data/ext/couchbase/core/origin.cxx +67 -12
- data/ext/couchbase/core/origin.hxx +13 -8
- data/ext/couchbase/core/orphan_reporter.cxx +164 -0
- data/ext/couchbase/core/orphan_reporter.hxx +65 -0
- data/ext/couchbase/core/sasl/CMakeLists.txt +1 -0
- data/ext/couchbase/core/sasl/client.cc +6 -0
- data/ext/couchbase/core/sasl/mechanism.cc +2 -1
- data/ext/couchbase/core/sasl/mechanism.h +2 -1
- data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.cc +41 -0
- data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.h +47 -0
- data/ext/couchbase/core/tls_context_provider.cxx +44 -0
- data/ext/couchbase/core/tls_context_provider.hxx +44 -0
- data/ext/couchbase/core/topology/configuration.cxx +21 -0
- data/ext/couchbase/core/topology/configuration.hxx +28 -0
- data/ext/couchbase/core/tracing/attribute_helpers.hxx +45 -0
- data/ext/couchbase/core/tracing/constants.hxx +148 -68
- data/ext/couchbase/core/tracing/threshold_logging_options.hxx +0 -3
- data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +122 -170
- data/ext/couchbase/core/tracing/tracer_wrapper.cxx +17 -24
- data/ext/couchbase/core/tracing/tracer_wrapper.hxx +8 -10
- data/ext/couchbase/core/tracing/wrapper_sdk_tracer.cxx +114 -0
- data/ext/couchbase/core/tracing/wrapper_sdk_tracer.hxx +85 -0
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +16 -14
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +4 -4
- data/ext/couchbase/core/transactions/transactions.cxx +1 -1
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +1 -2
- data/ext/couchbase/core/utils/byteswap.hxx +12 -0
- data/ext/couchbase/core/utils/concurrent_fixed_priority_queue.hxx +102 -0
- data/ext/couchbase/core/utils/connection_string.cxx +2 -0
- data/ext/couchbase/core/utils/contains_string.cxx +61 -0
- data/ext/couchbase/core/utils/contains_string.hxx +26 -0
- data/ext/couchbase/couchbase/certificate_authenticator.hxx +1 -0
- data/ext/couchbase/couchbase/cluster.hxx +47 -0
- data/ext/couchbase/couchbase/cluster_options.hxx +16 -0
- data/ext/couchbase/couchbase/collection.hxx +133 -15
- data/ext/couchbase/couchbase/error.hxx +16 -0
- data/ext/couchbase/couchbase/error_codes.hxx +48 -48
- data/ext/couchbase/couchbase/jwt_authenticator.hxx +52 -0
- data/ext/couchbase/couchbase/metrics/meter.hxx +2 -1
- data/ext/couchbase/couchbase/metrics/otel_meter.hxx +75 -80
- data/ext/couchbase/couchbase/network_options.hxx +19 -0
- data/ext/couchbase/couchbase/node_id.hxx +123 -0
- data/ext/couchbase/couchbase/node_id_for_options.hxx +61 -0
- data/ext/couchbase/couchbase/node_ids_options.hxx +62 -0
- data/ext/couchbase/couchbase/password_authenticator.hxx +1 -0
- data/ext/couchbase/couchbase/result.hxx +42 -0
- data/ext/couchbase/couchbase/tracing/otel_tracer.hxx +15 -17
- data/ext/couchbase/couchbase/tracing/request_span.hxx +2 -2
- data/ext/couchbase.cxx +4 -0
- data/ext/extconf.rb +1 -0
- data/ext/rcb_analytics.cxx +157 -47
- data/ext/rcb_backend.cxx +118 -71
- data/ext/rcb_buckets.cxx +39 -16
- data/ext/rcb_collections.cxx +36 -12
- data/ext/rcb_crud.cxx +589 -294
- data/ext/rcb_hdr_histogram.cxx +219 -0
- data/ext/rcb_hdr_histogram.hxx +28 -0
- data/ext/rcb_logger.cxx +15 -17
- data/ext/rcb_multi.cxx +142 -59
- data/ext/rcb_observability.cxx +132 -0
- data/ext/rcb_observability.hxx +49 -0
- data/ext/rcb_query.cxx +77 -27
- data/ext/rcb_search.cxx +92 -31
- data/ext/rcb_users.cxx +69 -26
- data/ext/rcb_utils.cxx +91 -0
- data/ext/rcb_utils.hxx +141 -168
- data/ext/rcb_views.cxx +36 -12
- data/lib/active_support/cache/couchbase_store.rb +6 -6
- data/lib/couchbase/authenticator.rb +14 -0
- data/lib/couchbase/binary_collection.rb +37 -22
- data/lib/couchbase/bucket.rb +46 -31
- data/lib/couchbase/cluster.rb +146 -61
- data/lib/couchbase/collection.rb +257 -186
- data/lib/couchbase/datastructures/couchbase_list.rb +82 -50
- data/lib/couchbase/datastructures/couchbase_map.rb +87 -50
- data/lib/couchbase/datastructures/couchbase_queue.rb +65 -38
- data/lib/couchbase/datastructures/couchbase_set.rb +58 -41
- data/lib/couchbase/deprecations.rb +1 -1
- data/lib/couchbase/diagnostics.rb +8 -8
- data/lib/couchbase/errors.rb +7 -1
- data/lib/couchbase/json_transcoder.rb +1 -1
- data/lib/couchbase/management/analytics_index_manager.rb +90 -59
- data/lib/couchbase/management/bucket_manager.rb +73 -45
- data/lib/couchbase/management/collection_manager.rb +86 -43
- data/lib/couchbase/management/collection_query_index_manager.rb +56 -33
- data/lib/couchbase/management/query_index_manager.rb +88 -36
- data/lib/couchbase/management/scope_search_index_manager.rb +119 -52
- data/lib/couchbase/management/search_index_manager.rb +401 -178
- data/lib/couchbase/management/user_manager.rb +343 -174
- data/lib/couchbase/management/view_index_manager.rb +166 -73
- data/lib/couchbase/metrics/logging_meter.rb +108 -0
- data/lib/couchbase/metrics/logging_value_recorder.rb +50 -0
- data/lib/couchbase/metrics/meter.rb +27 -0
- data/lib/couchbase/metrics/noop_meter.rb +30 -0
- data/lib/couchbase/metrics/noop_value_recorder.rb +27 -0
- data/lib/couchbase/metrics/value_recorder.rb +25 -0
- data/lib/couchbase/options.rb +71 -5
- data/lib/couchbase/protostellar/client.rb +0 -2
- data/lib/couchbase/protostellar/cluster.rb +7 -0
- data/lib/couchbase/protostellar/generated/admin/analytics/v1/analytics_pb.rb +54 -0
- data/lib/couchbase/protostellar/generated/admin/analytics/v1/analytics_services_pb.rb +51 -0
- data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_pb.rb +5 -24
- data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_services_pb.rb +16 -0
- data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_pb.rb +5 -24
- data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_services_pb.rb +16 -0
- data/lib/couchbase/protostellar/generated/admin/query/v1/query_pb.rb +5 -24
- data/lib/couchbase/protostellar/generated/admin/query/v1/query_services_pb.rb +18 -0
- data/lib/couchbase/protostellar/generated/admin/search/v1/search_pb.rb +2 -23
- data/lib/couchbase/protostellar/generated/admin/search/v1/search_services_pb.rb +23 -0
- data/lib/couchbase/protostellar/generated/analytics/v1/analytics_pb.rb +4 -25
- data/lib/couchbase/protostellar/generated/analytics/v1/analytics_services_pb.rb +10 -0
- data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_pb.rb +6 -25
- data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_services_pb.rb +18 -0
- data/lib/couchbase/protostellar/generated/internal/xdcr/v1/xdcr_pb.rb +46 -0
- data/lib/couchbase/protostellar/generated/internal/xdcr/v1/xdcr_services_pb.rb +56 -0
- data/lib/couchbase/protostellar/generated/kv/v1/kv_pb.rb +3 -26
- data/lib/couchbase/protostellar/generated/kv/v1/kv_services_pb.rb +47 -0
- data/lib/couchbase/protostellar/generated/query/v1/query_pb.rb +4 -26
- data/lib/couchbase/protostellar/generated/query/v1/query_services_pb.rb +10 -0
- data/lib/couchbase/protostellar/generated/routing/v2/routing_pb.rb +26 -0
- data/lib/couchbase/protostellar/generated/routing/v2/routing_services_pb.rb +43 -0
- data/lib/couchbase/protostellar/generated/search/v1/search_pb.rb +5 -26
- data/lib/couchbase/protostellar/generated/search/v1/search_services_pb.rb +11 -0
- data/lib/couchbase/protostellar/generated/transactions/v1/transactions_pb.rb +2 -23
- data/lib/couchbase/protostellar/generated/transactions/v1/transactions_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated/view/v1/view_pb.rb +2 -23
- data/lib/couchbase/protostellar/generated/view/v1/view_services_pb.rb +9 -0
- data/lib/couchbase/protostellar/request_generator/admin/collection.rb +4 -2
- data/lib/couchbase/protostellar/request_generator/admin/query.rb +2 -0
- data/lib/couchbase/protostellar/request_generator/kv.rb +1 -1
- data/lib/couchbase/protostellar/scope.rb +4 -0
- data/lib/couchbase/scope.rb +62 -48
- data/lib/couchbase/search_options.rb +18 -18
- data/lib/couchbase/tracing/noop_span.rb +29 -0
- data/lib/couchbase/tracing/noop_tracer.rb +29 -0
- data/lib/couchbase/tracing/request_span.rb +34 -0
- data/lib/couchbase/tracing/request_tracer.rb +28 -0
- data/lib/couchbase/tracing/threshold_logging_span.rb +112 -0
- data/lib/couchbase/tracing/threshold_logging_tracer.rb +231 -0
- data/lib/couchbase/utils/hdr_histogram.rb +55 -0
- data/lib/couchbase/utils/observability.rb +263 -0
- data/lib/couchbase/utils/observability_constants.rb +200 -0
- data/lib/couchbase/utils/stdlib_logger_adapter.rb +1 -3
- data/lib/couchbase/version.rb +1 -1
- data/lib/couchbase.rb +2 -2
- metadata +72 -8
- data/lib/couchbase/protostellar/generated/routing/v1/routing_pb.rb +0 -52
- data/lib/couchbase/protostellar/generated/routing/v1/routing_services_pb.rb +0 -30
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2025. Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#pragma once
|
|
19
|
+
|
|
20
|
+
#include <couchbase/tracing/request_tracer.hxx>
|
|
21
|
+
|
|
22
|
+
#include "core/tracing/noop_tracer.hxx"
|
|
23
|
+
|
|
24
|
+
#include <chrono>
|
|
25
|
+
#include <map>
|
|
26
|
+
#include <memory>
|
|
27
|
+
#include <mutex>
|
|
28
|
+
#include <string>
|
|
29
|
+
#include <vector>
|
|
30
|
+
|
|
31
|
+
namespace couchbase::core::tracing
|
|
32
|
+
{
|
|
33
|
+
/**
|
|
34
|
+
* Tracer for use by C++ SDK wrappers. It is intended for storing spans & tags in memory, so that
|
|
35
|
+
* wrappers can then use their own tracing infrastructure to create them.
|
|
36
|
+
*/
|
|
37
|
+
class wrapper_sdk_tracer : public couchbase::tracing::request_tracer
|
|
38
|
+
{
|
|
39
|
+
public:
|
|
40
|
+
auto start_span(std::string name, std::shared_ptr<couchbase::tracing::request_span> parent)
|
|
41
|
+
-> std::shared_ptr<couchbase::tracing::request_span> override;
|
|
42
|
+
|
|
43
|
+
private:
|
|
44
|
+
std::shared_ptr<noop_span> noop_instance_{ std::make_shared<noop_span>() };
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
class wrapper_sdk_span : public couchbase::tracing::request_span
|
|
48
|
+
{
|
|
49
|
+
public:
|
|
50
|
+
wrapper_sdk_span() = default;
|
|
51
|
+
explicit wrapper_sdk_span(std::string name);
|
|
52
|
+
wrapper_sdk_span(std::string name,
|
|
53
|
+
const std::shared_ptr<couchbase::tracing::request_span>& parent);
|
|
54
|
+
|
|
55
|
+
void add_child(const std::shared_ptr<wrapper_sdk_span>& child);
|
|
56
|
+
|
|
57
|
+
void add_tag(const std::string& name, std::uint64_t value) override;
|
|
58
|
+
void add_tag(const std::string& name, const std::string& value) override;
|
|
59
|
+
|
|
60
|
+
void end() override;
|
|
61
|
+
|
|
62
|
+
[[nodiscard]] auto uint_tags() const -> const std::map<std::string, std::uint64_t>&;
|
|
63
|
+
[[nodiscard]] auto string_tags() const -> const std::map<std::string, std::string>&;
|
|
64
|
+
[[nodiscard]] auto children() -> std::vector<std::shared_ptr<wrapper_sdk_span>>;
|
|
65
|
+
[[nodiscard]] auto start_time() const -> const std::chrono::system_clock::time_point&;
|
|
66
|
+
[[nodiscard]] auto end_time() const -> const std::chrono::system_clock::time_point&;
|
|
67
|
+
|
|
68
|
+
[[nodiscard]] auto parent() const -> std::shared_ptr<couchbase::tracing::request_span> override;
|
|
69
|
+
|
|
70
|
+
private:
|
|
71
|
+
std::map<std::string, std::uint64_t> uint_tags_{};
|
|
72
|
+
std::map<std::string, std::string> string_tags_{};
|
|
73
|
+
std::chrono::system_clock::time_point start_time_{ std::chrono::system_clock::now() };
|
|
74
|
+
std::chrono::system_clock::time_point end_time_{};
|
|
75
|
+
|
|
76
|
+
// The only way to access spans is through their parents, so parents must hold owning references
|
|
77
|
+
// to their children.
|
|
78
|
+
std::vector<std::shared_ptr<wrapper_sdk_span>> children_{};
|
|
79
|
+
std::mutex children_mutex_;
|
|
80
|
+
|
|
81
|
+
// A weak pointer is used instead of the shared pointer in the parent class, to avoid circular
|
|
82
|
+
// references.
|
|
83
|
+
std::weak_ptr<couchbase::tracing::request_span> parent_{};
|
|
84
|
+
};
|
|
85
|
+
} // namespace couchbase::core::tracing
|
|
@@ -634,8 +634,8 @@ void
|
|
|
634
634
|
attempt_context_impl::get_multi(
|
|
635
635
|
const std::vector<couchbase::transactions::transaction_get_multi_spec>& specs,
|
|
636
636
|
const couchbase::transactions::transaction_get_multi_options& options,
|
|
637
|
-
std::function<void(error,
|
|
638
|
-
|
|
637
|
+
std::function<void(couchbase::error,
|
|
638
|
+
std::optional<couchbase::transactions::transaction_get_multi_result>)>&& cb)
|
|
639
639
|
{
|
|
640
640
|
std::vector<core::document_id> ids;
|
|
641
641
|
ids.reserve(specs.size());
|
|
@@ -666,17 +666,19 @@ auto
|
|
|
666
666
|
attempt_context_impl::get_multi(
|
|
667
667
|
const std::vector<couchbase::transactions::transaction_get_multi_spec>& specs,
|
|
668
668
|
const couchbase::transactions::transaction_get_multi_options& options)
|
|
669
|
-
-> std::pair<error,
|
|
669
|
+
-> std::pair<couchbase::error,
|
|
670
|
+
std::optional<couchbase::transactions::transaction_get_multi_result>>
|
|
670
671
|
{
|
|
671
672
|
auto barrier = std::make_shared<std::promise<
|
|
672
|
-
std::pair<error,
|
|
673
|
+
std::pair<couchbase::error,
|
|
674
|
+
std::optional<couchbase::transactions::transaction_get_multi_result>>>>();
|
|
673
675
|
auto f = barrier->get_future();
|
|
674
|
-
get_multi(
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
676
|
+
get_multi(specs,
|
|
677
|
+
options,
|
|
678
|
+
[barrier](couchbase::error err,
|
|
679
|
+
std::optional<couchbase::transactions::transaction_get_multi_result> res) {
|
|
680
|
+
return barrier->set_value(std::make_pair(std::move(err), std::move(res)));
|
|
681
|
+
});
|
|
680
682
|
return f.get();
|
|
681
683
|
}
|
|
682
684
|
|
|
@@ -749,7 +751,7 @@ attempt_context_impl::get_multi_replicas_from_preferred_server_group(
|
|
|
749
751
|
const couchbase::transactions::transaction_get_multi_replicas_from_preferred_server_group_options&
|
|
750
752
|
options,
|
|
751
753
|
std::function<
|
|
752
|
-
void(error,
|
|
754
|
+
void(couchbase::error,
|
|
753
755
|
std::optional<couchbase::transactions::
|
|
754
756
|
transaction_get_multi_replicas_from_preferred_server_group_result>)>&& cb)
|
|
755
757
|
{
|
|
@@ -790,12 +792,12 @@ attempt_context_impl::get_multi_replicas_from_preferred_server_group(
|
|
|
790
792
|
const couchbase::transactions::transaction_get_multi_replicas_from_preferred_server_group_options&
|
|
791
793
|
options)
|
|
792
794
|
-> std::pair<
|
|
793
|
-
error,
|
|
795
|
+
couchbase::error,
|
|
794
796
|
std::optional<
|
|
795
797
|
couchbase::transactions::transaction_get_multi_replicas_from_preferred_server_group_result>>
|
|
796
798
|
{
|
|
797
799
|
auto barrier = std::make_shared<std::promise<std::pair<
|
|
798
|
-
error,
|
|
800
|
+
couchbase::error,
|
|
799
801
|
std::optional<couchbase::transactions::
|
|
800
802
|
transaction_get_multi_replicas_from_preferred_server_group_result>>>>();
|
|
801
803
|
auto f = barrier->get_future();
|
|
@@ -803,7 +805,7 @@ attempt_context_impl::get_multi_replicas_from_preferred_server_group(
|
|
|
803
805
|
specs,
|
|
804
806
|
options,
|
|
805
807
|
[barrier](
|
|
806
|
-
error err,
|
|
808
|
+
couchbase::error err,
|
|
807
809
|
std::optional<
|
|
808
810
|
couchbase::transactions::transaction_get_multi_replicas_from_preferred_server_group_result>
|
|
809
811
|
res) {
|
|
@@ -357,12 +357,12 @@ public:
|
|
|
357
357
|
std::optional<transaction_get_multi_result>)>&& cb) override;
|
|
358
358
|
auto get_multi(const std::vector<couchbase::transactions::transaction_get_multi_spec>& specs,
|
|
359
359
|
const couchbase::transactions::transaction_get_multi_options& options)
|
|
360
|
-
-> std::pair<error,
|
|
360
|
+
-> std::pair<couchbase::error,
|
|
361
361
|
std::optional<couchbase::transactions::transaction_get_multi_result>> override;
|
|
362
362
|
void get_multi(
|
|
363
363
|
const std::vector<couchbase::transactions::transaction_get_multi_spec>& specs,
|
|
364
364
|
const couchbase::transactions::transaction_get_multi_options& options,
|
|
365
|
-
std::function<void(error,
|
|
365
|
+
std::function<void(couchbase::error,
|
|
366
366
|
std::optional<couchbase::transactions::transaction_get_multi_result>)>&& cb)
|
|
367
367
|
override;
|
|
368
368
|
|
|
@@ -384,7 +384,7 @@ public:
|
|
|
384
384
|
const couchbase::transactions::
|
|
385
385
|
transaction_get_multi_replicas_from_preferred_server_group_options& options)
|
|
386
386
|
-> std::pair<
|
|
387
|
-
error,
|
|
387
|
+
couchbase::error,
|
|
388
388
|
std::optional<couchbase::transactions::
|
|
389
389
|
transaction_get_multi_replicas_from_preferred_server_group_result>> override;
|
|
390
390
|
void get_multi_replicas_from_preferred_server_group(
|
|
@@ -394,7 +394,7 @@ public:
|
|
|
394
394
|
const couchbase::transactions::
|
|
395
395
|
transaction_get_multi_replicas_from_preferred_server_group_options& options,
|
|
396
396
|
std::function<void(
|
|
397
|
-
error,
|
|
397
|
+
couchbase::error,
|
|
398
398
|
std::optional<couchbase::transactions::
|
|
399
399
|
transaction_get_multi_replicas_from_preferred_server_group_result>)>&& cb)
|
|
400
400
|
override;
|
|
@@ -204,7 +204,7 @@ transactions::run(const couchbase::transactions::transaction_options& config, lo
|
|
|
204
204
|
auto
|
|
205
205
|
transactions::run(couchbase::transactions::txn_logic&& code,
|
|
206
206
|
const couchbase::transactions::transaction_options& config)
|
|
207
|
-
-> std::pair<error, couchbase::transactions::transaction_result>
|
|
207
|
+
-> std::pair<couchbase::error, couchbase::transactions::transaction_result>
|
|
208
208
|
{
|
|
209
209
|
try {
|
|
210
210
|
return { {}, wrap_public_api_run(*this, config, max_attempts_, std::move(code)) };
|
|
@@ -77,8 +77,7 @@ parse_mutation_cas(const std::string& cas) -> std::uint64_t
|
|
|
77
77
|
if (cas.empty()) {
|
|
78
78
|
return 0;
|
|
79
79
|
}
|
|
80
|
-
return core::utils::byte_swap(
|
|
81
|
-
1000000;
|
|
80
|
+
return core::utils::byte_swap(std::stoull(cas, nullptr, 16)) / 1000000;
|
|
82
81
|
}
|
|
83
82
|
|
|
84
83
|
// TODO(CXXCBC-549)
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
20
|
#include <cstdint>
|
|
21
|
+
#include <type_traits>
|
|
21
22
|
|
|
22
23
|
namespace couchbase::core::utils
|
|
23
24
|
{
|
|
@@ -46,4 +47,15 @@ byte_swap(std::uint64_t value) -> std::uint64_t
|
|
|
46
47
|
std::uint32_t lo = byte_swap(static_cast<std::uint32_t>(value >> 32));
|
|
47
48
|
return (hi << 32) | lo;
|
|
48
49
|
}
|
|
50
|
+
|
|
51
|
+
// when 'unsigned long long' is not the same as 'std::uint64_t'
|
|
52
|
+
template<typename Dummy = void>
|
|
53
|
+
static constexpr auto
|
|
54
|
+
byte_swap(unsigned long long value,
|
|
55
|
+
std::enable_if_t<!std::is_same_v<unsigned long long, std::uint64_t>, Dummy>* /* dummy */ =
|
|
56
|
+
nullptr) -> std::uint64_t
|
|
57
|
+
{
|
|
58
|
+
return byte_swap(static_cast<std::uint64_t>(value));
|
|
59
|
+
}
|
|
60
|
+
|
|
49
61
|
} // namespace couchbase::core::utils
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2025 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#pragma once
|
|
19
|
+
|
|
20
|
+
#include <mutex>
|
|
21
|
+
#include <queue>
|
|
22
|
+
|
|
23
|
+
namespace couchbase::core::utils
|
|
24
|
+
{
|
|
25
|
+
template<typename T>
|
|
26
|
+
class concurrent_fixed_priority_queue
|
|
27
|
+
{
|
|
28
|
+
private:
|
|
29
|
+
std::mutex mutex_;
|
|
30
|
+
std::priority_queue<T, std::vector<T>, std::greater<T>> data_;
|
|
31
|
+
std::size_t dropped_count_{ 0 };
|
|
32
|
+
std::size_t capacity_{};
|
|
33
|
+
|
|
34
|
+
public:
|
|
35
|
+
using size_type = typename std::priority_queue<T, std::vector<T>, std::greater<T>>::size_type;
|
|
36
|
+
|
|
37
|
+
explicit concurrent_fixed_priority_queue(std::size_t capacity)
|
|
38
|
+
: capacity_(capacity)
|
|
39
|
+
{
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
concurrent_fixed_priority_queue(const concurrent_fixed_priority_queue&) = delete;
|
|
43
|
+
concurrent_fixed_priority_queue(concurrent_fixed_priority_queue&&) = delete;
|
|
44
|
+
auto operator=(const concurrent_fixed_priority_queue&)
|
|
45
|
+
-> concurrent_fixed_priority_queue& = delete;
|
|
46
|
+
auto operator=(concurrent_fixed_priority_queue&&) -> concurrent_fixed_priority_queue& = delete;
|
|
47
|
+
~concurrent_fixed_priority_queue() = default;
|
|
48
|
+
|
|
49
|
+
auto size() -> size_type
|
|
50
|
+
{
|
|
51
|
+
std::unique_lock<std::mutex> lock(mutex_);
|
|
52
|
+
return data_.size();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
auto empty() -> bool
|
|
56
|
+
{
|
|
57
|
+
const std::unique_lock<std::mutex> lock(mutex_);
|
|
58
|
+
return data_.empty();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void emplace(const T&& item)
|
|
62
|
+
{
|
|
63
|
+
const std::unique_lock<std::mutex> lock(mutex_);
|
|
64
|
+
|
|
65
|
+
if (data_.size() < capacity_) {
|
|
66
|
+
data_.emplace(std::forward<const T>(item));
|
|
67
|
+
} else {
|
|
68
|
+
// We need to either drop the new item, or an existing item
|
|
69
|
+
++dropped_count_;
|
|
70
|
+
if (item > data_.top()) {
|
|
71
|
+
// The new item is greater than the smallest item, so we will replace the smallest with the
|
|
72
|
+
// new item
|
|
73
|
+
data_.pop();
|
|
74
|
+
data_.emplace(std::forward<const T>(item));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Clears the internal queue, and returns the data along with the number of items that have been
|
|
81
|
+
* dropped.
|
|
82
|
+
*/
|
|
83
|
+
auto steal_data() -> std::pair<std::priority_queue<T>, std::size_t>
|
|
84
|
+
{
|
|
85
|
+
std::priority_queue<T, std::vector<T>, std::greater<T>> reversed_data;
|
|
86
|
+
std::size_t dropped_count{};
|
|
87
|
+
{
|
|
88
|
+
const std::unique_lock<std::mutex> lock(mutex_);
|
|
89
|
+
std::swap(reversed_data, data_);
|
|
90
|
+
std::swap(dropped_count, dropped_count_);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
std::priority_queue<T> data{};
|
|
94
|
+
while (!reversed_data.empty()) {
|
|
95
|
+
data.emplace(std::move(reversed_data.top()));
|
|
96
|
+
reversed_data.pop();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return std::make_pair(std::move(data), dropped_count);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
} // namespace couchbase::core::utils
|
|
@@ -590,6 +590,8 @@ extract_options(connection_string& connstr)
|
|
|
590
590
|
parse_option(connstr.options.preserve_bootstrap_nodes_order, name, value, connstr.warnings);
|
|
591
591
|
} else if (name == "allow_enterprise_analytics") {
|
|
592
592
|
parse_option(connstr.options.allow_enterprise_analytics, name, value, connstr.warnings);
|
|
593
|
+
} else if (name == "enable_lazy_connections") {
|
|
594
|
+
parse_option(connstr.options.enable_lazy_connections, name, value, connstr.warnings);
|
|
593
595
|
} else {
|
|
594
596
|
connstr.warnings.push_back(
|
|
595
597
|
fmt::format(R"(unknown parameter "{}" in connection string (value "{}"))", name, value));
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2021-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 "contains_string.hxx"
|
|
19
|
+
|
|
20
|
+
namespace couchbase::core::utils
|
|
21
|
+
{
|
|
22
|
+
|
|
23
|
+
namespace
|
|
24
|
+
{
|
|
25
|
+
constexpr auto ascii_lower = [](unsigned char c) -> unsigned char {
|
|
26
|
+
return (c >= 'A' && c <= 'Z') ? static_cast<unsigned char>(c + ('a' - 'A')) : c;
|
|
27
|
+
};
|
|
28
|
+
} // namespace
|
|
29
|
+
|
|
30
|
+
auto
|
|
31
|
+
contains_string(std::string_view input, std::string_view substr, bool ignore_case) -> bool
|
|
32
|
+
{
|
|
33
|
+
if (substr.empty()) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (input.empty() || substr.size() > input.size()) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (!ignore_case) {
|
|
42
|
+
return input.find(substr) != std::string_view::npos;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const auto end = input.size() - substr.size() + 1;
|
|
46
|
+
for (std::size_t i = 0; i < end; i++) {
|
|
47
|
+
bool match = true;
|
|
48
|
+
for (std::size_t j = 0; j < substr.size(); j++) {
|
|
49
|
+
if (ascii_lower(static_cast<unsigned char>(input[i + j])) !=
|
|
50
|
+
ascii_lower(static_cast<unsigned char>(substr[j]))) {
|
|
51
|
+
match = false;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (match) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
} // namespace couchbase::core::utils
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2021-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 <string_view>
|
|
21
|
+
|
|
22
|
+
namespace couchbase::core::utils
|
|
23
|
+
{
|
|
24
|
+
auto
|
|
25
|
+
contains_string(std::string_view input, std::string_view substr, bool ignore_case = false) -> bool;
|
|
26
|
+
} // namespace couchbase::core::utils
|
|
@@ -102,6 +102,53 @@ public:
|
|
|
102
102
|
void close(std::function<void()>&& handler);
|
|
103
103
|
[[nodiscard]] auto close() -> std::future<void>;
|
|
104
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Replaces the current authenticator used by this cluster.
|
|
107
|
+
*
|
|
108
|
+
* NOTE: Setting a new authenticator does not change the authentication status of existing
|
|
109
|
+
* connections.
|
|
110
|
+
*
|
|
111
|
+
* @param authenticator the authenticator to replace
|
|
112
|
+
*
|
|
113
|
+
* @return error
|
|
114
|
+
*
|
|
115
|
+
* @since 1.3.0
|
|
116
|
+
* @committed
|
|
117
|
+
*/
|
|
118
|
+
auto set_authenticator(const password_authenticator& authenticator) -> error;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Replaces the current authenticator used by this cluster.
|
|
122
|
+
*
|
|
123
|
+
* NOTE: Setting a new authenticator does not change the authentication status of existing
|
|
124
|
+
connections.
|
|
125
|
+
*
|
|
126
|
+
* @param authenticator the authenticator to replace
|
|
127
|
+
|
|
128
|
+
* @exception errc::common::invalid_argument if TLS is not enabled.
|
|
129
|
+
*
|
|
130
|
+
* @return error
|
|
131
|
+
*
|
|
132
|
+
* @since 1.3.0
|
|
133
|
+
* @committed
|
|
134
|
+
*/
|
|
135
|
+
auto set_authenticator(const certificate_authenticator& authenticator) -> error;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Replaces the current authenticator used by this cluster.
|
|
139
|
+
*
|
|
140
|
+
* NOTE: Setting a new authenticator does not change the authentication status of existing
|
|
141
|
+
connections.
|
|
142
|
+
*
|
|
143
|
+
* @param authenticator the authenticator to replace
|
|
144
|
+
*
|
|
145
|
+
* @return error
|
|
146
|
+
*
|
|
147
|
+
* @since 1.3.0
|
|
148
|
+
* @uncommitted
|
|
149
|
+
*/
|
|
150
|
+
auto set_authenticator(const jwt_authenticator& authenticator) -> error;
|
|
151
|
+
|
|
105
152
|
/**
|
|
106
153
|
* Opens a {@link bucket} with the given name.
|
|
107
154
|
*
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
#include <couchbase/configuration_profiles_registry.hxx>
|
|
25
25
|
#include <couchbase/dns_options.hxx>
|
|
26
26
|
#include <couchbase/error.hxx>
|
|
27
|
+
#include <couchbase/jwt_authenticator.hxx>
|
|
27
28
|
#include <couchbase/metrics_options.hxx>
|
|
28
29
|
#include <couchbase/network_options.hxx>
|
|
29
30
|
#include <couchbase/password_authenticator.hxx>
|
|
@@ -93,6 +94,18 @@ public:
|
|
|
93
94
|
{
|
|
94
95
|
}
|
|
95
96
|
|
|
97
|
+
/**
|
|
98
|
+
*
|
|
99
|
+
* @param authenticator
|
|
100
|
+
*
|
|
101
|
+
* @since 1.3.0
|
|
102
|
+
* @uncommitted
|
|
103
|
+
*/
|
|
104
|
+
explicit cluster_options(jwt_authenticator authenticator)
|
|
105
|
+
: jwt_token_{ std::move(authenticator.token_) }
|
|
106
|
+
{
|
|
107
|
+
}
|
|
108
|
+
|
|
96
109
|
/**
|
|
97
110
|
* Apply settings profile by name.
|
|
98
111
|
*
|
|
@@ -272,6 +285,7 @@ public:
|
|
|
272
285
|
std::string password;
|
|
273
286
|
std::string certificate_path;
|
|
274
287
|
std::string key_path;
|
|
288
|
+
std::string jwt_token;
|
|
275
289
|
std::optional<std::vector<std::string>> allowed_sasl_mechanisms;
|
|
276
290
|
compression_options::built compression;
|
|
277
291
|
timeout_options::built timeouts;
|
|
@@ -294,6 +308,7 @@ public:
|
|
|
294
308
|
password_,
|
|
295
309
|
certificate_path_,
|
|
296
310
|
key_path_,
|
|
311
|
+
jwt_token_,
|
|
297
312
|
sasl_mechanisms_,
|
|
298
313
|
compression_.build(),
|
|
299
314
|
timeouts_.build(),
|
|
@@ -315,6 +330,7 @@ private:
|
|
|
315
330
|
std::string password_{};
|
|
316
331
|
std::string certificate_path_{};
|
|
317
332
|
std::string key_path_{};
|
|
333
|
+
std::string jwt_token_{};
|
|
318
334
|
std::optional<std::vector<std::string>> sasl_mechanisms_{};
|
|
319
335
|
|
|
320
336
|
compression_options compression_{};
|