couchbase 3.8.2 → 3.9.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 +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 +136 -23
- 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 +82 -7
- 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 +1551 -397
- 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 +60 -6
- 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 +13 -37
- 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 +33 -1
- 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
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# Vendors the Couchbase Protostellar (couchbase2://) protobuf/gRPC schema and builds the generated
|
|
2
|
+
# C++ stubs into the couchbase_cxx_protostellar static library.
|
|
3
|
+
#
|
|
4
|
+
# For VCS builds the schema is fetched via CPM (DOWNLOAD_ONLY, no CMakeLists), mirroring how
|
|
5
|
+
# tools/fit_performer vendors couchbaselabs/fit-protocol.
|
|
6
|
+
#
|
|
7
|
+
# Offline/tarball builds are wired: cmake/Packaging.cmake enables COUCHBASE_CXX_CLIENT_BUILD_COUCHBASE2
|
|
8
|
+
# in the inner packaging configure so these CPM packages land in the cache, and cmake/tarball_glob.txt
|
|
9
|
+
# carries protostellar/api_common_protos entries so they are embedded in the tarball. Both are load
|
|
10
|
+
# bearing for RPM/DEB builds, which run without network access.
|
|
11
|
+
#
|
|
12
|
+
# gRPC::grpc++, gRPC::grpc_cpp_plugin, protobuf::libprotobuf and protobuf::protoc are provided by
|
|
13
|
+
# cmake/GrpcProtobuf.cmake, which CMakeLists.txt includes before this module.
|
|
14
|
+
|
|
15
|
+
if(NOT TARGET gRPC::grpc++)
|
|
16
|
+
message(FATAL_ERROR "gRPC::grpc++ not found; cmake/GrpcProtobuf.cmake must be included first")
|
|
17
|
+
endif()
|
|
18
|
+
if(NOT TARGET protobuf::libprotobuf)
|
|
19
|
+
message(FATAL_ERROR "protobuf::libprotobuf not found; cmake/GrpcProtobuf.cmake must be included first")
|
|
20
|
+
endif()
|
|
21
|
+
|
|
22
|
+
# The Protostellar schema. The .proto files live at the repository root under couchbase/**.
|
|
23
|
+
# WARNING: do NOT add GIT_SHALLOW — a shallow clone cannot reach an arbitrary pinned commit.
|
|
24
|
+
#
|
|
25
|
+
# CAVEAT when bumping GIT_TAG: protobuf emits a class-scoped alias per enum value ("static
|
|
26
|
+
# constexpr Status STATUS_TIMEOUT = ..."), so an enum value whose name is also an object-like macro
|
|
27
|
+
# in the Windows SDK mangles the generated header. This breaks MSVC only — <winnt.h> is reached
|
|
28
|
+
# transitively through asio and gRPC, so the Linux and macOS legs stay green and the failure shows
|
|
29
|
+
# up an hour later in CI. One name collides today: QueryResponse.MetaData.Status.STATUS_TIMEOUT vs
|
|
30
|
+
# winnt.h's ((DWORD)0x00000102L). couchbase/query/v1/query{,.grpc}.pb.h is therefore included only
|
|
31
|
+
# through core/protostellar/query_proto.hxx, which suppresses the whole STATUS_* family around the
|
|
32
|
+
# include with push_macro/pop_macro. A renamed or added enum value, or the same pattern in another
|
|
33
|
+
# proto, introduces a new collision — after bumping, run
|
|
34
|
+
#
|
|
35
|
+
# ./bin/check-proto-macro-collisions <build-dir>
|
|
36
|
+
#
|
|
37
|
+
# which lists the hazardous aliases and any source that includes a hazardous header directly
|
|
38
|
+
# instead of through its wrapper.
|
|
39
|
+
cpmaddpackage(
|
|
40
|
+
NAME
|
|
41
|
+
protostellar
|
|
42
|
+
GITHUB_REPOSITORY
|
|
43
|
+
"couchbase/protostellar"
|
|
44
|
+
GIT_TAG
|
|
45
|
+
36d4d9aba03a388f7edb05290f1093d9497b1005
|
|
46
|
+
DOWNLOAD_ONLY
|
|
47
|
+
YES)
|
|
48
|
+
|
|
49
|
+
# The schema imports google/rpc/status.proto (a googleapis common proto that protobuf itself does
|
|
50
|
+
# not ship). api-common-protos is the small canonical source for it. The google/protobuf/* imports
|
|
51
|
+
# (any, duration, timestamp) are well-known types resolved by protoc from the protobuf install.
|
|
52
|
+
cpmaddpackage(
|
|
53
|
+
NAME
|
|
54
|
+
api_common_protos
|
|
55
|
+
GITHUB_REPOSITORY
|
|
56
|
+
"googleapis/api-common-protos"
|
|
57
|
+
GIT_TAG
|
|
58
|
+
3332dec527759859840a3a2ff108c67a54708130
|
|
59
|
+
DOWNLOAD_ONLY
|
|
60
|
+
YES)
|
|
61
|
+
|
|
62
|
+
set(_ps_out "${CMAKE_CURRENT_BINARY_DIR}/protostellar_generated")
|
|
63
|
+
|
|
64
|
+
if(TARGET gRPC::grpc_cpp_plugin)
|
|
65
|
+
set(_ps_grpc_plugin "$<TARGET_FILE:gRPC::grpc_cpp_plugin>")
|
|
66
|
+
# Depend on the target so it is built before codegen runs.
|
|
67
|
+
set(_ps_grpc_plugin_dep gRPC::grpc_cpp_plugin)
|
|
68
|
+
else()
|
|
69
|
+
find_program(_ps_grpc_plugin grpc_cpp_plugin REQUIRED)
|
|
70
|
+
# No target to depend on; the discovered executable path is the dependency.
|
|
71
|
+
set(_ps_grpc_plugin_dep "${_ps_grpc_plugin}")
|
|
72
|
+
endif()
|
|
73
|
+
|
|
74
|
+
set(_ps_import_flags -I "${protostellar_SOURCE_DIR}" -I "${api_common_protos_SOURCE_DIR}")
|
|
75
|
+
# When protobuf is built from source (not a system package) protoc has no built-in path to the
|
|
76
|
+
# well-known .proto files; GrpcProtobuf.cmake sets PROTOBUF_IMPORT_DIRS in that case.
|
|
77
|
+
if(DEFINED PROTOBUF_IMPORT_DIRS)
|
|
78
|
+
foreach(_dir ${PROTOBUF_IMPORT_DIRS})
|
|
79
|
+
list(APPEND _ps_import_flags -I "${_dir}")
|
|
80
|
+
endforeach()
|
|
81
|
+
endif()
|
|
82
|
+
|
|
83
|
+
# Service protos (generate both message and gRPC stubs), relative to the Protostellar root.
|
|
84
|
+
set(_ps_service_protos
|
|
85
|
+
couchbase/admin/analytics/v1/analytics.proto
|
|
86
|
+
couchbase/admin/bucket/v1/bucket.proto
|
|
87
|
+
couchbase/admin/collection/v1/collection.proto
|
|
88
|
+
couchbase/admin/query/v1/query.proto
|
|
89
|
+
couchbase/admin/search/v1/search.proto
|
|
90
|
+
couchbase/analytics/v1/analytics.proto
|
|
91
|
+
couchbase/internal/hooks/v1/hooks.proto
|
|
92
|
+
couchbase/internal/xdcr/v1/xdcr.proto
|
|
93
|
+
couchbase/kv/v1/kv.proto
|
|
94
|
+
couchbase/query/v1/query.proto
|
|
95
|
+
couchbase/routing/v2/routing.proto
|
|
96
|
+
couchbase/search/v1/search.proto
|
|
97
|
+
couchbase/transactions/v1/transactions.proto
|
|
98
|
+
couchbase/view/v1/view.proto)
|
|
99
|
+
|
|
100
|
+
set(_ps_srcs "")
|
|
101
|
+
set(_ps_hdrs "")
|
|
102
|
+
|
|
103
|
+
# Emit the protobuf (message) sources for one proto given its import-root base and relative path.
|
|
104
|
+
# Appends the outputs to _ps_srcs / _ps_hdrs in the caller scope.
|
|
105
|
+
function(_ps_generate_cpp base rel out_srcs out_hdrs)
|
|
106
|
+
get_filename_component(_rel_dir "${rel}" DIRECTORY)
|
|
107
|
+
get_filename_component(_rel_we "${rel}" NAME_WE)
|
|
108
|
+
file(MAKE_DIRECTORY "${_ps_out}/${_rel_dir}")
|
|
109
|
+
set(_cc "${_ps_out}/${_rel_dir}/${_rel_we}.pb.cc")
|
|
110
|
+
set(_h "${_ps_out}/${_rel_dir}/${_rel_we}.pb.h")
|
|
111
|
+
add_custom_command(
|
|
112
|
+
OUTPUT "${_cc}" "${_h}"
|
|
113
|
+
COMMAND protobuf::protoc
|
|
114
|
+
--cpp_out "${_ps_out}" ${_ps_import_flags} "${base}/${rel}"
|
|
115
|
+
--experimental_allow_proto3_optional
|
|
116
|
+
DEPENDS "${base}/${rel}" protobuf::protoc
|
|
117
|
+
COMMENT "protoc cpp: ${rel}"
|
|
118
|
+
VERBATIM)
|
|
119
|
+
set(${out_srcs} ${${out_srcs}} "${_cc}" PARENT_SCOPE)
|
|
120
|
+
set(${out_hdrs} ${${out_hdrs}} "${_h}" PARENT_SCOPE)
|
|
121
|
+
endfunction()
|
|
122
|
+
|
|
123
|
+
# Emit the gRPC service sources for one proto.
|
|
124
|
+
function(_ps_generate_grpc base rel out_srcs out_hdrs)
|
|
125
|
+
get_filename_component(_rel_dir "${rel}" DIRECTORY)
|
|
126
|
+
get_filename_component(_rel_we "${rel}" NAME_WE)
|
|
127
|
+
file(MAKE_DIRECTORY "${_ps_out}/${_rel_dir}")
|
|
128
|
+
set(_cc "${_ps_out}/${_rel_dir}/${_rel_we}.grpc.pb.cc")
|
|
129
|
+
set(_h "${_ps_out}/${_rel_dir}/${_rel_we}.grpc.pb.h")
|
|
130
|
+
add_custom_command(
|
|
131
|
+
OUTPUT "${_cc}" "${_h}"
|
|
132
|
+
COMMAND protobuf::protoc
|
|
133
|
+
--grpc_out "${_ps_out}" ${_ps_import_flags}
|
|
134
|
+
"--plugin=protoc-gen-grpc=${_ps_grpc_plugin}" "${base}/${rel}"
|
|
135
|
+
--experimental_allow_proto3_optional
|
|
136
|
+
DEPENDS "${base}/${rel}" protobuf::protoc ${_ps_grpc_plugin_dep}
|
|
137
|
+
COMMENT "protoc grpc: ${rel}"
|
|
138
|
+
VERBATIM)
|
|
139
|
+
set(${out_srcs} ${${out_srcs}} "${_cc}" PARENT_SCOPE)
|
|
140
|
+
set(${out_hdrs} ${${out_hdrs}} "${_h}" PARENT_SCOPE)
|
|
141
|
+
endfunction()
|
|
142
|
+
|
|
143
|
+
# google/rpc/status.proto — message stubs only (no service).
|
|
144
|
+
_ps_generate_cpp("${api_common_protos_SOURCE_DIR}" "google/rpc/status.proto" _ps_srcs _ps_hdrs)
|
|
145
|
+
|
|
146
|
+
# google/rpc/error_details.proto — the typed detail blocks (ErrorInfo, PreconditionFailure,
|
|
147
|
+
# ResourceInfo, …) that CNG packs into Status.details; RFC 77 error handling needs them decoded.
|
|
148
|
+
_ps_generate_cpp(
|
|
149
|
+
"${api_common_protos_SOURCE_DIR}" "google/rpc/error_details.proto" _ps_srcs _ps_hdrs)
|
|
150
|
+
|
|
151
|
+
foreach(_proto ${_ps_service_protos})
|
|
152
|
+
_ps_generate_cpp("${protostellar_SOURCE_DIR}" "${_proto}" _ps_srcs _ps_hdrs)
|
|
153
|
+
_ps_generate_grpc("${protostellar_SOURCE_DIR}" "${_proto}" _ps_srcs _ps_hdrs)
|
|
154
|
+
endforeach()
|
|
155
|
+
|
|
156
|
+
set_source_files_properties(${_ps_srcs} ${_ps_hdrs} PROPERTIES GENERATED TRUE)
|
|
157
|
+
|
|
158
|
+
add_library(couchbase_cxx_protostellar STATIC ${_ps_srcs} ${_ps_hdrs})
|
|
159
|
+
add_library(couchbase::cxx_protostellar ALIAS couchbase_cxx_protostellar)
|
|
160
|
+
# Consumers include the generated headers by their proto path, e.g.
|
|
161
|
+
# <couchbase/kv/v1/kv.pb.h>. Exposed SYSTEM so the (warning-heavy) generated code does not trip
|
|
162
|
+
# the project's warnings-as-errors in downstream targets.
|
|
163
|
+
target_include_directories(couchbase_cxx_protostellar SYSTEM PUBLIC "${_ps_out}")
|
|
164
|
+
target_link_libraries(couchbase_cxx_protostellar PUBLIC gRPC::grpc++ protobuf::libprotobuf)
|
|
165
|
+
set_target_properties(
|
|
166
|
+
couchbase_cxx_protostellar
|
|
167
|
+
PROPERTIES POSITION_INDEPENDENT_CODE ON
|
|
168
|
+
COMPILE_WARNING_AS_ERROR OFF
|
|
169
|
+
CXX_CLANG_TIDY ""
|
|
170
|
+
CXX_INCLUDE_WHAT_YOU_USE "")
|
|
171
|
+
if(COUCHBASE_CXX_CLIENT_PACKAGE_BUILD)
|
|
172
|
+
set_target_properties(
|
|
173
|
+
couchbase_cxx_protostellar PROPERTIES C_VISIBILITY_PRESET hidden CXX_VISIBILITY_PRESET hidden
|
|
174
|
+
VISIBILITY_INLINES_HIDDEN ON)
|
|
175
|
+
endif()
|
|
176
|
+
# The generated stubs MUST be compiled with the same sanitizer flags as everything that includes the
|
|
177
|
+
# generated headers, because protobuf changes the LAYOUT of every message under ThreadSanitizer:
|
|
178
|
+
# port_def.inc defines PROTOBUF_TSAN from the compiler's thread_sanitizer feature test, and
|
|
179
|
+
# PROTOBUF_TSAN_DECLARE_MEMBER -- which appears in every generated message's Impl_ -- then adds a
|
|
180
|
+
# `::uint32_t _tsan_detect_race` member. So sizeof(UpsertResponse) is 40 without -fsanitize=thread
|
|
181
|
+
# and 48 with it, and every setter additionally stores a race-detection byte past the smaller size.
|
|
182
|
+
#
|
|
183
|
+
# enable_sanitizers() attaches the flags PUBLIC to the client target, which propagates UP to the
|
|
184
|
+
# tests but never DOWN into this library (the client links it PRIVATE). That left RpcMethodHandler
|
|
185
|
+
# -- instantiated in the uninstrumented kv.grpc.pb.cc -- reserving a 40-byte `ResponseType rsp` on
|
|
186
|
+
# its stack directly below the saved `param` reference, while the instrumented handler's set_cas()
|
|
187
|
+
# wrote the race byte at offset 40, zeroing that pointer's low byte. RunHandler then read
|
|
188
|
+
# param.request from an address 32 bytes off, got a null, and destroyed a null request: the
|
|
189
|
+
# `unit (tsan)` SEGV in cng_component_test at method_handler.h:119 (CXXCBC-917).
|
|
190
|
+
#
|
|
191
|
+
# PROTOBUF_TSAN cannot be forced to a fixed value instead -- port_def.inc #errors if it is already
|
|
192
|
+
# defined -- so matching the flags is the only supported remedy.
|
|
193
|
+
enable_sanitizers(couchbase_cxx_protostellar)
|
|
194
|
+
# ABI visibility, above: couchbase_cxx_client links this library whenever
|
|
195
|
+
# COUCHBASE_CXX_CLIENT_BUILD_COUCHBASE2 is on, so without hidden visibility the generated
|
|
196
|
+
# protobuf/gRPC symbols land in the exported ABI of libcouchbase_cxx_client.so, where an application
|
|
197
|
+
# linking its own protobuf/gRPC interposes on them. That is what the shipped library must not do, so
|
|
198
|
+
# COUCHBASE_CXX_CLIENT_PACKAGE_BUILD hides them; gRPC and protobuf themselves are covered in
|
|
199
|
+
# cmake/GrpcProtobuf.cmake.
|
|
200
|
+
#
|
|
201
|
+
# Hiding them splits the process into two protobuf worlds: symbols in this archive resolve at static
|
|
202
|
+
# link time regardless of visibility, so an executable that links BOTH this library and the shared
|
|
203
|
+
# client gets its own copy of every generated message alongside the one inside the .so, with two
|
|
204
|
+
# descriptor pools and two type identities for the same message. Nothing in a package links that
|
|
205
|
+
# combination, but the CNG tests do, which is why they follow the same switch and link the static
|
|
206
|
+
# client only when it is on (test/cng/CMakeLists.txt).
|
|
207
|
+
if(MSVC)
|
|
208
|
+
# /bigobj: the generated translation units are large -- search.pb.cc is 18k lines and yields a
|
|
209
|
+
# 7.4 MB object -- and protobuf-generated code this size can exceed the COFF section limit
|
|
210
|
+
# (fatal error C1128). CI builds Release, but a Debug MSVC build (the default for
|
|
211
|
+
# bin/build-tests) produces markedly larger objects. tools/fit_performer gets this flag from
|
|
212
|
+
# set_project_options() for the same class of file; this target does not call that function.
|
|
213
|
+
#
|
|
214
|
+
# Do NOT add the /FI<proto_utils.h> force-include that tools/fit_performer uses. It was tried
|
|
215
|
+
# here and breaks the build: proto_utils.h reaches grpc/support/port_platform.h, which includes
|
|
216
|
+
# <windows.h> unconditionally ("Get windows.h included everywhere (we need it)"), so forcing it
|
|
217
|
+
# ahead of the translation unit's own includes puts winnt.h's STATUS_TIMEOUT macro in scope before
|
|
218
|
+
# couchbase/query/v1/query.pb.h is parsed. That header declares an enum constant of the same name,
|
|
219
|
+
# so
|
|
220
|
+
# static constexpr Status STATUS_TIMEOUT = ...
|
|
221
|
+
# expands to ((DWORD)0x00000102L): C2143, plus a member named DWORD (C2789). query.pb.h is the
|
|
222
|
+
# only generated header carrying such a collision. In normal include order it is parsed before
|
|
223
|
+
# anything drags in windows.h, so there is no clash.
|
|
224
|
+
#
|
|
225
|
+
# That force-include exists to work around MSVC's non-conformant two-phase lookup leaving
|
|
226
|
+
# grpc::SerializationTraits undefined when call_op_set.h is processed before proto_utils.h. The
|
|
227
|
+
# ordering does occur here: grpc_cpp_plugin emits the generated .grpc.pb.h includes
|
|
228
|
+
# alphabetically, so async_stream.h (which pulls call_op_set.h) precedes proto_utils.h. It does
|
|
229
|
+
# not, however, produce a diagnostic: the windows-2022 and windows-11-arm legs each compile all 30
|
|
230
|
+
# of this library's translation units and link it without one, so the workaround is not needed
|
|
231
|
+
# here. Should SerializationTraits ever turn up undefined in a *.grpc.pb.cc, the remedy is
|
|
232
|
+
# /permissive-, which makes the lookup conformant without inverting include order -- not the
|
|
233
|
+
# force-include.
|
|
234
|
+
target_compile_options(couchbase_cxx_protostellar PRIVATE /W0 /FS /bigobj)
|
|
235
|
+
else()
|
|
236
|
+
target_compile_options(couchbase_cxx_protostellar PRIVATE -w)
|
|
237
|
+
endif()
|
|
238
|
+
|
|
239
|
+
# The hand-written transport (core/protostellar/*.cxx: the gRPC<->asio bridge, credentials, and
|
|
240
|
+
# later the cluster component) is compiled into couchbase_cxx_client itself, guarded by
|
|
241
|
+
# COUCHBASE_CXX_CLIENT_BUILD_COUCHBASE2 -- the client library links this stubs library. Keeping
|
|
242
|
+
# the transport in the client library (rather than a standalone lib) avoids a dependency cycle
|
|
243
|
+
# once cluster_impl calls into it, and lets it reuse core utilities (base64, the Mozilla CA
|
|
244
|
+
# bundle). The source list is exported for CMakeLists.txt to append to couchbase_cxx_client_FILES.
|
|
245
|
+
set(couchbase_cxx_protostellar_TRANSPORT_FILES
|
|
246
|
+
${PROJECT_SOURCE_DIR}/core/protostellar/dispatcher.cxx
|
|
247
|
+
${PROJECT_SOURCE_DIR}/core/protostellar/credentials.cxx
|
|
248
|
+
${PROJECT_SOURCE_DIR}/core/protostellar/error_utils.cxx
|
|
249
|
+
${PROJECT_SOURCE_DIR}/core/protostellar/kv_converter.cxx
|
|
250
|
+
${PROJECT_SOURCE_DIR}/core/protostellar/component.cxx)
|
|
@@ -1,68 +1,79 @@
|
|
|
1
|
-
|
|
1
|
+
# Evaluated at file scope when Sanitizers.cmake is included by top-level CMakeLists.txt.
|
|
2
|
+
# Setting options and computing LIST_OF_SANITIZERS globally (rather than scoped inside
|
|
3
|
+
# enable_sanitizers()) ensures LIST_OF_SANITIZERS and SANITIZERS are available to
|
|
4
|
+
# ThirdPartyDependencies.cmake and FetchContent hooks when configuring bundled dependencies.
|
|
5
|
+
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
|
|
6
|
+
option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" FALSE)
|
|
2
7
|
|
|
3
|
-
|
|
4
|
-
option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" FALSE)
|
|
8
|
+
set(SANITIZERS "")
|
|
5
9
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
option(ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" FALSE)
|
|
11
|
+
if(ENABLE_SANITIZER_ADDRESS)
|
|
12
|
+
list(APPEND SANITIZERS "address")
|
|
13
|
+
endif()
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
option(ENABLE_SANITIZER_LEAK "Enable leak sanitizer" FALSE)
|
|
16
|
+
if(ENABLE_SANITIZER_LEAK)
|
|
17
|
+
list(APPEND SANITIZERS "leak")
|
|
18
|
+
endif()
|
|
12
19
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
20
|
+
option(ENABLE_SANITIZER_UNDEFINED_BEHAVIOUR "Enable undefined behaviour sanitizer" FALSE)
|
|
21
|
+
if(ENABLE_SANITIZER_UNDEFINED_BEHAVIOUR)
|
|
22
|
+
list(APPEND SANITIZERS "undefined")
|
|
23
|
+
endif()
|
|
17
24
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
option(ENABLE_SANITIZER_THREAD "Enable thread sanitizer" FALSE)
|
|
26
|
+
if(ENABLE_SANITIZER_THREAD)
|
|
27
|
+
if("address" IN_LIST SANITIZERS OR "leak" IN_LIST SANITIZERS)
|
|
28
|
+
message(WARNING "Thread sanitizer does not work with Address and Leak sanitizer enabled")
|
|
29
|
+
else()
|
|
30
|
+
list(APPEND SANITIZERS "thread")
|
|
31
|
+
# Propagate the suppression file path so that test targets can set TSAN_OPTIONS.
|
|
32
|
+
set(COUCHBASE_CXX_CLIENT_TSAN_SUPPRESSIONS
|
|
33
|
+
"${PROJECT_SOURCE_DIR}/.tsan_suppressions"
|
|
34
|
+
CACHE FILEPATH "Path to TSan suppressions file")
|
|
21
35
|
endif()
|
|
36
|
+
endif()
|
|
22
37
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
38
|
+
option(ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" FALSE)
|
|
39
|
+
if(ENABLE_SANITIZER_MEMORY AND CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
|
|
40
|
+
if("address" IN_LIST SANITIZERS
|
|
41
|
+
OR "thread" IN_LIST SANITIZERS
|
|
42
|
+
OR "leak" IN_LIST SANITIZERS)
|
|
43
|
+
message(WARNING "Memory sanitizer does not work with Address, Thread and Leak sanitizer enabled")
|
|
44
|
+
else()
|
|
45
|
+
list(APPEND SANITIZERS "memory")
|
|
26
46
|
endif()
|
|
47
|
+
endif()
|
|
27
48
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
list(APPEND SANITIZERS "thread")
|
|
34
|
-
endif()
|
|
35
|
-
endif()
|
|
49
|
+
list(
|
|
50
|
+
JOIN
|
|
51
|
+
SANITIZERS
|
|
52
|
+
","
|
|
53
|
+
LIST_OF_SANITIZERS)
|
|
36
54
|
|
|
37
|
-
|
|
38
|
-
if(ENABLE_SANITIZER_MEMORY AND CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
|
|
39
|
-
if("address" IN_LIST SANITIZERS
|
|
40
|
-
OR "thread" IN_LIST SANITIZERS
|
|
41
|
-
OR "leak" IN_LIST SANITIZERS)
|
|
42
|
-
message(WARNING "Memory sanitizer does not work with Address, Thread and Leak sanitizer enabled")
|
|
43
|
-
else()
|
|
44
|
-
list(APPEND SANITIZERS "memory")
|
|
45
|
-
endif()
|
|
46
|
-
endif()
|
|
55
|
+
endif()
|
|
47
56
|
|
|
48
|
-
|
|
49
|
-
JOIN
|
|
50
|
-
SANITIZERS
|
|
51
|
-
","
|
|
52
|
-
LIST_OF_SANITIZERS)
|
|
57
|
+
function(enable_sanitizers project_name)
|
|
53
58
|
|
|
59
|
+
if(ENABLE_COVERAGE)
|
|
60
|
+
target_compile_options(${project_name} INTERFACE --coverage -O0 -g)
|
|
61
|
+
target_link_libraries(${project_name} INTERFACE --coverage)
|
|
54
62
|
endif()
|
|
55
63
|
|
|
56
|
-
if(LIST_OF_SANITIZERS)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
STREQUAL
|
|
60
|
-
"")
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
if(LIST_OF_SANITIZERS AND NOT "${LIST_OF_SANITIZERS}" STREQUAL "")
|
|
65
|
+
target_compile_options(${project_name} PUBLIC -fsanitize=${LIST_OF_SANITIZERS})
|
|
66
|
+
if("thread" IN_LIST SANITIZERS
|
|
67
|
+
AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
|
|
68
|
+
AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "14.0.0")
|
|
69
|
+
# GCC 14+ emits -Wtsan compile-time warnings for std::atomic_thread_fence (e.g. in Asio headers).
|
|
70
|
+
# Under -Werror, this breaks compilation. -Wno-error=tsan prevents compile errors while keeping
|
|
71
|
+
# runtime TSan instrumentation (-fsanitize=thread) fully active to catch actual data races.
|
|
72
|
+
target_compile_options(${project_name} PUBLIC -Wno-error=tsan)
|
|
65
73
|
endif()
|
|
74
|
+
target_link_libraries(${project_name} PUBLIC -fsanitize=${LIST_OF_SANITIZERS})
|
|
75
|
+
target_compile_definitions(${project_name} PUBLIC COUCHBASE_CXX_CLIENT_BUILD_SANITIZED=1)
|
|
76
|
+
message(STATUS "Enabled sanitizers: ${LIST_OF_SANITIZERS}")
|
|
66
77
|
endif()
|
|
67
78
|
|
|
68
79
|
endfunction()
|
|
@@ -34,20 +34,31 @@ if(ENABLE_CLANG_TIDY)
|
|
|
34
34
|
endif()
|
|
35
35
|
|
|
36
36
|
set(CLANGTIDY_CANDIDATES
|
|
37
|
+
clang-tidy-23
|
|
38
|
+
clang-tidy-22
|
|
39
|
+
clang-tidy-21
|
|
37
40
|
clang-tidy-20
|
|
38
41
|
clang-tidy-19
|
|
39
42
|
clang-tidy-18
|
|
40
43
|
clang-tidy)
|
|
41
44
|
if(LLVM_ROOT_DIR)
|
|
42
|
-
find_program(CLANGTIDY ${CLANGTIDY_CANDIDATES} HINTS "${LLVM_ROOT_DIR}/bin")
|
|
45
|
+
find_program(CLANGTIDY NAMES ${CLANGTIDY_CANDIDATES} HINTS "${LLVM_ROOT_DIR}/bin")
|
|
43
46
|
else()
|
|
44
|
-
find_program(CLANGTIDY ${CLANGTIDY_CANDIDATES})
|
|
47
|
+
find_program(CLANGTIDY NAMES ${CLANGTIDY_CANDIDATES})
|
|
45
48
|
endif()
|
|
46
49
|
if(CLANGTIDY)
|
|
47
|
-
|
|
50
|
+
# -Wno-unknown-warning-option: suppresses errors when clang-tidy passes flags not known to older
|
|
51
|
+
# compiler versions (e.g. when mixing clang-tidy-23 with clang-22 headers).
|
|
52
|
+
# -Wno-c2y-extensions: __COUNTER__ is used by Catch2's TEST_CASE macro; clang-23 warns it is a
|
|
53
|
+
# C2y extension. We cannot modify Catch2, and the warning is irrelevant in a C++17 codebase.
|
|
54
|
+
# No -export-fixes here: build-integrated clang-tidy runs once per translation unit in
|
|
55
|
+
# parallel, so a shared fixes file would be clobbered. CI exports fixes via run-clang-tidy
|
|
56
|
+
# in bin/check-clang-tidy instead. -fix (which rewrites sources in place) is opt-in and
|
|
57
|
+
# intended for local use only; CI must report, not rewrite.
|
|
58
|
+
set(COUCHBASE_CXX_CLIENT_CLANG_TIDY
|
|
59
|
+
"${CLANGTIDY};-extra-arg=-Wno-unknown-warning-option;-extra-arg=-Wno-c2y-extensions")
|
|
48
60
|
if(ENABLE_CLANG_TIDY_FIX)
|
|
49
|
-
set(COUCHBASE_CXX_CLIENT_CLANG_TIDY
|
|
50
|
-
"${COUCHBASE_CXX_CLIENT_CLANG_TIDY};-fix;-export-fixes=${PROJECT_BINARY_DIR}/clang-tidy-fixes.yaml")
|
|
61
|
+
set(COUCHBASE_CXX_CLIENT_CLANG_TIDY "${COUCHBASE_CXX_CLIENT_CLANG_TIDY};-fix")
|
|
51
62
|
endif()
|
|
52
63
|
else()
|
|
53
64
|
message(SEND_ERROR "clang-tidy requested but executable not found")
|