grpc 1.78.0 → 1.80.0.pre1
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/Makefile +22 -8
- data/include/grpc/credentials.h +47 -37
- data/include/grpc/credentials_cpp.h +39 -0
- data/include/grpc/event_engine/event_engine.h +8 -3
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/impl/call.h +9 -0
- data/include/grpc/impl/channel_arg_names.h +7 -0
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/private_key_signer.h +104 -0
- data/include/grpc/support/port_platform.h +6 -0
- data/src/core/call/call_filters.h +101 -78
- data/src/core/call/call_spine.h +91 -68
- data/src/core/call/call_state.h +60 -4
- data/src/core/call/client_call.cc +9 -9
- data/src/core/call/client_call.h +1 -1
- data/src/core/call/metadata_batch.cc +2 -0
- data/src/core/call/metadata_batch.h +48 -1
- data/src/core/call/metadata_info.cc +35 -0
- data/src/core/call/metadata_info.h +2 -0
- data/src/core/call/simple_slice_based_metadata.h +2 -1
- data/src/core/channelz/channelz.cc +9 -6
- data/src/core/channelz/channelz.h +7 -4
- data/src/core/channelz/property_list.h +5 -0
- data/src/core/channelz/v2tov1/convert.cc +1 -1
- data/src/core/channelz/v2tov1/legacy_api.cc +164 -307
- data/src/core/client_channel/buffered_call.cc +7 -3
- data/src/core/client_channel/buffered_call.h +11 -5
- data/src/core/client_channel/client_channel.cc +106 -44
- data/src/core/client_channel/client_channel.h +3 -6
- data/src/core/client_channel/client_channel_filter.cc +90 -64
- data/src/core/client_channel/client_channel_filter.h +3 -6
- data/src/core/client_channel/client_channel_internal.h +5 -0
- data/src/core/client_channel/config_selector.h +17 -12
- data/src/core/client_channel/dynamic_filters.cc +8 -7
- data/src/core/client_channel/dynamic_filters.h +7 -5
- data/src/core/client_channel/retry_filter.cc +1 -1
- data/src/core/client_channel/retry_filter.h +2 -2
- data/src/core/client_channel/subchannel.cc +1682 -266
- data/src/core/client_channel/subchannel.h +411 -134
- data/src/core/client_channel/subchannel_stream_client.cc +22 -18
- data/src/core/client_channel/subchannel_stream_client.h +8 -9
- data/src/core/client_channel/subchannel_stream_limiter.cc +76 -0
- data/src/core/client_channel/subchannel_stream_limiter.h +51 -0
- data/src/core/config/config_vars.cc +9 -1
- data/src/core/config/config_vars.h +6 -0
- data/src/core/credentials/call/call_creds_registry.h +51 -22
- data/src/core/credentials/call/call_creds_registry_init.cc +86 -2
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +2 -2
- data/src/core/credentials/call/external/external_account_credentials.cc +11 -4
- data/src/core/credentials/call/external/file_external_account_credentials.cc +2 -2
- data/src/core/credentials/transport/channel_creds_registry.h +71 -20
- data/src/core/credentials/transport/channel_creds_registry_init.cc +338 -29
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +43 -24
- data/src/core/credentials/transport/ssl/ssl_credentials.h +7 -1
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +2 -8
- data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +7 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +181 -109
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +55 -42
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +28 -23
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +26 -23
- data/src/core/credentials/transport/tls/spiffe_utils.cc +2 -2
- data/src/core/credentials/transport/tls/ssl_utils.cc +18 -18
- data/src/core/credentials/transport/tls/ssl_utils.h +12 -10
- data/src/core/credentials/transport/tls/tls_security_connector.cc +106 -74
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -8
- data/src/core/credentials/transport/xds/xds_credentials.cc +76 -32
- data/src/core/credentials/transport/xds/xds_credentials.h +4 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +117 -35
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +42 -4
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +58 -29
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +19 -11
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +82 -25
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +28 -3
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +9 -7
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
- data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +7 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +117 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -1
- data/src/core/ext/transport/chttp2/transport/frame.cc +2 -15
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/goaway.cc +17 -2
- data/src/core/ext/transport/chttp2/transport/goaway.h +27 -6
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +8 -21
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +101 -40
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +923 -772
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +406 -423
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +8 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +25 -13
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +71 -24
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +25 -49
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +29 -9
- data/src/core/ext/transport/chttp2/transport/internal.h +6 -2
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +14 -20
- data/src/core/ext/transport/chttp2/transport/keepalive.h +9 -6
- data/src/core/ext/transport/chttp2/transport/parsing.cc +11 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +34 -74
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +123 -79
- data/src/core/ext/transport/chttp2/transport/security_frame.h +233 -3
- data/src/core/ext/transport/chttp2/transport/stream.h +152 -73
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +155 -85
- data/src/core/ext/transport/chttp2/transport/transport_common.h +0 -5
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +8 -7
- data/src/core/ext/transport/chttp2/transport/write_cycle.cc +86 -0
- data/src/core/ext/transport/chttp2/transport/write_cycle.h +355 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +31 -29
- data/src/core/ext/upb-gen/cel/expr/checked.upb.h +1875 -0
- data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +409 -0
- data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +56 -0
- data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +2223 -0
- data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +489 -0
- data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +60 -0
- data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +2 -1
- data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +130 -18
- data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +18 -13
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +70 -38
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +20 -17
- data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +26 -10
- data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +8 -7
- data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +495 -0
- data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +114 -0
- data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +26 -10
- data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +8 -7
- data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +121 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +54 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +143 -9
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +18 -6
- data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +112 -11
- data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +22 -9
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +276 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +60 -5
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +72 -0
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +23 -2
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +129 -13
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +36 -10
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +30 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +5 -3
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +16 -0
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -3
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +31 -0
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +5 -3
- data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
- data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +63 -0
- data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +12 -7
- data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +97 -81
- data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +40 -23
- data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +604 -228
- data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +146 -100
- data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +30 -0
- data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +5 -3
- data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +35 -3
- data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +7 -4
- data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +66 -14
- data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +22 -11
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +87 -0
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +29 -2
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +0 -1
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +0 -1
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +20 -4
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +5 -4
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +239 -60
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +59 -28
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +89 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +50 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +135 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +53 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +105 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +51 -0
- data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +32 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +6 -3
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +206 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +41 -8
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +64 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +4 -3
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +64 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +31 -5
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +283 -14
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +48 -11
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +144 -6
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -7
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +42 -21
- data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +9 -8
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +164 -1
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +37 -6
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +2 -0
- data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +0 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +26 -11
- data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +8 -8
- data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +33 -0
- data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +14 -3
- data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +90 -10
- data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +18 -7
- data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c +248 -0
- data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h +97 -0
- data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c +283 -0
- data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h +107 -0
- data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +213 -211
- data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +635 -614
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1012 -1000
- data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +276 -273
- data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.c +152 -0
- data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.h +47 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +149 -144
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +367 -370
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.h +37 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +297 -284
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +492 -469
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +74 -43
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +60 -59
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +202 -184
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +354 -339
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +28 -19
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +30 -27
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +71 -66
- data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +94 -91
- data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +386 -369
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +60 -57
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +1974 -1884
- data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +119 -112
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +62 -51
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +109 -88
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +54 -36
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +78 -84
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +48 -46
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1041 -984
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +304 -290
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +94 -77
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +246 -193
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +37 -23
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +4 -5
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +113 -87
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +6 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +25 -30
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +14 -20
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +180 -183
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +56 -47
- data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +69 -47
- data/src/core/filter/filter_chain.h +95 -0
- data/src/core/handshaker/http_connect/{http_connect_handshaker.cc → http_connect_client_handshaker.cc} +32 -31
- data/src/core/handshaker/http_connect/{http_connect_handshaker.h → http_connect_client_handshaker.h} +4 -4
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +14 -13
- data/src/core/handshaker/security/secure_endpoint.cc +282 -68
- data/src/core/handshaker/security/secure_endpoint.h +0 -7
- data/src/core/lib/channel/channel_args.h +1 -1
- data/src/core/lib/channel/promise_based_filter.cc +17 -4
- data/src/core/lib/channel/promise_based_filter.h +3 -2
- data/src/core/lib/debug/trace_flags.cc +2 -0
- data/src/core/lib/debug/trace_flags.h +1 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +35 -8
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -2
- data/src/core/lib/event_engine/event_engine.cc +9 -0
- data/src/core/lib/event_engine/extensions/tcp_trace.h +0 -3
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +34 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +24 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +141 -14
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +19 -2
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +7 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +21 -3
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +16 -0
- data/src/core/lib/experiments/experiments.cc +309 -201
- data/src/core/lib/experiments/experiments.h +141 -80
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
- data/src/core/lib/iomgr/resolve_address.h +0 -2
- data/src/core/lib/iomgr/resolved_address.h +0 -2
- data/src/core/lib/iomgr/tcp_posix.cc +13 -5
- data/src/core/lib/iomgr/tcp_server.cc +0 -5
- data/src/core/lib/iomgr/tcp_server.h +0 -7
- data/src/core/lib/iomgr/tcp_server_posix.cc +0 -17
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -3
- data/src/core/lib/iomgr/tcp_server_windows.cc +12 -51
- data/src/core/lib/promise/all_ok.h +17 -12
- data/src/core/lib/promise/cancel_callback.h +12 -13
- data/src/core/lib/promise/detail/join_state.h +626 -0
- data/src/core/lib/promise/detail/promise_factory.h +14 -14
- data/src/core/lib/promise/for_each.h +32 -8
- data/src/core/lib/promise/if.h +9 -7
- data/src/core/lib/promise/loop.h +18 -16
- data/src/core/lib/promise/map.h +54 -47
- data/src/core/lib/promise/mpsc.h +11 -10
- data/src/core/lib/promise/observable.h +6 -6
- data/src/core/lib/promise/party.h +25 -19
- data/src/core/lib/promise/poll.h +5 -5
- data/src/core/lib/promise/prioritized_race.h +10 -7
- data/src/core/lib/promise/promise.h +16 -11
- data/src/core/lib/promise/race.h +6 -5
- data/src/core/lib/promise/seq.h +109 -74
- data/src/core/lib/promise/try_join.h +14 -6
- data/src/core/lib/promise/try_seq.h +76 -60
- data/src/core/lib/resource_quota/api.cc +7 -0
- data/src/core/lib/resource_quota/arena.h +1 -1
- data/src/core/lib/resource_quota/memory_quota.cc +4 -1
- data/src/core/lib/resource_quota/resource_quota.cc +2 -1
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/resource_quota/stream_quota.cc +77 -1
- data/src/core/lib/resource_quota/stream_quota.h +64 -1
- data/src/core/lib/resource_quota/telemetry.h +1 -1
- data/src/core/lib/surface/call.cc +13 -0
- data/src/core/lib/surface/call_utils.h +58 -43
- data/src/core/lib/surface/channel.h +1 -4
- data/src/core/lib/surface/completion_queue.cc +13 -6
- data/src/core/lib/surface/validate_metadata.cc +20 -15
- data/src/core/lib/surface/validate_metadata.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +1 -1
- data/src/core/lib/transport/promise_endpoint.h +1 -1
- data/src/core/lib/transport/transport.h +5 -0
- data/src/core/load_balancing/health_check_client.cc +1 -15
- data/src/core/load_balancing/health_check_client_internal.h +0 -2
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/oob_backend_metric_internal.h +0 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +12 -9
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -2
- data/src/core/resolver/xds/xds_resolver.cc +162 -116
- data/src/core/server/server.cc +18 -1
- data/src/core/server/server.h +2 -0
- data/src/core/server/xds_server_config_fetcher.cc +4 -4
- data/src/core/telemetry/call_tracer.cc +87 -2
- data/src/core/telemetry/call_tracer.h +46 -8
- data/src/core/telemetry/instrument.cc +102 -40
- data/src/core/telemetry/instrument.h +246 -65
- data/src/core/tsi/fake_transport_security.cc +3 -1
- data/src/core/tsi/ssl_transport_security.cc +516 -137
- data/src/core/tsi/ssl_transport_security.h +28 -22
- data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
- data/src/core/tsi/ssl_transport_security_utils.h +2 -2
- data/src/core/util/bitset.h +6 -0
- data/src/core/util/function_signature.h +3 -1
- data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
- data/src/core/util/json/json_reader.cc +0 -4
- data/src/core/xds/grpc/certificate_provider_store.cc +2 -1
- data/src/core/xds/grpc/certificate_provider_store.h +3 -17
- data/src/core/xds/grpc/certificate_provider_store_interface.h +61 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +48 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +18 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +7 -2
- data/src/core/xds/grpc/xds_certificate_provider.h +13 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +13 -6
- data/src/core/xds/grpc/xds_client_grpc.h +10 -7
- data/src/core/xds/grpc/xds_cluster.cc +18 -4
- data/src/core/xds/grpc/xds_cluster.h +17 -2
- data/src/core/xds/grpc/xds_cluster_parser.cc +36 -11
- data/src/core/xds/grpc/xds_common_types.cc +45 -0
- data/src/core/xds/grpc/xds_common_types.h +31 -0
- data/src/core/xds/grpc/xds_common_types_parser.cc +274 -16
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_fault_filter.cc +128 -24
- data/src/core/xds/grpc/xds_http_fault_filter.h +19 -10
- data/src/core/xds/grpc/xds_http_filter.cc +38 -0
- data/src/core/xds/grpc/xds_http_filter.h +70 -47
- data/src/core/xds/grpc/xds_http_filter_registry.cc +48 -14
- data/src/core/xds/grpc/xds_http_filter_registry.h +29 -15
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +88 -22
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +22 -11
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +36 -20
- data/src/core/xds/grpc/xds_http_rbac_filter.h +19 -10
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +143 -26
- data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -10
- data/src/core/xds/grpc/xds_listener.cc +4 -1
- data/src/core/xds/grpc/xds_listener.h +10 -2
- data/src/core/xds/grpc/xds_listener_parser.cc +23 -18
- data/src/core/xds/grpc/xds_matcher.cc +40 -5
- data/src/core/xds/grpc/xds_matcher.h +13 -0
- data/src/core/xds/grpc/xds_matcher_action.h +1 -1
- data/src/core/xds/grpc/xds_matcher_parse.cc +60 -40
- data/src/core/xds/grpc/xds_matcher_parse.h +2 -1
- data/src/core/xds/grpc/xds_route_config.cc +12 -1
- data/src/core/xds/grpc/xds_route_config.h +15 -2
- data/src/core/xds/grpc/xds_route_config_parser.cc +11 -5
- data/src/core/xds/grpc/xds_routing.cc +181 -6
- data/src/core/xds/grpc/xds_routing.h +57 -0
- data/src/core/xds/grpc/xds_server_grpc.cc +55 -43
- data/src/core/xds/grpc/xds_server_grpc.h +13 -6
- data/src/core/xds/grpc/xds_server_grpc_interface.h +3 -2
- data/src/core/xds/grpc/xds_transport_grpc.cc +12 -6
- data/src/core/xds/grpc/xds_transport_grpc.h +5 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -12
- data/src/ruby/lib/grpc/grpc.rb +7 -9
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -1
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
- data/src/ruby/spec/spec_helper.rb +1 -1
- metadata +64 -14
- data/src/core/ext/transport/chttp2/transport/security_frame.cc +0 -31
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +0 -597
|
@@ -99,7 +99,7 @@ class TlsChannelSecurityConnector final
|
|
|
99
99
|
return pem_key_cert_pair_list_;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
std::shared_ptr<RootCertInfo> RootCertInfoForTesting() {
|
|
102
|
+
std::shared_ptr<tsi::RootCertInfo> RootCertInfoForTesting() {
|
|
103
103
|
MutexLock lock(&mu_);
|
|
104
104
|
return root_cert_info_;
|
|
105
105
|
}
|
|
@@ -115,7 +115,7 @@ class TlsChannelSecurityConnector final
|
|
|
115
115
|
TlsChannelSecurityConnector* security_connector)
|
|
116
116
|
: security_connector_(security_connector) {}
|
|
117
117
|
void OnCertificatesChanged(
|
|
118
|
-
std::shared_ptr<RootCertInfo> root_certs,
|
|
118
|
+
std::shared_ptr<tsi::RootCertInfo> root_certs,
|
|
119
119
|
std::optional<PemKeyCertPairList> key_cert_pairs) override;
|
|
120
120
|
void OnError(grpc_error_handle root_cert_error,
|
|
121
121
|
grpc_error_handle identity_cert_error) override;
|
|
@@ -158,7 +158,9 @@ class TlsChannelSecurityConnector final
|
|
|
158
158
|
Mutex verifier_request_map_mu_;
|
|
159
159
|
RefCountedPtr<grpc_tls_credentials_options> options_;
|
|
160
160
|
grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
|
|
161
|
-
|
|
161
|
+
root_certificate_watcher_ = nullptr;
|
|
162
|
+
grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
|
|
163
|
+
identity_certificate_watcher_ = nullptr;
|
|
162
164
|
std::string target_name_;
|
|
163
165
|
std::string overridden_target_name_;
|
|
164
166
|
tsi_ssl_client_handshaker_factory* client_handshaker_factory_
|
|
@@ -167,7 +169,7 @@ class TlsChannelSecurityConnector final
|
|
|
167
169
|
RefCountedPtr<TlsSessionKeyLogger> tls_session_key_logger_;
|
|
168
170
|
std::optional<PemKeyCertPairList> pem_key_cert_pair_list_
|
|
169
171
|
ABSL_GUARDED_BY(mu_);
|
|
170
|
-
std::shared_ptr<RootCertInfo> root_cert_info_ ABSL_GUARDED_BY(mu_);
|
|
172
|
+
std::shared_ptr<tsi::RootCertInfo> root_cert_info_ ABSL_GUARDED_BY(mu_);
|
|
171
173
|
std::map<grpc_closure* /*on_peer_checked*/, ChannelPendingVerifierRequest*>
|
|
172
174
|
pending_verifier_requests_ ABSL_GUARDED_BY(verifier_request_map_mu_);
|
|
173
175
|
};
|
|
@@ -209,7 +211,7 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
|
|
|
209
211
|
return pem_key_cert_pair_list_;
|
|
210
212
|
}
|
|
211
213
|
|
|
212
|
-
std::shared_ptr<RootCertInfo> RootCertInfoForTesting() {
|
|
214
|
+
std::shared_ptr<tsi::RootCertInfo> RootCertInfoForTesting() {
|
|
213
215
|
MutexLock lock(&mu_);
|
|
214
216
|
return root_cert_info_;
|
|
215
217
|
}
|
|
@@ -225,7 +227,7 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
|
|
|
225
227
|
TlsServerSecurityConnector* security_connector)
|
|
226
228
|
: security_connector_(security_connector) {}
|
|
227
229
|
void OnCertificatesChanged(
|
|
228
|
-
std::shared_ptr<RootCertInfo> roots,
|
|
230
|
+
std::shared_ptr<tsi::RootCertInfo> roots,
|
|
229
231
|
std::optional<PemKeyCertPairList> key_cert_pairs) override;
|
|
230
232
|
|
|
231
233
|
void OnError(grpc_error_handle root_cert_error,
|
|
@@ -269,12 +271,14 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
|
|
|
269
271
|
Mutex verifier_request_map_mu_;
|
|
270
272
|
RefCountedPtr<grpc_tls_credentials_options> options_;
|
|
271
273
|
grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
|
|
272
|
-
|
|
274
|
+
root_certificate_watcher_ = nullptr;
|
|
275
|
+
grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
|
|
276
|
+
identity_certificate_watcher_ = nullptr;
|
|
273
277
|
tsi_ssl_server_handshaker_factory* server_handshaker_factory_
|
|
274
278
|
ABSL_GUARDED_BY(mu_) = nullptr;
|
|
275
279
|
std::optional<PemKeyCertPairList> pem_key_cert_pair_list_
|
|
276
280
|
ABSL_GUARDED_BY(mu_);
|
|
277
|
-
std::shared_ptr<RootCertInfo> root_cert_info_ ABSL_GUARDED_BY(mu_);
|
|
281
|
+
std::shared_ptr<tsi::RootCertInfo> root_cert_info_ ABSL_GUARDED_BY(mu_);
|
|
278
282
|
RefCountedPtr<TlsSessionKeyLogger> tls_session_key_logger_;
|
|
279
283
|
std::map<grpc_closure* /*on_peer_checked*/, ServerPendingVerifierRequest*>
|
|
280
284
|
pending_verifier_requests_ ABSL_GUARDED_BY(verifier_request_map_mu_);
|
|
@@ -30,7 +30,9 @@
|
|
|
30
30
|
#include "src/core/credentials/transport/tls/tls_utils.h"
|
|
31
31
|
#include "src/core/lib/channel/channel_args.h"
|
|
32
32
|
#include "src/core/load_balancing/xds/xds_channel_args.h"
|
|
33
|
+
#include "src/core/util/env.h"
|
|
33
34
|
#include "src/core/util/grpc_check.h"
|
|
35
|
+
#include "src/core/util/host_port.h"
|
|
34
36
|
#include "src/core/util/useful.h"
|
|
35
37
|
#include "src/core/xds/grpc/xds_certificate_provider.h"
|
|
36
38
|
|
|
@@ -38,6 +40,15 @@ namespace grpc_core {
|
|
|
38
40
|
|
|
39
41
|
namespace {
|
|
40
42
|
|
|
43
|
+
// TODO(mlumish): Remove this after 1.80
|
|
44
|
+
bool UseChannelAuthorityIfNoSNIApplicable() {
|
|
45
|
+
auto value = GetEnv("GRPC_USE_CHANNEL_AUTHORITY_IF_NO_SNI_APPLICABLE");
|
|
46
|
+
if (!value.has_value()) return false;
|
|
47
|
+
bool parsed_value;
|
|
48
|
+
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
|
49
|
+
return parse_succeeded && parsed_value;
|
|
50
|
+
}
|
|
51
|
+
|
|
41
52
|
bool XdsVerifySubjectAlternativeNames(
|
|
42
53
|
const char* const* subject_alternative_names,
|
|
43
54
|
size_t subject_alternative_names_size,
|
|
@@ -73,28 +84,40 @@ bool XdsVerifySubjectAlternativeNames(
|
|
|
73
84
|
//
|
|
74
85
|
|
|
75
86
|
XdsCertificateVerifier::XdsCertificateVerifier(
|
|
76
|
-
RefCountedPtr<XdsCertificateProvider> xds_certificate_provider
|
|
77
|
-
|
|
87
|
+
RefCountedPtr<XdsCertificateProvider> xds_certificate_provider,
|
|
88
|
+
absl::string_view sni_name)
|
|
89
|
+
: xds_certificate_provider_(std::move(xds_certificate_provider)),
|
|
90
|
+
sni_name_(sni_name) {}
|
|
78
91
|
|
|
79
92
|
bool XdsCertificateVerifier::Verify(
|
|
80
93
|
grpc_tls_custom_verification_check_request* request,
|
|
81
94
|
std::function<void(absl::Status)>, absl::Status* sync_status) {
|
|
82
95
|
GRPC_CHECK_NE(request, nullptr);
|
|
83
|
-
if (
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
if (xds_certificate_provider_->auto_sni_san_validation()) {
|
|
97
|
+
if (!XdsVerifySubjectAlternativeNames(
|
|
98
|
+
request->peer_info.san_names.dns_names,
|
|
99
|
+
request->peer_info.san_names.dns_names_size,
|
|
100
|
+
{StringMatcher::Create(StringMatcher::Type::kExact, sni_name_, true)
|
|
101
|
+
.value()})) {
|
|
102
|
+
*sync_status = absl::UnauthenticatedError(
|
|
103
|
+
"SANs from certificate did not match SNI from xDS control plane");
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
if (!XdsVerifySubjectAlternativeNames(
|
|
107
|
+
request->peer_info.san_names.uri_names,
|
|
108
|
+
request->peer_info.san_names.uri_names_size,
|
|
109
|
+
xds_certificate_provider_->san_matchers()) &&
|
|
110
|
+
!XdsVerifySubjectAlternativeNames(
|
|
111
|
+
request->peer_info.san_names.ip_names,
|
|
112
|
+
request->peer_info.san_names.ip_names_size,
|
|
113
|
+
xds_certificate_provider_->san_matchers()) &&
|
|
114
|
+
!XdsVerifySubjectAlternativeNames(
|
|
115
|
+
request->peer_info.san_names.dns_names,
|
|
116
|
+
request->peer_info.san_names.dns_names_size,
|
|
117
|
+
xds_certificate_provider_->san_matchers())) {
|
|
118
|
+
*sync_status = absl::UnauthenticatedError(
|
|
119
|
+
"SANs from certificate did not match SANs from xDS control plane");
|
|
120
|
+
}
|
|
98
121
|
}
|
|
99
122
|
return true; // synchronous check
|
|
100
123
|
}
|
|
@@ -105,12 +128,19 @@ void XdsCertificateVerifier::Cancel(
|
|
|
105
128
|
int XdsCertificateVerifier::CompareImpl(
|
|
106
129
|
const grpc_tls_certificate_verifier* other) const {
|
|
107
130
|
auto* o = static_cast<const XdsCertificateVerifier*>(other);
|
|
131
|
+
int compare_cert_provider;
|
|
108
132
|
if (xds_certificate_provider_ == nullptr ||
|
|
109
133
|
o->xds_certificate_provider_ == nullptr) {
|
|
110
|
-
|
|
111
|
-
|
|
134
|
+
compare_cert_provider =
|
|
135
|
+
QsortCompare(xds_certificate_provider_, o->xds_certificate_provider_);
|
|
136
|
+
} else {
|
|
137
|
+
compare_cert_provider =
|
|
138
|
+
xds_certificate_provider_->Compare(o->xds_certificate_provider_.get());
|
|
139
|
+
}
|
|
140
|
+
if (compare_cert_provider != 0) {
|
|
141
|
+
return compare_cert_provider;
|
|
112
142
|
}
|
|
113
|
-
return
|
|
143
|
+
return sni_name_.compare(o->sni_name_);
|
|
114
144
|
}
|
|
115
145
|
|
|
116
146
|
UniqueTypeName XdsCertificateVerifier::type() const {
|
|
@@ -145,20 +175,33 @@ XdsCredentials::create_security_connector(
|
|
|
145
175
|
if (watch_root || use_system_root_certs || watch_identity) {
|
|
146
176
|
auto tls_credentials_options =
|
|
147
177
|
MakeRefCounted<grpc_tls_credentials_options>();
|
|
148
|
-
if (watch_root
|
|
149
|
-
tls_credentials_options->
|
|
178
|
+
if (watch_root) {
|
|
179
|
+
tls_credentials_options->set_root_certificate_provider(
|
|
180
|
+
xds_certificate_provider);
|
|
181
|
+
}
|
|
182
|
+
if (watch_identity) {
|
|
183
|
+
tls_credentials_options->set_identity_certificate_provider(
|
|
150
184
|
xds_certificate_provider);
|
|
151
|
-
if (watch_root) {
|
|
152
|
-
tls_credentials_options->set_watch_root_cert(true);
|
|
153
|
-
}
|
|
154
|
-
if (watch_identity) {
|
|
155
|
-
tls_credentials_options->set_watch_identity_pair(true);
|
|
156
|
-
}
|
|
157
185
|
}
|
|
158
186
|
tls_credentials_options->set_verify_server_cert(true);
|
|
187
|
+
auto hostname = args->GetOwnedString(GRPC_ARG_ADDRESS_NAME);
|
|
188
|
+
if (xds_certificate_provider->auto_host_sni() && hostname.has_value()) {
|
|
189
|
+
std::string host;
|
|
190
|
+
std::string port;
|
|
191
|
+
SplitHostPort(*hostname, &host, &port);
|
|
192
|
+
tls_credentials_options->set_sni_override(host);
|
|
193
|
+
} else if (!xds_certificate_provider->sni().empty()) {
|
|
194
|
+
tls_credentials_options->set_sni_override(
|
|
195
|
+
xds_certificate_provider->sni());
|
|
196
|
+
} else {
|
|
197
|
+
if (!UseChannelAuthorityIfNoSNIApplicable()) {
|
|
198
|
+
tls_credentials_options->set_sni_override("");
|
|
199
|
+
}
|
|
200
|
+
}
|
|
159
201
|
tls_credentials_options->set_certificate_verifier(
|
|
160
202
|
MakeRefCounted<XdsCertificateVerifier>(
|
|
161
|
-
std::move(xds_certificate_provider)
|
|
203
|
+
std::move(xds_certificate_provider),
|
|
204
|
+
tls_credentials_options->sni_override().value_or("")));
|
|
162
205
|
tls_credentials_options->set_check_call_host(false);
|
|
163
206
|
auto tls_credentials =
|
|
164
207
|
MakeRefCounted<TlsCredentials>(std::move(tls_credentials_options));
|
|
@@ -188,10 +231,11 @@ XdsServerCredentials::create_security_connector(const ChannelArgs& args) {
|
|
|
188
231
|
xds_certificate_provider->ProvidesIdentityCerts()) {
|
|
189
232
|
auto tls_credentials_options =
|
|
190
233
|
MakeRefCounted<grpc_tls_credentials_options>();
|
|
191
|
-
tls_credentials_options->
|
|
192
|
-
|
|
234
|
+
tls_credentials_options->set_identity_certificate_provider(
|
|
235
|
+
xds_certificate_provider);
|
|
193
236
|
if (xds_certificate_provider->ProvidesRootCerts()) {
|
|
194
|
-
tls_credentials_options->
|
|
237
|
+
tls_credentials_options->set_root_certificate_provider(
|
|
238
|
+
xds_certificate_provider);
|
|
195
239
|
tls_credentials_options->set_cert_request_type(
|
|
196
240
|
xds_certificate_provider->require_client_certificate()
|
|
197
241
|
? GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
|
|
@@ -44,8 +44,9 @@ namespace grpc_core {
|
|
|
44
44
|
|
|
45
45
|
class XdsCertificateVerifier : public grpc_tls_certificate_verifier {
|
|
46
46
|
public:
|
|
47
|
-
|
|
48
|
-
RefCountedPtr<XdsCertificateProvider> xds_certificate_provider
|
|
47
|
+
XdsCertificateVerifier(
|
|
48
|
+
RefCountedPtr<XdsCertificateProvider> xds_certificate_provider,
|
|
49
|
+
absl::string_view sni_name);
|
|
49
50
|
|
|
50
51
|
bool Verify(grpc_tls_custom_verification_check_request* request,
|
|
51
52
|
std::function<void(absl::Status)>,
|
|
@@ -58,6 +59,7 @@ class XdsCertificateVerifier : public grpc_tls_certificate_verifier {
|
|
|
58
59
|
int CompareImpl(const grpc_tls_certificate_verifier* other) const override;
|
|
59
60
|
|
|
60
61
|
RefCountedPtr<XdsCertificateProvider> xds_certificate_provider_;
|
|
62
|
+
std::string sni_name_;
|
|
61
63
|
};
|
|
62
64
|
|
|
63
65
|
class XdsCredentials final : public grpc_channel_credentials {
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
#include "src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h"
|
|
35
35
|
#include "src/core/lib/channel/channel_stack.h"
|
|
36
36
|
#include "src/core/lib/debug/trace.h"
|
|
37
|
+
#include "src/core/lib/experiments/experiments.h"
|
|
37
38
|
#include "src/core/lib/promise/context.h"
|
|
38
39
|
#include "src/core/lib/promise/sleep.h"
|
|
39
40
|
#include "src/core/lib/promise/try_seq.h"
|
|
@@ -50,6 +51,63 @@
|
|
|
50
51
|
|
|
51
52
|
namespace grpc_core {
|
|
52
53
|
|
|
54
|
+
bool FaultInjectionFilter::Config::Equals(const FilterConfig& other) const {
|
|
55
|
+
const auto& o = DownCast<const Config&>(other);
|
|
56
|
+
return abort_code == o.abort_code && abort_message == o.abort_message &&
|
|
57
|
+
abort_code_header == o.abort_code_header &&
|
|
58
|
+
abort_percentage_header == o.abort_percentage_header &&
|
|
59
|
+
delay == o.delay && delay_header == o.delay_header &&
|
|
60
|
+
delay_percentage_header == o.delay_percentage_header &&
|
|
61
|
+
delay_percentage_numerator == o.delay_percentage_numerator &&
|
|
62
|
+
delay_percentage_denominator == o.delay_percentage_denominator &&
|
|
63
|
+
max_faults == o.max_faults;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
std::string FaultInjectionFilter::Config::ToString() const {
|
|
67
|
+
std::vector<std::string> parts;
|
|
68
|
+
if (abort_code != GRPC_STATUS_OK || !abort_code_header.empty()) {
|
|
69
|
+
if (abort_code != GRPC_STATUS_OK) {
|
|
70
|
+
parts.push_back(
|
|
71
|
+
absl::StrCat("abort_code=", grpc_status_code_to_string(abort_code)));
|
|
72
|
+
}
|
|
73
|
+
if (!abort_code_header.empty()) {
|
|
74
|
+
parts.push_back(
|
|
75
|
+
absl::StrCat("abort_code_header=\"", abort_code_header, "\""));
|
|
76
|
+
}
|
|
77
|
+
parts.push_back(absl::StrCat("abort_message=\"", abort_message, "\""));
|
|
78
|
+
if (!abort_percentage_header.empty()) {
|
|
79
|
+
parts.push_back(absl::StrCat("abort_percentage_header=\"",
|
|
80
|
+
abort_percentage_header, "\""));
|
|
81
|
+
}
|
|
82
|
+
if (abort_percentage_numerator > 0) {
|
|
83
|
+
parts.push_back(absl::StrCat("abort_percentage_numerator=",
|
|
84
|
+
abort_percentage_numerator));
|
|
85
|
+
parts.push_back(absl::StrCat("abort_percentage_denominator=",
|
|
86
|
+
abort_percentage_denominator));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (delay != Duration::Zero() || !delay_header.empty()) {
|
|
90
|
+
if (delay != Duration::Zero()) {
|
|
91
|
+
parts.push_back(absl::StrCat("delay=", delay.ToString()));
|
|
92
|
+
}
|
|
93
|
+
if (!delay_header.empty()) {
|
|
94
|
+
parts.push_back(absl::StrCat("delay_header=\"", delay_header, "\""));
|
|
95
|
+
}
|
|
96
|
+
if (!delay_percentage_header.empty()) {
|
|
97
|
+
parts.push_back(absl::StrCat("delay_percentage_header=\"",
|
|
98
|
+
delay_percentage_header, "\""));
|
|
99
|
+
}
|
|
100
|
+
if (delay_percentage_numerator > 0) {
|
|
101
|
+
parts.push_back(absl::StrCat("delay_percentage_numerator=",
|
|
102
|
+
delay_percentage_numerator));
|
|
103
|
+
parts.push_back(absl::StrCat("delay_percentage_denominator=",
|
|
104
|
+
delay_percentage_denominator));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
parts.push_back(absl::StrCat("max_faults=", max_faults));
|
|
108
|
+
return absl::StrCat("{", absl::StrJoin(parts, ", "), "}");
|
|
109
|
+
}
|
|
110
|
+
|
|
53
111
|
namespace {
|
|
54
112
|
|
|
55
113
|
std::atomic<uint32_t> g_active_faults{0};
|
|
@@ -128,13 +186,24 @@ class FaultInjectionFilter::InjectionDecision {
|
|
|
128
186
|
absl::StatusOr<std::unique_ptr<FaultInjectionFilter>>
|
|
129
187
|
FaultInjectionFilter::Create(const ChannelArgs&,
|
|
130
188
|
ChannelFilter::Args filter_args) {
|
|
189
|
+
if (IsXdsChannelFilterChainPerRouteEnabled()) {
|
|
190
|
+
if (filter_args.config() == nullptr) {
|
|
191
|
+
return absl::InternalError("no config passed to fault injection filter");
|
|
192
|
+
}
|
|
193
|
+
if (filter_args.config()->type() != Config::Type()) {
|
|
194
|
+
return absl::InternalError(
|
|
195
|
+
absl::StrCat("wrong config type passed to fault injection filter: ",
|
|
196
|
+
filter_args.config()->type().name()));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
131
199
|
return std::make_unique<FaultInjectionFilter>(filter_args);
|
|
132
200
|
}
|
|
133
201
|
|
|
134
202
|
FaultInjectionFilter::FaultInjectionFilter(ChannelFilter::Args filter_args)
|
|
135
203
|
: index_(filter_args.instance_id()),
|
|
136
204
|
service_config_parser_index_(
|
|
137
|
-
FaultInjectionServiceConfigParser::ParserIndex())
|
|
205
|
+
FaultInjectionServiceConfigParser::ParserIndex()),
|
|
206
|
+
config_(filter_args.config().TakeAsSubclass<const Config>()) {}
|
|
138
207
|
|
|
139
208
|
// Construct a promise for one call.
|
|
140
209
|
ArenaPromise<absl::Status> FaultInjectionFilter::Call::OnClientInitialMetadata(
|
|
@@ -152,62 +221,75 @@ ArenaPromise<absl::Status> FaultInjectionFilter::Call::OnClientInitialMetadata(
|
|
|
152
221
|
FaultInjectionFilter::InjectionDecision
|
|
153
222
|
FaultInjectionFilter::MakeInjectionDecision(
|
|
154
223
|
const ClientMetadata& initial_metadata) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
224
|
+
if (!IsXdsChannelFilterChainPerRouteEnabled()) {
|
|
225
|
+
// Fetch the fault injection policy from the service config, based on the
|
|
226
|
+
// relative index for which policy should this CallData use.
|
|
227
|
+
auto* service_config_call_data = GetContext<ServiceConfigCallData>();
|
|
228
|
+
auto* method_params = static_cast<FaultInjectionMethodParsedConfig*>(
|
|
229
|
+
service_config_call_data->GetMethodParsedConfig(
|
|
230
|
+
service_config_parser_index_));
|
|
231
|
+
const FaultInjectionMethodParsedConfig::FaultInjectionPolicy* fi_policy =
|
|
232
|
+
nullptr;
|
|
233
|
+
if (method_params != nullptr) {
|
|
234
|
+
fi_policy = method_params->fault_injection_policy(index_);
|
|
235
|
+
}
|
|
236
|
+
// Shouldn't ever be null, but just in case, return a no-op decision.
|
|
237
|
+
if (fi_policy == nullptr) {
|
|
238
|
+
return InjectionDecision(/*max_faults=*/0,
|
|
239
|
+
/*delay_time=*/Duration::Zero(),
|
|
240
|
+
/*abort_request=*/std::nullopt);
|
|
241
|
+
}
|
|
242
|
+
return MakeInjectionDecision(initial_metadata, *fi_policy);
|
|
165
243
|
}
|
|
166
|
-
|
|
167
244
|
// Shouldn't ever be null, but just in case, return a no-op decision.
|
|
168
|
-
if (
|
|
245
|
+
if (config_ == nullptr) {
|
|
169
246
|
return InjectionDecision(/*max_faults=*/0, /*delay_time=*/Duration::Zero(),
|
|
170
247
|
/*abort_request=*/std::nullopt);
|
|
171
248
|
}
|
|
249
|
+
return MakeInjectionDecision(initial_metadata, *config_);
|
|
250
|
+
}
|
|
172
251
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
252
|
+
template <typename T>
|
|
253
|
+
FaultInjectionFilter::InjectionDecision
|
|
254
|
+
FaultInjectionFilter::MakeInjectionDecision(
|
|
255
|
+
const ClientMetadata& initial_metadata, const T& config) {
|
|
256
|
+
grpc_status_code abort_code = config.abort_code;
|
|
257
|
+
uint32_t abort_percentage_numerator = config.abort_percentage_numerator;
|
|
258
|
+
uint32_t delay_percentage_numerator = config.delay_percentage_numerator;
|
|
259
|
+
Duration delay = config.delay;
|
|
177
260
|
|
|
178
261
|
// Update the policy with values in initial metadata.
|
|
179
|
-
if (!
|
|
180
|
-
!
|
|
181
|
-
!
|
|
182
|
-
!fi_policy->delay_percentage_header.empty()) {
|
|
262
|
+
if (!config.abort_code_header.empty() ||
|
|
263
|
+
!config.abort_percentage_header.empty() || !config.delay_header.empty() ||
|
|
264
|
+
!config.delay_percentage_header.empty()) {
|
|
183
265
|
std::string buffer;
|
|
184
|
-
if (!
|
|
185
|
-
auto value =
|
|
186
|
-
|
|
266
|
+
if (!config.abort_code_header.empty() && abort_code == GRPC_STATUS_OK) {
|
|
267
|
+
auto value =
|
|
268
|
+
initial_metadata.GetStringValue(config.abort_code_header, &buffer);
|
|
187
269
|
if (value.has_value()) {
|
|
188
270
|
grpc_status_code_from_int(
|
|
189
271
|
AsInt<int>(*value).value_or(GRPC_STATUS_UNKNOWN), &abort_code);
|
|
190
272
|
}
|
|
191
273
|
}
|
|
192
|
-
if (!
|
|
274
|
+
if (!config.abort_percentage_header.empty()) {
|
|
193
275
|
auto value = initial_metadata.GetStringValue(
|
|
194
|
-
|
|
276
|
+
config.abort_percentage_header, &buffer);
|
|
195
277
|
if (value.has_value()) {
|
|
196
278
|
abort_percentage_numerator = std::min(
|
|
197
279
|
AsInt<uint32_t>(*value).value_or(-1), abort_percentage_numerator);
|
|
198
280
|
}
|
|
199
281
|
}
|
|
200
|
-
if (!
|
|
282
|
+
if (!config.delay_header.empty() && delay == Duration::Zero()) {
|
|
201
283
|
auto value =
|
|
202
|
-
initial_metadata.GetStringValue(
|
|
284
|
+
initial_metadata.GetStringValue(config.delay_header, &buffer);
|
|
203
285
|
if (value.has_value()) {
|
|
204
286
|
delay = Duration::Milliseconds(
|
|
205
287
|
std::max(AsInt<int64_t>(*value).value_or(0), int64_t{0}));
|
|
206
288
|
}
|
|
207
289
|
}
|
|
208
|
-
if (!
|
|
290
|
+
if (!config.delay_percentage_header.empty()) {
|
|
209
291
|
auto value = initial_metadata.GetStringValue(
|
|
210
|
-
|
|
292
|
+
config.delay_percentage_header, &buffer);
|
|
211
293
|
if (value.has_value()) {
|
|
212
294
|
delay_percentage_numerator = std::min(
|
|
213
295
|
AsInt<uint32_t>(*value).value_or(-1), delay_percentage_numerator);
|
|
@@ -222,20 +304,20 @@ FaultInjectionFilter::MakeInjectionDecision(
|
|
|
222
304
|
if (delay_request) {
|
|
223
305
|
delay_request =
|
|
224
306
|
UnderFraction(&delay_rand_generator_, delay_percentage_numerator,
|
|
225
|
-
|
|
307
|
+
config.delay_percentage_denominator);
|
|
226
308
|
}
|
|
227
309
|
if (abort_request) {
|
|
228
310
|
abort_request =
|
|
229
311
|
UnderFraction(&abort_rand_generator_, abort_percentage_numerator,
|
|
230
|
-
|
|
312
|
+
config.abort_percentage_denominator);
|
|
231
313
|
}
|
|
232
314
|
}
|
|
233
315
|
|
|
234
316
|
return InjectionDecision(
|
|
235
|
-
|
|
317
|
+
config.max_faults, delay_request ? delay : Duration::Zero(),
|
|
236
318
|
abort_request ? std::optional<absl::Status>(absl::Status(
|
|
237
319
|
static_cast<absl::StatusCode>(abort_code),
|
|
238
|
-
|
|
320
|
+
config.abort_message))
|
|
239
321
|
: std::nullopt);
|
|
240
322
|
}
|
|
241
323
|
|
|
@@ -264,7 +346,7 @@ std::string FaultInjectionFilter::InjectionDecision::ToString() const {
|
|
|
264
346
|
" abort=", abort_request_.has_value());
|
|
265
347
|
}
|
|
266
348
|
|
|
267
|
-
const grpc_channel_filter FaultInjectionFilter::
|
|
349
|
+
const grpc_channel_filter FaultInjectionFilter::kFilterVtable =
|
|
268
350
|
MakePromiseBasedFilter<FaultInjectionFilter, FilterEndpoint::kClient>();
|
|
269
351
|
|
|
270
352
|
void FaultInjectionFilterRegister(CoreConfiguration::Builder* builder) {
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
#ifndef GRPC_SRC_CORE_EXT_FILTERS_FAULT_INJECTION_FAULT_INJECTION_FILTER_H
|
|
18
18
|
#define GRPC_SRC_CORE_EXT_FILTERS_FAULT_INJECTION_FAULT_INJECTION_FILTER_H
|
|
19
19
|
|
|
20
|
-
#include <grpc/support/port_platform.h>
|
|
21
20
|
#include <stddef.h>
|
|
22
21
|
|
|
23
22
|
#include <memory>
|
|
24
23
|
|
|
24
|
+
#include "src/core/filter/filter_args.h"
|
|
25
25
|
#include "src/core/lib/channel/channel_args.h"
|
|
26
26
|
#include "src/core/lib/channel/channel_fwd.h"
|
|
27
27
|
#include "src/core/lib/channel/promise_based_filter.h"
|
|
@@ -41,7 +41,37 @@ namespace grpc_core {
|
|
|
41
41
|
class FaultInjectionFilter
|
|
42
42
|
: public ImplementChannelFilter<FaultInjectionFilter> {
|
|
43
43
|
public:
|
|
44
|
-
|
|
44
|
+
// TODO(roth): The config structure here does not map cleanly to the
|
|
45
|
+
// xDS representation, and I suspect that we are not handling all of
|
|
46
|
+
// the edge cases correctly (e.g., abort_code=OK). When we have time,
|
|
47
|
+
// restructure this.
|
|
48
|
+
struct Config : public FilterConfig {
|
|
49
|
+
static UniqueTypeName Type() {
|
|
50
|
+
return GRPC_UNIQUE_TYPE_NAME_HERE("fault_injection_filter_config");
|
|
51
|
+
}
|
|
52
|
+
UniqueTypeName type() const override { return Type(); }
|
|
53
|
+
|
|
54
|
+
bool Equals(const FilterConfig& other) const override;
|
|
55
|
+
std::string ToString() const override;
|
|
56
|
+
|
|
57
|
+
grpc_status_code abort_code = GRPC_STATUS_OK;
|
|
58
|
+
std::string abort_message = "Fault injected";
|
|
59
|
+
std::string abort_code_header;
|
|
60
|
+
std::string abort_percentage_header;
|
|
61
|
+
uint32_t abort_percentage_numerator = 0;
|
|
62
|
+
uint32_t abort_percentage_denominator = 100;
|
|
63
|
+
|
|
64
|
+
Duration delay;
|
|
65
|
+
std::string delay_header;
|
|
66
|
+
std::string delay_percentage_header;
|
|
67
|
+
uint32_t delay_percentage_numerator = 0;
|
|
68
|
+
uint32_t delay_percentage_denominator = 100;
|
|
69
|
+
|
|
70
|
+
// By default, the max allowed active faults are unlimited.
|
|
71
|
+
uint32_t max_faults = std::numeric_limits<uint32_t>::max();
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
static const grpc_channel_filter kFilterVtable;
|
|
45
75
|
|
|
46
76
|
static absl::string_view TypeName() { return "fault_injection_filter"; }
|
|
47
77
|
|
|
@@ -68,12 +98,20 @@ class FaultInjectionFilter
|
|
|
68
98
|
|
|
69
99
|
private:
|
|
70
100
|
class InjectionDecision;
|
|
101
|
+
|
|
71
102
|
InjectionDecision MakeInjectionDecision(
|
|
72
103
|
const ClientMetadata& initial_metadata);
|
|
73
104
|
|
|
74
|
-
//
|
|
75
|
-
|
|
105
|
+
// TODO(roth): Remove this method and these data members as part of
|
|
106
|
+
// removing the xds_channel_filter_chain_per_route experiment.
|
|
107
|
+
template <typename T>
|
|
108
|
+
InjectionDecision MakeInjectionDecision(
|
|
109
|
+
const ClientMetadata& initial_metadata, const T& config);
|
|
110
|
+
size_t index_; // The relative index of instances of the same filter.
|
|
76
111
|
const size_t service_config_parser_index_;
|
|
112
|
+
|
|
113
|
+
const RefCountedPtr<const Config> config_;
|
|
114
|
+
|
|
77
115
|
Mutex mu_;
|
|
78
116
|
absl::InsecureBitGen abort_rand_generator_ ABSL_GUARDED_BY(mu_);
|
|
79
117
|
absl::InsecureBitGen delay_rand_generator_ ABSL_GUARDED_BY(mu_);
|