grpc 1.37.1 → 1.40.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +112 -59
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/endpoint_config.h +48 -0
- data/include/grpc/event_engine/event_engine.h +330 -0
- data/include/grpc/event_engine/port.h +41 -0
- data/include/grpc/event_engine/slice_allocator.h +66 -0
- data/include/grpc/grpc.h +11 -4
- data/include/grpc/grpc_security.h +32 -0
- data/include/grpc/grpc_security_constants.h +15 -0
- data/include/grpc/impl/codegen/grpc_types.h +44 -19
- data/include/grpc/impl/codegen/port_platform.h +46 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +975 -3282
- data/src/core/ext/filters/client_channel/client_channel.h +513 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +20 -7
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +53 -51
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -23
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +16 -16
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +734 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -17
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +17 -20
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +53 -65
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +36 -44
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +33 -55
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +151 -163
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -16
- data/src/core/ext/filters/client_channel/lb_policy.h +70 -46
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +158 -102
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2598 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
- data/src/core/ext/filters/client_channel/server_address.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_call_data.h +45 -5
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
- data/src/core/ext/filters/client_channel/subchannel.h +7 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +33 -23
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +49 -46
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +66 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +141 -126
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +9 -9
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +12 -12
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +15 -16
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +11 -10
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +652 -736
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +195 -74
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +33 -28
- data/src/core/ext/transport/chttp2/transport/parsing.cc +129 -106
- data/src/core/ext/transport/chttp2/transport/varint.cc +6 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +56 -35
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +180 -76
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +97 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +45 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +67 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +66 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +227 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +121 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +32 -24
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -73
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +8 -6
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +27 -19
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +24 -7
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +57 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +29 -17
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +72 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +15 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +85 -43
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +274 -91
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +11 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +30 -13
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +115 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +181 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +1 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +82 -66
- data/src/core/ext/upb-generated/validate/validate.upb.h +220 -124
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +53 -52
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +318 -277
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +437 -410
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +198 -170
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +219 -163
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +15 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +29 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +135 -125
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +131 -123
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +32 -24
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -55
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +684 -664
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +441 -375
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +122 -114
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +112 -79
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -160
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +665 -317
- data/src/core/ext/xds/xds_api.h +52 -14
- data/src/core/ext/xds/xds_bootstrap.cc +101 -160
- data/src/core/ext/xds/xds_bootstrap.h +19 -24
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +370 -215
- data/src/core/ext/xds/xds_client.h +38 -28
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_http_filters.cc +3 -2
- data/src/core/ext/xds/xds_http_filters.h +3 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
- data/src/core/lib/channel/call_tracer.h +85 -0
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +11 -10
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +21 -13
- data/src/core/lib/channel/channelz.h +3 -0
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/context.h +3 -0
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- data/src/core/lib/channel/status_util.h +4 -0
- data/src/core/lib/compression/stream_compression.h +1 -1
- data/src/core/lib/compression/stream_compression_gzip.h +1 -1
- data/src/core/lib/compression/stream_compression_identity.h +1 -1
- data/src/core/lib/debug/stats.h +1 -1
- data/src/core/lib/event_engine/endpoint_config.cc +46 -0
- data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
- data/src/core/lib/event_engine/event_engine.cc +50 -0
- data/src/core/lib/event_engine/sockaddr.cc +40 -0
- data/src/core/lib/event_engine/sockaddr.h +44 -0
- data/src/core/lib/gpr/murmur_hash.cc +4 -2
- data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
- data/src/core/lib/gprpp/manual_constructor.h +1 -1
- data/src/core/lib/gprpp/orphanable.h +3 -3
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +183 -0
- data/src/core/lib/gprpp/sync.h +2 -30
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +8 -10
- data/src/core/lib/iomgr/buffer_list.h +4 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +168 -61
- data/src/core/lib/iomgr/error.h +217 -106
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +5 -5
- data/src/core/lib/iomgr/ev_apple.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
- data/src/core/lib/iomgr/event_engine/closure.h +33 -0
- data/src/core/lib/iomgr/event_engine/endpoint.cc +192 -0
- data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
- data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
- data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
- data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
- data/src/core/lib/iomgr/event_engine/promise.h +51 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +263 -0
- data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
- data/src/core/lib/iomgr/exec_ctx.cc +12 -4
- data/src/core/lib/iomgr/exec_ctx.h +4 -5
- data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
- data/src/core/lib/iomgr/executor/threadpool.h +2 -2
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +2 -2
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +7 -7
- data/src/core/lib/iomgr/pollset_custom.h +3 -1
- data/src/core/lib/iomgr/pollset_uv.cc +3 -1
- data/src/core/lib/iomgr/pollset_uv.h +5 -1
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +7 -5
- data/src/core/lib/iomgr/python_util.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +8 -4
- data/src/core/lib/iomgr/resolve_address.h +12 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +13 -10
- data/src/core/lib/iomgr/sockaddr.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.cc +15 -2
- data/src/core/lib/iomgr/socket_mutator.h +26 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +78 -73
- data/src/core/lib/iomgr/tcp_posix.h +8 -0
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
- data/src/core/lib/iomgr/tcp_server_posix.cc +29 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +25 -23
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer.h +6 -1
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +6 -6
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +5 -6
- data/src/core/lib/matchers/matchers.cc +46 -58
- data/src/core/lib/matchers/matchers.h +30 -29
- data/src/core/lib/security/authorization/authorization_engine.h +44 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
- data/src/core/lib/security/authorization/evaluate_args.h +91 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +68 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +60 -76
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +45 -36
- data/src/core/lib/security/transport/server_auth_filter.cc +17 -18
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/slice_internal.h +1 -0
- data/src/core/lib/surface/call.cc +72 -52
- data/src/core/lib/surface/call.h +13 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +68 -69
- data/src/core/lib/surface/completion_queue.h +3 -2
- data/src/core/lib/surface/completion_queue_factory.cc +1 -2
- data/src/core/lib/surface/init.cc +1 -3
- data/src/core/lib/surface/init.h +10 -1
- data/src/core/lib/surface/lame_client.cc +11 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +31 -23
- data/src/core/lib/surface/server.h +19 -18
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +21 -10
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +37 -37
- data/src/core/lib/transport/metadata_batch.h +19 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +6 -4
- data/src/core/lib/transport/transport_op_string.cc +6 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/crypt/gsec.h +6 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +483 -461
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
- data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- data/third_party/xxhash/xxhash.h +77 -195
- metadata +116 -51
- data/src/core/lib/gpr/arena.h +0 -47
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
- data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -30,11 +30,11 @@
|
|
30
30
|
|
31
31
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
32
32
|
#include "src/core/ext/filters/client_channel/server_address.h"
|
33
|
+
#include "src/core/lib/address_utils/parse_address.h"
|
33
34
|
#include "src/core/lib/channel/channel_args.h"
|
34
35
|
#include "src/core/lib/gpr/string.h"
|
35
36
|
#include "src/core/lib/gpr/useful.h"
|
36
37
|
#include "src/core/lib/iomgr/closure.h"
|
37
|
-
#include "src/core/lib/iomgr/parse_address.h"
|
38
38
|
#include "src/core/lib/iomgr/resolve_address.h"
|
39
39
|
#include "src/core/lib/iomgr/unix_sockets_posix.h"
|
40
40
|
#include "src/core/lib/iomgr/work_serializer.h"
|
@@ -313,48 +313,40 @@ void FakeResolverResponseGenerator::SetFakeResolver(
|
|
313
313
|
|
314
314
|
namespace {
|
315
315
|
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
// TODO(roth): We currently deal with this ref manually. Once the
|
320
|
-
// new channel args code is converted to C++, find a way to track this ref
|
321
|
-
// in a cleaner way.
|
322
|
-
RefCountedPtr<FakeResolverResponseGenerator> copy = generator->Ref();
|
323
|
-
copy.release();
|
316
|
+
void* ResponseGeneratorChannelArgCopy(void* p) {
|
317
|
+
auto* generator = static_cast<FakeResolverResponseGenerator*>(p);
|
318
|
+
generator->Ref().release();
|
324
319
|
return p;
|
325
320
|
}
|
326
321
|
|
327
|
-
|
328
|
-
|
329
|
-
static_cast<FakeResolverResponseGenerator*>(p);
|
322
|
+
void ResponseGeneratorChannelArgDestroy(void* p) {
|
323
|
+
auto* generator = static_cast<FakeResolverResponseGenerator*>(p);
|
330
324
|
generator->Unref();
|
331
325
|
}
|
332
326
|
|
333
|
-
|
334
|
-
|
335
|
-
static const grpc_arg_pointer_vtable response_generator_arg_vtable = {
|
336
|
-
response_generator_arg_copy, response_generator_arg_destroy,
|
337
|
-
response_generator_cmp};
|
327
|
+
int ResponseGeneratorChannelArgCmp(void* a, void* b) { return GPR_ICMP(a, b); }
|
338
328
|
|
339
329
|
} // namespace
|
340
330
|
|
331
|
+
const grpc_arg_pointer_vtable
|
332
|
+
FakeResolverResponseGenerator::kChannelArgPointerVtable = {
|
333
|
+
ResponseGeneratorChannelArgCopy, ResponseGeneratorChannelArgDestroy,
|
334
|
+
ResponseGeneratorChannelArgCmp};
|
335
|
+
|
341
336
|
grpc_arg FakeResolverResponseGenerator::MakeChannelArg(
|
342
337
|
FakeResolverResponseGenerator* generator) {
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
arg.value.pointer.p = generator;
|
347
|
-
arg.value.pointer.vtable = &response_generator_arg_vtable;
|
348
|
-
return arg;
|
338
|
+
return grpc_channel_arg_pointer_create(
|
339
|
+
const_cast<char*>(GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR), generator,
|
340
|
+
&kChannelArgPointerVtable);
|
349
341
|
}
|
350
342
|
|
351
343
|
RefCountedPtr<FakeResolverResponseGenerator>
|
352
344
|
FakeResolverResponseGenerator::GetFromArgs(const grpc_channel_args* args) {
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
345
|
+
auto* response_generator =
|
346
|
+
grpc_channel_args_find_pointer<FakeResolverResponseGenerator>(
|
347
|
+
args, GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR);
|
348
|
+
if (response_generator == nullptr) return nullptr;
|
349
|
+
return response_generator->Ref();
|
358
350
|
}
|
359
351
|
|
360
352
|
//
|
@@ -42,6 +42,8 @@ class FakeResolver;
|
|
42
42
|
class FakeResolverResponseGenerator
|
43
43
|
: public RefCounted<FakeResolverResponseGenerator> {
|
44
44
|
public:
|
45
|
+
static const grpc_arg_pointer_vtable kChannelArgPointerVtable;
|
46
|
+
|
45
47
|
FakeResolverResponseGenerator();
|
46
48
|
~FakeResolverResponseGenerator() override;
|
47
49
|
|
@@ -69,6 +71,7 @@ class FakeResolverResponseGenerator
|
|
69
71
|
void SetFailureOnReresolution();
|
70
72
|
|
71
73
|
// Returns a channel arg containing \a generator.
|
74
|
+
// TODO(roth): When we have time, make this a non-static method.
|
72
75
|
static grpc_arg MakeChannelArg(FakeResolverResponseGenerator* generator);
|
73
76
|
|
74
77
|
// Returns the response generator in \a args, or null if not found.
|
@@ -82,12 +85,11 @@ class FakeResolverResponseGenerator
|
|
82
85
|
|
83
86
|
// Mutex protecting the members below.
|
84
87
|
Mutex mu_;
|
85
|
-
RefCountedPtr<FakeResolver> resolver_;
|
86
|
-
Resolver::Result result_;
|
87
|
-
bool has_result_ = false;
|
88
|
+
RefCountedPtr<FakeResolver> resolver_ ABSL_GUARDED_BY(mu_);
|
89
|
+
Resolver::Result result_ ABSL_GUARDED_BY(mu_);
|
90
|
+
bool has_result_ ABSL_GUARDED_BY(mu_) = false;
|
88
91
|
};
|
89
92
|
|
90
93
|
} // namespace grpc_core
|
91
94
|
|
92
|
-
#endif
|
93
|
-
*/
|
95
|
+
#endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_FAKE_FAKE_RESOLVER_H
|
@@ -16,6 +16,8 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
+
#include <random>
|
20
|
+
|
19
21
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
20
22
|
#include "src/core/ext/xds/xds_client.h"
|
21
23
|
#include "src/core/lib/gpr/env.h"
|
@@ -48,15 +50,15 @@ class GoogleCloud2ProdResolver : public Resolver {
|
|
48
50
|
void Orphan() override;
|
49
51
|
|
50
52
|
private:
|
51
|
-
static void OnHttpRequestDone(void* arg,
|
53
|
+
static void OnHttpRequestDone(void* arg, grpc_error_handle error);
|
52
54
|
|
53
55
|
// Calls OnDone() if not already called. Releases a ref.
|
54
|
-
void MaybeCallOnDone(
|
56
|
+
void MaybeCallOnDone(grpc_error_handle error);
|
55
57
|
|
56
58
|
// If error is not GRPC_ERROR_NONE, then it's not safe to look at response.
|
57
59
|
virtual void OnDone(GoogleCloud2ProdResolver* resolver,
|
58
60
|
const grpc_http_response* response,
|
59
|
-
|
61
|
+
grpc_error_handle error) = 0;
|
60
62
|
|
61
63
|
RefCountedPtr<GoogleCloud2ProdResolver> resolver_;
|
62
64
|
grpc_httpcli_context context_;
|
@@ -73,7 +75,8 @@ class GoogleCloud2ProdResolver : public Resolver {
|
|
73
75
|
|
74
76
|
private:
|
75
77
|
void OnDone(GoogleCloud2ProdResolver* resolver,
|
76
|
-
const grpc_http_response* response,
|
78
|
+
const grpc_http_response* response,
|
79
|
+
grpc_error_handle error) override;
|
77
80
|
};
|
78
81
|
|
79
82
|
// A metadata server query to get the IPv6 address.
|
@@ -84,7 +87,8 @@ class GoogleCloud2ProdResolver : public Resolver {
|
|
84
87
|
|
85
88
|
private:
|
86
89
|
void OnDone(GoogleCloud2ProdResolver* resolver,
|
87
|
-
const grpc_http_response* response,
|
90
|
+
const grpc_http_response* response,
|
91
|
+
grpc_error_handle error) override;
|
88
92
|
};
|
89
93
|
|
90
94
|
void ZoneQueryDone(std::string zone);
|
@@ -143,13 +147,13 @@ void GoogleCloud2ProdResolver::MetadataQuery::Orphan() {
|
|
143
147
|
}
|
144
148
|
|
145
149
|
void GoogleCloud2ProdResolver::MetadataQuery::OnHttpRequestDone(
|
146
|
-
void* arg,
|
150
|
+
void* arg, grpc_error_handle error) {
|
147
151
|
auto* self = static_cast<MetadataQuery*>(arg);
|
148
152
|
self->MaybeCallOnDone(GRPC_ERROR_REF(error));
|
149
153
|
}
|
150
154
|
|
151
155
|
void GoogleCloud2ProdResolver::MetadataQuery::MaybeCallOnDone(
|
152
|
-
|
156
|
+
grpc_error_handle error) {
|
153
157
|
bool expected = false;
|
154
158
|
if (!on_done_called_.CompareExchangeStrong(
|
155
159
|
&expected, true, MemoryOrder::RELAXED, MemoryOrder::RELAXED)) {
|
@@ -180,10 +184,10 @@ GoogleCloud2ProdResolver::ZoneQuery::ZoneQuery(
|
|
180
184
|
|
181
185
|
void GoogleCloud2ProdResolver::ZoneQuery::OnDone(
|
182
186
|
GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
|
183
|
-
|
187
|
+
grpc_error_handle error) {
|
184
188
|
if (error != GRPC_ERROR_NONE) {
|
185
189
|
gpr_log(GPR_ERROR, "error fetching zone from metadata server: %s",
|
186
|
-
|
190
|
+
grpc_error_std_string(error).c_str());
|
187
191
|
}
|
188
192
|
std::string zone;
|
189
193
|
if (error == GRPC_ERROR_NONE && response->status == 200) {
|
@@ -193,7 +197,7 @@ void GoogleCloud2ProdResolver::ZoneQuery::OnDone(
|
|
193
197
|
gpr_log(GPR_ERROR, "could not parse zone from metadata server: %s",
|
194
198
|
std::string(body).c_str());
|
195
199
|
} else {
|
196
|
-
zone = std::string(body.substr(i));
|
200
|
+
zone = std::string(body.substr(i + 1));
|
197
201
|
}
|
198
202
|
}
|
199
203
|
resolver->ZoneQueryDone(std::move(zone));
|
@@ -213,10 +217,10 @@ GoogleCloud2ProdResolver::IPv6Query::IPv6Query(
|
|
213
217
|
|
214
218
|
void GoogleCloud2ProdResolver::IPv6Query::OnDone(
|
215
219
|
GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
|
216
|
-
|
220
|
+
grpc_error_handle error) {
|
217
221
|
if (error != GRPC_ERROR_NONE) {
|
218
222
|
gpr_log(GPR_ERROR, "error fetching IPv6 address from metadata server: %s",
|
219
|
-
|
223
|
+
grpc_error_std_string(error).c_str());
|
220
224
|
}
|
221
225
|
resolver->IPv6QueryDone(error == GRPC_ERROR_NONE && response->status == 200);
|
222
226
|
GRPC_ERROR_UNREF(error);
|
@@ -295,8 +299,11 @@ void GoogleCloud2ProdResolver::IPv6QueryDone(bool ipv6_supported) {
|
|
295
299
|
|
296
300
|
void GoogleCloud2ProdResolver::StartXdsResolver() {
|
297
301
|
// Construct bootstrap JSON.
|
302
|
+
std::random_device rd;
|
303
|
+
std::mt19937 mt(rd());
|
304
|
+
std::uniform_int_distribution<uint64_t> dist(1, UINT64_MAX);
|
298
305
|
Json::Object node = {
|
299
|
-
{"id", "C2P"},
|
306
|
+
{"id", absl::StrCat("C2P-", dist(mt))},
|
300
307
|
};
|
301
308
|
if (!zone_->empty()) {
|
302
309
|
node["locality"] = Json::Object{
|
@@ -30,9 +30,9 @@
|
|
30
30
|
|
31
31
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
32
32
|
#include "src/core/ext/filters/client_channel/server_address.h"
|
33
|
+
#include "src/core/lib/address_utils/parse_address.h"
|
33
34
|
#include "src/core/lib/channel/channel_args.h"
|
34
35
|
#include "src/core/lib/gpr/string.h"
|
35
|
-
#include "src/core/lib/iomgr/parse_address.h"
|
36
36
|
#include "src/core/lib/iomgr/resolve_address.h"
|
37
37
|
#include "src/core/lib/iomgr/unix_sockets_posix.h"
|
38
38
|
#include "src/core/lib/slice/slice_internal.h"
|
@@ -28,12 +28,12 @@
|
|
28
28
|
#include "src/core/ext/filters/client_channel/config_selector.h"
|
29
29
|
#include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
|
30
30
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
31
|
+
#include "src/core/ext/xds/xds_channel_args.h"
|
31
32
|
#include "src/core/ext/xds/xds_client.h"
|
32
33
|
#include "src/core/ext/xds/xds_http_filters.h"
|
33
34
|
#include "src/core/lib/channel/channel_args.h"
|
34
35
|
#include "src/core/lib/iomgr/closure.h"
|
35
36
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
36
|
-
#include "src/core/lib/surface/lame_client.h"
|
37
37
|
#include "src/core/lib/transport/timeout_encoding.h"
|
38
38
|
|
39
39
|
namespace grpc_core {
|
@@ -73,19 +73,23 @@ class XdsResolver : public Resolver {
|
|
73
73
|
|
74
74
|
void ShutdownLocked() override;
|
75
75
|
|
76
|
+
void ResetBackoffLocked() override {
|
77
|
+
if (xds_client_ != nullptr) xds_client_->ResetBackoff();
|
78
|
+
}
|
79
|
+
|
76
80
|
private:
|
77
81
|
class Notifier {
|
78
82
|
public:
|
79
83
|
Notifier(RefCountedPtr<XdsResolver> resolver, XdsApi::LdsUpdate update);
|
80
84
|
Notifier(RefCountedPtr<XdsResolver> resolver, XdsApi::RdsUpdate update);
|
81
|
-
Notifier(RefCountedPtr<XdsResolver> resolver,
|
85
|
+
Notifier(RefCountedPtr<XdsResolver> resolver, grpc_error_handle error);
|
82
86
|
explicit Notifier(RefCountedPtr<XdsResolver> resolver);
|
83
87
|
|
84
88
|
private:
|
85
89
|
enum Type { kLdsUpdate, kRdsUpdate, kError, kDoesNotExist };
|
86
90
|
|
87
|
-
static void RunInExecCtx(void* arg,
|
88
|
-
void RunInWorkSerializer(
|
91
|
+
static void RunInExecCtx(void* arg, grpc_error_handle error);
|
92
|
+
void RunInWorkSerializer(grpc_error_handle error);
|
89
93
|
|
90
94
|
RefCountedPtr<XdsResolver> resolver_;
|
91
95
|
grpc_closure closure_;
|
@@ -100,7 +104,9 @@ class XdsResolver : public Resolver {
|
|
100
104
|
void OnListenerChanged(XdsApi::LdsUpdate listener) override {
|
101
105
|
new Notifier(resolver_, std::move(listener));
|
102
106
|
}
|
103
|
-
void OnError(
|
107
|
+
void OnError(grpc_error_handle error) override {
|
108
|
+
new Notifier(resolver_, error);
|
109
|
+
}
|
104
110
|
void OnResourceDoesNotExist() override { new Notifier(resolver_); }
|
105
111
|
|
106
112
|
private:
|
@@ -114,33 +120,81 @@ class XdsResolver : public Resolver {
|
|
114
120
|
void OnRouteConfigChanged(XdsApi::RdsUpdate route_config) override {
|
115
121
|
new Notifier(resolver_, std::move(route_config));
|
116
122
|
}
|
117
|
-
void OnError(
|
123
|
+
void OnError(grpc_error_handle error) override {
|
124
|
+
new Notifier(resolver_, error);
|
125
|
+
}
|
118
126
|
void OnResourceDoesNotExist() override { new Notifier(resolver_); }
|
119
127
|
|
120
128
|
private:
|
121
129
|
RefCountedPtr<XdsResolver> resolver_;
|
122
130
|
};
|
123
131
|
|
124
|
-
|
125
|
-
|
132
|
+
// An entry in the map of clusters that need to be present in the LB
|
133
|
+
// policy config. The map holds a weak ref. One strong ref is held by
|
134
|
+
// the ConfigSelector, and another is held by each call assigned to
|
135
|
+
// the cluster by the ConfigSelector. The ref for each call is held
|
136
|
+
// until the call is committed. When the strong refs go away, we hop
|
137
|
+
// back into the WorkSerializer to remove the entry from the map.
|
138
|
+
class ClusterState : public DualRefCounted<ClusterState> {
|
126
139
|
public:
|
127
140
|
using ClusterStateMap =
|
128
|
-
std::map<std::string,
|
141
|
+
std::map<std::string, WeakRefCountedPtr<ClusterState>>;
|
129
142
|
|
130
|
-
ClusterState(
|
131
|
-
|
132
|
-
:
|
133
|
-
|
143
|
+
ClusterState(RefCountedPtr<XdsResolver> resolver,
|
144
|
+
const std::string& cluster_name)
|
145
|
+
: resolver_(std::move(resolver)),
|
146
|
+
it_(resolver_->cluster_state_map_.emplace(cluster_name, WeakRef())
|
134
147
|
.first) {}
|
148
|
+
|
149
|
+
void Orphan() override {
|
150
|
+
auto* resolver = resolver_.release();
|
151
|
+
resolver->work_serializer_->Run(
|
152
|
+
[resolver]() {
|
153
|
+
resolver->MaybeRemoveUnusedClusters();
|
154
|
+
resolver->Unref();
|
155
|
+
},
|
156
|
+
DEBUG_LOCATION);
|
157
|
+
}
|
158
|
+
|
135
159
|
const std::string& cluster() const { return it_->first; }
|
136
160
|
|
137
161
|
private:
|
162
|
+
RefCountedPtr<XdsResolver> resolver_;
|
138
163
|
ClusterStateMap::iterator it_;
|
139
164
|
};
|
140
165
|
|
166
|
+
// Call dispatch controller, created for each call handled by the
|
167
|
+
// ConfigSelector. Holds a ref to the ClusterState object until the
|
168
|
+
// call is committed.
|
169
|
+
class XdsCallDispatchController
|
170
|
+
: public ConfigSelector::CallDispatchController {
|
171
|
+
public:
|
172
|
+
explicit XdsCallDispatchController(
|
173
|
+
RefCountedPtr<ClusterState> cluster_state)
|
174
|
+
: cluster_state_(std::move(cluster_state)) {}
|
175
|
+
|
176
|
+
bool ShouldRetry() override {
|
177
|
+
// TODO(donnadionne): Implement the retry circuit breaker here.
|
178
|
+
return true;
|
179
|
+
}
|
180
|
+
|
181
|
+
void Commit() override {
|
182
|
+
// TODO(donnadionne): If ShouldRetry() was called previously,
|
183
|
+
// decrement the retry circuit breaker counter.
|
184
|
+
cluster_state_.reset();
|
185
|
+
}
|
186
|
+
|
187
|
+
private:
|
188
|
+
// Note: The XdsCallDispatchController object is never actually destroyed,
|
189
|
+
// so do not add any data members that require destruction unless you have
|
190
|
+
// some other way to clean them up.
|
191
|
+
RefCountedPtr<ClusterState> cluster_state_;
|
192
|
+
};
|
193
|
+
|
141
194
|
class XdsConfigSelector : public ConfigSelector {
|
142
195
|
public:
|
143
|
-
XdsConfigSelector(RefCountedPtr<XdsResolver> resolver,
|
196
|
+
XdsConfigSelector(RefCountedPtr<XdsResolver> resolver,
|
197
|
+
grpc_error_handle* error);
|
144
198
|
~XdsConfigSelector() override;
|
145
199
|
|
146
200
|
const char* name() const override { return "XdsConfigSelector"; }
|
@@ -179,7 +233,7 @@ class XdsResolver : public Resolver {
|
|
179
233
|
using RouteTable = std::vector<Route>;
|
180
234
|
|
181
235
|
void MaybeAddCluster(const std::string& name);
|
182
|
-
|
236
|
+
grpc_error_handle CreateMethodConfig(
|
183
237
|
const XdsApi::Route& route,
|
184
238
|
const XdsApi::Route::ClusterWeight* cluster_weight,
|
185
239
|
RefCountedPtr<ServiceConfig>* method_config);
|
@@ -188,15 +242,15 @@ class XdsResolver : public Resolver {
|
|
188
242
|
RouteTable route_table_;
|
189
243
|
std::map<absl::string_view, RefCountedPtr<ClusterState>> clusters_;
|
190
244
|
std::vector<const grpc_channel_filter*> filters_;
|
191
|
-
grpc_error* filter_error_ = GRPC_ERROR_NONE;
|
192
245
|
};
|
193
246
|
|
194
247
|
void OnListenerUpdate(XdsApi::LdsUpdate listener);
|
195
248
|
void OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update);
|
196
|
-
void OnError(
|
249
|
+
void OnError(grpc_error_handle error);
|
197
250
|
void OnResourceDoesNotExist();
|
198
251
|
|
199
|
-
|
252
|
+
grpc_error_handle CreateServiceConfig(
|
253
|
+
RefCountedPtr<ServiceConfig>* service_config);
|
200
254
|
void GenerateResult();
|
201
255
|
void MaybeRemoveUnusedClusters();
|
202
256
|
|
@@ -243,7 +297,7 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
|
|
243
297
|
}
|
244
298
|
|
245
299
|
XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
|
246
|
-
|
300
|
+
grpc_error_handle error)
|
247
301
|
: resolver_(std::move(resolver)), type_(kError) {
|
248
302
|
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
249
303
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
|
@@ -255,14 +309,14 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver)
|
|
255
309
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
256
310
|
}
|
257
311
|
|
258
|
-
void XdsResolver::Notifier::RunInExecCtx(void* arg,
|
312
|
+
void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error_handle error) {
|
259
313
|
Notifier* self = static_cast<Notifier*>(arg);
|
260
314
|
GRPC_ERROR_REF(error);
|
261
315
|
self->resolver_->work_serializer_->Run(
|
262
316
|
[self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
|
263
317
|
}
|
264
318
|
|
265
|
-
void XdsResolver::Notifier::RunInWorkSerializer(
|
319
|
+
void XdsResolver::Notifier::RunInWorkSerializer(grpc_error_handle error) {
|
266
320
|
if (resolver_->xds_client_ == nullptr) {
|
267
321
|
GRPC_ERROR_UNREF(error);
|
268
322
|
delete this;
|
@@ -314,7 +368,7 @@ bool XdsResolver::XdsConfigSelector::Route::operator==(
|
|
314
368
|
//
|
315
369
|
|
316
370
|
XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
317
|
-
RefCountedPtr<XdsResolver> resolver,
|
371
|
+
RefCountedPtr<XdsResolver> resolver, grpc_error_handle* error)
|
318
372
|
: resolver_(std::move(resolver)) {
|
319
373
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
320
374
|
gpr_log(GPR_INFO, "[xds_resolver %p] creating XdsConfigSelector %p",
|
@@ -366,16 +420,8 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
366
420
|
}
|
367
421
|
}
|
368
422
|
// Populate filter list.
|
369
|
-
bool found_router = false;
|
370
423
|
for (const auto& http_filter :
|
371
424
|
resolver_->current_listener_.http_connection_manager.http_filters) {
|
372
|
-
// Stop at the router filter. It's a no-op for us, and we ignore
|
373
|
-
// anything that may come after it, for compatibility with Envoy.
|
374
|
-
if (http_filter.config.config_proto_type_name ==
|
375
|
-
kXdsHttpRouterFilterConfigName) {
|
376
|
-
found_router = true;
|
377
|
-
break;
|
378
|
-
}
|
379
425
|
// Find filter. This is guaranteed to succeed, because it's checked
|
380
426
|
// at config validation time in the XdsApi code.
|
381
427
|
const XdsHttpFilterImpl* filter_impl =
|
@@ -383,16 +429,9 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
383
429
|
http_filter.config.config_proto_type_name);
|
384
430
|
GPR_ASSERT(filter_impl != nullptr);
|
385
431
|
// Add C-core filter to list.
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
// configured, we fail all RPCs.
|
390
|
-
if (!found_router) {
|
391
|
-
filter_error_ =
|
392
|
-
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
393
|
-
"no xDS HTTP router filter configured"),
|
394
|
-
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
395
|
-
filters_.push_back(&grpc_lame_filter);
|
432
|
+
if (filter_impl->channel_filter() != nullptr) {
|
433
|
+
filters_.push_back(filter_impl->channel_filter());
|
434
|
+
}
|
396
435
|
}
|
397
436
|
}
|
398
437
|
|
@@ -403,7 +442,6 @@ XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
|
|
403
442
|
}
|
404
443
|
clusters_.clear();
|
405
444
|
resolver_->MaybeRemoveUnusedClusters();
|
406
|
-
GRPC_ERROR_UNREF(filter_error_);
|
407
445
|
}
|
408
446
|
|
409
447
|
const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
|
@@ -425,11 +463,47 @@ const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
|
|
425
463
|
return nullptr;
|
426
464
|
}
|
427
465
|
|
428
|
-
|
466
|
+
grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
429
467
|
const XdsApi::Route& route,
|
430
468
|
const XdsApi::Route::ClusterWeight* cluster_weight,
|
431
469
|
RefCountedPtr<ServiceConfig>* method_config) {
|
432
470
|
std::vector<std::string> fields;
|
471
|
+
// Set retry policy if any.
|
472
|
+
if (route.retry_policy.has_value()) {
|
473
|
+
std::vector<std::string> retry_parts;
|
474
|
+
retry_parts.push_back(absl::StrFormat(
|
475
|
+
"\"retryPolicy\": {\n"
|
476
|
+
" \"maxAttempts\": %d,\n"
|
477
|
+
" \"initialBackoff\": \"%d.%09ds\",\n"
|
478
|
+
" \"maxBackoff\": \"%d.%09ds\",\n"
|
479
|
+
" \"backoffMultiplier\": 2,\n",
|
480
|
+
route.retry_policy->num_retries + 1,
|
481
|
+
route.retry_policy->retry_back_off.base_interval.seconds,
|
482
|
+
route.retry_policy->retry_back_off.base_interval.nanos,
|
483
|
+
route.retry_policy->retry_back_off.max_interval.seconds,
|
484
|
+
route.retry_policy->retry_back_off.max_interval.nanos));
|
485
|
+
std::vector<std::string> code_parts;
|
486
|
+
if (route.retry_policy->retry_on.Contains(GRPC_STATUS_CANCELLED)) {
|
487
|
+
code_parts.push_back(" \"CANCELLED\"");
|
488
|
+
}
|
489
|
+
if (route.retry_policy->retry_on.Contains(GRPC_STATUS_DEADLINE_EXCEEDED)) {
|
490
|
+
code_parts.push_back(" \"DEADLINE_EXCEEDED\"");
|
491
|
+
}
|
492
|
+
if (route.retry_policy->retry_on.Contains(GRPC_STATUS_INTERNAL)) {
|
493
|
+
code_parts.push_back(" \"INTERNAL\"");
|
494
|
+
}
|
495
|
+
if (route.retry_policy->retry_on.Contains(GRPC_STATUS_RESOURCE_EXHAUSTED)) {
|
496
|
+
code_parts.push_back(" \"RESOURCE_EXHAUSTED\"");
|
497
|
+
}
|
498
|
+
if (route.retry_policy->retry_on.Contains(GRPC_STATUS_UNAVAILABLE)) {
|
499
|
+
code_parts.push_back(" \"UNAVAILABLE\"");
|
500
|
+
}
|
501
|
+
retry_parts.push_back(
|
502
|
+
absl::StrFormat(" \"retryableStatusCodes\": [\n %s ]\n",
|
503
|
+
absl::StrJoin(code_parts, ",\n")));
|
504
|
+
retry_parts.push_back(absl::StrFormat(" }"));
|
505
|
+
fields.emplace_back(absl::StrJoin(retry_parts, ""));
|
506
|
+
}
|
433
507
|
// Set timeout.
|
434
508
|
if (route.max_stream_duration.has_value() &&
|
435
509
|
(route.max_stream_duration->seconds != 0 ||
|
@@ -443,18 +517,15 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
443
517
|
grpc_channel_args* args = grpc_channel_args_copy(resolver_->args_);
|
444
518
|
for (const auto& http_filter :
|
445
519
|
resolver_->current_listener_.http_connection_manager.http_filters) {
|
446
|
-
// Stop at the router filter. It's a no-op for us, and we ignore
|
447
|
-
// anything that may come after it, for compatibility with Envoy.
|
448
|
-
if (http_filter.config.config_proto_type_name ==
|
449
|
-
kXdsHttpRouterFilterConfigName) {
|
450
|
-
break;
|
451
|
-
}
|
452
520
|
// Find filter. This is guaranteed to succeed, because it's checked
|
453
521
|
// at config validation time in the XdsApi code.
|
454
522
|
const XdsHttpFilterImpl* filter_impl =
|
455
523
|
XdsHttpFilterRegistry::GetFilterForType(
|
456
524
|
http_filter.config.config_proto_type_name);
|
457
525
|
GPR_ASSERT(filter_impl != nullptr);
|
526
|
+
// If there is not actually any C-core filter associated with this
|
527
|
+
// xDS filter, then it won't need any config, so skip it.
|
528
|
+
if (filter_impl->channel_filter() == nullptr) continue;
|
458
529
|
// Allow filter to add channel args that may affect service config
|
459
530
|
// parsing.
|
460
531
|
args = filter_impl->ModifyChannelArgs(args);
|
@@ -482,7 +553,7 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
482
553
|
"\n ]"));
|
483
554
|
}
|
484
555
|
// Construct service config.
|
485
|
-
|
556
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
486
557
|
if (!fields.empty()) {
|
487
558
|
std::string json = absl::StrCat(
|
488
559
|
"{\n"
|
@@ -502,20 +573,14 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
502
573
|
|
503
574
|
grpc_channel_args* XdsResolver::XdsConfigSelector::ModifyChannelArgs(
|
504
575
|
grpc_channel_args* args) {
|
505
|
-
|
506
|
-
grpc_arg error_arg = MakeLameClientErrorArg(filter_error_);
|
507
|
-
grpc_channel_args* new_args =
|
508
|
-
grpc_channel_args_copy_and_add(args, &error_arg, 1);
|
509
|
-
grpc_channel_args_destroy(args);
|
510
|
-
return new_args;
|
576
|
+
return args;
|
511
577
|
}
|
512
578
|
|
513
579
|
void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
|
514
580
|
if (clusters_.find(name) == clusters_.end()) {
|
515
581
|
auto it = resolver_->cluster_state_map_.find(name);
|
516
582
|
if (it == resolver_->cluster_state_map_.end()) {
|
517
|
-
auto new_cluster_state =
|
518
|
-
MakeRefCounted<ClusterState>(name, &resolver_->cluster_state_map_);
|
583
|
+
auto new_cluster_state = MakeRefCounted<ClusterState>(resolver_, name);
|
519
584
|
clusters_[new_cluster_state->cluster()] = std::move(new_cluster_state);
|
520
585
|
} else {
|
521
586
|
clusters_[it->second->cluster()] = it->second->Ref();
|
@@ -557,6 +622,9 @@ absl::optional<uint64_t> HeaderHashHelper(
|
|
557
622
|
std::string value_buffer;
|
558
623
|
absl::optional<absl::string_view> header_value =
|
559
624
|
GetHeaderValue(initial_metadata, policy.header_name, &value_buffer);
|
625
|
+
if (!header_value.has_value()) {
|
626
|
+
return absl::nullopt;
|
627
|
+
}
|
560
628
|
if (policy.regex != nullptr) {
|
561
629
|
// If GetHeaderValue() did not already store the value in
|
562
630
|
// value_buffer, copy it there now, so we can modify it.
|
@@ -627,10 +695,7 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
627
695
|
}
|
628
696
|
auto it = clusters_.find(cluster_name);
|
629
697
|
GPR_ASSERT(it != clusters_.end());
|
630
|
-
|
631
|
-
static_cast<XdsResolver*>(resolver_->Ref().release());
|
632
|
-
ClusterState* cluster_state = it->second->Ref().release();
|
633
|
-
// Generate a hash
|
698
|
+
// Generate a hash.
|
634
699
|
absl::optional<uint64_t> hash;
|
635
700
|
for (const auto& hash_policy : entry.route.hash_policies) {
|
636
701
|
absl::optional<uint64_t> new_hash;
|
@@ -639,8 +704,8 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
639
704
|
new_hash = HeaderHashHelper(hash_policy, args.initial_metadata);
|
640
705
|
break;
|
641
706
|
case XdsApi::Route::HashPolicy::CHANNEL_ID:
|
642
|
-
new_hash =
|
643
|
-
|
707
|
+
new_hash = static_cast<uint64_t>(
|
708
|
+
reinterpret_cast<uintptr_t>(resolver_.get()));
|
644
709
|
break;
|
645
710
|
default:
|
646
711
|
GPR_ASSERT(0);
|
@@ -660,7 +725,12 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
660
725
|
}
|
661
726
|
if (!hash.has_value()) {
|
662
727
|
// If there is no hash, we just choose a random value as a default.
|
663
|
-
|
728
|
+
// We cannot directly use the result of rand() as the hash value,
|
729
|
+
// since it is a 32-bit number and not a 64-bit number and will
|
730
|
+
// therefore not be evenly distributed.
|
731
|
+
uint32_t upper = rand();
|
732
|
+
uint32_t lower = rand();
|
733
|
+
hash = (static_cast<uint64_t>(upper) << 32) | lower;
|
664
734
|
}
|
665
735
|
CallConfig call_config;
|
666
736
|
if (method_config != nullptr) {
|
@@ -669,33 +739,14 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
669
739
|
call_config.service_config = std::move(method_config);
|
670
740
|
}
|
671
741
|
call_config.call_attributes[kXdsClusterAttribute] = it->first;
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
// not have to solve this problem in each individual ConfigSelector
|
681
|
-
// implementation. When we have time, we should fix the client channel
|
682
|
-
// code to avoid this by not invoking the
|
683
|
-
// CallConfig::on_call_committed callback until after it has released
|
684
|
-
// the data plane mutex.
|
685
|
-
DEBUG_LOCATION,
|
686
|
-
GRPC_CLOSURE_CREATE(
|
687
|
-
[](void* arg, grpc_error* /*error*/) {
|
688
|
-
auto* resolver = static_cast<XdsResolver*>(arg);
|
689
|
-
resolver->work_serializer_->Run(
|
690
|
-
[resolver]() {
|
691
|
-
resolver->MaybeRemoveUnusedClusters();
|
692
|
-
resolver->Unref();
|
693
|
-
},
|
694
|
-
DEBUG_LOCATION);
|
695
|
-
},
|
696
|
-
resolver, nullptr),
|
697
|
-
GRPC_ERROR_NONE);
|
698
|
-
};
|
742
|
+
std::string hash_string = absl::StrCat(hash.value());
|
743
|
+
char* hash_value =
|
744
|
+
static_cast<char*>(args.arena->Alloc(hash_string.size() + 1));
|
745
|
+
memcpy(hash_value, hash_string.c_str(), hash_string.size());
|
746
|
+
hash_value[hash_string.size()] = '\0';
|
747
|
+
call_config.call_attributes[kRequestRingHashAttribute] = hash_value;
|
748
|
+
call_config.call_dispatch_controller =
|
749
|
+
args.arena->New<XdsCallDispatchController>(it->second->Ref());
|
699
750
|
return call_config;
|
700
751
|
}
|
701
752
|
return CallConfig();
|
@@ -706,13 +757,13 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
706
757
|
//
|
707
758
|
|
708
759
|
void XdsResolver::StartLocked() {
|
709
|
-
|
710
|
-
xds_client_ = XdsClient::GetOrCreate(&error);
|
760
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
761
|
+
xds_client_ = XdsClient::GetOrCreate(args_, &error);
|
711
762
|
if (error != GRPC_ERROR_NONE) {
|
712
763
|
gpr_log(GPR_ERROR,
|
713
764
|
"Failed to create xds client -- channel will remain in "
|
714
765
|
"TRANSIENT_FAILURE: %s",
|
715
|
-
|
766
|
+
grpc_error_std_string(error).c_str());
|
716
767
|
result_handler_->ReturnError(error);
|
717
768
|
return;
|
718
769
|
}
|
@@ -809,11 +860,12 @@ void XdsResolver::OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update) {
|
|
809
860
|
GenerateResult();
|
810
861
|
}
|
811
862
|
|
812
|
-
void XdsResolver::OnError(
|
863
|
+
void XdsResolver::OnError(grpc_error_handle error) {
|
813
864
|
gpr_log(GPR_ERROR, "[xds_resolver %p] received error from XdsClient: %s",
|
814
|
-
this,
|
865
|
+
this, grpc_error_std_string(error).c_str());
|
815
866
|
Result result;
|
816
|
-
|
867
|
+
grpc_arg new_arg = xds_client_->MakeChannelArg();
|
868
|
+
result.args = grpc_channel_args_copy_and_add(args_, &new_arg, 1);
|
817
869
|
result.service_config_error = error;
|
818
870
|
result_handler_->ReturnResult(std::move(result));
|
819
871
|
}
|
@@ -832,7 +884,7 @@ void XdsResolver::OnResourceDoesNotExist() {
|
|
832
884
|
result_handler_->ReturnResult(std::move(result));
|
833
885
|
}
|
834
886
|
|
835
|
-
|
887
|
+
grpc_error_handle XdsResolver::CreateServiceConfig(
|
836
888
|
RefCountedPtr<ServiceConfig>* service_config) {
|
837
889
|
std::vector<std::string> clusters;
|
838
890
|
for (const auto& cluster : cluster_state_map_) {
|
@@ -859,7 +911,7 @@ grpc_error* XdsResolver::CreateServiceConfig(
|
|
859
911
|
" ]\n"
|
860
912
|
"}");
|
861
913
|
std::string json = absl::StrJoin(config_parts, "");
|
862
|
-
|
914
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
863
915
|
*service_config = ServiceConfig::Create(args_, json.c_str(), &error);
|
864
916
|
return error;
|
865
917
|
}
|
@@ -868,7 +920,7 @@ void XdsResolver::GenerateResult() {
|
|
868
920
|
if (current_virtual_host_.routes.empty()) return;
|
869
921
|
// First create XdsConfigSelector, which may add new entries to the cluster
|
870
922
|
// state map, and then CreateServiceConfig for LB policies.
|
871
|
-
|
923
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
872
924
|
auto config_selector = MakeRefCounted<XdsConfigSelector>(Ref(), &error);
|
873
925
|
if (error != GRPC_ERROR_NONE) {
|
874
926
|
OnError(error);
|
@@ -884,8 +936,12 @@ void XdsResolver::GenerateResult() {
|
|
884
936
|
gpr_log(GPR_INFO, "[xds_resolver %p] generated service config: %s", this,
|
885
937
|
result.service_config->json_string().c_str());
|
886
938
|
}
|
887
|
-
grpc_arg
|
888
|
-
|
939
|
+
grpc_arg new_args[] = {
|
940
|
+
xds_client_->MakeChannelArg(),
|
941
|
+
config_selector->MakeChannelArg(),
|
942
|
+
};
|
943
|
+
result.args =
|
944
|
+
grpc_channel_args_copy_and_add(args_, new_args, GPR_ARRAY_SIZE(new_args));
|
889
945
|
result_handler_->ReturnResult(std::move(result));
|
890
946
|
}
|
891
947
|
|