couchbase 3.8.2 → 3.9.0
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 +1 -1
- data/ext/CMakeLists.txt +16 -1
- data/ext/cache/cpm/{CPM_0.42.0.cmake → CPM_0.43.1.cmake} +18 -2
- data/ext/cache/extconf_include.rb +6 -6
- data/ext/cache/mozilla-ca-bundle.crt +121 -55
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +130 -21
- data/ext/couchbase/cmake/APKBUILD.in +25 -4
- data/ext/couchbase/cmake/Bundler.cmake +143 -34
- data/ext/couchbase/cmake/CPM.cmake +126 -12
- data/ext/couchbase/cmake/Cache.cmake +7 -1
- data/ext/couchbase/cmake/CompilerOptions.cmake +1 -1
- data/ext/couchbase/cmake/CompilerWarnings.cmake +17 -6
- data/ext/couchbase/cmake/GrpcProtobuf.cmake +481 -0
- data/ext/couchbase/cmake/OpenSSL.cmake +10 -3
- data/ext/couchbase/cmake/Packaging.cmake +519 -65
- data/ext/couchbase/cmake/Protostellar.cmake +250 -0
- data/ext/couchbase/cmake/Sanitizers.cmake +61 -50
- data/ext/couchbase/cmake/StaticAnalyzers.cmake +16 -5
- data/ext/couchbase/cmake/TestFramework.cmake +283 -0
- data/ext/couchbase/cmake/TestFrameworkAddTests.cmake +51 -0
- data/ext/couchbase/cmake/Testing.cmake +27 -9
- data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +141 -8
- data/ext/couchbase/cmake/VersionInfo.cmake +50 -0
- data/ext/couchbase/cmake/build_config.hxx.in +2 -1
- data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +101 -23
- data/ext/couchbase/cmake/couchbase_cxx_client_static-config.cmake.in +7 -0
- data/ext/couchbase/cmake/couchbase_cxx_client_static.pc.in +2 -0
- data/ext/couchbase/cmake/gRPC_Generate.cmake +58 -0
- data/ext/couchbase/cmake/protobuf_Generate.cmake +69 -0
- data/ext/couchbase/cmake/require-git-checkout.cmake +25 -0
- data/ext/couchbase/cmake/tarball_glob.txt +49 -0
- data/ext/couchbase/core/agent_group.cxx +0 -8
- data/ext/couchbase/core/agent_group.hxx +0 -4
- data/ext/couchbase/core/analytics_stream.cxx +314 -0
- data/ext/couchbase/core/analytics_stream.hxx +129 -0
- data/ext/couchbase/core/analytics_stream_component.cxx +245 -0
- data/ext/couchbase/core/analytics_stream_component.hxx +67 -0
- data/ext/couchbase/core/app_telemetry_meter.cxx +25 -3
- data/ext/couchbase/core/app_telemetry_meter.hxx +77 -0
- data/ext/couchbase/core/app_telemetry_reporter.cxx +7 -6
- data/ext/couchbase/core/bucket.cxx +381 -87
- data/ext/couchbase/core/bucket.hxx +105 -25
- data/ext/couchbase/core/bucket_unit_test_api.hxx +57 -0
- data/ext/couchbase/core/capella.hxx +91 -0
- data/ext/couchbase/core/cluster.cxx +1554 -398
- data/ext/couchbase/core/cluster.hxx +39 -8
- data/ext/couchbase/core/cluster_agent.cxx +0 -8
- data/ext/couchbase/core/cluster_agent.hxx +0 -4
- data/ext/couchbase/core/cluster_options.hxx +26 -3
- data/ext/couchbase/core/collections_component.cxx +39 -15
- data/ext/couchbase/core/config_profiles.cxx +1 -1
- data/ext/couchbase/core/crud_component.cxx +2 -2
- data/ext/couchbase/core/crud_options.hxx +34 -0
- data/ext/couchbase/core/crypto/cbcrypto.cc +18 -13
- data/ext/couchbase/core/document_id_redaction.hxx +81 -0
- data/ext/couchbase/core/error_context/base_error_context.hxx +7 -6
- data/ext/couchbase/core/error_context/key_value.cxx +25 -2
- data/ext/couchbase/core/error_context/key_value.hxx +60 -33
- data/ext/couchbase/core/error_context/key_value_error_context.hxx +16 -15
- data/ext/couchbase/core/error_context/search.hxx +5 -0
- data/ext/couchbase/core/error_context/search_json.hxx +3 -0
- data/ext/couchbase/core/error_context/subdocument_error_context.hxx +19 -18
- data/ext/couchbase/core/error_context/view.hxx +5 -0
- data/ext/couchbase/core/free_form_http_request.cxx +237 -4
- data/ext/couchbase/core/free_form_http_request.hxx +41 -8
- data/ext/couchbase/core/http_component.cxx +300 -284
- data/ext/couchbase/core/http_component.hxx +0 -4
- data/ext/couchbase/core/impl/analytics.cxx +38 -5
- data/ext/couchbase/core/impl/analytics.hxx +34 -0
- data/ext/couchbase/core/impl/bootstrap_error.hxx +0 -3
- data/ext/couchbase/core/impl/collection.cxx +215 -202
- data/ext/couchbase/core/impl/collection_manager.cxx +1 -1
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +45 -18
- data/ext/couchbase/core/impl/error.cxx +22 -2
- data/ext/couchbase/core/impl/internal_analytics_stream_result.hxx +111 -0
- data/ext/couchbase/core/impl/internal_query_stream_result.hxx +110 -0
- data/ext/couchbase/core/impl/invoke_with_node_id.hxx +15 -7
- data/ext/couchbase/core/impl/key_value_error_category.cxx +6 -0
- data/ext/couchbase/core/impl/lookup_in_replica.cxx +10 -10
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +4 -4
- data/ext/couchbase/core/impl/node_id.cxx +49 -13
- data/ext/couchbase/core/impl/observability_recorder.cxx +12 -2
- data/ext/couchbase/core/impl/observe_poll.cxx +63 -23
- data/ext/couchbase/core/impl/public_analytics_stream_result.cxx +372 -0
- data/ext/couchbase/core/impl/public_bucket.cxx +48 -2
- data/ext/couchbase/core/impl/public_cluster.cxx +229 -42
- data/ext/couchbase/core/impl/public_query_stream_result.cxx +380 -0
- data/ext/couchbase/core/impl/public_transaction_get_multi_replicas_from_preferred_server_group_result.cxx +42 -0
- data/ext/couchbase/core/impl/public_transaction_get_multi_result.cxx +42 -0
- data/ext/couchbase/core/impl/query.cxx +76 -7
- data/ext/couchbase/core/impl/query.hxx +36 -0
- data/ext/couchbase/core/impl/query_index_manager.cxx +54 -1
- data/ext/couchbase/core/impl/replica_utils.cxx +101 -0
- data/ext/couchbase/core/impl/replica_utils.hxx +64 -0
- data/ext/couchbase/core/impl/resolve_node_id.hxx +125 -0
- data/ext/couchbase/core/impl/scope.cxx +70 -0
- data/ext/couchbase/core/impl/search.cxx +31 -1
- data/ext/couchbase/core/impl/transactions.cxx +130 -0
- data/ext/couchbase/core/impl/wait_until_ready.cxx +439 -0
- data/ext/couchbase/core/impl/wait_until_ready.hxx +110 -0
- data/ext/couchbase/core/impl/with_bucket_config_or_timeout.hxx +180 -0
- data/ext/couchbase/core/impl/with_cancellation.hxx +11 -3
- data/ext/couchbase/core/io/configuration_belongs_to_session.hxx +1 -2
- data/ext/couchbase/core/io/dns_client.cxx +122 -45
- data/ext/couchbase/core/io/dns_codec.hxx +21 -21
- data/ext/couchbase/core/io/dns_config.cxx +21 -6
- data/ext/couchbase/core/io/http_command.hxx +149 -121
- data/ext/couchbase/core/io/http_error.hxx +107 -0
- data/ext/couchbase/core/io/http_parser.cxx +4 -0
- data/ext/couchbase/core/io/http_session.cxx +606 -154
- data/ext/couchbase/core/io/http_session.hxx +147 -30
- data/ext/couchbase/core/io/http_session_manager.hxx +329 -382
- data/ext/couchbase/core/io/http_streaming_parser.cxx +4 -0
- data/ext/couchbase/core/io/http_streaming_response.cxx +328 -43
- data/ext/couchbase/core/io/http_streaming_response.hxx +37 -3
- data/ext/couchbase/core/io/mcbp_buffer_pool.hxx +122 -0
- data/ext/couchbase/core/io/mcbp_command.hxx +150 -51
- data/ext/couchbase/core/io/mcbp_command_id.hxx +45 -0
- data/ext/couchbase/core/io/mcbp_message.cxx +9 -1
- data/ext/couchbase/core/io/mcbp_message.hxx +19 -0
- data/ext/couchbase/core/io/mcbp_output_queue.hxx +150 -0
- data/ext/couchbase/core/io/mcbp_parser.cxx +24 -7
- data/ext/couchbase/core/io/mcbp_session.cxx +309 -301
- data/ext/couchbase/core/io/mcbp_session.hxx +27 -18
- data/ext/couchbase/core/io/opaque_ring_table.hxx +145 -0
- data/ext/couchbase/core/io/retry_orchestrator.hxx +6 -5
- data/ext/couchbase/core/io/stream_deadline.hxx +50 -0
- data/ext/couchbase/core/io/streams.cxx +151 -21
- data/ext/couchbase/core/io/streams.hxx +48 -1
- data/ext/couchbase/core/logger/logger.cxx +36 -0
- data/ext/couchbase/core/logger/logger.hxx +46 -6
- data/ext/couchbase/core/logger/redaction.hxx +503 -0
- data/ext/couchbase/core/management/eventing_status.hxx +10 -0
- data/ext/couchbase/core/management/eventing_status_json.hxx +4 -0
- data/ext/couchbase/core/mcbp/big_endian.cxx +1 -1
- data/ext/couchbase/core/mcbp/codec.cxx +27 -18
- data/ext/couchbase/core/mcbp/operation_queue.cxx +2 -2
- data/ext/couchbase/core/mcbp/packet.hxx +2 -2
- data/ext/couchbase/core/mcbp/queue_request.cxx +23 -6
- data/ext/couchbase/core/mcbp/queue_request.hxx +21 -0
- data/ext/couchbase/core/meta/features.hxx +13 -0
- data/ext/couchbase/core/meta/version.cxx +6 -3
- data/ext/couchbase/core/metrics/logging_meter.cxx +5 -10
- data/ext/couchbase/core/metrics/meter_wrapper.cxx +63 -33
- data/ext/couchbase/core/metrics/meter_wrapper.hxx +55 -3
- data/ext/couchbase/core/operations/analytics_response_parsing.cxx +177 -0
- data/ext/couchbase/core/operations/analytics_response_parsing.hxx +55 -0
- data/ext/couchbase/core/operations/document_analytics.cxx +48 -130
- data/ext/couchbase/core/operations/document_analytics.hxx +14 -2
- data/ext/couchbase/core/operations/document_get_all_replicas.hxx +15 -7
- data/ext/couchbase/core/operations/document_get_any_replica.hxx +19 -8
- data/ext/couchbase/core/operations/document_get_projected.cxx +1 -1
- data/ext/couchbase/core/{impl/get_replica.cxx → operations/document_get_replica.cxx} +21 -3
- data/ext/couchbase/core/{impl/get_replica.hxx → operations/document_get_replica.hxx} +31 -4
- data/ext/couchbase/core/operations/document_lookup_in.cxx +10 -10
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +228 -198
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +215 -217
- data/ext/couchbase/core/operations/document_query.cxx +108 -221
- data/ext/couchbase/core/operations/document_query.hxx +18 -4
- data/ext/couchbase/core/operations/document_search.cxx +52 -8
- data/ext/couchbase/core/operations/document_search.hxx +3 -0
- data/ext/couchbase/core/operations/document_view.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_dataset_create.cxx +15 -8
- data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +4 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_drop.cxx +11 -6
- data/ext/couchbase/core/operations/management/analytics_dataset_get_all.cxx +3 -2
- data/ext/couchbase/core/operations/management/analytics_dataverse_create.cxx +10 -5
- data/ext/couchbase/core/operations/management/analytics_dataverse_drop.cxx +10 -5
- data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.cxx +2 -1
- data/ext/couchbase/core/operations/management/analytics_index_create.cxx +33 -8
- data/ext/couchbase/core/operations/management/analytics_index_drop.cxx +12 -7
- data/ext/couchbase/core/operations/management/analytics_index_get_all.cxx +3 -2
- data/ext/couchbase/core/operations/management/analytics_link_connect.cxx +11 -6
- data/ext/couchbase/core/operations/management/analytics_link_create.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_link_disconnect.cxx +10 -4
- data/ext/couchbase/core/operations/management/analytics_link_drop.cxx +6 -4
- data/ext/couchbase/core/operations/management/analytics_link_get_all.cxx +4 -3
- data/ext/couchbase/core/operations/management/analytics_link_replace.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_link_utils.hxx +1 -1
- data/ext/couchbase/core/operations/management/change_password.cxx +2 -0
- data/ext/couchbase/core/operations/management/collection_drop.cxx +5 -1
- data/ext/couchbase/core/operations/management/error_utils.cxx +59 -5
- data/ext/couchbase/core/operations/management/error_utils.hxx +29 -1
- data/ext/couchbase/core/operations/management/eventing_deploy_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_drop_function.cxx +8 -3
- data/ext/couchbase/core/operations/management/eventing_get_all_functions.cxx +4 -2
- data/ext/couchbase/core/operations/management/eventing_get_function.cxx +5 -3
- data/ext/couchbase/core/operations/management/eventing_get_status.cxx +4 -2
- data/ext/couchbase/core/operations/management/eventing_pause_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_resume_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_undeploy_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_upsert_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/group_drop.cxx +3 -1
- data/ext/couchbase/core/operations/management/group_get.cxx +3 -1
- data/ext/couchbase/core/operations/management/group_upsert.cxx +11 -8
- data/ext/couchbase/core/operations/management/query_index_build.cxx +5 -2
- data/ext/couchbase/core/operations/management/query_index_create.cxx +9 -3
- data/ext/couchbase/core/operations/management/query_index_drop.cxx +11 -4
- data/ext/couchbase/core/operations/management/query_index_get_all.cxx +1 -1
- data/ext/couchbase/core/operations/management/query_index_get_all_deferred.cxx +1 -1
- data/ext/couchbase/core/operations/management/scope_drop.cxx +5 -1
- data/ext/couchbase/core/operations/management/scope_get_all.cxx +6 -1
- data/ext/couchbase/core/operations/management/search_get_stats.cxx +10 -0
- data/ext/couchbase/core/operations/management/search_index_analyze_document.cxx +3 -2
- data/ext/couchbase/core/operations/management/search_index_control_ingest.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_control_query.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_drop.cxx +2 -2
- data/ext/couchbase/core/operations/management/search_index_get.cxx +2 -2
- data/ext/couchbase/core/operations/management/search_index_get_documents_count.cxx +3 -2
- data/ext/couchbase/core/operations/management/search_index_get_stats.cxx +3 -1
- data/ext/couchbase/core/operations/management/search_index_upsert.cxx +2 -2
- data/ext/couchbase/core/operations/management/user_drop.cxx +3 -1
- data/ext/couchbase/core/operations/management/user_get.cxx +3 -1
- data/ext/couchbase/core/operations/management/user_upsert.cxx +12 -9
- data/ext/couchbase/core/operations/management/view_index_drop.cxx +1 -1
- data/ext/couchbase/core/operations/management/view_index_get.cxx +1 -1
- data/ext/couchbase/core/operations/management/view_index_upsert.cxx +1 -1
- data/ext/couchbase/core/operations/operation_traits.hxx +18 -0
- data/ext/couchbase/core/operations/query_response_parsing.cxx +211 -0
- data/ext/couchbase/core/operations/query_response_parsing.hxx +60 -0
- data/ext/couchbase/core/operations_fwd.hxx +3 -3
- data/ext/couchbase/core/origin.cxx +54 -26
- data/ext/couchbase/core/origin.hxx +12 -0
- data/ext/couchbase/core/orphan_reporter.cxx +2 -1
- data/ext/couchbase/core/platform/random.cc +7 -7
- data/ext/couchbase/core/protocol/client_request.cxx +2 -2
- data/ext/couchbase/core/protocol/client_request.hxx +38 -21
- data/ext/couchbase/core/protocol/client_response.cxx +11 -3
- data/ext/couchbase/core/protocol/client_response.hxx +27 -6
- data/ext/couchbase/core/protocol/cmd_append.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_cluster_map_change_notification.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_decrement.cxx +6 -6
- data/ext/couchbase/core/protocol/cmd_get.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_get_and_lock.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_and_touch.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_cluster_config.cxx +6 -4
- data/ext/couchbase/core/protocol/cmd_get_collection_id.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_error_map.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_get_meta.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_get_replica.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_hello.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_increment.cxx +6 -6
- data/ext/couchbase/core/protocol/cmd_insert.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_lookup_in.cxx +4 -3
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +4 -3
- data/ext/couchbase/core/protocol/cmd_mutate_in.cxx +10 -9
- data/ext/couchbase/core/protocol/cmd_mutate_in.hxx +10 -10
- data/ext/couchbase/core/protocol/cmd_observe_seqno.cxx +7 -7
- data/ext/couchbase/core/protocol/cmd_prepend.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_remove.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_replace.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_touch.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_upsert.cxx +4 -4
- data/ext/couchbase/core/protocol/datatype.hxx +118 -1
- data/ext/couchbase/core/protocol/frame_info_utils.cxx +1 -1
- data/ext/couchbase/core/protocol/magic.hxx +4 -0
- data/ext/couchbase/core/protocol/magic_fmt.hxx +3 -0
- data/ext/couchbase/core/protocol/server_request.hxx +3 -1
- data/ext/couchbase/core/protocol/status.cxx +1 -1
- data/ext/couchbase/core/protostellar/analytics_converter.hxx +171 -0
- data/ext/couchbase/core/protostellar/bucket_admin_converter.hxx +301 -0
- data/ext/couchbase/core/protostellar/collection_admin_converter.hxx +92 -0
- data/ext/couchbase/core/protostellar/component.cxx +2445 -0
- data/ext/couchbase/core/protostellar/component.hxx +391 -0
- data/ext/couchbase/core/{columnar/bootstrap_notification_subscriber.hxx → protostellar/compression_settings.hxx} +11 -10
- data/ext/couchbase/core/protostellar/credentials.cxx +233 -0
- data/ext/couchbase/core/protostellar/credentials.hxx +88 -0
- data/ext/couchbase/core/protostellar/dispatcher.cxx +57 -0
- data/ext/couchbase/core/protostellar/dispatcher.hxx +482 -0
- data/ext/couchbase/core/protostellar/error_utils.cxx +293 -0
- data/ext/couchbase/core/protostellar/error_utils.hxx +97 -0
- data/ext/couchbase/core/protostellar/json_payload.hxx +49 -0
- data/ext/couchbase/core/protostellar/kv_converter.cxx +70 -0
- data/ext/couchbase/core/protostellar/kv_converter.hxx +600 -0
- data/ext/couchbase/core/protostellar/query_converter.hxx +265 -0
- data/ext/couchbase/core/protostellar/query_index_admin_converter.hxx +291 -0
- data/ext/couchbase/core/protostellar/query_proto.hxx +73 -0
- data/ext/couchbase/core/protostellar/search_converter.hxx +244 -0
- data/ext/couchbase/core/protostellar/search_index_admin_converter.hxx +156 -0
- data/ext/couchbase/core/protostellar/view_converter.hxx +158 -0
- data/ext/couchbase/core/query_stream.cxx +447 -0
- data/ext/couchbase/core/query_stream.hxx +141 -0
- data/ext/couchbase/core/query_stream_component.cxx +243 -0
- data/ext/couchbase/core/query_stream_component.hxx +68 -0
- data/ext/couchbase/core/range_scan_load_balancer.cxx +15 -8
- data/ext/couchbase/core/range_scan_orchestrator.cxx +15 -3
- data/ext/couchbase/core/response_handler.hxx +41 -4
- data/ext/couchbase/core/row_streamer.cxx +332 -46
- data/ext/couchbase/core/row_streamer.hxx +31 -1
- data/ext/couchbase/core/row_streamer_options.hxx +55 -0
- data/ext/couchbase/core/sasl/client.h +3 -0
- data/ext/couchbase/core/search_scoring.hxx +66 -0
- data/ext/couchbase/core/stream_error_details.hxx +69 -0
- data/ext/couchbase/core/timeout_defaults.hxx +0 -1
- data/ext/couchbase/core/topology/capabilities.hxx +6 -0
- data/ext/couchbase/core/topology/capabilities_fmt.hxx +3 -0
- data/ext/couchbase/core/topology/configuration.cxx +21 -6
- data/ext/couchbase/core/topology/configuration.hxx +29 -8
- data/ext/couchbase/core/topology/configuration_json.hxx +3 -0
- data/ext/couchbase/core/topology/error_map_json.hxx +3 -1
- data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +70 -4
- data/ext/couchbase/core/tracing/threshold_logging_tracer.hxx +10 -0
- data/ext/couchbase/core/transactions/active_transaction_record.cxx +0 -34
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +108 -63
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +19 -2
- data/ext/couchbase/core/transactions/error_list.hxx +2 -2
- data/ext/couchbase/core/transactions/get_multi_fetch.hxx +160 -0
- data/ext/couchbase/core/transactions/get_multi_orchestrator.cxx +326 -125
- data/ext/couchbase/core/transactions/get_multi_transaction_id.hxx +62 -0
- data/ext/couchbase/core/transactions/internal/atr_entry.hxx +22 -2
- data/ext/couchbase/core/transactions/internal/transaction_context.hxx +2 -2
- data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +23 -1
- data/ext/couchbase/core/transactions/internal/utils.hxx +50 -14
- data/ext/couchbase/core/transactions/staged_mutation.cxx +23 -18
- data/ext/couchbase/core/transactions/staged_mutation.hxx +15 -4
- data/ext/couchbase/core/transactions/transaction_context.cxx +55 -40
- data/ext/couchbase/core/transactions/transaction_get_result.hxx +16 -0
- data/ext/couchbase/core/transactions/transactions.cxx +3 -55
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +165 -72
- data/ext/couchbase/core/transactions/transactions_config.cxx +0 -11
- data/ext/couchbase/core/transactions/utils.cxx +10 -0
- data/ext/couchbase/core/transactions/waitable_op_list.hxx +2 -2
- data/ext/couchbase/core/transactions.hxx +9 -9
- data/ext/couchbase/core/utils/byteswap.hxx +166 -9
- data/ext/couchbase/core/utils/connection_string.cxx +50 -85
- data/ext/couchbase/core/utils/connection_string.hxx +15 -0
- data/ext/couchbase/core/{columnar/backoff_calculator.hxx → utils/deadline.hxx} +13 -13
- data/ext/couchbase/core/utils/duration_parser.cxx +1 -1
- data/ext/couchbase/core/utils/json_streaming_lexer.cxx +48 -5
- data/ext/couchbase/core/utils/json_streaming_lexer.hxx +4 -1
- data/ext/couchbase/core/utils/movable_function.hxx +301 -52
- data/ext/couchbase/core/utils/name_codec.hxx +154 -11
- data/ext/couchbase/core/{columnar/retry_info.hxx → utils/process_id.hxx} +18 -13
- data/ext/couchbase/core/utils/url_codec.cxx +12 -51
- data/ext/couchbase/core/websocket_codec.cxx +3 -29
- data/ext/couchbase/couchbase/analytics_options.hxx +21 -10
- data/ext/couchbase/couchbase/analytics_row.hxx +105 -0
- data/ext/couchbase/couchbase/analytics_stream_result.hxx +266 -0
- data/ext/couchbase/couchbase/boolean_query.hxx +3 -3
- data/ext/couchbase/couchbase/bucket.hxx +57 -0
- data/ext/couchbase/couchbase/cluster.hxx +183 -5
- data/ext/couchbase/{core/columnar/security_options.hxx → couchbase/cluster_state.hxx} +18 -14
- data/ext/couchbase/couchbase/codec/lenient_json_transcoder.hxx +69 -0
- data/ext/couchbase/couchbase/collection.hxx +234 -14
- data/ext/couchbase/couchbase/common_durability_options.hxx +18 -3
- data/ext/couchbase/couchbase/conjunction_query.hxx +1 -1
- data/ext/couchbase/couchbase/create_dataset_analytics_options.hxx +6 -1
- data/ext/couchbase/couchbase/date_range_query.hxx +2 -2
- data/ext/couchbase/couchbase/decrement_options.hxx +1 -1
- data/ext/couchbase/couchbase/disjunction_query.hxx +1 -1
- data/ext/couchbase/couchbase/error.hxx +32 -0
- data/ext/couchbase/couchbase/error_codes.hxx +32 -0
- data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +1 -1
- data/ext/couchbase/couchbase/geo_distance_query.hxx +1 -1
- data/ext/couchbase/couchbase/geo_polygon_query.hxx +1 -1
- data/ext/couchbase/couchbase/get_replica_options.hxx +68 -0
- data/ext/couchbase/couchbase/get_replica_result.hxx +5 -3
- data/ext/couchbase/couchbase/get_replica_strategy.hxx +161 -0
- data/ext/couchbase/couchbase/get_result.hxx +1 -0
- data/ext/couchbase/couchbase/increment_options.hxx +1 -1
- data/ext/couchbase/couchbase/insert_options.hxx +1 -1
- data/ext/couchbase/couchbase/match_phrase_query.hxx +1 -1
- data/ext/couchbase/couchbase/match_query.hxx +1 -1
- data/ext/couchbase/couchbase/mutate_in_options.hxx +3 -3
- data/ext/couchbase/couchbase/network_options.hxx +1 -1
- data/ext/couchbase/couchbase/node_id.hxx +42 -14
- data/ext/couchbase/couchbase/node_id_for_options.hxx +7 -1
- data/ext/couchbase/couchbase/node_ids_options.hxx +8 -2
- data/ext/couchbase/couchbase/numeric_range_query.hxx +1 -1
- data/ext/couchbase/couchbase/phrase_query.hxx +1 -1
- data/ext/couchbase/couchbase/prefix_query.hxx +1 -1
- data/ext/couchbase/couchbase/query_options.hxx +23 -12
- data/ext/couchbase/couchbase/query_row.hxx +111 -0
- data/ext/couchbase/couchbase/query_stream_result.hxx +302 -0
- data/ext/couchbase/couchbase/query_string_query.hxx +3 -3
- data/ext/couchbase/couchbase/regexp_query.hxx +1 -1
- data/ext/couchbase/couchbase/replace_options.hxx +3 -3
- data/ext/couchbase/couchbase/result.hxx +14 -3
- data/ext/couchbase/couchbase/scan_result_item.hxx +1 -0
- data/ext/couchbase/couchbase/scope.hxx +85 -2
- data/ext/couchbase/couchbase/search_options.hxx +58 -8
- data/ext/couchbase/couchbase/search_scoring.hxx +94 -0
- data/ext/couchbase/couchbase/search_scoring_none.hxx +51 -0
- data/ext/couchbase/couchbase/search_scoring_reciprocal_rank_fusion.hxx +88 -0
- data/ext/couchbase/couchbase/search_scoring_relative_score_fusion.hxx +70 -0
- data/ext/couchbase/couchbase/term_range_query.hxx +1 -1
- data/ext/couchbase/couchbase/tracing/request_span.hxx +46 -0
- data/ext/couchbase/couchbase/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx +23 -21
- data/ext/couchbase/couchbase/transactions/transaction_get_multi_result.hxx +24 -19
- data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +17 -3
- data/ext/couchbase/couchbase/transactions/transactions_config.hxx +4 -2
- data/ext/couchbase/couchbase/transactions.hxx +27 -18
- data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
- data/ext/couchbase/couchbase/vector_query.hxx +1 -1
- data/ext/couchbase/couchbase/wait_until_ready_options.hxx +111 -0
- data/ext/couchbase/couchbase/wildcard_query.hxx +1 -1
- data/ext/extconf.rb +15 -10
- data/ext/rcb_analytics.cxx +82 -102
- data/ext/rcb_backend.cxx +42 -36
- data/ext/rcb_backend.hxx +2 -0
- data/ext/rcb_buckets.cxx +47 -59
- data/ext/rcb_collections.cxx +42 -52
- data/ext/rcb_crud.cxx +345 -224
- data/ext/rcb_diagnostics.cxx +117 -27
- data/ext/rcb_exceptions.cxx +152 -99
- data/ext/rcb_exceptions.hxx +25 -0
- data/ext/rcb_extras.cxx +18 -19
- data/ext/rcb_hdr_histogram.cxx +19 -4
- data/ext/rcb_logger.cxx +202 -27
- data/ext/rcb_logger.hxx +12 -0
- data/ext/rcb_multi.cxx +40 -40
- data/ext/rcb_observability.cxx +7 -5
- data/ext/rcb_query.cxx +99 -142
- data/ext/rcb_range_scan.cxx +41 -35
- data/ext/rcb_search.cxx +98 -99
- data/ext/rcb_users.cxx +36 -56
- data/ext/rcb_utils.cxx +100 -37
- data/ext/rcb_utils.hxx +287 -33
- data/ext/rcb_version.cxx +1 -1
- data/ext/rcb_views.cxx +55 -51
- data/lib/active_support/cache/couchbase_store.rb +77 -12
- data/lib/couchbase/bucket.rb +20 -0
- data/lib/couchbase/cluster.rb +17 -0
- data/lib/couchbase/collection.rb +36 -1
- data/lib/couchbase/errors.rb +18 -0
- data/lib/couchbase/fork_hooks.rb +16 -7
- data/lib/couchbase/get_replica_strategy.rb +89 -0
- data/lib/couchbase/logger.rb +1 -1
- data/lib/couchbase/management/analytics_index_manager.rb +15 -15
- data/lib/couchbase/management/bucket_manager.rb +6 -6
- data/lib/couchbase/management/collection_manager.rb +6 -6
- data/lib/couchbase/management/query_index_manager.rb +7 -7
- data/lib/couchbase/management/search_index_manager.rb +13 -13
- data/lib/couchbase/management/user_manager.rb +10 -10
- data/lib/couchbase/management/view_index_manager.rb +5 -5
- data/lib/couchbase/options.rb +174 -42
- data/lib/couchbase/protostellar/bucket.rb +4 -0
- data/lib/couchbase/protostellar/cluster.rb +4 -0
- data/lib/couchbase/protostellar/collection.rb +4 -0
- data/lib/couchbase/protostellar/error_handling.rb +2 -1
- data/lib/couchbase/protostellar/request.rb +1 -0
- data/lib/couchbase/protostellar/request_generator/kv.rb +16 -2
- data/lib/couchbase/protostellar/request_generator/search.rb +17 -1
- data/lib/couchbase/protostellar/retry/orchestrator.rb +3 -2
- data/lib/couchbase/protostellar/retry/strategies/fail_fast.rb +33 -0
- data/lib/couchbase/protostellar/retry/strategies.rb +1 -0
- data/lib/couchbase/search_options.rb +95 -6
- data/lib/couchbase/version.rb +1 -1
- metadata +91 -33
- data/ext/0001-fix-build-for-mingw-w64-ucrt-x86_64-toolchain.patch +0 -40
- data/ext/couchbase/core/columnar/agent.hxx +0 -71
- data/ext/couchbase/core/columnar/agent_config.hxx +0 -59
- data/ext/couchbase/core/columnar/background_bootstrap_listener.hxx +0 -42
- data/ext/couchbase/core/columnar/backoff_calculator.cxx +0 -62
- data/ext/couchbase/core/columnar/columnar_agent.cxx +0 -147
- data/ext/couchbase/core/columnar/columnar_agent_config.cxx +0 -48
- data/ext/couchbase/core/columnar/columnar_error.cxx +0 -51
- data/ext/couchbase/core/columnar/database_management_options.hxx +0 -56
- data/ext/couchbase/core/columnar/error.hxx +0 -51
- data/ext/couchbase/core/columnar/error_codes.cxx +0 -107
- data/ext/couchbase/core/columnar/error_codes.hxx +0 -75
- data/ext/couchbase/core/columnar/management_component.cxx +0 -300
- data/ext/couchbase/core/columnar/management_component.hxx +0 -56
- data/ext/couchbase/core/columnar/query_component.cxx +0 -523
- data/ext/couchbase/core/columnar/query_component.hxx +0 -57
- data/ext/couchbase/core/columnar/query_options.hxx +0 -59
- data/ext/couchbase/core/columnar/query_result.cxx +0 -130
- data/ext/couchbase/core/columnar/query_result.hxx +0 -78
- data/ext/couchbase/core/io/config_tracker.cxx +0 -687
- data/ext/couchbase/core/io/config_tracker.hxx +0 -123
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
#include "deprecation_utils.hxx"
|
|
21
21
|
#include "diagnostics.hxx"
|
|
22
22
|
#include "error.hxx"
|
|
23
|
+
#include "error_context/analytics.hxx"
|
|
24
|
+
#include "error_context/query.hxx"
|
|
23
25
|
#include "operations_fwd.hxx"
|
|
24
26
|
#include "origin.hxx"
|
|
25
27
|
#include "topology/configuration.hxx"
|
|
@@ -40,6 +42,9 @@ namespace couchbase::core
|
|
|
40
42
|
class crud_component;
|
|
41
43
|
class cluster_impl;
|
|
42
44
|
class cluster_label_listener;
|
|
45
|
+
class bucket;
|
|
46
|
+
class query_stream;
|
|
47
|
+
class analytics_stream;
|
|
43
48
|
|
|
44
49
|
namespace tracing
|
|
45
50
|
{
|
|
@@ -70,6 +75,7 @@ class cluster
|
|
|
70
75
|
{
|
|
71
76
|
public:
|
|
72
77
|
explicit cluster(asio::io_context& ctx);
|
|
78
|
+
explicit cluster(std::shared_ptr<cluster_impl> impl);
|
|
73
79
|
|
|
74
80
|
[[nodiscard]] auto io_context() const -> asio::io_context&;
|
|
75
81
|
|
|
@@ -77,9 +83,6 @@ public:
|
|
|
77
83
|
|
|
78
84
|
void open(core::origin origin, utils::movable_function<void(std::error_code)>&& handler) const;
|
|
79
85
|
|
|
80
|
-
void open_in_background(const couchbase::core::origin& origin,
|
|
81
|
-
utils::movable_function<void(std::error_code)>&& handler) const;
|
|
82
|
-
|
|
83
86
|
void close(utils::movable_function<void()>&& handler) const;
|
|
84
87
|
|
|
85
88
|
void open_bucket(const std::string& bucket_name,
|
|
@@ -119,6 +122,23 @@ public:
|
|
|
119
122
|
void execute(o::mutate_in_request request, mf<void(o::mutate_in_response)>&& handler) const;
|
|
120
123
|
void execute(o::prepend_request request, mf<void(o::prepend_response)>&& handler) const;
|
|
121
124
|
void execute(o::query_request request, mf<void(o::query_response)>&& handler) const;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Dispatches a N1QL query as a streaming request, resolving the handler with a query_stream
|
|
128
|
+
* handle once the response preamble (signature + upfront errors) has been parsed. Rows are then
|
|
129
|
+
* pulled lazily from the handle, so the full response body is never buffered.
|
|
130
|
+
*/
|
|
131
|
+
void query_stream(o::query_request request,
|
|
132
|
+
mf<void(query_stream, error_context::query)>&& handler) const;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Dispatches an analytics query as a streaming request, resolving the handler with an
|
|
136
|
+
* analytics_stream handle once the response preamble (signature + upfront errors) has been
|
|
137
|
+
* parsed. Rows are then pulled lazily from the handle, so the full response body is never
|
|
138
|
+
* buffered.
|
|
139
|
+
*/
|
|
140
|
+
void analytics_query_stream(o::analytics_request request,
|
|
141
|
+
mf<void(analytics_stream, error_context::analytics)>&& handler) const;
|
|
122
142
|
void execute(o::remove_request request, mf<void(o::remove_response)>&& handler) const;
|
|
123
143
|
void execute(o::replace_request request, mf<void(o::replace_response)>&& handler) const;
|
|
124
144
|
void execute(o::search_request request, mf<void(o::search_response)>&& handler) const;
|
|
@@ -285,15 +305,15 @@ public:
|
|
|
285
305
|
void execute(om::cluster_describe_request request,
|
|
286
306
|
mf<void(om::cluster_describe_response)>&& handler) const;
|
|
287
307
|
|
|
288
|
-
void execute(
|
|
289
|
-
mf<void(
|
|
308
|
+
void execute(operations::get_replica_request request,
|
|
309
|
+
mf<void(operations::get_replica_response)>&& handler) const;
|
|
290
310
|
void execute(impl::lookup_in_replica_request request,
|
|
291
311
|
mf<void(impl::lookup_in_replica_response)>&& handler) const;
|
|
292
312
|
void execute(impl::observe_seqno_request request,
|
|
293
313
|
mf<void(impl::observe_seqno_response)>&& handler) const;
|
|
294
314
|
|
|
295
315
|
void execute(o::get_replica_request_with_cancellation request,
|
|
296
|
-
mf<void(
|
|
316
|
+
mf<void(operations::get_replica_response)>&& handler) const;
|
|
297
317
|
void execute(o::get_request_with_cancellation request, mf<void(o::get_response)>&& handler) const;
|
|
298
318
|
void execute(o::lookup_in_request_with_cancellation request,
|
|
299
319
|
mf<void(o::lookup_in_response)>&& handler) const;
|
|
@@ -339,10 +359,21 @@ public:
|
|
|
339
359
|
|
|
340
360
|
[[nodiscard]] auto to_string() const -> std::string;
|
|
341
361
|
|
|
342
|
-
[[nodiscard]] auto tracer() const ->
|
|
343
|
-
[[nodiscard]] auto meter() const ->
|
|
362
|
+
[[nodiscard]] auto tracer() const -> std::shared_ptr<tracing::tracer_wrapper>;
|
|
363
|
+
[[nodiscard]] auto meter() const -> std::shared_ptr<metrics::meter_wrapper>;
|
|
344
364
|
[[nodiscard]] auto cluster_label_listener() const
|
|
345
365
|
-> const std::shared_ptr<cluster_label_listener>&;
|
|
366
|
+
[[nodiscard]] auto find_bucket_by_name(const std::string& name) const -> std::shared_ptr<bucket>;
|
|
367
|
+
[[nodiscard]] auto is_protostellar() const -> bool;
|
|
368
|
+
// couchbase2 only: whether the gRPC channel is READY, asking an idle channel to connect.
|
|
369
|
+
// cluster_closed once the cluster is closed, feature_not_available for any other cluster.
|
|
370
|
+
[[nodiscard]] auto protostellar_channel_ready() const -> std::pair<std::error_code, bool>;
|
|
371
|
+
// Calls `hook` on the io_context during close(), before close()'s handler, if `owner` is still
|
|
372
|
+
// alive then. Returns false, without registering, once the cluster is stopped. open() also stops
|
|
373
|
+
// it without calling hooks when the origin has no nodes, the build has no couchbase2 support, or
|
|
374
|
+
// the couchbase2 channel cannot be built.
|
|
375
|
+
[[nodiscard]] auto add_close_hook(std::weak_ptr<void> owner,
|
|
376
|
+
utils::movable_function<void()>&& hook) const -> bool;
|
|
346
377
|
|
|
347
378
|
private:
|
|
348
379
|
std::shared_ptr<cluster_impl> impl_;
|
|
@@ -42,11 +42,7 @@ public:
|
|
|
42
42
|
|
|
43
43
|
auto free_form_http_request(const http_request& request,
|
|
44
44
|
free_form_http_request_callback&& callback)
|
|
45
|
-
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
|
46
|
-
-> tl::expected<std::shared_ptr<pending_operation>, error_union>
|
|
47
|
-
#else
|
|
48
45
|
-> tl::expected<std::shared_ptr<pending_operation>, std::error_code>
|
|
49
|
-
#endif
|
|
50
46
|
{
|
|
51
47
|
return http_.do_http_request(request, std::move(callback));
|
|
52
48
|
}
|
|
@@ -65,11 +61,7 @@ cluster_agent::cluster_agent(asio::io_context& io, cluster_agent_config config)
|
|
|
65
61
|
auto
|
|
66
62
|
cluster_agent::free_form_http_request(const couchbase::core::http_request& request,
|
|
67
63
|
couchbase::core::free_form_http_request_callback&& callback)
|
|
68
|
-
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
|
69
|
-
-> tl::expected<std::shared_ptr<pending_operation>, error_union>
|
|
70
|
-
#else
|
|
71
64
|
-> tl::expected<std::shared_ptr<pending_operation>, std::error_code>
|
|
72
|
-
#endif
|
|
73
65
|
{
|
|
74
66
|
return impl_->free_form_http_request(request, std::move(callback));
|
|
75
67
|
}
|
|
@@ -40,11 +40,7 @@ public:
|
|
|
40
40
|
|
|
41
41
|
auto free_form_http_request(const http_request& request,
|
|
42
42
|
free_form_http_request_callback&& callback)
|
|
43
|
-
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
|
44
|
-
-> tl::expected<std::shared_ptr<pending_operation>, error_union>;
|
|
45
|
-
#else
|
|
46
43
|
-> tl::expected<std::shared_ptr<pending_operation>, std::error_code>;
|
|
47
|
-
#endif
|
|
48
44
|
|
|
49
45
|
private:
|
|
50
46
|
std::shared_ptr<cluster_agent_impl> impl_;
|
|
@@ -17,16 +17,18 @@
|
|
|
17
17
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
|
-
#include "core/columnar/security_options.hxx"
|
|
21
20
|
#include "core/io/dns_config.hxx"
|
|
22
21
|
#include "core/io/ip_protocol.hxx"
|
|
23
22
|
#include "core/metrics/logging_meter_options.hxx"
|
|
24
23
|
#include "core/orphan_reporter.hxx"
|
|
24
|
+
#include "core/row_streamer_options.hxx"
|
|
25
25
|
#include "core/tracing/threshold_logging_options.hxx"
|
|
26
26
|
#include "service_type.hxx"
|
|
27
27
|
#include "timeout_defaults.hxx"
|
|
28
28
|
#include "tls_verify_mode.hxx"
|
|
29
29
|
|
|
30
|
+
#include "core/protostellar/compression_settings.hxx"
|
|
31
|
+
|
|
30
32
|
#include <couchbase/metrics/meter.hxx>
|
|
31
33
|
#include <couchbase/retry_strategy.hxx>
|
|
32
34
|
#include <couchbase/tracing/request_tracer.hxx>
|
|
@@ -45,7 +47,6 @@ public:
|
|
|
45
47
|
[[nodiscard]] std::chrono::milliseconds default_timeout_for(service_type type) const;
|
|
46
48
|
|
|
47
49
|
std::chrono::milliseconds bootstrap_timeout = timeout_defaults::bootstrap_timeout;
|
|
48
|
-
std::chrono::milliseconds dispatch_timeout = timeout_defaults::dispatch_timeout;
|
|
49
50
|
std::chrono::milliseconds resolve_timeout = timeout_defaults::resolve_timeout;
|
|
50
51
|
std::chrono::milliseconds connect_timeout = timeout_defaults::connect_timeout;
|
|
51
52
|
std::chrono::milliseconds key_value_timeout = timeout_defaults::key_value_timeout;
|
|
@@ -71,6 +72,8 @@ public:
|
|
|
71
72
|
bool enable_unordered_execution{ true };
|
|
72
73
|
bool enable_clustermap_notification{ true };
|
|
73
74
|
bool enable_compression{ true };
|
|
75
|
+
std::size_t compression_min_size{ 32 };
|
|
76
|
+
double compression_min_ratio{ 0.83 };
|
|
74
77
|
bool enable_tracing{ true };
|
|
75
78
|
bool enable_metrics{ true };
|
|
76
79
|
bool enable_orphan_reporting{ true };
|
|
@@ -96,9 +99,13 @@ public:
|
|
|
96
99
|
std::string server_group{};
|
|
97
100
|
couchbase::transactions::transactions_config::built transactions{};
|
|
98
101
|
|
|
102
|
+
// Writes the whole cluster configuration to the log. It carries the same kinds of values that
|
|
103
|
+
// are annotated elsewhere in the log, but none of it is annotated here. A tag pair around
|
|
104
|
+
// multi-line JSON is not a shape the tooling handles, and hashing the blob would remove exactly
|
|
105
|
+
// what the dump exists to show. Enabling this together with log_redaction is warned about when
|
|
106
|
+
// the cluster opens.
|
|
99
107
|
bool dump_configuration{ false };
|
|
100
108
|
bool disable_mozilla_ca_certificates{ false };
|
|
101
|
-
couchbase::core::columnar::security_options security_options{};
|
|
102
109
|
|
|
103
110
|
bool enable_app_telemetry{ true };
|
|
104
111
|
std::string app_telemetry_endpoint{};
|
|
@@ -114,6 +121,22 @@ public:
|
|
|
114
121
|
bool preserve_bootstrap_nodes_order{ false };
|
|
115
122
|
bool allow_enterprise_analytics{ false };
|
|
116
123
|
bool enable_lazy_connections{ false };
|
|
124
|
+
bool log_redaction{ false };
|
|
125
|
+
|
|
126
|
+
// Tuning for the streaming query/analytics row engine. Internal-only for now (no public API);
|
|
127
|
+
// sensible static defaults apply unless a core caller overrides them. idle_timeout is derived
|
|
128
|
+
// per request from the operation timeout, so the value here is not used for it.
|
|
129
|
+
row_streamer_options streaming{};
|
|
117
130
|
};
|
|
118
131
|
|
|
132
|
+
[[nodiscard]] inline auto
|
|
133
|
+
make_compression_settings(const cluster_options& options) -> protostellar::kv::compression_settings
|
|
134
|
+
{
|
|
135
|
+
protostellar::kv::compression_settings compression{};
|
|
136
|
+
compression.enabled = options.enable_compression;
|
|
137
|
+
compression.min_size = options.compression_min_size;
|
|
138
|
+
compression.min_ratio = options.compression_min_ratio;
|
|
139
|
+
return compression;
|
|
140
|
+
}
|
|
141
|
+
|
|
119
142
|
} // namespace couchbase::core
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
#include "collections_component_unit_test_api.hxx"
|
|
22
22
|
#include "core/collections_options.hxx"
|
|
23
23
|
#include "core/logger/logger.hxx"
|
|
24
|
+
#include "core/logger/redaction.hxx"
|
|
24
25
|
#include "core/mcbp/big_endian.hxx"
|
|
25
26
|
#include "core/pending_operation.hxx"
|
|
26
27
|
#include "core/protocol/client_opcode.hxx"
|
|
@@ -311,6 +312,20 @@ public:
|
|
|
311
312
|
auto dispatch(std::shared_ptr<mcbp::queue_request> request)
|
|
312
313
|
-> tl::expected<std::shared_ptr<pending_operation>, std::error_code>
|
|
313
314
|
{
|
|
315
|
+
// Give the KV response path a way to invalidate the cached collection id and re-resolve it
|
|
316
|
+
// when the server reports unknown_collection (e.g. after a drop/recreate assigns a new id).
|
|
317
|
+
// Capture weak pointers to both the manager and the request: storing a shared_ptr to the
|
|
318
|
+
// request inside a std::function held ON that same request would form a self-referential cycle
|
|
319
|
+
// and leak it. GetCollectionID resolution requests do not pass through here, so they never get
|
|
320
|
+
// the hook and cannot recurse.
|
|
321
|
+
request->on_unknown_collection_ = [weak_mgr = weak_from_this(),
|
|
322
|
+
weak_req =
|
|
323
|
+
std::weak_ptr<mcbp::queue_request>(request)]() -> bool {
|
|
324
|
+
auto mgr = weak_mgr.lock();
|
|
325
|
+
auto req = weak_req.lock();
|
|
326
|
+
return (mgr && req) ? mgr->handle_collection_unknown(req) : false;
|
|
327
|
+
};
|
|
328
|
+
|
|
314
329
|
if ((request->collection_id_ > 0) // collection id present
|
|
315
330
|
|| (request->collection_name_.empty() && request->scope_name_.empty()) // no collection
|
|
316
331
|
|| (request->collection_name_ == collection::default_name &&
|
|
@@ -350,8 +365,9 @@ collection_id_cache_entry_impl::dispatch(std::shared_ptr<mcbp::queue_request> re
|
|
|
350
365
|
*/
|
|
351
366
|
switch (const std::scoped_lock lock(mutex_); id_) {
|
|
352
367
|
case unknown_collection_id:
|
|
353
|
-
CB_LOG_DEBUG(
|
|
354
|
-
|
|
368
|
+
CB_LOG_DEBUG("collection {}.{} unknown. refreshing id",
|
|
369
|
+
logger::metadata(req->scope_name_),
|
|
370
|
+
logger::metadata(req->collection_name_));
|
|
355
371
|
id_ = pending_collection_id;
|
|
356
372
|
|
|
357
373
|
if (auto ec = refresh_collection_id(req); ec) {
|
|
@@ -362,8 +378,8 @@ collection_id_cache_entry_impl::dispatch(std::shared_ptr<mcbp::queue_request> re
|
|
|
362
378
|
|
|
363
379
|
case pending_collection_id:
|
|
364
380
|
CB_LOG_DEBUG("collection {}.{} pending. queueing request OP={}",
|
|
365
|
-
req->scope_name_,
|
|
366
|
-
req->
|
|
381
|
+
logger::metadata(req->scope_name_),
|
|
382
|
+
logger::metadata(req->collection_name_),
|
|
367
383
|
req->command_);
|
|
368
384
|
return queue_->push(req, max_queue_size_);
|
|
369
385
|
|
|
@@ -373,8 +389,8 @@ collection_id_cache_entry_impl::dispatch(std::shared_ptr<mcbp::queue_request> re
|
|
|
373
389
|
|
|
374
390
|
if (auto ec = assign_collection_id(req); ec) {
|
|
375
391
|
CB_LOG_DEBUG("failed to set collection ID \"{}.{}\" on request (OP={}): {}",
|
|
376
|
-
req->scope_name_,
|
|
377
|
-
req->collection_name_,
|
|
392
|
+
logger::metadata(req->scope_name_),
|
|
393
|
+
logger::metadata(req->collection_name_),
|
|
378
394
|
req->command_,
|
|
379
395
|
ec.message());
|
|
380
396
|
return ec;
|
|
@@ -391,7 +407,9 @@ collection_id_cache_entry_impl::refresh_collection_id(
|
|
|
391
407
|
return ec;
|
|
392
408
|
}
|
|
393
409
|
|
|
394
|
-
CB_LOG_DEBUG("refreshing collection ID for \"{}.{}\"",
|
|
410
|
+
CB_LOG_DEBUG("refreshing collection ID for \"{}.{}\"",
|
|
411
|
+
logger::metadata(req->scope_name_),
|
|
412
|
+
logger::metadata(req->collection_name_));
|
|
395
413
|
auto op = manager_.lock()->get_collection_id(
|
|
396
414
|
req->scope_name_,
|
|
397
415
|
req->collection_name_,
|
|
@@ -405,8 +423,8 @@ collection_id_cache_entry_impl::refresh_collection_id(
|
|
|
405
423
|
// queued within the cache. Either the collection will eventually come online or this
|
|
406
424
|
// request will time out.
|
|
407
425
|
CB_LOG_DEBUG("collection \"{}.{}\" not found, attempting retry",
|
|
408
|
-
req->scope_name_,
|
|
409
|
-
req->collection_name_);
|
|
426
|
+
logger::metadata(req->scope_name_),
|
|
427
|
+
logger::metadata(req->collection_name_));
|
|
410
428
|
self->set_id(unknown_collection_id);
|
|
411
429
|
if (self->queue_->remove(req)) {
|
|
412
430
|
if (self->manager_.lock()->handle_collection_unknown(req)) {
|
|
@@ -416,13 +434,13 @@ collection_id_cache_entry_impl::refresh_collection_id(
|
|
|
416
434
|
CB_LOG_DEBUG("request no longer existed in op queue, possibly cancelled?, opaque={}, "
|
|
417
435
|
"collection_name=\"{}\"",
|
|
418
436
|
req->opaque_,
|
|
419
|
-
req->collection_name_);
|
|
437
|
+
logger::metadata(req->collection_name_));
|
|
420
438
|
}
|
|
421
439
|
} else {
|
|
422
440
|
CB_LOG_DEBUG("collection id refresh failed: {}, opaque={}, collection_name=\"{}\"",
|
|
423
441
|
ec.message(),
|
|
424
442
|
req->opaque_,
|
|
425
|
-
req->collection_name_);
|
|
443
|
+
logger::metadata(req->collection_name_));
|
|
426
444
|
}
|
|
427
445
|
// There was an error getting this collection ID so lets remove the cache from the manager
|
|
428
446
|
// and try to callback on all the queued requests.
|
|
@@ -437,16 +455,16 @@ collection_id_cache_entry_impl::refresh_collection_id(
|
|
|
437
455
|
// We successfully got the cid, the GetCollectionID itself will have handled setting the ID on
|
|
438
456
|
// this cache, so lets reset the op queue and requeue all of our requests.
|
|
439
457
|
CB_LOG_DEBUG("collection \"{}.{}\" refresh succeeded cid={}, re-queuing requests",
|
|
440
|
-
req->scope_name_,
|
|
441
|
-
req->collection_name_,
|
|
458
|
+
logger::metadata(req->scope_name_),
|
|
459
|
+
logger::metadata(req->collection_name_),
|
|
442
460
|
res.collection_id);
|
|
443
461
|
auto queue = self->swap_queue();
|
|
444
462
|
queue->close();
|
|
445
463
|
return queue->drain([self](const auto& r) {
|
|
446
464
|
if (auto ec = self->assign_collection_id(r); ec) {
|
|
447
465
|
CB_LOG_DEBUG("failed to set collection ID \"{}.{}\" on request (OP={}): {}",
|
|
448
|
-
r->scope_name_,
|
|
449
|
-
r->collection_name_,
|
|
466
|
+
logger::metadata(r->scope_name_),
|
|
467
|
+
logger::metadata(r->collection_name_),
|
|
450
468
|
r->command_,
|
|
451
469
|
ec.message());
|
|
452
470
|
return;
|
|
@@ -461,6 +479,12 @@ collection_id_cache_entry_impl::refresh_collection_id(
|
|
|
461
479
|
if (op) {
|
|
462
480
|
return {};
|
|
463
481
|
}
|
|
482
|
+
// The request was queued above so that the resolution could re-dispatch it. No
|
|
483
|
+
// resolution was started, so nothing will ever drain that queue: take the
|
|
484
|
+
// request back out and let the caller complete it with this error. Leaving it
|
|
485
|
+
// queued strands it behind the cache entry, and its callback holds the agent
|
|
486
|
+
// and the cluster graph behind it.
|
|
487
|
+
static_cast<void>(queue_->remove(req));
|
|
464
488
|
return op.error();
|
|
465
489
|
}
|
|
466
490
|
|
|
@@ -64,7 +64,7 @@ config_profiles::config_profiles() noexcept
|
|
|
64
64
|
void
|
|
65
65
|
config_profiles::apply(std::string_view profile_name, couchbase::core::cluster_options& opts)
|
|
66
66
|
{
|
|
67
|
-
const std::
|
|
67
|
+
const std::scoped_lock<std::mutex> lock(mut_);
|
|
68
68
|
auto it = profiles_.find(profile_name);
|
|
69
69
|
if (it != profiles_.end()) {
|
|
70
70
|
it->second->apply(opts);
|
|
@@ -203,12 +203,12 @@ parse_range_scan_documents(gsl::span<std::byte> data,
|
|
|
203
203
|
}
|
|
204
204
|
body.value = { remaining.begin(),
|
|
205
205
|
remaining.begin() + static_cast<std::ptrdiff_t>(value_length) };
|
|
206
|
-
if ((body.datatype
|
|
206
|
+
if (protocol::has_flag(body.datatype, protocol::datatype::snappy)) {
|
|
207
207
|
std::string uncompressed;
|
|
208
208
|
if (snappy::Uncompress(
|
|
209
209
|
reinterpret_cast<const char*>(body.value.data()), body.value.size(), &uncompressed)) {
|
|
210
210
|
body.value = core::utils::to_binary(uncompressed);
|
|
211
|
-
body.datatype
|
|
211
|
+
protocol::clear_flag(body.datatype, protocol::datatype::snappy);
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
214
|
data = gsl::make_span(remaining.data() + value_length, remaining.size() - value_length);
|
|
@@ -21,9 +21,11 @@
|
|
|
21
21
|
#include <couchbase/cas.hxx>
|
|
22
22
|
#include <couchbase/durability_level.hxx>
|
|
23
23
|
#include <couchbase/mutation_token.hxx>
|
|
24
|
+
#include <couchbase/retry_reason.hxx>
|
|
24
25
|
|
|
25
26
|
#include <chrono>
|
|
26
27
|
#include <optional>
|
|
28
|
+
#include <set>
|
|
27
29
|
#include <string>
|
|
28
30
|
#include <system_error>
|
|
29
31
|
#include <vector>
|
|
@@ -65,6 +67,8 @@ public:
|
|
|
65
67
|
|
|
66
68
|
struct {
|
|
67
69
|
std::optional<resource_unit_result> resource_units{};
|
|
70
|
+
std::size_t retry_attempts{ 0 };
|
|
71
|
+
std::set<retry_reason> retry_reasons{};
|
|
68
72
|
} internal{};
|
|
69
73
|
};
|
|
70
74
|
|
|
@@ -97,6 +101,8 @@ public:
|
|
|
97
101
|
|
|
98
102
|
struct {
|
|
99
103
|
std::optional<resource_unit_result> resource_units{};
|
|
104
|
+
std::size_t retry_attempts{ 0 };
|
|
105
|
+
std::set<retry_reason> retry_reasons{};
|
|
100
106
|
} internal{};
|
|
101
107
|
};
|
|
102
108
|
|
|
@@ -130,6 +136,8 @@ public:
|
|
|
130
136
|
|
|
131
137
|
struct {
|
|
132
138
|
std::optional<resource_unit_result> resource_units{};
|
|
139
|
+
std::size_t retry_attempts{ 0 };
|
|
140
|
+
std::set<retry_reason> retry_reasons{};
|
|
133
141
|
} internal{};
|
|
134
142
|
};
|
|
135
143
|
|
|
@@ -163,6 +171,8 @@ public:
|
|
|
163
171
|
|
|
164
172
|
struct {
|
|
165
173
|
std::optional<resource_unit_result> resource_units{};
|
|
174
|
+
std::size_t retry_attempts{ 0 };
|
|
175
|
+
std::set<retry_reason> retry_reasons{};
|
|
166
176
|
} internal{};
|
|
167
177
|
};
|
|
168
178
|
|
|
@@ -194,6 +204,8 @@ public:
|
|
|
194
204
|
|
|
195
205
|
struct {
|
|
196
206
|
std::optional<resource_unit_result> resource_units{};
|
|
207
|
+
std::size_t retry_attempts{ 0 };
|
|
208
|
+
std::set<retry_reason> retry_reasons{};
|
|
197
209
|
} internal{};
|
|
198
210
|
};
|
|
199
211
|
|
|
@@ -224,6 +236,8 @@ public:
|
|
|
224
236
|
|
|
225
237
|
struct {
|
|
226
238
|
std::optional<resource_unit_result> resource_units{};
|
|
239
|
+
std::size_t retry_attempts{ 0 };
|
|
240
|
+
std::set<retry_reason> retry_reasons{};
|
|
227
241
|
} internal{};
|
|
228
242
|
};
|
|
229
243
|
|
|
@@ -259,6 +273,8 @@ public:
|
|
|
259
273
|
|
|
260
274
|
struct {
|
|
261
275
|
std::optional<resource_unit_result> resource_units{};
|
|
276
|
+
std::size_t retry_attempts{ 0 };
|
|
277
|
+
std::set<retry_reason> retry_reasons{};
|
|
262
278
|
} internal{};
|
|
263
279
|
};
|
|
264
280
|
|
|
@@ -295,6 +311,8 @@ public:
|
|
|
295
311
|
|
|
296
312
|
struct {
|
|
297
313
|
std::optional<resource_unit_result> resource_units{};
|
|
314
|
+
std::size_t retry_attempts{ 0 };
|
|
315
|
+
std::set<retry_reason> retry_reasons{};
|
|
298
316
|
} internal{};
|
|
299
317
|
};
|
|
300
318
|
|
|
@@ -332,6 +350,8 @@ public:
|
|
|
332
350
|
|
|
333
351
|
struct {
|
|
334
352
|
std::optional<resource_unit_result> resource_units{};
|
|
353
|
+
std::size_t retry_attempts{ 0 };
|
|
354
|
+
std::set<retry_reason> retry_reasons{};
|
|
335
355
|
} internal{};
|
|
336
356
|
};
|
|
337
357
|
|
|
@@ -364,6 +384,8 @@ public:
|
|
|
364
384
|
|
|
365
385
|
struct {
|
|
366
386
|
std::optional<resource_unit_result> resource_units{};
|
|
387
|
+
std::size_t retry_attempts{ 0 };
|
|
388
|
+
std::set<retry_reason> retry_reasons{};
|
|
367
389
|
} internal{};
|
|
368
390
|
};
|
|
369
391
|
|
|
@@ -397,6 +419,8 @@ public:
|
|
|
397
419
|
|
|
398
420
|
struct {
|
|
399
421
|
std::optional<resource_unit_result> resource_units{};
|
|
422
|
+
std::size_t retry_attempts{ 0 };
|
|
423
|
+
std::set<retry_reason> retry_reasons{};
|
|
400
424
|
} internal{};
|
|
401
425
|
};
|
|
402
426
|
|
|
@@ -432,6 +456,8 @@ public:
|
|
|
432
456
|
|
|
433
457
|
struct {
|
|
434
458
|
std::optional<resource_unit_result> resource_units{};
|
|
459
|
+
std::size_t retry_attempts{ 0 };
|
|
460
|
+
std::set<retry_reason> retry_reasons{};
|
|
435
461
|
} internal{};
|
|
436
462
|
};
|
|
437
463
|
|
|
@@ -462,6 +488,8 @@ public:
|
|
|
462
488
|
|
|
463
489
|
struct {
|
|
464
490
|
std::optional<resource_unit_result> resource_units{};
|
|
491
|
+
std::size_t retry_attempts{ 0 };
|
|
492
|
+
std::set<retry_reason> retry_reasons{};
|
|
465
493
|
} internal{};
|
|
466
494
|
};
|
|
467
495
|
|
|
@@ -497,6 +525,8 @@ public:
|
|
|
497
525
|
|
|
498
526
|
struct {
|
|
499
527
|
std::optional<resource_unit_result> resource_units{};
|
|
528
|
+
std::size_t retry_attempts{ 0 };
|
|
529
|
+
std::set<retry_reason> retry_reasons{};
|
|
500
530
|
} internal{};
|
|
501
531
|
};
|
|
502
532
|
|
|
@@ -535,6 +565,8 @@ public:
|
|
|
535
565
|
|
|
536
566
|
struct {
|
|
537
567
|
std::optional<resource_unit_result> resource_units{};
|
|
568
|
+
std::size_t retry_attempts{ 0 };
|
|
569
|
+
std::set<retry_reason> retry_reasons{};
|
|
538
570
|
} internal{};
|
|
539
571
|
};
|
|
540
572
|
|
|
@@ -573,6 +605,8 @@ public:
|
|
|
573
605
|
|
|
574
606
|
struct {
|
|
575
607
|
std::optional<resource_unit_result> resource_units{};
|
|
608
|
+
std::size_t retry_attempts{ 0 };
|
|
609
|
+
std::set<retry_reason> retry_reasons{};
|
|
576
610
|
} internal{};
|
|
577
611
|
};
|
|
578
612
|
|
|
@@ -21,13 +21,28 @@
|
|
|
21
21
|
#include <memory>
|
|
22
22
|
#include <stdexcept>
|
|
23
23
|
|
|
24
|
-
namespace
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
// Platform headers stay at global scope: included inside a namespace, the standard library headers
|
|
25
|
+
// they reach are declared inside it, and std resolves to that namespace's std.
|
|
27
26
|
#ifdef _MSC_VER
|
|
28
27
|
#include <windows.h>
|
|
29
28
|
|
|
30
29
|
#include <bcrypt.h>
|
|
30
|
+
#elif defined(__APPLE__)
|
|
31
|
+
#include <CommonCrypto/CommonCryptor.h>
|
|
32
|
+
#include <CommonCrypto/CommonDigest.h>
|
|
33
|
+
#include <CommonCrypto/CommonHMAC.h>
|
|
34
|
+
#include <CommonCrypto/CommonKeyDerivation.h>
|
|
35
|
+
#else
|
|
36
|
+
#include "include_ssl/evp.h"
|
|
37
|
+
#include "include_ssl/hmac.h"
|
|
38
|
+
#include "include_ssl/md5.h"
|
|
39
|
+
#include "include_ssl/sha.h"
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
namespace internal
|
|
43
|
+
{
|
|
44
|
+
|
|
45
|
+
#ifdef _MSC_VER
|
|
31
46
|
|
|
32
47
|
struct HeapAllocDeleter {
|
|
33
48
|
void operator()(PBYTE bytes)
|
|
@@ -335,11 +350,6 @@ decrypt(const couchbase::core::crypto::Cipher /* cipher */,
|
|
|
335
350
|
|
|
336
351
|
#elif defined(__APPLE__)
|
|
337
352
|
|
|
338
|
-
#include <CommonCrypto/CommonCryptor.h>
|
|
339
|
-
#include <CommonCrypto/CommonDigest.h>
|
|
340
|
-
#include <CommonCrypto/CommonHMAC.h>
|
|
341
|
-
#include <CommonCrypto/CommonKeyDerivation.h>
|
|
342
|
-
|
|
343
353
|
auto
|
|
344
354
|
HMAC_SHA1(std::string_view key, std::string_view data) -> std::string
|
|
345
355
|
{
|
|
@@ -589,11 +599,6 @@ decrypt(const couchbase::core::crypto::Cipher cipher,
|
|
|
589
599
|
|
|
590
600
|
#else
|
|
591
601
|
|
|
592
|
-
#include "include_ssl/evp.h"
|
|
593
|
-
#include "include_ssl/hmac.h"
|
|
594
|
-
#include "include_ssl/md5.h"
|
|
595
|
-
#include "include_ssl/sha.h"
|
|
596
|
-
|
|
597
602
|
// OpenSSL
|
|
598
603
|
|
|
599
604
|
auto
|
|
@@ -0,0 +1,81 @@
|
|
|
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
|
+
/*
|
|
19
|
+
* The logging formatter for a document id, kept out of document_id_fmt.hxx so that the plain
|
|
20
|
+
* formatter stays free of the logger. That header is included by transaction internals, a subdoc
|
|
21
|
+
* test and the FIT performer, none of which log a document id; only the handful of files that pass
|
|
22
|
+
* one to a CB_LOG_* statement include this.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
#pragma once
|
|
26
|
+
|
|
27
|
+
#include "document_id_fmt.hxx"
|
|
28
|
+
#include "logger/redaction.hxx"
|
|
29
|
+
|
|
30
|
+
#include <spdlog/fmt/bundled/core.h>
|
|
31
|
+
|
|
32
|
+
namespace couchbase::core::logger
|
|
33
|
+
{
|
|
34
|
+
struct redacted_document_id {
|
|
35
|
+
const document_id& value;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Tag a document id for logging. It renders as bucket/scope.collection/key, and those parts do not
|
|
40
|
+
* share a redaction category: the names are metadata and only the key is user data. Wrapping the
|
|
41
|
+
* rendered form as a whole would put a bucket name inside a <ud> span, and the span would hash to
|
|
42
|
+
* something that matches no other log line.
|
|
43
|
+
*
|
|
44
|
+
* The plain formatter in document_id_fmt.hxx is left alone on purpose, since it is also used
|
|
45
|
+
* outside logging.
|
|
46
|
+
*/
|
|
47
|
+
inline auto
|
|
48
|
+
document(const document_id& value) -> redacted_document_id
|
|
49
|
+
{
|
|
50
|
+
return { value };
|
|
51
|
+
}
|
|
52
|
+
} // namespace couchbase::core::logger
|
|
53
|
+
|
|
54
|
+
template<>
|
|
55
|
+
struct fmt::formatter<couchbase::core::logger::redacted_document_id> {
|
|
56
|
+
template<typename ParseContext>
|
|
57
|
+
constexpr auto parse(ParseContext& ctx)
|
|
58
|
+
{
|
|
59
|
+
return ctx.begin();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
template<typename FormatContext>
|
|
63
|
+
auto format(const couchbase::core::logger::redacted_document_id& redacted,
|
|
64
|
+
FormatContext& ctx) const
|
|
65
|
+
{
|
|
66
|
+
namespace logger = couchbase::core::logger;
|
|
67
|
+
const auto& id = redacted.value;
|
|
68
|
+
// An id built without a collection carries an empty collection path, and renders with an empty
|
|
69
|
+
// middle component. Keep that shape rather than joining an empty scope and collection.
|
|
70
|
+
if (id.collection_path().empty()) {
|
|
71
|
+
return format_to(
|
|
72
|
+
ctx.out(), "{}//{}", logger::metadata(id.bucket()), logger::user_data(id.key()));
|
|
73
|
+
}
|
|
74
|
+
return format_to(ctx.out(),
|
|
75
|
+
"{}/{}.{}/{}",
|
|
76
|
+
logger::metadata(id.bucket()),
|
|
77
|
+
logger::metadata(id.scope()),
|
|
78
|
+
logger::metadata(id.collection()),
|
|
79
|
+
logger::user_data(id.key()));
|
|
80
|
+
}
|
|
81
|
+
};
|
|
@@ -66,12 +66,13 @@ public:
|
|
|
66
66
|
std::optional<std::string> last_dispatched_from,
|
|
67
67
|
std::size_t retry_attempts,
|
|
68
68
|
std::set<retry_reason> retry_reasons)
|
|
69
|
-
:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
69
|
+
: base_error_context{ std::move(operation_id),
|
|
70
|
+
ec,
|
|
71
|
+
std::move(last_dispatched_to),
|
|
72
|
+
std::move(last_dispatched_from),
|
|
73
|
+
retry_attempts,
|
|
74
|
+
std::move(retry_reasons),
|
|
75
|
+
couchbase::node_id{} }
|
|
75
76
|
{
|
|
76
77
|
}
|
|
77
78
|
|