grpc 1.21.0 → 1.32.0
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 +2516 -19950
- data/etc/roots.pem +44 -100
- data/include/grpc/grpc.h +3 -1
- data/include/grpc/grpc_security.h +238 -55
- data/include/grpc/grpc_security_constants.h +32 -1
- data/include/grpc/impl/codegen/README.md +22 -0
- data/include/grpc/impl/codegen/gpr_types.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +61 -13
- data/include/grpc/impl/codegen/port_platform.h +74 -30
- data/include/grpc/impl/codegen/sync.h +5 -3
- data/include/grpc/impl/codegen/sync_abseil.h +36 -0
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/include/grpc/module.modulemap +25 -37
- data/include/grpc/slice.h +2 -2
- data/include/grpc/support/alloc.h +0 -16
- data/include/grpc/support/sync_abseil.h +26 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +84 -0
- data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +10 -8
- data/src/core/ext/filters/client_channel/backup_poller.h +5 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +18 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +1516 -742
- data/src/core/ext/filters/client_channel/client_channel.h +25 -9
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +50 -139
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +15 -39
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -9
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
- data/src/core/ext/filters/client_channel/config_selector.h +93 -0
- data/src/core/ext/filters/client_channel/connector.h +42 -39
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +34 -12
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +75 -115
- data/src/core/ext/filters/client_channel/health/health_check_client.h +8 -16
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +75 -46
- data/src/core/ext/filters/client_channel/http_proxy.cc +126 -120
- data/src/core/ext/filters/client_channel/http_proxy.h +5 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +35 -35
- data/src/core/ext/filters/client_channel/lb_policy.h +225 -152
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +299 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +635 -734
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +7 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +9 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +33 -49
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +7 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +157 -271
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +42 -58
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +113 -166
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +890 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +61 -101
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +116 -260
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +744 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +423 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +946 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +537 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +3 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1141 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +6 -9
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +53 -77
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +3 -3
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +8 -8
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
- data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -34
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +46 -79
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +23 -17
- data/src/core/ext/filters/client_channel/resolver.cc +6 -9
- data/src/core/ext/filters/client_channel/resolver.h +19 -37
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +156 -130
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +74 -39
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +15 -21
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +33 -33
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +16 -13
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +476 -129
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +231 -193
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +6 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +73 -48
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +165 -116
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +45 -29
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +536 -0
- data/src/core/ext/filters/client_channel/resolver_factory.h +11 -11
- data/src/core/ext/filters/client_channel/resolver_registry.cc +39 -24
- data/src/core/ext/filters/client_channel/resolver_registry.h +17 -12
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +251 -313
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +28 -26
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +100 -325
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +48 -53
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +2 -6
- data/src/core/ext/filters/client_channel/server_address.cc +40 -14
- data/src/core/ext/filters/client_channel/server_address.h +45 -15
- data/src/core/ext/filters/client_channel/service_config.cc +143 -253
- data/src/core/ext/filters/client_channel/service_config.h +47 -131
- data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
- data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
- data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +436 -288
- data/src/core/ext/filters/client_channel/subchannel.h +181 -53
- data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +30 -28
- data/src/core/ext/filters/http/client/http_client_filter.cc +66 -70
- data/src/core/ext/filters/http/client_authority_filter.cc +21 -21
- data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +335 -301
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +66 -39
- data/src/core/ext/filters/max_age/max_age_filter.cc +72 -60
- data/src/core/ext/filters/message_size/message_size_filter.cc +116 -144
- data/src/core/ext/filters/message_size/message_size_filter.h +12 -6
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +19 -17
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +193 -171
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +48 -1
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +29 -25
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +44 -64
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +384 -305
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +640 -560
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
- data/src/core/ext/transport/chttp2/transport/context_list.cc +5 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -31
- data/src/core/ext/transport/chttp2/transport/flow_control.h +28 -38
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +45 -54
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -9
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +21 -13
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +9 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +13 -12
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +531 -348
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +26 -15
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +213 -143
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +11 -4
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +41 -196
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +62 -18
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +64 -47
- data/src/core/ext/transport/chttp2/transport/parsing.cc +148 -162
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +28 -18
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +38 -30
- data/src/core/ext/transport/inproc/inproc_transport.cc +164 -114
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +29 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +53 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +27 -0
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +25 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +30 -0
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +30 -0
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +29 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +27 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +17 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +35 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +30 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +29 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +29 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
- data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
- data/src/core/ext/upb-generated/google/api/http.upb.h +191 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +57 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1722 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +57 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +49 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +194 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +57 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +237 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +113 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +672 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +110 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +83 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +396 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +103 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +29 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +117 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
- data/src/core/ext/upb-generated/validate/validate.upb.h +2074 -0
- data/src/core/ext/xds/xds_api.cc +2388 -0
- data/src/core/ext/xds/xds_api.h +360 -0
- data/src/core/ext/xds/xds_bootstrap.cc +373 -0
- data/src/core/ext/xds/xds_bootstrap.h +93 -0
- data/src/core/ext/xds/xds_channel.h +46 -0
- data/src/core/ext/xds/xds_channel_args.h +26 -0
- data/src/core/ext/xds/xds_channel_secure.cc +103 -0
- data/src/core/ext/xds/xds_client.cc +2114 -0
- data/src/core/ext/xds/xds_client.h +276 -0
- data/src/core/ext/xds/xds_client_stats.cc +115 -0
- data/src/core/ext/xds/xds_client_stats.h +211 -0
- data/src/core/lib/avl/avl.cc +1 -1
- data/src/core/lib/channel/channel_args.cc +52 -14
- data/src/core/lib/channel/channel_args.h +41 -3
- data/src/core/lib/channel/channel_stack.cc +1 -1
- data/src/core/lib/channel/channel_stack.h +38 -18
- data/src/core/lib/channel/channel_trace.cc +32 -45
- data/src/core/lib/channel/channel_trace.h +3 -3
- data/src/core/lib/channel/channelz.cc +377 -318
- data/src/core/lib/channel/channelz.h +128 -90
- data/src/core/lib/channel/channelz_registry.cc +123 -178
- data/src/core/lib/channel/channelz_registry.h +14 -32
- data/src/core/lib/channel/connected_channel.cc +28 -25
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/handshaker.cc +18 -14
- data/src/core/lib/channel/handshaker.h +7 -6
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/channel/handshaker_registry.cc +9 -21
- data/src/core/lib/channel/handshaker_registry.h +3 -3
- data/src/core/lib/channel/status_util.cc +2 -3
- data/src/core/lib/compression/compression.cc +16 -11
- data/src/core/lib/compression/compression_args.cc +13 -6
- data/src/core/lib/compression/compression_args.h +3 -2
- data/src/core/lib/compression/compression_internal.cc +15 -11
- data/src/core/lib/compression/compression_internal.h +9 -1
- data/src/core/lib/compression/message_compress.cc +8 -3
- data/src/core/lib/compression/stream_compression.cc +3 -2
- data/src/core/lib/compression/stream_compression.h +2 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
- data/src/core/lib/compression/stream_compression_identity.cc +5 -7
- data/src/core/lib/debug/stats.cc +21 -27
- data/src/core/lib/debug/stats.h +3 -1
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gpr/alloc.cc +4 -29
- data/src/core/lib/gpr/cpu_linux.cc +1 -1
- data/src/core/lib/gpr/env.h +1 -1
- data/src/core/lib/gpr/env_linux.cc +10 -21
- data/src/core/lib/gpr/env_posix.cc +0 -5
- data/src/core/lib/gpr/log_linux.cc +8 -10
- data/src/core/lib/gpr/log_posix.cc +7 -9
- data/src/core/lib/gpr/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +25 -36
- data/src/core/lib/gpr/string.h +11 -19
- data/src/core/lib/gpr/sync_abseil.cc +116 -0
- data/src/core/lib/gpr/sync_posix.cc +10 -142
- data/src/core/lib/gpr/sync_windows.cc +4 -2
- data/src/core/lib/gpr/time.cc +4 -0
- data/src/core/lib/gpr/time_posix.cc +1 -1
- data/src/core/lib/gpr/time_precise.cc +123 -36
- data/src/core/lib/gpr/time_precise.h +37 -0
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/atomic.h +10 -6
- data/src/core/lib/gprpp/debug_location.h +3 -2
- data/src/core/lib/gprpp/fork.cc +19 -26
- data/src/core/lib/gprpp/fork.h +18 -3
- data/src/core/lib/gprpp/global_config.h +9 -0
- data/src/core/lib/gprpp/global_config_custom.h +1 -1
- data/src/core/lib/gprpp/global_config_env.cc +15 -13
- data/src/core/lib/gprpp/global_config_env.h +2 -2
- data/src/core/lib/gprpp/host_port.cc +112 -0
- data/src/core/lib/gprpp/host_port.h +56 -0
- data/src/core/lib/gprpp/map.h +16 -382
- data/src/core/lib/gprpp/memory.h +12 -75
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +9 -14
- data/src/core/lib/gprpp/ref_counted.h +97 -44
- data/src/core/lib/gprpp/ref_counted_ptr.h +8 -1
- data/src/core/lib/gprpp/sync.h +9 -0
- data/src/core/lib/gprpp/thd.h +13 -6
- data/src/core/lib/gprpp/thd_posix.cc +29 -3
- data/src/core/lib/gprpp/thd_windows.cc +12 -4
- data/src/core/lib/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +18 -16
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +27 -21
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/http/parser.h +2 -3
- data/src/core/lib/iomgr/buffer_list.cc +45 -40
- data/src/core/lib/iomgr/buffer_list.h +27 -27
- data/src/core/lib/iomgr/call_combiner.cc +12 -12
- data/src/core/lib/iomgr/call_combiner.h +10 -8
- data/src/core/lib/iomgr/cfstream_handle.cc +11 -3
- data/src/core/lib/iomgr/cfstream_handle.h +11 -3
- data/src/core/lib/iomgr/closure.h +43 -141
- data/src/core/lib/iomgr/combiner.cc +46 -90
- data/src/core/lib/iomgr/combiner.h +30 -8
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
- data/src/core/lib/iomgr/endpoint.cc +5 -1
- data/src/core/lib/iomgr/endpoint.h +7 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +41 -19
- data/src/core/lib/iomgr/endpoint_pair.h +2 -3
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -11
- data/src/core/lib/iomgr/error.cc +26 -19
- data/src/core/lib/iomgr/error.h +15 -8
- data/src/core/lib/iomgr/error_cfstream.cc +9 -8
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +356 -0
- data/src/core/lib/iomgr/ev_apple.h +43 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +48 -47
- data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -94
- data/src/core/lib/iomgr/ev_poll_posix.cc +42 -26
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.h +3 -2
- data/src/core/lib/iomgr/ev_windows.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +78 -21
- data/src/core/lib/iomgr/exec_ctx.h +27 -7
- data/src/core/lib/iomgr/executor.cc +25 -41
- data/src/core/lib/iomgr/executor.h +7 -7
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
- data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
- data/src/core/lib/iomgr/executor/threadpool.h +149 -0
- data/src/core/lib/iomgr/fork_posix.cc +8 -2
- data/src/core/lib/iomgr/iocp_windows.cc +2 -2
- data/src/core/lib/iomgr/iomgr.cc +4 -4
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +87 -9
- data/src/core/lib/iomgr/iomgr_uv.cc +3 -0
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
- data/src/core/lib/iomgr/load_file.cc +1 -0
- data/src/core/lib/iomgr/lockfree_event.cc +13 -12
- data/src/core/lib/iomgr/parse_address.cc +238 -0
- data/src/core/lib/iomgr/parse_address.h +53 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
- data/src/core/lib/iomgr/pollset_custom.cc +5 -5
- data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
- data/src/core/lib/iomgr/pollset_uv.h +32 -0
- data/src/core/lib/iomgr/pollset_windows.cc +16 -2
- data/src/core/lib/iomgr/port.h +10 -22
- data/src/core/lib/iomgr/python_util.h +46 -0
- data/src/core/lib/iomgr/resolve_address.h +4 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +49 -68
- data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +20 -24
- data/src/core/lib/iomgr/resolve_address_windows.cc +22 -35
- data/src/core/lib/iomgr/resource_quota.cc +120 -110
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/sockaddr_utils.cc +33 -36
- data/src/core/lib/iomgr/sockaddr_utils.h +12 -16
- data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
- data/src/core/lib/iomgr/socket_mutator.h +2 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +140 -82
- data/src/core/lib/iomgr/socket_utils_posix.h +19 -0
- data/src/core/lib/iomgr/socket_windows.cc +6 -7
- data/src/core/lib/iomgr/socket_windows.h +1 -1
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +18 -21
- data/src/core/lib/iomgr/tcp_client_custom.cc +9 -11
- data/src/core/lib/iomgr/tcp_client_posix.cc +47 -59
- data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
- data/src/core/lib/iomgr/tcp_client_windows.cc +12 -13
- data/src/core/lib/iomgr/tcp_custom.cc +58 -36
- data/src/core/lib/iomgr/tcp_custom.h +4 -1
- data/src/core/lib/iomgr/tcp_posix.cc +697 -124
- data/src/core/lib/iomgr/tcp_server.cc +8 -4
- data/src/core/lib/iomgr/tcp_server.h +28 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +46 -41
- data/src/core/lib/iomgr/tcp_server_posix.cc +102 -46
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +6 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -19
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
- data/src/core/lib/iomgr/tcp_server_windows.cc +33 -29
- data/src/core/lib/iomgr/tcp_uv.cc +8 -8
- data/src/core/lib/iomgr/tcp_windows.cc +49 -30
- data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
- data/src/core/lib/iomgr/timer.h +2 -1
- data/src/core/lib/iomgr/timer_custom.cc +7 -5
- data/src/core/lib/iomgr/timer_generic.cc +26 -24
- data/src/core/lib/iomgr/timer_generic.h +39 -0
- data/src/core/lib/iomgr/timer_heap.h +2 -3
- data/src/core/lib/iomgr/timer_manager.cc +8 -30
- data/src/core/lib/iomgr/timer_manager.h +2 -0
- data/src/core/lib/iomgr/udp_server.cc +53 -53
- data/src/core/lib/iomgr/udp_server.h +11 -14
- data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
- data/src/core/lib/iomgr/work_serializer.cc +155 -0
- data/src/core/lib/iomgr/work_serializer.h +65 -0
- data/src/core/lib/json/json.h +209 -68
- data/src/core/lib/json/json_reader.cc +508 -317
- data/src/core/lib/json/json_writer.cc +202 -110
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
- data/src/core/lib/security/authorization/authorization_engine.h +84 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
- data/src/core/lib/security/authorization/evaluate_args.h +59 -0
- data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
- data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +10 -7
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +45 -57
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +26 -6
- data/src/core/lib/security/credentials/composite/composite_credentials.h +11 -4
- data/src/core/lib/security/credentials/credentials.h +31 -25
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +9 -9
- data/src/core/lib/security/credentials/fake/fake_credentials.h +6 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +74 -56
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +12 -10
- data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +32 -58
- data/src/core/lib/security/credentials/jwt/json_token.h +5 -7
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +19 -26
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +153 -170
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -6
- data/src/core/lib/security/credentials/local/local_credentials.cc +3 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +332 -87
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +27 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +31 -15
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +4 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +43 -5
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +70 -17
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +118 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +67 -32
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +5 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +64 -47
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +9 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +42 -16
- data/src/core/lib/security/security_connector/security_connector.cc +4 -1
- data/src/core/lib/security/security_connector/security_connector.h +22 -20
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -62
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +150 -53
- data/src/core/lib/security/security_connector/ssl_utils.h +41 -17
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
- data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +606 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
- data/src/core/lib/security/transport/auth_filters.h +0 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +74 -28
- data/src/core/lib/security/transport/secure_endpoint.cc +16 -9
- data/src/core/lib/security/transport/security_handshaker.cc +103 -43
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +18 -17
- data/src/core/lib/security/util/json_util.cc +35 -15
- data/src/core/lib/security/util/json_util.h +5 -3
- data/src/core/lib/slice/b64.cc +3 -4
- data/src/core/lib/slice/b64.h +3 -4
- data/src/core/lib/slice/slice.cc +188 -73
- data/src/core/lib/slice/slice_buffer.cc +55 -26
- data/src/core/lib/slice/slice_intern.cc +164 -64
- data/src/core/lib/slice/slice_internal.h +110 -8
- data/src/core/lib/slice/slice_string_helpers.cc +10 -1
- data/src/core/lib/slice/slice_string_helpers.h +3 -1
- data/src/core/lib/slice/slice_utils.h +200 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
- data/src/core/lib/surface/call.cc +166 -117
- data/src/core/lib/surface/call.h +8 -8
- data/src/core/lib/surface/call_log_batch.cc +51 -60
- data/src/core/lib/surface/channel.cc +188 -137
- data/src/core/lib/surface/channel.h +91 -11
- data/src/core/lib/surface/channel_ping.cc +3 -4
- data/src/core/lib/surface/completion_queue.cc +144 -111
- data/src/core/lib/surface/completion_queue.h +6 -3
- data/src/core/lib/surface/completion_queue_factory.cc +1 -1
- data/src/core/lib/surface/event_string.cc +18 -25
- data/src/core/lib/surface/event_string.h +3 -1
- data/src/core/lib/surface/init.cc +6 -2
- data/src/core/lib/surface/init_secure.cc +2 -2
- data/src/core/lib/surface/lame_client.cc +43 -30
- data/src/core/lib/surface/server.cc +1275 -1316
- data/src/core/lib/surface/server.h +373 -52
- data/src/core/lib/surface/validate_metadata.cc +18 -8
- data/src/core/lib/surface/validate_metadata.h +13 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.cc +38 -0
- data/src/core/lib/transport/authority_override.h +32 -0
- data/src/core/lib/transport/byte_stream.cc +5 -7
- data/src/core/lib/transport/byte_stream.h +13 -12
- data/src/core/lib/transport/connectivity_state.cc +118 -98
- data/src/core/lib/transport/connectivity_state.h +114 -50
- data/src/core/lib/transport/error_utils.cc +23 -1
- data/src/core/lib/transport/error_utils.h +6 -0
- data/src/core/lib/transport/metadata.cc +252 -57
- data/src/core/lib/transport/metadata.h +168 -80
- data/src/core/lib/transport/metadata_batch.cc +78 -16
- data/src/core/lib/transport/metadata_batch.h +40 -3
- data/src/core/lib/transport/static_metadata.cc +1169 -495
- data/src/core/lib/transport/static_metadata.h +279 -282
- data/src/core/lib/transport/status_conversion.cc +7 -15
- data/src/core/lib/transport/status_metadata.cc +8 -1
- data/src/core/lib/transport/status_metadata.h +18 -0
- data/src/core/lib/transport/timeout_encoding.cc +7 -0
- data/src/core/lib/transport/timeout_encoding.h +3 -2
- data/src/core/lib/transport/transport.cc +14 -13
- data/src/core/lib/transport/transport.h +48 -8
- data/src/core/lib/transport/transport_op_string.cc +67 -105
- data/src/core/lib/uri/uri_parser.cc +30 -35
- data/src/core/lib/uri/uri_parser.h +5 -4
- data/src/core/plugin_registry/grpc_plugin_registry.cc +36 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +414 -120
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +293 -61
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +15 -5
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +5 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +10 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +4 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +76 -48
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +34 -26
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +22 -21
- data/src/core/tsi/fake_transport_security.h +2 -0
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +11 -9
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -13
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -3
- data/src/core/tsi/ssl_transport_security.cc +345 -103
- data/src/core/tsi/ssl_transport_security.h +42 -11
- data/src/core/tsi/ssl_types.h +0 -2
- data/src/core/tsi/transport_security.cc +13 -0
- data/src/core/tsi/transport_security.h +6 -9
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +8 -3
- data/src/core/tsi/transport_security_interface.h +20 -3
- data/src/ruby/bin/math_pb.rb +5 -5
- data/src/ruby/bin/math_services_pb.rb +4 -4
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +6 -0
- data/src/ruby/ext/grpc/extconf.rb +11 -2
- data/src/ruby/ext/grpc/rb_call.c +13 -4
- data/src/ruby/ext/grpc/rb_call.h +4 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +61 -13
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
- data/src/ruby/ext/grpc/rb_grpc.c +1 -42
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -6
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +28 -13
- data/src/ruby/lib/grpc.rb +2 -0
- data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
- data/src/ruby/lib/grpc/errors.rb +107 -49
- data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
- data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
- data/src/ruby/lib/grpc/generic/rpc_server.rb +11 -12
- data/src/ruby/lib/grpc/generic/service.rb +5 -4
- data/src/ruby/lib/grpc/google_rpc_status_utils.rb +9 -4
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/structs.rb +15 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +5 -3
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +3 -3
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +39 -13
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +43 -11
- data/src/ruby/spec/channel_credentials_spec.rb +10 -0
- data/src/ruby/spec/debug_message_spec.rb +134 -0
- data/src/ruby/spec/errors_spec.rb +1 -0
- data/src/ruby/spec/generic/active_call_spec.rb +19 -8
- data/src/ruby/spec/generic/service_spec.rb +2 -0
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +41 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +79 -29
- data/src/ruby/spec/support/services.rb +10 -4
- data/src/ruby/spec/testdata/ca.pem +18 -13
- data/src/ruby/spec/testdata/client.key +26 -14
- data/src/ruby/spec/testdata/client.pem +18 -12
- data/src/ruby/spec/testdata/server1.key +26 -14
- data/src/ruby/spec/testdata/server1.pem +20 -14
- data/src/ruby/spec/user_agent_spec.rb +74 -0
- data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
- data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
- data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
- data/third_party/abseil-cpp/absl/base/casts.h +184 -0
- data/third_party/abseil-cpp/absl/base/config.h +671 -0
- data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
- data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
- data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
- data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
- data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
- data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
- data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
- data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
- data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
- data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
- data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
- data/third_party/abseil-cpp/absl/base/macros.h +220 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
- data/third_party/abseil-cpp/absl/base/options.h +211 -0
- data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
- data/third_party/abseil-cpp/absl/base/port.h +26 -0
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
- data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
- data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
- data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
- data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
- data/third_party/abseil-cpp/absl/status/status.cc +447 -0
- data/third_party/abseil-cpp/absl/status/status.h +428 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
- data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
- data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
- data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
- data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
- data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
- data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
- data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
- data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
- data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
- data/third_party/abseil-cpp/absl/strings/match.h +90 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
- data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
- data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
- data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
- data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
- data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
- data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
- data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
- data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
- data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
- data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
- data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
- data/third_party/abseil-cpp/absl/time/clock.h +74 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
- data/third_party/abseil-cpp/absl/time/format.cc +153 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
- data/third_party/abseil-cpp/absl/time/time.cc +499 -0
- data/third_party/abseil-cpp/absl/time/time.h +1584 -0
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
- data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
- data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
- data/third_party/abseil-cpp/absl/types/optional.h +776 -0
- data/third_party/abseil-cpp/absl/types/span.h +713 -0
- data/third_party/abseil-cpp/absl/types/variant.h +861 -0
- data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
- data/third_party/boringssl-with-bazel/err_data.c +1451 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +271 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +151 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +105 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +93 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +97 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +91 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
- data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +492 -0
- data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
- data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
- data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
- data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +547 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +122 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +704 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +776 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1180 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +633 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +716 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
- data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
- data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
- data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +373 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +138 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1336 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +161 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +90 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +483 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +351 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +226 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +329 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2506 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +235 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +563 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +214 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +89 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +356 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +61 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +882 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +207 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +173 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1119 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5247 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +631 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1292 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
- data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
- data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +710 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1814 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3579 -0
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1016 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3053 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1313 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +386 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3895 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1027 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1104 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +705 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
- data/third_party/re2/re2/bitmap256.h +117 -0
- data/third_party/re2/re2/bitstate.cc +385 -0
- data/third_party/re2/re2/compile.cc +1279 -0
- data/third_party/re2/re2/dfa.cc +2130 -0
- data/third_party/re2/re2/filtered_re2.cc +121 -0
- data/third_party/re2/re2/filtered_re2.h +109 -0
- data/third_party/re2/re2/mimics_pcre.cc +197 -0
- data/third_party/re2/re2/nfa.cc +713 -0
- data/third_party/re2/re2/onepass.cc +623 -0
- data/third_party/re2/re2/parse.cc +2464 -0
- data/third_party/re2/re2/perl_groups.cc +119 -0
- data/third_party/re2/re2/pod_array.h +55 -0
- data/third_party/re2/re2/prefilter.cc +710 -0
- data/third_party/re2/re2/prefilter.h +108 -0
- data/third_party/re2/re2/prefilter_tree.cc +407 -0
- data/third_party/re2/re2/prefilter_tree.h +139 -0
- data/third_party/re2/re2/prog.cc +988 -0
- data/third_party/re2/re2/prog.h +436 -0
- data/third_party/re2/re2/re2.cc +1362 -0
- data/third_party/re2/re2/re2.h +1002 -0
- data/third_party/re2/re2/regexp.cc +980 -0
- data/third_party/re2/re2/regexp.h +659 -0
- data/third_party/re2/re2/set.cc +154 -0
- data/third_party/re2/re2/set.h +80 -0
- data/third_party/re2/re2/simplify.cc +657 -0
- data/third_party/re2/re2/sparse_array.h +392 -0
- data/third_party/re2/re2/sparse_set.h +264 -0
- data/third_party/re2/re2/stringpiece.cc +65 -0
- data/third_party/re2/re2/stringpiece.h +210 -0
- data/third_party/re2/re2/tostring.cc +351 -0
- data/third_party/re2/re2/unicode_casefold.cc +582 -0
- data/third_party/re2/re2/unicode_casefold.h +78 -0
- data/third_party/re2/re2/unicode_groups.cc +6269 -0
- data/third_party/re2/re2/unicode_groups.h +67 -0
- data/third_party/re2/re2/walker-inl.h +246 -0
- data/third_party/re2/util/benchmark.h +156 -0
- data/third_party/re2/util/flags.h +26 -0
- data/third_party/re2/util/logging.h +109 -0
- data/third_party/re2/util/malloc_counter.h +19 -0
- data/third_party/re2/util/mix.h +41 -0
- data/third_party/re2/util/mutex.h +148 -0
- data/third_party/re2/util/pcre.cc +1025 -0
- data/third_party/re2/util/pcre.h +681 -0
- data/third_party/re2/util/rune.cc +260 -0
- data/third_party/re2/util/strutil.cc +149 -0
- data/third_party/re2/util/strutil.h +21 -0
- data/third_party/re2/util/test.h +50 -0
- data/third_party/re2/util/utf.h +44 -0
- data/third_party/re2/util/util.h +42 -0
- data/third_party/upb/upb/decode.c +621 -0
- data/third_party/upb/upb/decode.h +21 -0
- data/third_party/upb/upb/encode.c +420 -0
- data/third_party/upb/upb/encode.h +21 -0
- data/third_party/upb/upb/msg.c +177 -0
- data/third_party/upb/upb/msg.h +473 -0
- data/third_party/upb/upb/port.c +26 -0
- data/third_party/upb/upb/port_def.inc +179 -0
- data/third_party/upb/upb/port_undef.inc +28 -0
- data/third_party/upb/upb/table.c +880 -0
- data/third_party/upb/upb/table.int.h +466 -0
- data/third_party/upb/upb/upb.c +287 -0
- data/third_party/upb/upb/upb.h +308 -0
- data/third_party/upb/upb/upb.hpp +88 -0
- metadata +1054 -526
- data/src/boringssl/err_data.c +0 -1362
- data/src/core/ext/filters/client_channel/connector.cc +0 -41
- data/src/core/ext/filters/client_channel/health/health.pb.c +0 -23
- data/src/core/ext/filters/client_channel/health/health.pb.h +0 -73
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +0 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +0 -54
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +0 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +0 -54
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +0 -89
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +0 -164
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -2249
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h +0 -36
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -61
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc +0 -85
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h +0 -72
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +0 -307
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -89
- data/src/core/ext/filters/client_channel/parse_address.cc +0 -234
- data/src/core/ext/filters/client_channel/parse_address.h +0 -53
- data/src/core/ext/filters/client_channel/proxy_mapper.cc +0 -48
- data/src/core/lib/gpr/host_port.cc +0 -98
- data/src/core/lib/gpr/host_port.h +0 -43
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -37
- data/src/core/lib/gprpp/inlined_vector.h +0 -200
- data/src/core/lib/gprpp/optional.h +0 -48
- data/src/core/lib/gprpp/pair.h +0 -38
- data/src/core/lib/json/json.cc +0 -94
- data/src/core/lib/json/json_common.h +0 -34
- data/src/core/lib/json/json_reader.h +0 -146
- data/src/core/lib/json/json_string.cc +0 -367
- data/src/core/lib/json/json_writer.h +0 -84
- data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +0 -129
- data/src/core/lib/security/credentials/tls/spiffe_credentials.h +0 -62
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +0 -426
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +0 -122
- data/src/core/lib/security/transport/target_authority_table.cc +0 -75
- data/src/core/lib/security/transport/target_authority_table.h +0 -40
- data/src/core/lib/slice/slice_hash_table.h +0 -205
- data/src/core/lib/slice/slice_weak_hash_table.h +0 -109
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +0 -520
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +0 -323
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +0 -145
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +0 -149
- data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -47
- data/src/core/tsi/alts/handshaker/altscontext.pb.h +0 -63
- data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -122
- data/src/core/tsi/alts/handshaker/handshaker.pb.h +0 -254
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -49
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +0 -78
- data/src/core/tsi/grpc_shadow_boringssl.h +0 -3006
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +0 -271
- data/third_party/boringssl/crypto/asn1/a_bool.c +0 -110
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +0 -297
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -111
- data/third_party/boringssl/crypto/asn1/a_enum.c +0 -195
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +0 -150
- data/third_party/boringssl/crypto/asn1/a_int.c +0 -479
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +0 -411
- data/third_party/boringssl/crypto/asn1/a_object.c +0 -275
- data/third_party/boringssl/crypto/asn1/a_strnid.c +0 -312
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
- data/third_party/boringssl/crypto/asn1/a_type.c +0 -151
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +0 -442
- data/third_party/boringssl/crypto/asn1/asn_pack.c +0 -105
- data/third_party/boringssl/crypto/asn1/f_enum.c +0 -93
- data/third_party/boringssl/crypto/asn1/f_int.c +0 -97
- data/third_party/boringssl/crypto/asn1/f_string.c +0 -91
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -662
- data/third_party/boringssl/crypto/base64/base64.c +0 -466
- data/third_party/boringssl/crypto/bio/bio.c +0 -636
- data/third_party/boringssl/crypto/bio/connect.c +0 -542
- data/third_party/boringssl/crypto/bio/fd.c +0 -276
- data/third_party/boringssl/crypto/bio/file.c +0 -315
- data/third_party/boringssl/crypto/bio/pair.c +0 -489
- data/third_party/boringssl/crypto/bio/socket.c +0 -202
- data/third_party/boringssl/crypto/bio/socket_helper.c +0 -114
- data/third_party/boringssl/crypto/bn_extra/convert.c +0 -466
- data/third_party/boringssl/crypto/buf/buf.c +0 -231
- data/third_party/boringssl/crypto/bytestring/ber.c +0 -261
- data/third_party/boringssl/crypto/bytestring/cbb.c +0 -668
- data/third_party/boringssl/crypto/bytestring/cbs.c +0 -618
- data/third_party/boringssl/crypto/bytestring/internal.h +0 -75
- data/third_party/boringssl/crypto/chacha/chacha.c +0 -167
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +0 -114
- data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +0 -203
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +0 -281
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -867
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +0 -326
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +0 -680
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +0 -482
- data/third_party/boringssl/crypto/cmac/cmac.c +0 -241
- data/third_party/boringssl/crypto/conf/conf.c +0 -803
- data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -363
- data/third_party/boringssl/crypto/cpu-intel.c +0 -288
- data/third_party/boringssl/crypto/crypto.c +0 -198
- data/third_party/boringssl/crypto/curve25519/spake25519.c +0 -539
- data/third_party/boringssl/crypto/dh/check.c +0 -217
- data/third_party/boringssl/crypto/dh/dh.c +0 -519
- data/third_party/boringssl/crypto/dsa/dsa.c +0 -946
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +0 -562
- data/third_party/boringssl/crypto/ecdh/ecdh.c +0 -162
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +0 -275
- data/third_party/boringssl/crypto/engine/engine.c +0 -98
- data/third_party/boringssl/crypto/err/err.c +0 -847
- data/third_party/boringssl/crypto/err/internal.h +0 -58
- data/third_party/boringssl/crypto/evp/evp.c +0 -362
- data/third_party/boringssl/crypto/evp/evp_asn1.c +0 -337
- data/third_party/boringssl/crypto/evp/evp_ctx.c +0 -446
- data/third_party/boringssl/crypto/evp/internal.h +0 -252
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +0 -268
- data/third_party/boringssl/crypto/evp/p_ec.c +0 -239
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +0 -256
- data/third_party/boringssl/crypto/evp/p_ed25519.c +0 -71
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +0 -190
- data/third_party/boringssl/crypto/evp/p_rsa.c +0 -634
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +0 -189
- data/third_party/boringssl/crypto/evp/scrypt.c +0 -209
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -1100
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -100
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +0 -138
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -112
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -148
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +0 -428
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +0 -200
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +0 -303
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +0 -895
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1356
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -683
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -573
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -526
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +0 -185
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -876
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1154
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +0 -351
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +0 -231
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +0 -33
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +0 -364
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +0 -615
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1437
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +0 -233
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +0 -129
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +0 -88
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +0 -256
- data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +0 -268
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -974
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -453
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -270
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -337
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -373
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1104
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9503
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -447
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +0 -117
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -1046
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +0 -104
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -354
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -458
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +0 -27
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +0 -254
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +0 -298
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +0 -211
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +0 -234
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +0 -220
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -1063
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -388
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +0 -95
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +0 -202
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -92
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -358
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -302
- data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +0 -239
- data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -126
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +0 -692
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -875
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1218
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +0 -581
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +0 -375
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +0 -337
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -608
- data/third_party/boringssl/crypto/internal.h +0 -739
- data/third_party/boringssl/crypto/lhash/lhash.c +0 -336
- data/third_party/boringssl/crypto/mem.c +0 -235
- data/third_party/boringssl/crypto/obj/obj.c +0 -554
- data/third_party/boringssl/crypto/obj/obj_dat.h +0 -6244
- data/third_party/boringssl/crypto/pem/pem_all.c +0 -262
- data/third_party/boringssl/crypto/pem/pem_info.c +0 -379
- data/third_party/boringssl/crypto/pem/pem_lib.c +0 -776
- data/third_party/boringssl/crypto/pem/pem_oth.c +0 -88
- data/third_party/boringssl/crypto/pem/pem_pk8.c +0 -258
- data/third_party/boringssl/crypto/pem/pem_pkey.c +0 -227
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +0 -166
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -233
- data/third_party/boringssl/crypto/pkcs8/internal.h +0 -120
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +0 -307
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +0 -513
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +0 -789
- data/third_party/boringssl/crypto/poly1305/poly1305.c +0 -318
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +0 -304
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +0 -839
- data/third_party/boringssl/crypto/pool/internal.h +0 -45
- data/third_party/boringssl/crypto/pool/pool.c +0 -200
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -48
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +0 -43
- data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
- data/third_party/boringssl/crypto/refcount_lock.c +0 -53
- data/third_party/boringssl/crypto/stack/stack.c +0 -380
- data/third_party/boringssl/crypto/thread_none.c +0 -59
- data/third_party/boringssl/crypto/thread_pthread.c +0 -206
- data/third_party/boringssl/crypto/thread_win.c +0 -237
- data/third_party/boringssl/crypto/x509/a_strex.c +0 -633
- data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
- data/third_party/boringssl/crypto/x509/algorithm.c +0 -153
- data/third_party/boringssl/crypto/x509/asn1_gen.c +0 -841
- data/third_party/boringssl/crypto/x509/by_dir.c +0 -451
- data/third_party/boringssl/crypto/x509/by_file.c +0 -274
- data/third_party/boringssl/crypto/x509/t_crl.c +0 -128
- data/third_party/boringssl/crypto/x509/t_req.c +0 -246
- data/third_party/boringssl/crypto/x509/t_x509.c +0 -547
- data/third_party/boringssl/crypto/x509/x509.c +0 -157
- data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
- data/third_party/boringssl/crypto/x509/x509_def.c +0 -103
- data/third_party/boringssl/crypto/x509/x509_lu.c +0 -725
- data/third_party/boringssl/crypto/x509/x509_obj.c +0 -198
- data/third_party/boringssl/crypto/x509/x509_r2x.c +0 -117
- data/third_party/boringssl/crypto/x509/x509_req.c +0 -322
- data/third_party/boringssl/crypto/x509/x509_set.c +0 -164
- data/third_party/boringssl/crypto/x509/x509_trs.c +0 -326
- data/third_party/boringssl/crypto/x509/x509_txt.c +0 -205
- data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2476
- data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -670
- data/third_party/boringssl/crypto/x509/x509cset.c +0 -170
- data/third_party/boringssl/crypto/x509/x509name.c +0 -389
- data/third_party/boringssl/crypto/x509/x_all.c +0 -501
- data/third_party/boringssl/crypto/x509/x_crl.c +0 -541
- data/third_party/boringssl/crypto/x509/x_pubkey.c +0 -368
- data/third_party/boringssl/crypto/x509/x_sig.c +0 -69
- data/third_party/boringssl/crypto/x509/x_x509.c +0 -328
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +0 -143
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +0 -284
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +0 -188
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +0 -840
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +0 -204
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -623
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +0 -462
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +0 -502
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +0 -251
- data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +0 -370
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -287
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -866
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +0 -152
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1352
- data/third_party/boringssl/include/openssl/aead.h +0 -433
- data/third_party/boringssl/include/openssl/aes.h +0 -170
- data/third_party/boringssl/include/openssl/arm_arch.h +0 -121
- data/third_party/boringssl/include/openssl/asn1.h +0 -981
- data/third_party/boringssl/include/openssl/base.h +0 -457
- data/third_party/boringssl/include/openssl/base64.h +0 -187
- data/third_party/boringssl/include/openssl/bio.h +0 -902
- data/third_party/boringssl/include/openssl/blowfish.h +0 -93
- data/third_party/boringssl/include/openssl/bn.h +0 -1019
- data/third_party/boringssl/include/openssl/buf.h +0 -137
- data/third_party/boringssl/include/openssl/bytestring.h +0 -505
- data/third_party/boringssl/include/openssl/cast.h +0 -96
- data/third_party/boringssl/include/openssl/cipher.h +0 -608
- data/third_party/boringssl/include/openssl/cmac.h +0 -87
- data/third_party/boringssl/include/openssl/conf.h +0 -183
- data/third_party/boringssl/include/openssl/cpu.h +0 -196
- data/third_party/boringssl/include/openssl/crypto.h +0 -122
- data/third_party/boringssl/include/openssl/curve25519.h +0 -201
- data/third_party/boringssl/include/openssl/dh.h +0 -298
- data/third_party/boringssl/include/openssl/digest.h +0 -316
- data/third_party/boringssl/include/openssl/dsa.h +0 -435
- data/third_party/boringssl/include/openssl/ec.h +0 -413
- data/third_party/boringssl/include/openssl/ec_key.h +0 -342
- data/third_party/boringssl/include/openssl/ecdh.h +0 -101
- data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
- data/third_party/boringssl/include/openssl/engine.h +0 -109
- data/third_party/boringssl/include/openssl/err.h +0 -458
- data/third_party/boringssl/include/openssl/evp.h +0 -873
- data/third_party/boringssl/include/openssl/hmac.h +0 -186
- data/third_party/boringssl/include/openssl/lhash.h +0 -174
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/include/openssl/md4.h +0 -106
- data/third_party/boringssl/include/openssl/md5.h +0 -107
- data/third_party/boringssl/include/openssl/mem.h +0 -156
- data/third_party/boringssl/include/openssl/nid.h +0 -4242
- data/third_party/boringssl/include/openssl/obj.h +0 -233
- data/third_party/boringssl/include/openssl/pem.h +0 -397
- data/third_party/boringssl/include/openssl/pkcs7.h +0 -82
- data/third_party/boringssl/include/openssl/pkcs8.h +0 -230
- data/third_party/boringssl/include/openssl/poly1305.h +0 -51
- data/third_party/boringssl/include/openssl/pool.h +0 -91
- data/third_party/boringssl/include/openssl/rand.h +0 -125
- data/third_party/boringssl/include/openssl/ripemd.h +0 -107
- data/third_party/boringssl/include/openssl/rsa.h +0 -756
- data/third_party/boringssl/include/openssl/sha.h +0 -256
- data/third_party/boringssl/include/openssl/span.h +0 -191
- data/third_party/boringssl/include/openssl/ssl.h +0 -4740
- data/third_party/boringssl/include/openssl/ssl3.h +0 -332
- data/third_party/boringssl/include/openssl/stack.h +0 -485
- data/third_party/boringssl/include/openssl/thread.h +0 -191
- data/third_party/boringssl/include/openssl/tls1.h +0 -618
- data/third_party/boringssl/include/openssl/type_check.h +0 -91
- data/third_party/boringssl/include/openssl/x509.h +0 -1180
- data/third_party/boringssl/include/openssl/x509_vfy.h +0 -614
- data/third_party/boringssl/include/openssl/x509v3.h +0 -827
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
- data/third_party/boringssl/ssl/d1_both.cc +0 -851
- data/third_party/boringssl/ssl/d1_lib.cc +0 -267
- data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
- data/third_party/boringssl/ssl/d1_srtp.cc +0 -232
- data/third_party/boringssl/ssl/dtls_method.cc +0 -193
- data/third_party/boringssl/ssl/dtls_record.cc +0 -353
- data/third_party/boringssl/ssl/handoff.cc +0 -285
- data/third_party/boringssl/ssl/handshake.cc +0 -630
- data/third_party/boringssl/ssl/handshake_client.cc +0 -1842
- data/third_party/boringssl/ssl/handshake_server.cc +0 -1674
- data/third_party/boringssl/ssl/internal.h +0 -3064
- data/third_party/boringssl/ssl/s3_both.cc +0 -585
- data/third_party/boringssl/ssl/s3_lib.cc +0 -226
- data/third_party/boringssl/ssl/s3_pkt.cc +0 -425
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +0 -412
- data/third_party/boringssl/ssl/ssl_asn1.cc +0 -844
- data/third_party/boringssl/ssl/ssl_buffer.cc +0 -286
- data/third_party/boringssl/ssl/ssl_cert.cc +0 -913
- data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1781
- data/third_party/boringssl/ssl/ssl_file.cc +0 -583
- data/third_party/boringssl/ssl/ssl_key_share.cc +0 -252
- data/third_party/boringssl/ssl/ssl_lib.cc +0 -2719
- data/third_party/boringssl/ssl/ssl_privkey.cc +0 -494
- data/third_party/boringssl/ssl/ssl_session.cc +0 -1221
- data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
- data/third_party/boringssl/ssl/ssl_transcript.cc +0 -398
- data/third_party/boringssl/ssl/ssl_versions.cc +0 -399
- data/third_party/boringssl/ssl/ssl_x509.cc +0 -1297
- data/third_party/boringssl/ssl/t1_enc.cc +0 -452
- data/third_party/boringssl/ssl/t1_lib.cc +0 -3783
- data/third_party/boringssl/ssl/tls13_both.cc +0 -559
- data/third_party/boringssl/ssl/tls13_client.cc +0 -891
- data/third_party/boringssl/ssl/tls13_enc.cc +0 -493
- data/third_party/boringssl/ssl/tls13_server.cc +0 -1022
- data/third_party/boringssl/ssl/tls_method.cc +0 -274
- data/third_party/boringssl/ssl/tls_record.cc +0 -703
- data/third_party/boringssl/third_party/fiat/curve25519.c +0 -3230
- data/third_party/boringssl/third_party/fiat/curve25519_tables.h +0 -7880
- data/third_party/boringssl/third_party/fiat/internal.h +0 -154
- data/third_party/boringssl/third_party/fiat/p256.c +0 -1824
- data/third_party/nanopb/pb.h +0 -579
- data/third_party/nanopb/pb_common.c +0 -97
- data/third_party/nanopb/pb_common.h +0 -42
- data/third_party/nanopb/pb_decode.c +0 -1347
- data/third_party/nanopb/pb_decode.h +0 -149
- data/third_party/nanopb/pb_encode.c +0 -696
- data/third_party/nanopb/pb_encode.h +0 -154
@@ -26,12 +26,23 @@
|
|
26
26
|
#include <stdio.h>
|
27
27
|
#include <string.h>
|
28
28
|
|
29
|
+
#include <set>
|
30
|
+
|
31
|
+
#include "absl/strings/numbers.h"
|
32
|
+
#include "absl/strings/str_cat.h"
|
33
|
+
#include "absl/strings/string_view.h"
|
34
|
+
|
29
35
|
#include <grpc/support/alloc.h>
|
30
36
|
#include <grpc/support/log.h>
|
31
37
|
#include <grpc/support/string_util.h>
|
32
38
|
#include <grpc/support/sync.h>
|
33
39
|
|
40
|
+
#include "absl/container/inlined_vector.h"
|
41
|
+
#include "absl/types/optional.h"
|
42
|
+
|
43
|
+
#include "src/core/ext/filters/client_channel/backend_metric.h"
|
34
44
|
#include "src/core/ext/filters/client_channel/backup_poller.h"
|
45
|
+
#include "src/core/ext/filters/client_channel/config_selector.h"
|
35
46
|
#include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
|
36
47
|
#include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
|
37
48
|
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
@@ -42,6 +53,7 @@
|
|
42
53
|
#include "src/core/ext/filters/client_channel/resolving_lb_policy.h"
|
43
54
|
#include "src/core/ext/filters/client_channel/retry_throttle.h"
|
44
55
|
#include "src/core/ext/filters/client_channel/service_config.h"
|
56
|
+
#include "src/core/ext/filters/client_channel/service_config_call_data.h"
|
45
57
|
#include "src/core/ext/filters/client_channel/subchannel.h"
|
46
58
|
#include "src/core/ext/filters/deadline/deadline_filter.h"
|
47
59
|
#include "src/core/lib/backoff/backoff.h"
|
@@ -49,12 +61,12 @@
|
|
49
61
|
#include "src/core/lib/channel/connected_channel.h"
|
50
62
|
#include "src/core/lib/channel/status_util.h"
|
51
63
|
#include "src/core/lib/gpr/string.h"
|
52
|
-
#include "src/core/lib/gprpp/inlined_vector.h"
|
53
64
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
65
|
+
#include "src/core/lib/gprpp/map.h"
|
54
66
|
#include "src/core/lib/gprpp/sync.h"
|
55
|
-
#include "src/core/lib/iomgr/combiner.h"
|
56
67
|
#include "src/core/lib/iomgr/iomgr.h"
|
57
68
|
#include "src/core/lib/iomgr/polling_entity.h"
|
69
|
+
#include "src/core/lib/iomgr/work_serializer.h"
|
58
70
|
#include "src/core/lib/profiling/timers.h"
|
59
71
|
#include "src/core/lib/slice/slice_internal.h"
|
60
72
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
@@ -66,7 +78,7 @@
|
|
66
78
|
#include "src/core/lib/transport/static_metadata.h"
|
67
79
|
#include "src/core/lib/transport/status_metadata.h"
|
68
80
|
|
69
|
-
using grpc_core::internal::
|
81
|
+
using grpc_core::internal::ClientChannelMethodParsedConfig;
|
70
82
|
using grpc_core::internal::ServerRetryThrottleData;
|
71
83
|
|
72
84
|
//
|
@@ -105,7 +117,6 @@ namespace {
|
|
105
117
|
class ChannelData {
|
106
118
|
public:
|
107
119
|
struct QueuedPick {
|
108
|
-
LoadBalancingPolicy::PickArgs pick;
|
109
120
|
grpc_call_element* elem;
|
110
121
|
QueuedPick* next = nullptr;
|
111
122
|
};
|
@@ -118,30 +129,19 @@ class ChannelData {
|
|
118
129
|
static void GetChannelInfo(grpc_channel_element* elem,
|
119
130
|
const grpc_channel_info* info);
|
120
131
|
|
121
|
-
void set_channelz_node(channelz::ClientChannelNode* node) {
|
122
|
-
channelz_node_ = node;
|
123
|
-
resolving_lb_policy_->set_channelz_node(node->Ref());
|
124
|
-
}
|
125
|
-
void FillChildRefsForChannelz(channelz::ChildRefsList* child_subchannels,
|
126
|
-
channelz::ChildRefsList* child_channels) {
|
127
|
-
if (resolving_lb_policy_ != nullptr) {
|
128
|
-
resolving_lb_policy_->FillChildRefsForChannelz(child_subchannels,
|
129
|
-
child_channels);
|
130
|
-
}
|
131
|
-
}
|
132
|
-
|
133
132
|
bool deadline_checking_enabled() const { return deadline_checking_enabled_; }
|
134
133
|
bool enable_retries() const { return enable_retries_; }
|
135
134
|
size_t per_rpc_retry_buffer_size() const {
|
136
135
|
return per_rpc_retry_buffer_size_;
|
137
136
|
}
|
137
|
+
grpc_channel_stack* owning_stack() const { return owning_stack_; }
|
138
138
|
|
139
139
|
// Note: Does NOT return a new ref.
|
140
140
|
grpc_error* disconnect_error() const {
|
141
141
|
return disconnect_error_.Load(MemoryOrder::ACQUIRE);
|
142
142
|
}
|
143
143
|
|
144
|
-
|
144
|
+
Mutex* data_plane_mu() const { return &data_plane_mu_; }
|
145
145
|
|
146
146
|
LoadBalancingPolicy::SubchannelPicker* picker() const {
|
147
147
|
return picker_.get();
|
@@ -152,52 +152,58 @@ class ChannelData {
|
|
152
152
|
bool received_service_config_data() const {
|
153
153
|
return received_service_config_data_;
|
154
154
|
}
|
155
|
+
grpc_error* resolver_transient_failure_error() const {
|
156
|
+
return resolver_transient_failure_error_;
|
157
|
+
}
|
155
158
|
RefCountedPtr<ServerRetryThrottleData> retry_throttle_data() const {
|
156
159
|
return retry_throttle_data_;
|
157
160
|
}
|
158
161
|
RefCountedPtr<ServiceConfig> service_config() const {
|
159
162
|
return service_config_;
|
160
163
|
}
|
164
|
+
ConfigSelector* config_selector() const { return config_selector_.get(); }
|
165
|
+
WorkSerializer* work_serializer() const { return work_serializer_.get(); }
|
166
|
+
|
167
|
+
RefCountedPtr<ConnectedSubchannel> GetConnectedSubchannelInDataPlane(
|
168
|
+
SubchannelInterface* subchannel) const;
|
161
169
|
|
162
170
|
grpc_connectivity_state CheckConnectivityState(bool try_to_connect);
|
171
|
+
|
163
172
|
void AddExternalConnectivityWatcher(grpc_polling_entity pollent,
|
164
173
|
grpc_connectivity_state* state,
|
165
174
|
grpc_closure* on_complete,
|
166
175
|
grpc_closure* watcher_timer_init) {
|
167
|
-
|
168
|
-
|
169
|
-
|
176
|
+
new ExternalConnectivityWatcher(this, pollent, state, on_complete,
|
177
|
+
watcher_timer_init);
|
178
|
+
}
|
179
|
+
|
180
|
+
void RemoveExternalConnectivityWatcher(grpc_closure* on_complete,
|
181
|
+
bool cancel) {
|
182
|
+
ExternalConnectivityWatcher::RemoveWatcherFromExternalWatchersMap(
|
183
|
+
this, on_complete, cancel);
|
170
184
|
}
|
185
|
+
|
171
186
|
int NumExternalConnectivityWatchers() const {
|
172
|
-
|
187
|
+
MutexLock lock(&external_watchers_mu_);
|
188
|
+
return static_cast<int>(external_watchers_.size());
|
173
189
|
}
|
174
190
|
|
191
|
+
void AddConnectivityWatcher(
|
192
|
+
grpc_connectivity_state initial_state,
|
193
|
+
OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher);
|
194
|
+
void RemoveConnectivityWatcher(
|
195
|
+
AsyncConnectivityStateWatcherInterface* watcher);
|
196
|
+
|
175
197
|
private:
|
176
|
-
class
|
177
|
-
class ServiceConfigSetter;
|
198
|
+
class SubchannelWrapper;
|
178
199
|
class ClientChannelControlHelper;
|
200
|
+
class ConnectivityWatcherAdder;
|
201
|
+
class ConnectivityWatcherRemover;
|
179
202
|
|
180
|
-
|
203
|
+
// Represents a pending connectivity callback from an external caller
|
204
|
+
// via grpc_client_channel_watch_connectivity_state().
|
205
|
+
class ExternalConnectivityWatcher : public ConnectivityStateWatcherInterface {
|
181
206
|
public:
|
182
|
-
class WatcherList {
|
183
|
-
public:
|
184
|
-
WatcherList() { gpr_mu_init(&mu_); }
|
185
|
-
~WatcherList() { gpr_mu_destroy(&mu_); }
|
186
|
-
|
187
|
-
int size() const;
|
188
|
-
ExternalConnectivityWatcher* Lookup(grpc_closure* on_complete) const;
|
189
|
-
void Add(ExternalConnectivityWatcher* watcher);
|
190
|
-
void Remove(const ExternalConnectivityWatcher* watcher);
|
191
|
-
|
192
|
-
private:
|
193
|
-
// head_ is guarded by a mutex, since the size() method needs to
|
194
|
-
// iterate over the list, and it's called from the C-core API
|
195
|
-
// function grpc_channel_num_external_connectivity_watchers(), which
|
196
|
-
// is synchronous and therefore cannot run in the combiner.
|
197
|
-
mutable gpr_mu mu_;
|
198
|
-
ExternalConnectivityWatcher* head_ = nullptr;
|
199
|
-
};
|
200
|
-
|
201
207
|
ExternalConnectivityWatcher(ChannelData* chand, grpc_polling_entity pollent,
|
202
208
|
grpc_connectivity_state* state,
|
203
209
|
grpc_closure* on_complete,
|
@@ -205,38 +211,75 @@ class ChannelData {
|
|
205
211
|
|
206
212
|
~ExternalConnectivityWatcher();
|
207
213
|
|
214
|
+
// Removes the watcher from the external_watchers_ map.
|
215
|
+
static void RemoveWatcherFromExternalWatchersMap(ChannelData* chand,
|
216
|
+
grpc_closure* on_complete,
|
217
|
+
bool cancel);
|
218
|
+
|
219
|
+
void Notify(grpc_connectivity_state state,
|
220
|
+
const absl::Status& /* status */) override;
|
221
|
+
|
222
|
+
void Cancel();
|
223
|
+
|
208
224
|
private:
|
209
|
-
|
210
|
-
|
225
|
+
// Adds the watcher to state_tracker_. Consumes the ref that is passed to it
|
226
|
+
// from Start().
|
227
|
+
void AddWatcherLocked();
|
228
|
+
void RemoveWatcherLocked();
|
211
229
|
|
212
230
|
ChannelData* chand_;
|
213
231
|
grpc_polling_entity pollent_;
|
232
|
+
grpc_connectivity_state initial_state_;
|
214
233
|
grpc_connectivity_state* state_;
|
215
234
|
grpc_closure* on_complete_;
|
216
235
|
grpc_closure* watcher_timer_init_;
|
217
|
-
|
218
|
-
|
236
|
+
Atomic<bool> done_{false};
|
237
|
+
};
|
238
|
+
|
239
|
+
class ChannelConfigHelper
|
240
|
+
: public ResolvingLoadBalancingPolicy::ChannelConfigHelper {
|
241
|
+
public:
|
242
|
+
explicit ChannelConfigHelper(ChannelData* chand) : chand_(chand) {}
|
243
|
+
|
244
|
+
ApplyServiceConfigResult ApplyServiceConfig(
|
245
|
+
const Resolver::Result& result) override;
|
246
|
+
|
247
|
+
void ApplyConfigSelector(
|
248
|
+
bool service_config_changed,
|
249
|
+
RefCountedPtr<ConfigSelector> config_selector) override;
|
250
|
+
|
251
|
+
void ResolverTransientFailure(grpc_error* error) override;
|
252
|
+
|
253
|
+
private:
|
254
|
+
static void ProcessLbPolicy(
|
255
|
+
const Resolver::Result& resolver_result,
|
256
|
+
const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
|
257
|
+
RefCountedPtr<LoadBalancingPolicy::Config>* lb_policy_config);
|
258
|
+
|
259
|
+
ChannelData* chand_;
|
219
260
|
};
|
220
261
|
|
221
262
|
ChannelData(grpc_channel_element_args* args, grpc_error** error);
|
222
263
|
~ChannelData();
|
223
264
|
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
265
|
+
void UpdateStateAndPickerLocked(
|
266
|
+
grpc_connectivity_state state, const absl::Status& status,
|
267
|
+
const char* reason,
|
268
|
+
std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker);
|
228
269
|
|
229
|
-
|
270
|
+
void UpdateServiceConfigInDataPlaneLocked(
|
271
|
+
bool service_config_changed,
|
272
|
+
RefCountedPtr<ConfigSelector> config_selector);
|
230
273
|
|
231
|
-
|
274
|
+
void CreateResolvingLoadBalancingPolicyLocked();
|
232
275
|
|
233
|
-
|
276
|
+
void DestroyResolvingLoadBalancingPolicyLocked();
|
234
277
|
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
278
|
+
grpc_error* DoPingLocked(grpc_transport_op* op);
|
279
|
+
|
280
|
+
void StartTransportOpLocked(grpc_transport_op* op);
|
281
|
+
|
282
|
+
void TryToConnectLocked();
|
240
283
|
|
241
284
|
//
|
242
285
|
// Fields set at construction and never modified.
|
@@ -246,37 +289,54 @@ class ChannelData {
|
|
246
289
|
const size_t per_rpc_retry_buffer_size_;
|
247
290
|
grpc_channel_stack* owning_stack_;
|
248
291
|
ClientChannelFactory* client_channel_factory_;
|
249
|
-
|
292
|
+
const grpc_channel_args* channel_args_;
|
250
293
|
RefCountedPtr<ServiceConfig> default_service_config_;
|
251
|
-
|
252
|
-
|
294
|
+
grpc_core::UniquePtr<char> server_name_;
|
295
|
+
grpc_core::UniquePtr<char> target_uri_;
|
296
|
+
channelz::ChannelNode* channelz_node_;
|
297
|
+
ChannelConfigHelper channel_config_helper_;
|
253
298
|
|
254
299
|
//
|
255
|
-
// Fields used in the data plane. Guarded by
|
300
|
+
// Fields used in the data plane. Guarded by data_plane_mu.
|
256
301
|
//
|
257
|
-
|
258
|
-
|
302
|
+
mutable Mutex data_plane_mu_;
|
303
|
+
std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker_;
|
259
304
|
QueuedPick* queued_picks_ = nullptr; // Linked list of queued picks.
|
260
305
|
// Data from service config.
|
306
|
+
grpc_error* resolver_transient_failure_error_ = GRPC_ERROR_NONE;
|
261
307
|
bool received_service_config_data_ = false;
|
262
308
|
RefCountedPtr<ServerRetryThrottleData> retry_throttle_data_;
|
263
309
|
RefCountedPtr<ServiceConfig> service_config_;
|
310
|
+
RefCountedPtr<ConfigSelector> config_selector_;
|
264
311
|
|
265
312
|
//
|
266
|
-
// Fields used in the control plane. Guarded by
|
313
|
+
// Fields used in the control plane. Guarded by work_serializer.
|
267
314
|
//
|
268
|
-
|
315
|
+
std::shared_ptr<WorkSerializer> work_serializer_;
|
269
316
|
grpc_pollset_set* interested_parties_;
|
270
317
|
RefCountedPtr<SubchannelPoolInterface> subchannel_pool_;
|
271
|
-
OrphanablePtr<
|
272
|
-
|
273
|
-
|
274
|
-
UniquePtr<char> health_check_service_name_;
|
318
|
+
OrphanablePtr<ResolvingLoadBalancingPolicy> resolving_lb_policy_;
|
319
|
+
ConnectivityStateTracker state_tracker_;
|
320
|
+
grpc_core::UniquePtr<char> health_check_service_name_;
|
275
321
|
RefCountedPtr<ServiceConfig> saved_service_config_;
|
322
|
+
RefCountedPtr<ConfigSelector> saved_config_selector_;
|
276
323
|
bool received_first_resolver_result_ = false;
|
324
|
+
// The number of SubchannelWrapper instances referencing a given Subchannel.
|
325
|
+
std::map<Subchannel*, int> subchannel_refcount_map_;
|
326
|
+
// The set of SubchannelWrappers that currently exist.
|
327
|
+
// No need to hold a ref, since the map is updated in the control-plane
|
328
|
+
// work_serializer when the SubchannelWrappers are created and destroyed.
|
329
|
+
std::set<SubchannelWrapper*> subchannel_wrappers_;
|
330
|
+
// Pending ConnectedSubchannel updates for each SubchannelWrapper.
|
331
|
+
// Updates are queued here in the control plane work_serializer and then
|
332
|
+
// applied in the data plane mutex when the picker is updated.
|
333
|
+
std::map<RefCountedPtr<SubchannelWrapper>, RefCountedPtr<ConnectedSubchannel>>
|
334
|
+
pending_subchannel_updates_;
|
335
|
+
int keepalive_time_ = -1;
|
277
336
|
|
278
337
|
//
|
279
|
-
// Fields accessed from both data plane and control plane
|
338
|
+
// Fields accessed from both data plane mutex and control plane
|
339
|
+
// work_serializer.
|
280
340
|
//
|
281
341
|
Atomic<grpc_error*> disconnect_error_;
|
282
342
|
|
@@ -285,8 +345,16 @@ class ChannelData {
|
|
285
345
|
// synchronously via get_channel_info().
|
286
346
|
//
|
287
347
|
gpr_mu info_mu_;
|
288
|
-
UniquePtr<char> info_lb_policy_name_;
|
289
|
-
UniquePtr<char> info_service_config_json_;
|
348
|
+
grpc_core::UniquePtr<char> info_lb_policy_name_;
|
349
|
+
grpc_core::UniquePtr<char> info_service_config_json_;
|
350
|
+
|
351
|
+
//
|
352
|
+
// Fields guarded by a mutex, since they need to be accessed
|
353
|
+
// synchronously via grpc_channel_num_external_connectivity_watchers().
|
354
|
+
//
|
355
|
+
mutable Mutex external_watchers_mu_;
|
356
|
+
std::map<grpc_closure*, RefCountedPtr<ExternalConnectivityWatcher>>
|
357
|
+
external_watchers_;
|
290
358
|
};
|
291
359
|
|
292
360
|
//
|
@@ -306,15 +374,112 @@ class CallData {
|
|
306
374
|
|
307
375
|
RefCountedPtr<SubchannelCall> subchannel_call() { return subchannel_call_; }
|
308
376
|
|
309
|
-
// Invoked by channel for queued picks once resolver results are available.
|
310
|
-
void MaybeApplyServiceConfigToCallLocked(grpc_call_element* elem);
|
311
|
-
|
312
377
|
// Invoked by channel for queued picks when the picker is updated.
|
313
|
-
static void
|
378
|
+
static void PickSubchannel(void* arg, grpc_error* error);
|
379
|
+
|
380
|
+
// Helper function for performing a pick while holding the data plane
|
381
|
+
// mutex. Returns true if the pick is complete, in which case the caller
|
382
|
+
// must invoke PickDone() or AsyncPickDone() with the returned error.
|
383
|
+
bool PickSubchannelLocked(grpc_call_element* elem, grpc_error** error);
|
384
|
+
|
385
|
+
// Schedules a callback to process the completed pick. The callback
|
386
|
+
// will not run until after this method returns.
|
387
|
+
void AsyncPickDone(grpc_call_element* elem, grpc_error* error);
|
314
388
|
|
315
389
|
private:
|
316
390
|
class QueuedPickCanceller;
|
317
391
|
|
392
|
+
class Metadata : public LoadBalancingPolicy::MetadataInterface {
|
393
|
+
public:
|
394
|
+
Metadata(CallData* calld, grpc_metadata_batch* batch)
|
395
|
+
: calld_(calld), batch_(batch) {}
|
396
|
+
|
397
|
+
void Add(absl::string_view key, absl::string_view value) override {
|
398
|
+
grpc_linked_mdelem* linked_mdelem = static_cast<grpc_linked_mdelem*>(
|
399
|
+
calld_->arena_->Alloc(sizeof(grpc_linked_mdelem)));
|
400
|
+
linked_mdelem->md = grpc_mdelem_from_slices(
|
401
|
+
grpc_core::ExternallyManagedSlice(key.data(), key.size()),
|
402
|
+
grpc_core::ExternallyManagedSlice(value.data(), value.size()));
|
403
|
+
GPR_ASSERT(grpc_metadata_batch_link_tail(batch_, linked_mdelem) ==
|
404
|
+
GRPC_ERROR_NONE);
|
405
|
+
}
|
406
|
+
|
407
|
+
iterator begin() const override {
|
408
|
+
static_assert(sizeof(grpc_linked_mdelem*) <= sizeof(intptr_t),
|
409
|
+
"iterator size too large");
|
410
|
+
return iterator(
|
411
|
+
this, reinterpret_cast<intptr_t>(MaybeSkipEntry(batch_->list.head)));
|
412
|
+
}
|
413
|
+
iterator end() const override {
|
414
|
+
static_assert(sizeof(grpc_linked_mdelem*) <= sizeof(intptr_t),
|
415
|
+
"iterator size too large");
|
416
|
+
return iterator(this, 0);
|
417
|
+
}
|
418
|
+
|
419
|
+
iterator erase(iterator it) override {
|
420
|
+
grpc_linked_mdelem* linked_mdelem =
|
421
|
+
reinterpret_cast<grpc_linked_mdelem*>(GetIteratorHandle(it));
|
422
|
+
intptr_t handle = reinterpret_cast<intptr_t>(linked_mdelem->next);
|
423
|
+
grpc_metadata_batch_remove(batch_, linked_mdelem);
|
424
|
+
return iterator(this, handle);
|
425
|
+
}
|
426
|
+
|
427
|
+
private:
|
428
|
+
grpc_linked_mdelem* MaybeSkipEntry(grpc_linked_mdelem* entry) const {
|
429
|
+
if (entry != nullptr && batch_->idx.named.path == entry) {
|
430
|
+
return entry->next;
|
431
|
+
}
|
432
|
+
return entry;
|
433
|
+
}
|
434
|
+
|
435
|
+
intptr_t IteratorHandleNext(intptr_t handle) const override {
|
436
|
+
grpc_linked_mdelem* linked_mdelem =
|
437
|
+
reinterpret_cast<grpc_linked_mdelem*>(handle);
|
438
|
+
return reinterpret_cast<intptr_t>(MaybeSkipEntry(linked_mdelem->next));
|
439
|
+
}
|
440
|
+
|
441
|
+
std::pair<absl::string_view, absl::string_view> IteratorHandleGet(
|
442
|
+
intptr_t handle) const override {
|
443
|
+
grpc_linked_mdelem* linked_mdelem =
|
444
|
+
reinterpret_cast<grpc_linked_mdelem*>(handle);
|
445
|
+
return std::make_pair(
|
446
|
+
StringViewFromSlice(GRPC_MDKEY(linked_mdelem->md)),
|
447
|
+
StringViewFromSlice(GRPC_MDVALUE(linked_mdelem->md)));
|
448
|
+
}
|
449
|
+
|
450
|
+
CallData* calld_;
|
451
|
+
grpc_metadata_batch* batch_;
|
452
|
+
};
|
453
|
+
|
454
|
+
class LbCallState : public LoadBalancingPolicy::CallState {
|
455
|
+
public:
|
456
|
+
explicit LbCallState(CallData* calld) : calld_(calld) {}
|
457
|
+
|
458
|
+
void* Alloc(size_t size) override { return calld_->arena_->Alloc(size); }
|
459
|
+
|
460
|
+
const LoadBalancingPolicy::BackendMetricData* GetBackendMetricData()
|
461
|
+
override {
|
462
|
+
if (calld_->backend_metric_data_ == nullptr) {
|
463
|
+
grpc_linked_mdelem* md = calld_->recv_trailing_metadata_->idx.named
|
464
|
+
.x_endpoint_load_metrics_bin;
|
465
|
+
if (md != nullptr) {
|
466
|
+
calld_->backend_metric_data_ =
|
467
|
+
ParseBackendMetricData(GRPC_MDVALUE(md->md), calld_->arena_);
|
468
|
+
}
|
469
|
+
}
|
470
|
+
return calld_->backend_metric_data_;
|
471
|
+
}
|
472
|
+
|
473
|
+
absl::string_view ExperimentalGetCallAttribute(const char* key) override {
|
474
|
+
auto it = calld_->call_attributes_.find(key);
|
475
|
+
if (it == calld_->call_attributes_.end()) return absl::string_view();
|
476
|
+
return it->second;
|
477
|
+
}
|
478
|
+
|
479
|
+
private:
|
480
|
+
CallData* calld_;
|
481
|
+
};
|
482
|
+
|
318
483
|
// State used for starting a retryable batch on a subchannel call.
|
319
484
|
// This provides its own grpc_transport_stream_op_batch and other data
|
320
485
|
// structures needed to populate the ops in the batch.
|
@@ -450,8 +615,9 @@ class CallData {
|
|
450
615
|
grpc_call_element* elem, SubchannelCallBatchData* batch_data,
|
451
616
|
SubchannelCallRetryState* retry_state);
|
452
617
|
|
453
|
-
static void
|
454
|
-
|
618
|
+
static void RecvTrailingMetadataReadyForLoadBalancingPolicy(
|
619
|
+
void* arg, grpc_error* error);
|
620
|
+
void MaybeInjectRecvTrailingMetadataReadyForLoadBalancingPolicy(
|
455
621
|
grpc_transport_stream_op_batch* batch);
|
456
622
|
|
457
623
|
// Returns the index into pending_batches_ to be used for batch.
|
@@ -464,10 +630,10 @@ class CallData {
|
|
464
630
|
// A predicate type and some useful implementations for PendingBatchesFail().
|
465
631
|
typedef bool (*YieldCallCombinerPredicate)(
|
466
632
|
const CallCombinerClosureList& closures);
|
467
|
-
static bool YieldCallCombiner(const CallCombinerClosureList& closures) {
|
633
|
+
static bool YieldCallCombiner(const CallCombinerClosureList& /*closures*/) {
|
468
634
|
return true;
|
469
635
|
}
|
470
|
-
static bool NoYieldCallCombiner(const CallCombinerClosureList& closures) {
|
636
|
+
static bool NoYieldCallCombiner(const CallCombinerClosureList& /*closures*/) {
|
471
637
|
return false;
|
472
638
|
}
|
473
639
|
static bool YieldCallCombinerIfPendingBatchesFound(
|
@@ -513,8 +679,8 @@ class CallData {
|
|
513
679
|
|
514
680
|
// Sets *status and *server_pushback_md based on md_batch and error.
|
515
681
|
// Only sets *server_pushback_md if server_pushback_md != nullptr.
|
516
|
-
void GetCallStatus(
|
517
|
-
|
682
|
+
void GetCallStatus(grpc_metadata_batch* md_batch, grpc_error* error,
|
683
|
+
grpc_status_code* status,
|
518
684
|
grpc_mdelem** server_pushback_md);
|
519
685
|
// Adds recv_trailing_metadata_ready closure to closures.
|
520
686
|
void AddClosureForRecvTrailingMetadataReady(
|
@@ -543,10 +709,10 @@ class CallData {
|
|
543
709
|
|
544
710
|
// Adds the on_complete closure for the pending batch completed in
|
545
711
|
// batch_data to closures.
|
546
|
-
void AddClosuresForCompletedPendingBatch(
|
547
|
-
|
548
|
-
|
549
|
-
|
712
|
+
void AddClosuresForCompletedPendingBatch(grpc_call_element* elem,
|
713
|
+
SubchannelCallBatchData* batch_data,
|
714
|
+
grpc_error* error,
|
715
|
+
CallCombinerClosureList* closures);
|
550
716
|
|
551
717
|
// If there are any cached ops to replay or pending ops to start on the
|
552
718
|
// subchannel call, adds a closure to closures to invoke
|
@@ -604,13 +770,17 @@ class CallData {
|
|
604
770
|
void CreateSubchannelCall(grpc_call_element* elem);
|
605
771
|
// Invoked when a pick is completed, on both success or failure.
|
606
772
|
static void PickDone(void* arg, grpc_error* error);
|
607
|
-
// Removes the call from the channel's list of queued picks.
|
608
|
-
void
|
609
|
-
// Adds the call to the channel's list of queued picks.
|
610
|
-
void
|
773
|
+
// Removes the call from the channel's list of queued picks if present.
|
774
|
+
void MaybeRemoveCallFromQueuedPicksLocked(grpc_call_element* elem);
|
775
|
+
// Adds the call to the channel's list of queued picks if not already present.
|
776
|
+
void MaybeAddCallToQueuedPicksLocked(grpc_call_element* elem);
|
611
777
|
// Applies service config to the call. Must be invoked once we know
|
612
778
|
// that the resolver has returned results to the channel.
|
613
|
-
|
779
|
+
// If an error is returned, the error indicates the status with which
|
780
|
+
// the call should be failed.
|
781
|
+
grpc_error* ApplyServiceConfigToCallLocked(
|
782
|
+
grpc_call_element* elem, grpc_metadata_batch* initial_metadata);
|
783
|
+
void MaybeInvokeConfigSelectorCommitCallback();
|
614
784
|
|
615
785
|
// State for handling deadlines.
|
616
786
|
// The code in deadline_filter.c requires this to be the first field.
|
@@ -621,7 +791,7 @@ class CallData {
|
|
621
791
|
grpc_deadline_state deadline_state_;
|
622
792
|
|
623
793
|
grpc_slice path_; // Request path.
|
624
|
-
|
794
|
+
gpr_cycle_counter call_start_time_;
|
625
795
|
grpc_millis deadline_;
|
626
796
|
Arena* arena_;
|
627
797
|
grpc_call_stack* owning_call_;
|
@@ -629,8 +799,9 @@ class CallData {
|
|
629
799
|
grpc_call_context_element* call_context_;
|
630
800
|
|
631
801
|
RefCountedPtr<ServerRetryThrottleData> retry_throttle_data_;
|
632
|
-
|
633
|
-
const
|
802
|
+
const ClientChannelMethodParsedConfig* method_params_ = nullptr;
|
803
|
+
std::map<const char*, absl::string_view> call_attributes_;
|
804
|
+
std::function<void()> on_call_committed_;
|
634
805
|
|
635
806
|
RefCountedPtr<SubchannelCall> subchannel_call_;
|
636
807
|
|
@@ -641,8 +812,19 @@ class CallData {
|
|
641
812
|
bool pick_queued_ = false;
|
642
813
|
bool service_config_applied_ = false;
|
643
814
|
QueuedPickCanceller* pick_canceller_ = nullptr;
|
815
|
+
LbCallState lb_call_state_;
|
816
|
+
const LoadBalancingPolicy::BackendMetricData* backend_metric_data_ = nullptr;
|
817
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
|
818
|
+
std::function<void(grpc_error*, LoadBalancingPolicy::MetadataInterface*,
|
819
|
+
LoadBalancingPolicy::CallState*)>
|
820
|
+
lb_recv_trailing_metadata_ready_;
|
644
821
|
grpc_closure pick_closure_;
|
645
822
|
|
823
|
+
// For intercepting recv_trailing_metadata_ready for the LB policy.
|
824
|
+
grpc_metadata_batch* recv_trailing_metadata_ = nullptr;
|
825
|
+
grpc_closure recv_trailing_metadata_ready_;
|
826
|
+
grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
|
827
|
+
|
646
828
|
grpc_polling_entity* pollent_ = nullptr;
|
647
829
|
|
648
830
|
// Batches are added to this list when received from above.
|
@@ -688,7 +870,7 @@ class CallData {
|
|
688
870
|
// Note: We inline the cache for the first 3 send_message ops and use
|
689
871
|
// dynamic allocation after that. This number was essentially picked
|
690
872
|
// at random; it could be changed in the future to tune performance.
|
691
|
-
InlinedVector<ByteStreamCache*, 3> send_messages_;
|
873
|
+
absl::InlinedVector<ByteStreamCache*, 3> send_messages_;
|
692
874
|
// send_trailing_metadata
|
693
875
|
bool seen_send_trailing_metadata_ = false;
|
694
876
|
grpc_linked_mdelem* send_trailing_metadata_storage_ = nullptr;
|
@@ -696,176 +878,314 @@ class CallData {
|
|
696
878
|
};
|
697
879
|
|
698
880
|
//
|
699
|
-
// ChannelData::
|
881
|
+
// ChannelData::SubchannelWrapper
|
700
882
|
//
|
701
883
|
|
702
|
-
//
|
703
|
-
//
|
704
|
-
//
|
705
|
-
//
|
706
|
-
|
884
|
+
// This class is a wrapper for Subchannel that hides details of the
|
885
|
+
// channel's implementation (such as the health check service name and
|
886
|
+
// connected subchannel) from the LB policy API.
|
887
|
+
//
|
888
|
+
// Note that no synchronization is needed here, because even if the
|
889
|
+
// underlying subchannel is shared between channels, this wrapper will only
|
890
|
+
// be used within one channel, so it will always be synchronized by the
|
891
|
+
// control plane work_serializer.
|
892
|
+
class ChannelData::SubchannelWrapper : public SubchannelInterface {
|
707
893
|
public:
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
if (
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
894
|
+
SubchannelWrapper(ChannelData* chand, Subchannel* subchannel,
|
895
|
+
grpc_core::UniquePtr<char> health_check_service_name)
|
896
|
+
: SubchannelInterface(&grpc_client_channel_routing_trace),
|
897
|
+
chand_(chand),
|
898
|
+
subchannel_(subchannel),
|
899
|
+
health_check_service_name_(std::move(health_check_service_name)) {
|
900
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
901
|
+
gpr_log(GPR_INFO,
|
902
|
+
"chand=%p: creating subchannel wrapper %p for subchannel %p",
|
903
|
+
chand, this, subchannel_);
|
904
|
+
}
|
905
|
+
GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "SubchannelWrapper");
|
906
|
+
auto* subchannel_node = subchannel_->channelz_node();
|
907
|
+
if (subchannel_node != nullptr) {
|
908
|
+
auto it = chand_->subchannel_refcount_map_.find(subchannel_);
|
909
|
+
if (it == chand_->subchannel_refcount_map_.end()) {
|
910
|
+
chand_->channelz_node_->AddChildSubchannel(subchannel_node->uuid());
|
911
|
+
it = chand_->subchannel_refcount_map_.emplace(subchannel_, 0).first;
|
912
|
+
}
|
913
|
+
++it->second;
|
914
|
+
}
|
915
|
+
chand_->subchannel_wrappers_.insert(this);
|
726
916
|
}
|
727
917
|
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
}
|
745
|
-
|
746
|
-
static void SetPicker(void* arg, grpc_error* ignored) {
|
747
|
-
auto* self = static_cast<ConnectivityStateAndPickerSetter*>(arg);
|
748
|
-
// Update picker.
|
749
|
-
self->chand_->picker_ = std::move(self->picker_);
|
750
|
-
// Re-process queued picks.
|
751
|
-
for (QueuedPick* pick = self->chand_->queued_picks_; pick != nullptr;
|
752
|
-
pick = pick->next) {
|
753
|
-
CallData::StartPickLocked(pick->elem, GRPC_ERROR_NONE);
|
918
|
+
~SubchannelWrapper() {
|
919
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
920
|
+
gpr_log(GPR_INFO,
|
921
|
+
"chand=%p: destroying subchannel wrapper %p for subchannel %p",
|
922
|
+
chand_, this, subchannel_);
|
923
|
+
}
|
924
|
+
chand_->subchannel_wrappers_.erase(this);
|
925
|
+
auto* subchannel_node = subchannel_->channelz_node();
|
926
|
+
if (subchannel_node != nullptr) {
|
927
|
+
auto it = chand_->subchannel_refcount_map_.find(subchannel_);
|
928
|
+
GPR_ASSERT(it != chand_->subchannel_refcount_map_.end());
|
929
|
+
--it->second;
|
930
|
+
if (it->second == 0) {
|
931
|
+
chand_->channelz_node_->RemoveChildSubchannel(subchannel_node->uuid());
|
932
|
+
chand_->subchannel_refcount_map_.erase(it);
|
933
|
+
}
|
754
934
|
}
|
755
|
-
|
756
|
-
GRPC_CHANNEL_STACK_UNREF(
|
757
|
-
"ConnectivityStateAndPickerSetter");
|
758
|
-
Delete(self);
|
935
|
+
GRPC_SUBCHANNEL_UNREF(subchannel_, "unref from LB");
|
936
|
+
GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "SubchannelWrapper");
|
759
937
|
}
|
760
938
|
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
939
|
+
grpc_connectivity_state CheckConnectivityState() override {
|
940
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel;
|
941
|
+
grpc_connectivity_state connectivity_state =
|
942
|
+
subchannel_->CheckConnectivityState(health_check_service_name_.get(),
|
943
|
+
&connected_subchannel);
|
944
|
+
MaybeUpdateConnectedSubchannel(std::move(connected_subchannel));
|
945
|
+
return connectivity_state;
|
946
|
+
}
|
769
947
|
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
grpc_combiner_scheduler(chand->data_plane_combiner_));
|
785
|
-
GRPC_CLOSURE_SCHED(&closure_, GRPC_ERROR_NONE);
|
948
|
+
void WatchConnectivityState(
|
949
|
+
grpc_connectivity_state initial_state,
|
950
|
+
std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override {
|
951
|
+
auto& watcher_wrapper = watcher_map_[watcher.get()];
|
952
|
+
GPR_ASSERT(watcher_wrapper == nullptr);
|
953
|
+
watcher_wrapper = new WatcherWrapper(std::move(watcher),
|
954
|
+
Ref(DEBUG_LOCATION, "WatcherWrapper"),
|
955
|
+
initial_state);
|
956
|
+
subchannel_->WatchConnectivityState(
|
957
|
+
initial_state,
|
958
|
+
grpc_core::UniquePtr<char>(
|
959
|
+
gpr_strdup(health_check_service_name_.get())),
|
960
|
+
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
|
961
|
+
watcher_wrapper));
|
786
962
|
}
|
787
963
|
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
chand->retry_throttle_data_ =
|
796
|
-
internal::ServerRetryThrottleMap::GetDataForServer(
|
797
|
-
chand->server_name_.get(),
|
798
|
-
self->retry_throttle_data_.value().max_milli_tokens,
|
799
|
-
self->retry_throttle_data_.value().milli_token_ratio);
|
800
|
-
}
|
801
|
-
chand->service_config_ = std::move(self->service_config_);
|
802
|
-
// Apply service config to queued picks.
|
803
|
-
for (QueuedPick* pick = chand->queued_picks_; pick != nullptr;
|
804
|
-
pick = pick->next) {
|
805
|
-
CallData* calld = static_cast<CallData*>(pick->elem->call_data);
|
806
|
-
calld->MaybeApplyServiceConfigToCallLocked(pick->elem);
|
807
|
-
}
|
808
|
-
// Clean up.
|
809
|
-
GRPC_CHANNEL_STACK_UNREF(self->chand_->owning_stack_,
|
810
|
-
"ServiceConfigSetter");
|
811
|
-
Delete(self);
|
964
|
+
void CancelConnectivityStateWatch(
|
965
|
+
ConnectivityStateWatcherInterface* watcher) override {
|
966
|
+
auto it = watcher_map_.find(watcher);
|
967
|
+
GPR_ASSERT(it != watcher_map_.end());
|
968
|
+
subchannel_->CancelConnectivityStateWatch(health_check_service_name_.get(),
|
969
|
+
it->second);
|
970
|
+
watcher_map_.erase(it);
|
812
971
|
}
|
813
972
|
|
814
|
-
|
815
|
-
Optional<internal::ClientChannelGlobalParsedObject::RetryThrottling>
|
816
|
-
retry_throttle_data_;
|
817
|
-
RefCountedPtr<ServiceConfig> service_config_;
|
818
|
-
grpc_closure closure_;
|
819
|
-
};
|
973
|
+
void AttemptToConnect() override { subchannel_->AttemptToConnect(); }
|
820
974
|
|
821
|
-
|
822
|
-
// ChannelData::ExternalConnectivityWatcher::WatcherList
|
823
|
-
//
|
975
|
+
void ResetBackoff() override { subchannel_->ResetBackoff(); }
|
824
976
|
|
825
|
-
int
|
826
|
-
|
827
|
-
int count = 0;
|
828
|
-
for (ExternalConnectivityWatcher* w = head_; w != nullptr; w = w->next_) {
|
829
|
-
++count;
|
977
|
+
void ThrottleKeepaliveTime(int new_keepalive_time) {
|
978
|
+
subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
|
830
979
|
}
|
831
|
-
return count;
|
832
|
-
}
|
833
980
|
|
834
|
-
|
835
|
-
|
836
|
-
grpc_closure* on_complete) const {
|
837
|
-
MutexLock lock(&mu_);
|
838
|
-
ExternalConnectivityWatcher* w = head_;
|
839
|
-
while (w != nullptr && w->on_complete_ != on_complete) {
|
840
|
-
w = w->next_;
|
981
|
+
const grpc_channel_args* channel_args() override {
|
982
|
+
return subchannel_->channel_args();
|
841
983
|
}
|
842
|
-
return w;
|
843
|
-
}
|
844
984
|
|
845
|
-
void
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
985
|
+
void UpdateHealthCheckServiceName(
|
986
|
+
grpc_core::UniquePtr<char> health_check_service_name) {
|
987
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
988
|
+
gpr_log(GPR_INFO,
|
989
|
+
"chand=%p: subchannel wrapper %p: updating health check service "
|
990
|
+
"name from \"%s\" to \"%s\"",
|
991
|
+
chand_, this, health_check_service_name_.get(),
|
992
|
+
health_check_service_name.get());
|
993
|
+
}
|
994
|
+
for (auto& p : watcher_map_) {
|
995
|
+
WatcherWrapper*& watcher_wrapper = p.second;
|
996
|
+
// Cancel the current watcher and create a new one using the new
|
997
|
+
// health check service name.
|
998
|
+
// TODO(roth): If there is not already an existing health watch
|
999
|
+
// call for the new name, then the watcher will initially report
|
1000
|
+
// state CONNECTING. If the LB policy is currently reporting
|
1001
|
+
// state READY, this may cause it to switch to CONNECTING before
|
1002
|
+
// switching back to READY. This could cause a small delay for
|
1003
|
+
// RPCs being started on the channel. If/when this becomes a
|
1004
|
+
// problem, we may be able to handle it by waiting for the new
|
1005
|
+
// watcher to report READY before we use it to replace the old one.
|
1006
|
+
WatcherWrapper* replacement = watcher_wrapper->MakeReplacement();
|
1007
|
+
subchannel_->CancelConnectivityStateWatch(
|
1008
|
+
health_check_service_name_.get(), watcher_wrapper);
|
1009
|
+
watcher_wrapper = replacement;
|
1010
|
+
subchannel_->WatchConnectivityState(
|
1011
|
+
replacement->last_seen_state(),
|
1012
|
+
grpc_core::UniquePtr<char>(
|
1013
|
+
gpr_strdup(health_check_service_name.get())),
|
1014
|
+
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
|
1015
|
+
replacement));
|
1016
|
+
}
|
1017
|
+
// Save the new health check service name.
|
1018
|
+
health_check_service_name_ = std::move(health_check_service_name);
|
1019
|
+
}
|
853
1020
|
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
if (watcher == head_) {
|
858
|
-
head_ = watcher->next_;
|
859
|
-
return;
|
1021
|
+
// Caller must be holding the control-plane work_serializer.
|
1022
|
+
ConnectedSubchannel* connected_subchannel() const {
|
1023
|
+
return connected_subchannel_.get();
|
860
1024
|
}
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
1025
|
+
|
1026
|
+
// Caller must be holding the data-plane mutex.
|
1027
|
+
ConnectedSubchannel* connected_subchannel_in_data_plane() const {
|
1028
|
+
return connected_subchannel_in_data_plane_.get();
|
1029
|
+
}
|
1030
|
+
void set_connected_subchannel_in_data_plane(
|
1031
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel) {
|
1032
|
+
connected_subchannel_in_data_plane_ = std::move(connected_subchannel);
|
1033
|
+
}
|
1034
|
+
|
1035
|
+
private:
|
1036
|
+
// Subchannel and SubchannelInterface have different interfaces for
|
1037
|
+
// their respective ConnectivityStateWatcherInterface classes.
|
1038
|
+
// The one in Subchannel updates the ConnectedSubchannel along with
|
1039
|
+
// the state, whereas the one in SubchannelInterface does not expose
|
1040
|
+
// the ConnectedSubchannel.
|
1041
|
+
//
|
1042
|
+
// This wrapper provides a bridge between the two. It implements
|
1043
|
+
// Subchannel::ConnectivityStateWatcherInterface and wraps
|
1044
|
+
// the instance of SubchannelInterface::ConnectivityStateWatcherInterface
|
1045
|
+
// that was passed in by the LB policy. We pass an instance of this
|
1046
|
+
// class to the underlying Subchannel, and when we get updates from
|
1047
|
+
// the subchannel, we pass those on to the wrapped watcher to return
|
1048
|
+
// the update to the LB policy. This allows us to set the connected
|
1049
|
+
// subchannel before passing the result back to the LB policy.
|
1050
|
+
class WatcherWrapper : public Subchannel::ConnectivityStateWatcherInterface {
|
1051
|
+
public:
|
1052
|
+
WatcherWrapper(
|
1053
|
+
std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
|
1054
|
+
watcher,
|
1055
|
+
RefCountedPtr<SubchannelWrapper> parent,
|
1056
|
+
grpc_connectivity_state initial_state)
|
1057
|
+
: watcher_(std::move(watcher)),
|
1058
|
+
parent_(std::move(parent)),
|
1059
|
+
last_seen_state_(initial_state) {}
|
1060
|
+
|
1061
|
+
~WatcherWrapper() {
|
1062
|
+
auto* parent = parent_.release(); // ref owned by lambda
|
1063
|
+
parent->chand_->work_serializer_->Run(
|
1064
|
+
[parent]() { parent->Unref(DEBUG_LOCATION, "WatcherWrapper"); },
|
1065
|
+
DEBUG_LOCATION);
|
1066
|
+
}
|
1067
|
+
|
1068
|
+
void OnConnectivityStateChange() override {
|
1069
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1070
|
+
gpr_log(GPR_INFO,
|
1071
|
+
"chand=%p: connectivity change for subchannel wrapper %p "
|
1072
|
+
"subchannel %p; hopping into work_serializer",
|
1073
|
+
parent_->chand_, parent_.get(), parent_->subchannel_);
|
1074
|
+
}
|
1075
|
+
Ref().release(); // ref owned by lambda
|
1076
|
+
parent_->chand_->work_serializer_->Run(
|
1077
|
+
[this]() {
|
1078
|
+
ApplyUpdateInControlPlaneWorkSerializer();
|
1079
|
+
Unref();
|
1080
|
+
},
|
1081
|
+
DEBUG_LOCATION);
|
1082
|
+
}
|
1083
|
+
|
1084
|
+
grpc_pollset_set* interested_parties() override {
|
1085
|
+
SubchannelInterface::ConnectivityStateWatcherInterface* watcher =
|
1086
|
+
watcher_.get();
|
1087
|
+
if (watcher_ == nullptr) watcher = replacement_->watcher_.get();
|
1088
|
+
return watcher->interested_parties();
|
1089
|
+
}
|
1090
|
+
|
1091
|
+
WatcherWrapper* MakeReplacement() {
|
1092
|
+
auto* replacement =
|
1093
|
+
new WatcherWrapper(std::move(watcher_), parent_, last_seen_state_);
|
1094
|
+
replacement_ = replacement;
|
1095
|
+
return replacement;
|
1096
|
+
}
|
1097
|
+
|
1098
|
+
grpc_connectivity_state last_seen_state() const { return last_seen_state_; }
|
1099
|
+
|
1100
|
+
private:
|
1101
|
+
void ApplyUpdateInControlPlaneWorkSerializer() {
|
1102
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1103
|
+
gpr_log(GPR_INFO,
|
1104
|
+
"chand=%p: processing connectivity change in work serializer "
|
1105
|
+
"for subchannel wrapper %p subchannel %p "
|
1106
|
+
"watcher=%p",
|
1107
|
+
parent_->chand_, parent_.get(), parent_->subchannel_,
|
1108
|
+
watcher_.get());
|
1109
|
+
}
|
1110
|
+
ConnectivityStateChange state_change = PopConnectivityStateChange();
|
1111
|
+
absl::optional<absl::Cord> keepalive_throttling =
|
1112
|
+
state_change.status.GetPayload(grpc_core::kKeepaliveThrottlingKey);
|
1113
|
+
if (keepalive_throttling.has_value()) {
|
1114
|
+
int new_keepalive_time = -1;
|
1115
|
+
if (absl::SimpleAtoi(std::string(keepalive_throttling.value()),
|
1116
|
+
&new_keepalive_time)) {
|
1117
|
+
if (new_keepalive_time > parent_->chand_->keepalive_time_) {
|
1118
|
+
parent_->chand_->keepalive_time_ = new_keepalive_time;
|
1119
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1120
|
+
gpr_log(GPR_INFO, "chand=%p: throttling keepalive time to %d",
|
1121
|
+
parent_->chand_, parent_->chand_->keepalive_time_);
|
1122
|
+
}
|
1123
|
+
// Propagate the new keepalive time to all subchannels. This is so
|
1124
|
+
// that new transports created by any subchannel (and not just the
|
1125
|
+
// subchannel that received the GOAWAY), use the new keepalive time.
|
1126
|
+
for (auto* subchannel_wrapper :
|
1127
|
+
parent_->chand_->subchannel_wrappers_) {
|
1128
|
+
subchannel_wrapper->ThrottleKeepaliveTime(new_keepalive_time);
|
1129
|
+
}
|
1130
|
+
}
|
1131
|
+
} else {
|
1132
|
+
gpr_log(GPR_ERROR, "chand=%p: Illegal keepalive throttling value %s",
|
1133
|
+
parent_->chand_,
|
1134
|
+
std::string(keepalive_throttling.value()).c_str());
|
1135
|
+
}
|
1136
|
+
}
|
1137
|
+
// Ignore update if the parent WatcherWrapper has been replaced
|
1138
|
+
// since this callback was scheduled.
|
1139
|
+
if (watcher_ != nullptr) {
|
1140
|
+
last_seen_state_ = state_change.state;
|
1141
|
+
parent_->MaybeUpdateConnectedSubchannel(
|
1142
|
+
std::move(state_change.connected_subchannel));
|
1143
|
+
watcher_->OnConnectivityStateChange(state_change.state);
|
1144
|
+
}
|
1145
|
+
}
|
1146
|
+
|
1147
|
+
std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
|
1148
|
+
watcher_;
|
1149
|
+
RefCountedPtr<SubchannelWrapper> parent_;
|
1150
|
+
grpc_connectivity_state last_seen_state_;
|
1151
|
+
WatcherWrapper* replacement_ = nullptr;
|
1152
|
+
};
|
1153
|
+
|
1154
|
+
void MaybeUpdateConnectedSubchannel(
|
1155
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel) {
|
1156
|
+
// Update the connected subchannel only if the channel is not shutting
|
1157
|
+
// down. This is because once the channel is shutting down, we
|
1158
|
+
// ignore picker updates from the LB policy, which means that
|
1159
|
+
// UpdateStateAndPickerLocked() will never process the entries
|
1160
|
+
// in chand_->pending_subchannel_updates_. So we don't want to add
|
1161
|
+
// entries there that will never be processed, since that would
|
1162
|
+
// leave dangling refs to the channel and prevent its destruction.
|
1163
|
+
grpc_error* disconnect_error = chand_->disconnect_error();
|
1164
|
+
if (disconnect_error != GRPC_ERROR_NONE) return;
|
1165
|
+
// Not shutting down, so do the update.
|
1166
|
+
if (connected_subchannel_ != connected_subchannel) {
|
1167
|
+
connected_subchannel_ = std::move(connected_subchannel);
|
1168
|
+
// Record the new connected subchannel so that it can be updated
|
1169
|
+
// in the data plane mutex the next time the picker is updated.
|
1170
|
+
chand_->pending_subchannel_updates_[Ref(
|
1171
|
+
DEBUG_LOCATION, "ConnectedSubchannelUpdate")] = connected_subchannel_;
|
865
1172
|
}
|
866
1173
|
}
|
867
|
-
|
868
|
-
|
1174
|
+
|
1175
|
+
ChannelData* chand_;
|
1176
|
+
Subchannel* subchannel_;
|
1177
|
+
grpc_core::UniquePtr<char> health_check_service_name_;
|
1178
|
+
// Maps from the address of the watcher passed to us by the LB policy
|
1179
|
+
// to the address of the WrapperWatcher that we passed to the underlying
|
1180
|
+
// subchannel. This is needed so that when the LB policy calls
|
1181
|
+
// CancelConnectivityStateWatch() with its watcher, we know the
|
1182
|
+
// corresponding WrapperWatcher to cancel on the underlying subchannel.
|
1183
|
+
std::map<ConnectivityStateWatcherInterface*, WatcherWrapper*> watcher_map_;
|
1184
|
+
// To be accessed only in the control plane work_serializer.
|
1185
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
|
1186
|
+
// To be accessed only in the data plane mutex.
|
1187
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel_in_data_plane_;
|
1188
|
+
};
|
869
1189
|
|
870
1190
|
//
|
871
1191
|
// ChannelData::ExternalConnectivityWatcher
|
@@ -877,16 +1197,28 @@ ChannelData::ExternalConnectivityWatcher::ExternalConnectivityWatcher(
|
|
877
1197
|
grpc_closure* watcher_timer_init)
|
878
1198
|
: chand_(chand),
|
879
1199
|
pollent_(pollent),
|
1200
|
+
initial_state_(*state),
|
880
1201
|
state_(state),
|
881
1202
|
on_complete_(on_complete),
|
882
1203
|
watcher_timer_init_(watcher_timer_init) {
|
883
1204
|
grpc_polling_entity_add_to_pollset_set(&pollent_,
|
884
1205
|
chand_->interested_parties_);
|
885
1206
|
GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ExternalConnectivityWatcher");
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
1207
|
+
{
|
1208
|
+
MutexLock lock(&chand_->external_watchers_mu_);
|
1209
|
+
// Will be deleted when the watch is complete.
|
1210
|
+
GPR_ASSERT(chand->external_watchers_[on_complete] == nullptr);
|
1211
|
+
// Store a ref to the watcher in the external_watchers_ map.
|
1212
|
+
chand->external_watchers_[on_complete] =
|
1213
|
+
Ref(DEBUG_LOCATION, "AddWatcherToExternalWatchersMapLocked");
|
1214
|
+
}
|
1215
|
+
// Pass the ref from creating the object to Start().
|
1216
|
+
chand_->work_serializer_->Run(
|
1217
|
+
[this]() {
|
1218
|
+
// The ref is passed to AddWatcherLocked().
|
1219
|
+
AddWatcherLocked();
|
1220
|
+
},
|
1221
|
+
DEBUG_LOCATION);
|
890
1222
|
}
|
891
1223
|
|
892
1224
|
ChannelData::ExternalConnectivityWatcher::~ExternalConnectivityWatcher() {
|
@@ -896,44 +1228,123 @@ ChannelData::ExternalConnectivityWatcher::~ExternalConnectivityWatcher() {
|
|
896
1228
|
"ExternalConnectivityWatcher");
|
897
1229
|
}
|
898
1230
|
|
899
|
-
void ChannelData::ExternalConnectivityWatcher::
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
ExternalConnectivityWatcher* self =
|
912
|
-
static_cast<ExternalConnectivityWatcher*>(arg);
|
913
|
-
if (self->state_ == nullptr) {
|
914
|
-
// Handle cancellation.
|
915
|
-
GPR_ASSERT(self->watcher_timer_init_ == nullptr);
|
916
|
-
ExternalConnectivityWatcher* found =
|
917
|
-
self->chand_->external_connectivity_watcher_list_.Lookup(
|
918
|
-
self->on_complete_);
|
919
|
-
if (found != nullptr) {
|
920
|
-
grpc_connectivity_state_notify_on_state_change(
|
921
|
-
&found->chand_->state_tracker_, nullptr, &found->my_closure_);
|
922
|
-
}
|
923
|
-
Delete(self);
|
924
|
-
return;
|
1231
|
+
void ChannelData::ExternalConnectivityWatcher::
|
1232
|
+
RemoveWatcherFromExternalWatchersMap(ChannelData* chand,
|
1233
|
+
grpc_closure* on_complete,
|
1234
|
+
bool cancel) {
|
1235
|
+
RefCountedPtr<ExternalConnectivityWatcher> watcher;
|
1236
|
+
{
|
1237
|
+
MutexLock lock(&chand->external_watchers_mu_);
|
1238
|
+
auto it = chand->external_watchers_.find(on_complete);
|
1239
|
+
if (it != chand->external_watchers_.end()) {
|
1240
|
+
watcher = std::move(it->second);
|
1241
|
+
chand->external_watchers_.erase(it);
|
1242
|
+
}
|
925
1243
|
}
|
926
|
-
//
|
927
|
-
|
928
|
-
|
929
|
-
// and that GRPC_CLOSURE_RUN would run the closure immediately.
|
930
|
-
GRPC_CLOSURE_RUN(self->watcher_timer_init_, GRPC_ERROR_NONE);
|
931
|
-
GRPC_CLOSURE_INIT(&self->my_closure_, OnWatchCompleteLocked, self,
|
932
|
-
grpc_combiner_scheduler(self->chand_->combiner_));
|
933
|
-
grpc_connectivity_state_notify_on_state_change(
|
934
|
-
&self->chand_->state_tracker_, self->state_, &self->my_closure_);
|
1244
|
+
// watcher->Cancel() will hop into the WorkSerializer, so we have to unlock
|
1245
|
+
// the mutex before calling it.
|
1246
|
+
if (watcher != nullptr && cancel) watcher->Cancel();
|
935
1247
|
}
|
936
1248
|
|
1249
|
+
void ChannelData::ExternalConnectivityWatcher::Notify(
|
1250
|
+
grpc_connectivity_state state, const absl::Status& /* status */) {
|
1251
|
+
bool done = false;
|
1252
|
+
if (!done_.CompareExchangeStrong(&done, true, MemoryOrder::RELAXED,
|
1253
|
+
MemoryOrder::RELAXED)) {
|
1254
|
+
return; // Already done.
|
1255
|
+
}
|
1256
|
+
// Remove external watcher.
|
1257
|
+
chand_->RemoveExternalConnectivityWatcher(on_complete_, /*cancel=*/false);
|
1258
|
+
// Report new state to the user.
|
1259
|
+
*state_ = state;
|
1260
|
+
ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_NONE);
|
1261
|
+
// Hop back into the work_serializer to clean up.
|
1262
|
+
// Not needed in state SHUTDOWN, because the tracker will
|
1263
|
+
// automatically remove all watchers in that case.
|
1264
|
+
if (state != GRPC_CHANNEL_SHUTDOWN) {
|
1265
|
+
chand_->work_serializer_->Run([this]() { RemoveWatcherLocked(); },
|
1266
|
+
DEBUG_LOCATION);
|
1267
|
+
}
|
1268
|
+
}
|
1269
|
+
|
1270
|
+
void ChannelData::ExternalConnectivityWatcher::Cancel() {
|
1271
|
+
bool done = false;
|
1272
|
+
if (!done_.CompareExchangeStrong(&done, true, MemoryOrder::RELAXED,
|
1273
|
+
MemoryOrder::RELAXED)) {
|
1274
|
+
return; // Already done.
|
1275
|
+
}
|
1276
|
+
ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_CANCELLED);
|
1277
|
+
// Hop back into the work_serializer to clean up.
|
1278
|
+
chand_->work_serializer_->Run([this]() { RemoveWatcherLocked(); },
|
1279
|
+
DEBUG_LOCATION);
|
1280
|
+
}
|
1281
|
+
|
1282
|
+
void ChannelData::ExternalConnectivityWatcher::AddWatcherLocked() {
|
1283
|
+
Closure::Run(DEBUG_LOCATION, watcher_timer_init_, GRPC_ERROR_NONE);
|
1284
|
+
// Add new watcher. Pass the ref of the object from creation to OrphanablePtr.
|
1285
|
+
chand_->state_tracker_.AddWatcher(
|
1286
|
+
initial_state_, OrphanablePtr<ConnectivityStateWatcherInterface>(this));
|
1287
|
+
}
|
1288
|
+
|
1289
|
+
void ChannelData::ExternalConnectivityWatcher::RemoveWatcherLocked() {
|
1290
|
+
chand_->state_tracker_.RemoveWatcher(this);
|
1291
|
+
}
|
1292
|
+
|
1293
|
+
//
|
1294
|
+
// ChannelData::ConnectivityWatcherAdder
|
1295
|
+
//
|
1296
|
+
|
1297
|
+
class ChannelData::ConnectivityWatcherAdder {
|
1298
|
+
public:
|
1299
|
+
ConnectivityWatcherAdder(
|
1300
|
+
ChannelData* chand, grpc_connectivity_state initial_state,
|
1301
|
+
OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher)
|
1302
|
+
: chand_(chand),
|
1303
|
+
initial_state_(initial_state),
|
1304
|
+
watcher_(std::move(watcher)) {
|
1305
|
+
GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ConnectivityWatcherAdder");
|
1306
|
+
chand_->work_serializer_->Run([this]() { AddWatcherLocked(); },
|
1307
|
+
DEBUG_LOCATION);
|
1308
|
+
}
|
1309
|
+
|
1310
|
+
private:
|
1311
|
+
void AddWatcherLocked() {
|
1312
|
+
chand_->state_tracker_.AddWatcher(initial_state_, std::move(watcher_));
|
1313
|
+
GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "ConnectivityWatcherAdder");
|
1314
|
+
delete this;
|
1315
|
+
}
|
1316
|
+
|
1317
|
+
ChannelData* chand_;
|
1318
|
+
grpc_connectivity_state initial_state_;
|
1319
|
+
OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher_;
|
1320
|
+
};
|
1321
|
+
|
1322
|
+
//
|
1323
|
+
// ChannelData::ConnectivityWatcherRemover
|
1324
|
+
//
|
1325
|
+
|
1326
|
+
class ChannelData::ConnectivityWatcherRemover {
|
1327
|
+
public:
|
1328
|
+
ConnectivityWatcherRemover(ChannelData* chand,
|
1329
|
+
AsyncConnectivityStateWatcherInterface* watcher)
|
1330
|
+
: chand_(chand), watcher_(watcher) {
|
1331
|
+
GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ConnectivityWatcherRemover");
|
1332
|
+
chand_->work_serializer_->Run([this]() { RemoveWatcherLocked(); },
|
1333
|
+
DEBUG_LOCATION);
|
1334
|
+
}
|
1335
|
+
|
1336
|
+
private:
|
1337
|
+
void RemoveWatcherLocked() {
|
1338
|
+
chand_->state_tracker_.RemoveWatcher(watcher_);
|
1339
|
+
GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_,
|
1340
|
+
"ConnectivityWatcherRemover");
|
1341
|
+
delete this;
|
1342
|
+
}
|
1343
|
+
|
1344
|
+
ChannelData* chand_;
|
1345
|
+
AsyncConnectivityStateWatcherInterface* watcher_;
|
1346
|
+
};
|
1347
|
+
|
937
1348
|
//
|
938
1349
|
// ChannelData::ClientChannelControlHelper
|
939
1350
|
//
|
@@ -950,57 +1361,248 @@ class ChannelData::ClientChannelControlHelper
|
|
950
1361
|
"ClientChannelControlHelper");
|
951
1362
|
}
|
952
1363
|
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
1364
|
+
RefCountedPtr<SubchannelInterface> CreateSubchannel(
|
1365
|
+
const grpc_channel_args& args) override {
|
1366
|
+
bool inhibit_health_checking = grpc_channel_arg_get_bool(
|
1367
|
+
grpc_channel_args_find(&args, GRPC_ARG_INHIBIT_HEALTH_CHECKING), false);
|
1368
|
+
grpc_core::UniquePtr<char> health_check_service_name;
|
1369
|
+
if (!inhibit_health_checking) {
|
1370
|
+
health_check_service_name.reset(
|
1371
|
+
gpr_strdup(chand_->health_check_service_name_.get()));
|
961
1372
|
}
|
962
|
-
|
1373
|
+
static const char* args_to_remove[] = {
|
1374
|
+
GRPC_ARG_INHIBIT_HEALTH_CHECKING,
|
1375
|
+
GRPC_ARG_CHANNELZ_CHANNEL_NODE,
|
1376
|
+
};
|
1377
|
+
grpc_arg arg = SubchannelPoolInterface::CreateChannelArg(
|
963
1378
|
chand_->subchannel_pool_.get());
|
964
|
-
grpc_channel_args* new_args =
|
965
|
-
|
1379
|
+
grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
|
1380
|
+
&args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &arg, 1);
|
966
1381
|
Subchannel* subchannel =
|
967
1382
|
chand_->client_channel_factory_->CreateSubchannel(new_args);
|
968
1383
|
grpc_channel_args_destroy(new_args);
|
969
|
-
return
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
const grpc_channel_args& args) override {
|
974
|
-
return chand_->client_channel_factory_->CreateChannel(target, &args);
|
1384
|
+
if (subchannel == nullptr) return nullptr;
|
1385
|
+
subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
|
1386
|
+
return MakeRefCounted<SubchannelWrapper>(
|
1387
|
+
chand_, subchannel, std::move(health_check_service_name));
|
975
1388
|
}
|
976
1389
|
|
977
1390
|
void UpdateState(
|
978
|
-
grpc_connectivity_state state,
|
979
|
-
|
980
|
-
grpc_error* disconnect_error =
|
981
|
-
chand_->disconnect_error_.Load(MemoryOrder::ACQUIRE);
|
1391
|
+
grpc_connectivity_state state, const absl::Status& status,
|
1392
|
+
std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) override {
|
1393
|
+
grpc_error* disconnect_error = chand_->disconnect_error();
|
982
1394
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
983
1395
|
const char* extra = disconnect_error == GRPC_ERROR_NONE
|
984
1396
|
? ""
|
985
1397
|
: " (ignoring -- channel shutting down)";
|
986
|
-
gpr_log(GPR_INFO, "chand=%p: update: state=%s picker=%p%s",
|
987
|
-
|
1398
|
+
gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
|
1399
|
+
chand_, ConnectivityStateName(state), status.ToString().c_str(),
|
1400
|
+
picker.get(), extra);
|
988
1401
|
}
|
989
1402
|
// Do update only if not shutting down.
|
990
1403
|
if (disconnect_error == GRPC_ERROR_NONE) {
|
991
|
-
|
992
|
-
|
993
|
-
std::move(picker));
|
1404
|
+
chand_->UpdateStateAndPickerLocked(state, status, "helper",
|
1405
|
+
std::move(picker));
|
994
1406
|
}
|
995
1407
|
}
|
996
1408
|
|
997
1409
|
// No-op -- we should never get this from ResolvingLoadBalancingPolicy.
|
998
1410
|
void RequestReresolution() override {}
|
999
1411
|
|
1412
|
+
void AddTraceEvent(TraceSeverity severity,
|
1413
|
+
absl::string_view message) override {
|
1414
|
+
if (chand_->channelz_node_ != nullptr) {
|
1415
|
+
chand_->channelz_node_->AddTraceEvent(
|
1416
|
+
ConvertSeverityEnum(severity),
|
1417
|
+
grpc_slice_from_copied_buffer(message.data(), message.size()));
|
1418
|
+
}
|
1419
|
+
}
|
1420
|
+
|
1000
1421
|
private:
|
1422
|
+
static channelz::ChannelTrace::Severity ConvertSeverityEnum(
|
1423
|
+
TraceSeverity severity) {
|
1424
|
+
if (severity == TRACE_INFO) return channelz::ChannelTrace::Info;
|
1425
|
+
if (severity == TRACE_WARNING) return channelz::ChannelTrace::Warning;
|
1426
|
+
return channelz::ChannelTrace::Error;
|
1427
|
+
}
|
1428
|
+
|
1001
1429
|
ChannelData* chand_;
|
1002
1430
|
};
|
1003
1431
|
|
1432
|
+
//
|
1433
|
+
// ChannelData::ChannelConfigHelper
|
1434
|
+
//
|
1435
|
+
|
1436
|
+
// Synchronous callback from ResolvingLoadBalancingPolicy to process a
|
1437
|
+
// resolver result update.
|
1438
|
+
ChannelData::ChannelConfigHelper::ApplyServiceConfigResult
|
1439
|
+
ChannelData::ChannelConfigHelper::ApplyServiceConfig(
|
1440
|
+
const Resolver::Result& result) {
|
1441
|
+
ApplyServiceConfigResult service_config_result;
|
1442
|
+
RefCountedPtr<ServiceConfig> service_config;
|
1443
|
+
// If resolver did not return a service config or returned an invalid service
|
1444
|
+
// config, we need a fallback service config.
|
1445
|
+
if (result.service_config_error != GRPC_ERROR_NONE) {
|
1446
|
+
// If the service config was invalid, then fallback to the saved service
|
1447
|
+
// config. If there is no saved config either, use the default service
|
1448
|
+
// config.
|
1449
|
+
if (chand_->saved_service_config_ != nullptr) {
|
1450
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1451
|
+
gpr_log(GPR_INFO,
|
1452
|
+
"chand=%p: resolver returned invalid service config. "
|
1453
|
+
"Continuing to use previous service config.",
|
1454
|
+
chand_);
|
1455
|
+
}
|
1456
|
+
service_config = chand_->saved_service_config_;
|
1457
|
+
} else if (chand_->default_service_config_ != nullptr) {
|
1458
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1459
|
+
gpr_log(GPR_INFO,
|
1460
|
+
"chand=%p: resolver returned invalid service config. Using "
|
1461
|
+
"default service config provided by client API.",
|
1462
|
+
chand_);
|
1463
|
+
}
|
1464
|
+
service_config = chand_->default_service_config_;
|
1465
|
+
}
|
1466
|
+
} else if (result.service_config == nullptr) {
|
1467
|
+
if (chand_->default_service_config_ != nullptr) {
|
1468
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1469
|
+
gpr_log(GPR_INFO,
|
1470
|
+
"chand=%p: resolver returned no service config. Using default "
|
1471
|
+
"service config provided by client API.",
|
1472
|
+
chand_);
|
1473
|
+
}
|
1474
|
+
service_config = chand_->default_service_config_;
|
1475
|
+
}
|
1476
|
+
} else {
|
1477
|
+
service_config = result.service_config;
|
1478
|
+
}
|
1479
|
+
service_config_result.service_config_error =
|
1480
|
+
GRPC_ERROR_REF(result.service_config_error);
|
1481
|
+
if (service_config == nullptr &&
|
1482
|
+
result.service_config_error != GRPC_ERROR_NONE) {
|
1483
|
+
service_config_result.no_valid_service_config = true;
|
1484
|
+
return service_config_result;
|
1485
|
+
}
|
1486
|
+
// Process service config.
|
1487
|
+
grpc_core::UniquePtr<char> service_config_json;
|
1488
|
+
const internal::ClientChannelGlobalParsedConfig* parsed_service_config =
|
1489
|
+
nullptr;
|
1490
|
+
if (service_config != nullptr) {
|
1491
|
+
parsed_service_config =
|
1492
|
+
static_cast<const internal::ClientChannelGlobalParsedConfig*>(
|
1493
|
+
service_config->GetGlobalParsedConfig(
|
1494
|
+
internal::ClientChannelServiceConfigParser::ParserIndex()));
|
1495
|
+
}
|
1496
|
+
// Check if the config has changed.
|
1497
|
+
service_config_result.service_config_changed =
|
1498
|
+
((service_config == nullptr) !=
|
1499
|
+
(chand_->saved_service_config_ == nullptr)) ||
|
1500
|
+
(service_config != nullptr &&
|
1501
|
+
service_config->json_string() !=
|
1502
|
+
chand_->saved_service_config_->json_string());
|
1503
|
+
if (service_config_result.service_config_changed) {
|
1504
|
+
service_config_json.reset(gpr_strdup(
|
1505
|
+
service_config != nullptr ? service_config->json_string().c_str()
|
1506
|
+
: ""));
|
1507
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1508
|
+
gpr_log(GPR_INFO,
|
1509
|
+
"chand=%p: resolver returned updated service config: \"%s\"",
|
1510
|
+
chand_, service_config_json.get());
|
1511
|
+
}
|
1512
|
+
// Save health check service name.
|
1513
|
+
if (service_config != nullptr) {
|
1514
|
+
chand_->health_check_service_name_.reset(
|
1515
|
+
gpr_strdup(parsed_service_config->health_check_service_name()));
|
1516
|
+
} else {
|
1517
|
+
chand_->health_check_service_name_.reset();
|
1518
|
+
}
|
1519
|
+
// Update health check service name used by existing subchannel wrappers.
|
1520
|
+
for (auto* subchannel_wrapper : chand_->subchannel_wrappers_) {
|
1521
|
+
subchannel_wrapper->UpdateHealthCheckServiceName(
|
1522
|
+
grpc_core::UniquePtr<char>(
|
1523
|
+
gpr_strdup(chand_->health_check_service_name_.get())));
|
1524
|
+
}
|
1525
|
+
// Save service config.
|
1526
|
+
chand_->saved_service_config_ = std::move(service_config);
|
1527
|
+
}
|
1528
|
+
// Find LB policy config.
|
1529
|
+
ProcessLbPolicy(result, parsed_service_config,
|
1530
|
+
&service_config_result.lb_policy_config);
|
1531
|
+
grpc_core::UniquePtr<char> lb_policy_name(
|
1532
|
+
gpr_strdup((service_config_result.lb_policy_config)->name()));
|
1533
|
+
// Swap out the data used by GetChannelInfo().
|
1534
|
+
{
|
1535
|
+
MutexLock lock(&chand_->info_mu_);
|
1536
|
+
chand_->info_lb_policy_name_ = std::move(lb_policy_name);
|
1537
|
+
if (service_config_json != nullptr) {
|
1538
|
+
chand_->info_service_config_json_ = std::move(service_config_json);
|
1539
|
+
}
|
1540
|
+
}
|
1541
|
+
// Return results.
|
1542
|
+
return service_config_result;
|
1543
|
+
}
|
1544
|
+
|
1545
|
+
void ChannelData::ChannelConfigHelper::ApplyConfigSelector(
|
1546
|
+
bool service_config_changed,
|
1547
|
+
RefCountedPtr<ConfigSelector> config_selector) {
|
1548
|
+
chand_->UpdateServiceConfigInDataPlaneLocked(service_config_changed,
|
1549
|
+
std::move(config_selector));
|
1550
|
+
}
|
1551
|
+
|
1552
|
+
void ChannelData::ChannelConfigHelper::ResolverTransientFailure(
|
1553
|
+
grpc_error* error) {
|
1554
|
+
MutexLock lock(&chand_->data_plane_mu_);
|
1555
|
+
GRPC_ERROR_UNREF(chand_->resolver_transient_failure_error_);
|
1556
|
+
chand_->resolver_transient_failure_error_ = error;
|
1557
|
+
}
|
1558
|
+
|
1559
|
+
void ChannelData::ChannelConfigHelper::ProcessLbPolicy(
|
1560
|
+
const Resolver::Result& resolver_result,
|
1561
|
+
const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
|
1562
|
+
RefCountedPtr<LoadBalancingPolicy::Config>* lb_policy_config) {
|
1563
|
+
// Prefer the LB policy config found in the service config.
|
1564
|
+
if (parsed_service_config != nullptr &&
|
1565
|
+
parsed_service_config->parsed_lb_config() != nullptr) {
|
1566
|
+
*lb_policy_config = parsed_service_config->parsed_lb_config();
|
1567
|
+
return;
|
1568
|
+
}
|
1569
|
+
// Try the deprecated LB policy name from the service config.
|
1570
|
+
// If not, try the setting from channel args.
|
1571
|
+
const char* policy_name = nullptr;
|
1572
|
+
if (parsed_service_config != nullptr &&
|
1573
|
+
!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
|
1574
|
+
policy_name = parsed_service_config->parsed_deprecated_lb_policy().c_str();
|
1575
|
+
} else {
|
1576
|
+
const grpc_arg* channel_arg =
|
1577
|
+
grpc_channel_args_find(resolver_result.args, GRPC_ARG_LB_POLICY_NAME);
|
1578
|
+
policy_name = grpc_channel_arg_get_string(channel_arg);
|
1579
|
+
}
|
1580
|
+
// Use pick_first if nothing was specified and we didn't select grpclb
|
1581
|
+
// above.
|
1582
|
+
if (policy_name == nullptr) policy_name = "pick_first";
|
1583
|
+
// Now that we have the policy name, construct an empty config for it.
|
1584
|
+
Json config_json = Json::Array{Json::Object{
|
1585
|
+
{policy_name, Json::Object{}},
|
1586
|
+
}};
|
1587
|
+
grpc_error* parse_error = GRPC_ERROR_NONE;
|
1588
|
+
*lb_policy_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
|
1589
|
+
config_json, &parse_error);
|
1590
|
+
// The policy name came from one of three places:
|
1591
|
+
// - The deprecated loadBalancingPolicy field in the service config,
|
1592
|
+
// in which case the code in ClientChannelServiceConfigParser
|
1593
|
+
// already verified that the policy does not require a config.
|
1594
|
+
// - One of the hard-coded values here, all of which are known to not
|
1595
|
+
// require a config.
|
1596
|
+
// - A channel arg, in which case the application did something that
|
1597
|
+
// is a misuse of our API.
|
1598
|
+
// In the first two cases, these assertions will always be true. In
|
1599
|
+
// the last case, this is probably fine for now.
|
1600
|
+
// TODO(roth): If the last case becomes a problem, add better error
|
1601
|
+
// handling here.
|
1602
|
+
GPR_ASSERT(*lb_policy_config != nullptr);
|
1603
|
+
GPR_ASSERT(parse_error == GRPC_ERROR_NONE);
|
1604
|
+
}
|
1605
|
+
|
1004
1606
|
//
|
1005
1607
|
// ChannelData implementation
|
1006
1608
|
//
|
@@ -1040,6 +1642,15 @@ RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
|
|
1040
1642
|
return GlobalSubchannelPool::instance();
|
1041
1643
|
}
|
1042
1644
|
|
1645
|
+
channelz::ChannelNode* GetChannelzNode(const grpc_channel_args* args) {
|
1646
|
+
const grpc_arg* arg =
|
1647
|
+
grpc_channel_args_find(args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
|
1648
|
+
if (arg != nullptr && arg->type == GRPC_ARG_POINTER) {
|
1649
|
+
return static_cast<channelz::ChannelNode*>(arg->value.pointer.p);
|
1650
|
+
}
|
1651
|
+
return nullptr;
|
1652
|
+
}
|
1653
|
+
|
1043
1654
|
ChannelData::ChannelData(grpc_channel_element_args* args, grpc_error** error)
|
1044
1655
|
: deadline_checking_enabled_(
|
1045
1656
|
grpc_deadline_checking_enabled(args->channel_args)),
|
@@ -1049,14 +1660,18 @@ ChannelData::ChannelData(grpc_channel_element_args* args, grpc_error** error)
|
|
1049
1660
|
owning_stack_(args->channel_stack),
|
1050
1661
|
client_channel_factory_(
|
1051
1662
|
ClientChannelFactory::GetFromChannelArgs(args->channel_args)),
|
1052
|
-
|
1053
|
-
|
1663
|
+
channelz_node_(GetChannelzNode(args->channel_args)),
|
1664
|
+
channel_config_helper_(this),
|
1665
|
+
work_serializer_(std::make_shared<WorkSerializer>()),
|
1054
1666
|
interested_parties_(grpc_pollset_set_create()),
|
1055
1667
|
subchannel_pool_(GetSubchannelPool(args->channel_args)),
|
1668
|
+
state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
|
1056
1669
|
disconnect_error_(GRPC_ERROR_NONE) {
|
1670
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1671
|
+
gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
|
1672
|
+
this, owning_stack_);
|
1673
|
+
}
|
1057
1674
|
// Initialize data members.
|
1058
|
-
grpc_connectivity_state_init(&state_tracker_, GRPC_CHANNEL_IDLE,
|
1059
|
-
"client_channel");
|
1060
1675
|
gpr_mu_init(&info_mu_);
|
1061
1676
|
// Start backup polling.
|
1062
1677
|
grpc_client_channel_start_backup_polling(interested_parties_);
|
@@ -1078,8 +1693,6 @@ ChannelData::ChannelData(grpc_channel_element_args* args, grpc_error** error)
|
|
1078
1693
|
// Get default service config
|
1079
1694
|
const char* service_config_json = grpc_channel_arg_get_string(
|
1080
1695
|
grpc_channel_args_find(args->channel_args, GRPC_ARG_SERVICE_CONFIG));
|
1081
|
-
// TODO(yashkt): Make sure we set the channel in TRANSIENT_FAILURE on an
|
1082
|
-
// invalid default service config
|
1083
1696
|
if (service_config_json != nullptr) {
|
1084
1697
|
*error = GRPC_ERROR_NONE;
|
1085
1698
|
default_service_config_ = ServiceConfig::Create(service_config_json, error);
|
@@ -1096,259 +1709,254 @@ ChannelData::ChannelData(grpc_channel_element_args* args, grpc_error** error)
|
|
1096
1709
|
grpc_uri_destroy(uri);
|
1097
1710
|
char* proxy_name = nullptr;
|
1098
1711
|
grpc_channel_args* new_args = nullptr;
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
if (*error != GRPC_ERROR_NONE) {
|
1115
|
-
// Orphan the resolving LB policy and flush the exec_ctx to ensure
|
1116
|
-
// that it finishes shutting down. This ensures that if we are
|
1117
|
-
// failing, we destroy the ClientChannelControlHelper (and thus
|
1118
|
-
// unref the channel stack) before we return.
|
1119
|
-
// TODO(roth): This is not a complete solution, because it only
|
1120
|
-
// catches the case where channel stack initialization fails in this
|
1121
|
-
// particular filter. If there is a failure in a different filter, we
|
1122
|
-
// will leave a dangling ref here, which can cause a crash. Fortunately,
|
1123
|
-
// in practice, there are no other filters that can cause failures in
|
1124
|
-
// channel stack initialization, so this works for now.
|
1125
|
-
resolving_lb_policy_.reset();
|
1126
|
-
ExecCtx::Get()->Flush();
|
1127
|
-
} else {
|
1128
|
-
grpc_pollset_set_add_pollset_set(resolving_lb_policy_->interested_parties(),
|
1129
|
-
interested_parties_);
|
1130
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1131
|
-
gpr_log(GPR_INFO, "chand=%p: created resolving_lb_policy=%p", this,
|
1132
|
-
resolving_lb_policy_.get());
|
1133
|
-
}
|
1712
|
+
ProxyMapperRegistry::MapName(server_uri, args->channel_args, &proxy_name,
|
1713
|
+
&new_args);
|
1714
|
+
target_uri_.reset(proxy_name != nullptr ? proxy_name
|
1715
|
+
: gpr_strdup(server_uri));
|
1716
|
+
channel_args_ = new_args != nullptr
|
1717
|
+
? new_args
|
1718
|
+
: grpc_channel_args_copy(args->channel_args);
|
1719
|
+
keepalive_time_ = grpc_channel_args_find_integer(
|
1720
|
+
channel_args_, GRPC_ARG_KEEPALIVE_TIME_MS,
|
1721
|
+
{-1 /* default value, unset */, 1, INT_MAX});
|
1722
|
+
if (!ResolverRegistry::IsValidTarget(target_uri_.get())) {
|
1723
|
+
std::string error_message =
|
1724
|
+
absl::StrCat("the target uri is not valid: ", target_uri_.get());
|
1725
|
+
*error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_message.c_str());
|
1726
|
+
return;
|
1134
1727
|
}
|
1728
|
+
*error = GRPC_ERROR_NONE;
|
1135
1729
|
}
|
1136
1730
|
|
1137
1731
|
ChannelData::~ChannelData() {
|
1138
|
-
if (
|
1139
|
-
|
1140
|
-
interested_parties_);
|
1141
|
-
resolving_lb_policy_.reset();
|
1732
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1733
|
+
gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
|
1142
1734
|
}
|
1735
|
+
DestroyResolvingLoadBalancingPolicyLocked();
|
1736
|
+
grpc_channel_args_destroy(channel_args_);
|
1737
|
+
GRPC_ERROR_UNREF(resolver_transient_failure_error_);
|
1143
1738
|
// Stop backup polling.
|
1144
1739
|
grpc_client_channel_stop_backup_polling(interested_parties_);
|
1145
1740
|
grpc_pollset_set_destroy(interested_parties_);
|
1146
|
-
GRPC_COMBINER_UNREF(data_plane_combiner_, "client_channel");
|
1147
|
-
GRPC_COMBINER_UNREF(combiner_, "client_channel");
|
1148
1741
|
GRPC_ERROR_UNREF(disconnect_error_.Load(MemoryOrder::RELAXED));
|
1149
|
-
grpc_connectivity_state_destroy(&state_tracker_);
|
1150
1742
|
gpr_mu_destroy(&info_mu_);
|
1151
1743
|
}
|
1152
1744
|
|
1153
|
-
void ChannelData::
|
1154
|
-
const
|
1155
|
-
const
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
//
|
1176
|
-
//
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
local_policy_name = "grpclb";
|
1194
|
-
}
|
1195
|
-
// Use pick_first if nothing was specified and we didn't select grpclb
|
1196
|
-
// above.
|
1197
|
-
lb_policy_name->reset(gpr_strdup(
|
1198
|
-
local_policy_name == nullptr ? "pick_first" : local_policy_name));
|
1199
|
-
}
|
1200
|
-
|
1201
|
-
// Synchronous callback from ResolvingLoadBalancingPolicy to process a
|
1202
|
-
// resolver result update.
|
1203
|
-
bool ChannelData::ProcessResolverResultLocked(
|
1204
|
-
void* arg, const Resolver::Result& result, const char** lb_policy_name,
|
1205
|
-
RefCountedPtr<ParsedLoadBalancingConfig>* lb_policy_config,
|
1206
|
-
grpc_error** service_config_error) {
|
1207
|
-
ChannelData* chand = static_cast<ChannelData*>(arg);
|
1208
|
-
RefCountedPtr<ServiceConfig> service_config;
|
1209
|
-
// If resolver did not return a service config or returned an invalid service
|
1210
|
-
// config, we need a fallback service config.
|
1211
|
-
if (result.service_config_error != GRPC_ERROR_NONE) {
|
1212
|
-
// If the service config was invalid, then fallback to the saved service
|
1213
|
-
// config. If there is no saved config either, use the default service
|
1214
|
-
// config.
|
1215
|
-
if (chand->saved_service_config_ != nullptr) {
|
1216
|
-
service_config = chand->saved_service_config_;
|
1217
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1218
|
-
gpr_log(GPR_INFO,
|
1219
|
-
"chand=%p: resolver returned invalid service config. "
|
1220
|
-
"Continuing to use previous service config.",
|
1221
|
-
chand);
|
1222
|
-
}
|
1223
|
-
} else if (chand->default_service_config_ != nullptr) {
|
1745
|
+
void ChannelData::UpdateStateAndPickerLocked(
|
1746
|
+
grpc_connectivity_state state, const absl::Status& status,
|
1747
|
+
const char* reason,
|
1748
|
+
std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) {
|
1749
|
+
// Clean the control plane when entering IDLE.
|
1750
|
+
if (picker_ == nullptr) {
|
1751
|
+
health_check_service_name_.reset();
|
1752
|
+
saved_service_config_.reset();
|
1753
|
+
saved_config_selector_.reset();
|
1754
|
+
received_first_resolver_result_ = false;
|
1755
|
+
}
|
1756
|
+
// Update connectivity state.
|
1757
|
+
state_tracker_.SetState(state, status, reason);
|
1758
|
+
if (channelz_node_ != nullptr) {
|
1759
|
+
channelz_node_->SetConnectivityState(state);
|
1760
|
+
channelz_node_->AddTraceEvent(
|
1761
|
+
channelz::ChannelTrace::Severity::Info,
|
1762
|
+
grpc_slice_from_static_string(
|
1763
|
+
channelz::ChannelNode::GetChannelConnectivityStateChangeString(
|
1764
|
+
state)));
|
1765
|
+
}
|
1766
|
+
// Grab data plane lock to do subchannel updates and update the picker.
|
1767
|
+
//
|
1768
|
+
// Note that we want to minimize the work done while holding the data
|
1769
|
+
// plane lock, to keep the critical section small. So, for all of the
|
1770
|
+
// objects that we might wind up unreffing here, we actually hold onto
|
1771
|
+
// the refs until after we release the lock, and then unref them at
|
1772
|
+
// that point. This includes the following:
|
1773
|
+
// - refs to subchannel wrappers in the keys of pending_subchannel_updates_
|
1774
|
+
// - ref stored in retry_throttle_data_
|
1775
|
+
// - ref stored in service_config_
|
1776
|
+
// - ref stored in config_selector_
|
1777
|
+
// - ownership of the existing picker in picker_
|
1778
|
+
RefCountedPtr<ServerRetryThrottleData> retry_throttle_data_to_unref;
|
1779
|
+
RefCountedPtr<ServiceConfig> service_config_to_unref;
|
1780
|
+
RefCountedPtr<ConfigSelector> config_selector_to_unref;
|
1781
|
+
{
|
1782
|
+
MutexLock lock(&data_plane_mu_);
|
1783
|
+
// Handle subchannel updates.
|
1784
|
+
for (auto& p : pending_subchannel_updates_) {
|
1224
1785
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1225
1786
|
gpr_log(GPR_INFO,
|
1226
|
-
"chand=%p:
|
1227
|
-
"
|
1228
|
-
|
1787
|
+
"chand=%p: updating subchannel wrapper %p data plane "
|
1788
|
+
"connected_subchannel to %p",
|
1789
|
+
this, p.first.get(), p.second.get());
|
1229
1790
|
}
|
1230
|
-
|
1791
|
+
// Note: We do not remove the entry from pending_subchannel_updates_
|
1792
|
+
// here, since this would unref the subchannel wrapper; instead,
|
1793
|
+
// we wait until we've released the lock to clear the map.
|
1794
|
+
p.first->set_connected_subchannel_in_data_plane(std::move(p.second));
|
1231
1795
|
}
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1237
|
-
|
1238
|
-
|
1796
|
+
// Swap out the picker.
|
1797
|
+
// Note: Original value will be destroyed after the lock is released.
|
1798
|
+
picker_.swap(picker);
|
1799
|
+
// Clean the data plane if the updated picker is nullptr.
|
1800
|
+
if (picker_ == nullptr) {
|
1801
|
+
received_service_config_data_ = false;
|
1802
|
+
// Note: We save the objects to unref until after the lock is released.
|
1803
|
+
retry_throttle_data_to_unref = std::move(retry_throttle_data_);
|
1804
|
+
service_config_to_unref = std::move(service_config_);
|
1805
|
+
config_selector_to_unref = std::move(config_selector_);
|
1806
|
+
}
|
1807
|
+
// Re-process queued picks.
|
1808
|
+
for (QueuedPick* pick = queued_picks_; pick != nullptr; pick = pick->next) {
|
1809
|
+
grpc_call_element* elem = pick->elem;
|
1810
|
+
CallData* calld = static_cast<CallData*>(elem->call_data);
|
1811
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
1812
|
+
if (calld->PickSubchannelLocked(elem, &error)) {
|
1813
|
+
calld->AsyncPickDone(elem, error);
|
1239
1814
|
}
|
1240
|
-
service_config = chand->default_service_config_;
|
1241
1815
|
}
|
1242
|
-
} else {
|
1243
|
-
service_config = result.service_config;
|
1244
1816
|
}
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1248
|
-
|
1817
|
+
// Clear the pending update map after releasing the lock, to keep the
|
1818
|
+
// critical section small.
|
1819
|
+
pending_subchannel_updates_.clear();
|
1820
|
+
}
|
1821
|
+
|
1822
|
+
void ChannelData::UpdateServiceConfigInDataPlaneLocked(
|
1823
|
+
bool service_config_changed,
|
1824
|
+
RefCountedPtr<ConfigSelector> config_selector) {
|
1825
|
+
// Check if ConfigSelector has changed.
|
1826
|
+
const bool config_selector_changed =
|
1827
|
+
saved_config_selector_ != config_selector;
|
1828
|
+
saved_config_selector_ = config_selector;
|
1829
|
+
// We want to set the service config at least once, even if the
|
1830
|
+
// resolver does not return a config, because that ensures that we
|
1831
|
+
// disable retries if they are not enabled in the service config.
|
1832
|
+
// TODO(roth): Consider removing the received_first_resolver_result_ check
|
1833
|
+
// when we implement transparent retries.
|
1834
|
+
if (!service_config_changed && !config_selector_changed &&
|
1835
|
+
received_first_resolver_result_) {
|
1836
|
+
return;
|
1249
1837
|
}
|
1250
|
-
|
1251
|
-
//
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1256
|
-
|
1257
|
-
service_config->GetParsedGlobalServiceConfigObject(
|
1838
|
+
received_first_resolver_result_ = true;
|
1839
|
+
// Get retry throttle data from service config.
|
1840
|
+
RefCountedPtr<ServerRetryThrottleData> retry_throttle_data;
|
1841
|
+
if (saved_service_config_ != nullptr) {
|
1842
|
+
const internal::ClientChannelGlobalParsedConfig* parsed_service_config =
|
1843
|
+
static_cast<const internal::ClientChannelGlobalParsedConfig*>(
|
1844
|
+
saved_service_config_->GetGlobalParsedConfig(
|
1258
1845
|
internal::ClientChannelServiceConfigParser::ParserIndex()));
|
1259
|
-
}
|
1260
|
-
const bool service_config_changed =
|
1261
|
-
((service_config == nullptr) !=
|
1262
|
-
(chand->saved_service_config_ == nullptr)) ||
|
1263
|
-
(service_config != nullptr &&
|
1264
|
-
strcmp(service_config->service_config_json(),
|
1265
|
-
chand->saved_service_config_->service_config_json()) != 0);
|
1266
|
-
if (service_config_changed) {
|
1267
|
-
service_config_json.reset(gpr_strdup(
|
1268
|
-
service_config != nullptr ? service_config->service_config_json()
|
1269
|
-
: ""));
|
1270
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1271
|
-
gpr_log(GPR_INFO,
|
1272
|
-
"chand=%p: resolver returned updated service config: \"%s\"",
|
1273
|
-
chand, service_config_json.get());
|
1274
|
-
}
|
1275
|
-
chand->saved_service_config_ = std::move(service_config);
|
1276
1846
|
if (parsed_service_config != nullptr) {
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1847
|
+
absl::optional<internal::ClientChannelGlobalParsedConfig::RetryThrottling>
|
1848
|
+
retry_throttle_config = parsed_service_config->retry_throttling();
|
1849
|
+
if (retry_throttle_config.has_value()) {
|
1850
|
+
retry_throttle_data =
|
1851
|
+
internal::ServerRetryThrottleMap::GetDataForServer(
|
1852
|
+
server_name_.get(),
|
1853
|
+
retry_throttle_config.value().max_milli_tokens,
|
1854
|
+
retry_throttle_config.value().milli_token_ratio);
|
1855
|
+
}
|
1281
1856
|
}
|
1282
1857
|
}
|
1283
|
-
//
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
chand->received_first_resolver_result_ = true;
|
1288
|
-
Optional<internal::ClientChannelGlobalParsedObject::RetryThrottling>
|
1289
|
-
retry_throttle_data;
|
1290
|
-
if (parsed_service_config != nullptr) {
|
1291
|
-
retry_throttle_data = parsed_service_config->retry_throttling();
|
1292
|
-
}
|
1293
|
-
// Create service config setter to update channel state in the data
|
1294
|
-
// plane combiner. Destroys itself when done.
|
1295
|
-
New<ServiceConfigSetter>(chand, retry_throttle_data,
|
1296
|
-
chand->saved_service_config_);
|
1858
|
+
// Create default config selector if not provided by resolver.
|
1859
|
+
if (config_selector == nullptr) {
|
1860
|
+
config_selector =
|
1861
|
+
MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
|
1297
1862
|
}
|
1298
|
-
|
1299
|
-
|
1300
|
-
|
1301
|
-
//
|
1863
|
+
// Grab data plane lock to update service config.
|
1864
|
+
//
|
1865
|
+
// We defer unreffing the old values (and deallocating memory) until
|
1866
|
+
// after releasing the lock to keep the critical section small.
|
1867
|
+
RefCountedPtr<ServiceConfig> service_config_to_unref = saved_service_config_;
|
1868
|
+
RefCountedPtr<ConfigSelector> config_selector_to_unref =
|
1869
|
+
std::move(config_selector);
|
1302
1870
|
{
|
1303
|
-
MutexLock lock(&
|
1304
|
-
|
1305
|
-
|
1306
|
-
|
1871
|
+
MutexLock lock(&data_plane_mu_);
|
1872
|
+
GRPC_ERROR_UNREF(resolver_transient_failure_error_);
|
1873
|
+
resolver_transient_failure_error_ = GRPC_ERROR_NONE;
|
1874
|
+
// Update service config.
|
1875
|
+
received_service_config_data_ = true;
|
1876
|
+
// Old values will be unreffed after lock is released.
|
1877
|
+
retry_throttle_data_.swap(retry_throttle_data);
|
1878
|
+
service_config_.swap(service_config_to_unref);
|
1879
|
+
config_selector_.swap(config_selector_to_unref);
|
1880
|
+
// Re-process queued picks.
|
1881
|
+
for (QueuedPick* pick = queued_picks_; pick != nullptr; pick = pick->next) {
|
1882
|
+
grpc_call_element* elem = pick->elem;
|
1883
|
+
CallData* calld = static_cast<CallData*>(elem->call_data);
|
1884
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
1885
|
+
if (calld->PickSubchannelLocked(elem, &error)) {
|
1886
|
+
calld->AsyncPickDone(elem, error);
|
1887
|
+
}
|
1307
1888
|
}
|
1308
1889
|
}
|
1309
|
-
//
|
1310
|
-
|
1311
|
-
|
1890
|
+
// Old values will be unreffed after lock is released when they go out
|
1891
|
+
// of scope.
|
1892
|
+
}
|
1893
|
+
|
1894
|
+
void ChannelData::CreateResolvingLoadBalancingPolicyLocked() {
|
1895
|
+
// Instantiate resolving LB policy.
|
1896
|
+
LoadBalancingPolicy::Args lb_args;
|
1897
|
+
lb_args.work_serializer = work_serializer_;
|
1898
|
+
lb_args.channel_control_helper =
|
1899
|
+
absl::make_unique<ClientChannelControlHelper>(this);
|
1900
|
+
lb_args.args = channel_args_;
|
1901
|
+
grpc_core::UniquePtr<char> target_uri(gpr_strdup(target_uri_.get()));
|
1902
|
+
resolving_lb_policy_.reset(new ResolvingLoadBalancingPolicy(
|
1903
|
+
std::move(lb_args), &grpc_client_channel_routing_trace,
|
1904
|
+
std::move(target_uri), &channel_config_helper_));
|
1905
|
+
grpc_pollset_set_add_pollset_set(resolving_lb_policy_->interested_parties(),
|
1906
|
+
interested_parties_);
|
1907
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
1908
|
+
gpr_log(GPR_INFO, "chand=%p: created resolving_lb_policy=%p", this,
|
1909
|
+
resolving_lb_policy_.get());
|
1910
|
+
}
|
1911
|
+
}
|
1912
|
+
|
1913
|
+
void ChannelData::DestroyResolvingLoadBalancingPolicyLocked() {
|
1914
|
+
if (resolving_lb_policy_ != nullptr) {
|
1915
|
+
grpc_pollset_set_del_pollset_set(resolving_lb_policy_->interested_parties(),
|
1916
|
+
interested_parties_);
|
1917
|
+
resolving_lb_policy_.reset();
|
1918
|
+
}
|
1312
1919
|
}
|
1313
1920
|
|
1314
1921
|
grpc_error* ChannelData::DoPingLocked(grpc_transport_op* op) {
|
1315
|
-
if (
|
1922
|
+
if (state_tracker_.state() != GRPC_CHANNEL_READY) {
|
1316
1923
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("channel not connected");
|
1317
1924
|
}
|
1318
|
-
LoadBalancingPolicy::
|
1319
|
-
|
1320
|
-
|
1321
|
-
if (
|
1322
|
-
|
1323
|
-
|
1925
|
+
LoadBalancingPolicy::PickResult result =
|
1926
|
+
picker_->Pick(LoadBalancingPolicy::PickArgs());
|
1927
|
+
ConnectedSubchannel* connected_subchannel = nullptr;
|
1928
|
+
if (result.subchannel != nullptr) {
|
1929
|
+
SubchannelWrapper* subchannel =
|
1930
|
+
static_cast<SubchannelWrapper*>(result.subchannel.get());
|
1931
|
+
connected_subchannel = subchannel->connected_subchannel();
|
1932
|
+
}
|
1933
|
+
if (connected_subchannel != nullptr) {
|
1934
|
+
connected_subchannel->Ping(op->send_ping.on_initiate, op->send_ping.on_ack);
|
1324
1935
|
} else {
|
1325
|
-
if (error == GRPC_ERROR_NONE) {
|
1326
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1936
|
+
if (result.error == GRPC_ERROR_NONE) {
|
1937
|
+
result.error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1327
1938
|
"LB policy dropped call on ping");
|
1328
1939
|
}
|
1329
1940
|
}
|
1330
|
-
return error;
|
1941
|
+
return result.error;
|
1331
1942
|
}
|
1332
1943
|
|
1333
|
-
void ChannelData::StartTransportOpLocked(
|
1334
|
-
grpc_transport_op* op = static_cast<grpc_transport_op*>(arg);
|
1335
|
-
grpc_channel_element* elem =
|
1336
|
-
static_cast<grpc_channel_element*>(op->handler_private.extra_arg);
|
1337
|
-
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
1944
|
+
void ChannelData::StartTransportOpLocked(grpc_transport_op* op) {
|
1338
1945
|
// Connectivity watch.
|
1339
|
-
if (op->
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1343
|
-
|
1344
|
-
op->
|
1946
|
+
if (op->start_connectivity_watch != nullptr) {
|
1947
|
+
state_tracker_.AddWatcher(op->start_connectivity_watch_state,
|
1948
|
+
std::move(op->start_connectivity_watch));
|
1949
|
+
}
|
1950
|
+
if (op->stop_connectivity_watch != nullptr) {
|
1951
|
+
state_tracker_.RemoveWatcher(op->stop_connectivity_watch);
|
1345
1952
|
}
|
1346
1953
|
// Ping.
|
1347
1954
|
if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
|
1348
|
-
grpc_error* error =
|
1955
|
+
grpc_error* error = DoPingLocked(op);
|
1349
1956
|
if (error != GRPC_ERROR_NONE) {
|
1350
|
-
|
1351
|
-
|
1957
|
+
ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
|
1958
|
+
GRPC_ERROR_REF(error));
|
1959
|
+
ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack, error);
|
1352
1960
|
}
|
1353
1961
|
op->bind_pollset = nullptr;
|
1354
1962
|
op->send_ping.on_initiate = nullptr;
|
@@ -1356,29 +1964,40 @@ void ChannelData::StartTransportOpLocked(void* arg, grpc_error* ignored) {
|
|
1356
1964
|
}
|
1357
1965
|
// Reset backoff.
|
1358
1966
|
if (op->reset_connect_backoff) {
|
1359
|
-
if (
|
1360
|
-
|
1967
|
+
if (resolving_lb_policy_ != nullptr) {
|
1968
|
+
resolving_lb_policy_->ResetBackoffLocked();
|
1361
1969
|
}
|
1362
1970
|
}
|
1363
|
-
// Disconnect.
|
1971
|
+
// Disconnect or enter IDLE.
|
1364
1972
|
if (op->disconnect_with_error != GRPC_ERROR_NONE) {
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1369
|
-
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1381
|
-
|
1973
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1974
|
+
gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
|
1975
|
+
grpc_error_string(op->disconnect_with_error));
|
1976
|
+
}
|
1977
|
+
DestroyResolvingLoadBalancingPolicyLocked();
|
1978
|
+
intptr_t value;
|
1979
|
+
if (grpc_error_get_int(op->disconnect_with_error,
|
1980
|
+
GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, &value) &&
|
1981
|
+
static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
|
1982
|
+
if (disconnect_error() == GRPC_ERROR_NONE) {
|
1983
|
+
// Enter IDLE state.
|
1984
|
+
UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
|
1985
|
+
"channel entering IDLE", nullptr);
|
1986
|
+
}
|
1987
|
+
GRPC_ERROR_UNREF(op->disconnect_with_error);
|
1988
|
+
} else {
|
1989
|
+
// Disconnect.
|
1990
|
+
GPR_ASSERT(disconnect_error_.Load(MemoryOrder::RELAXED) ==
|
1991
|
+
GRPC_ERROR_NONE);
|
1992
|
+
disconnect_error_.Store(op->disconnect_with_error, MemoryOrder::RELEASE);
|
1993
|
+
UpdateStateAndPickerLocked(
|
1994
|
+
GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
|
1995
|
+
absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(
|
1996
|
+
GRPC_ERROR_REF(op->disconnect_with_error)));
|
1997
|
+
}
|
1998
|
+
}
|
1999
|
+
GRPC_CHANNEL_STACK_UNREF(owning_stack_, "start_transport_op");
|
2000
|
+
ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, GRPC_ERROR_NONE);
|
1382
2001
|
}
|
1383
2002
|
|
1384
2003
|
void ChannelData::StartTransportOp(grpc_channel_element* elem,
|
@@ -1389,14 +2008,10 @@ void ChannelData::StartTransportOp(grpc_channel_element* elem,
|
|
1389
2008
|
if (op->bind_pollset != nullptr) {
|
1390
2009
|
grpc_pollset_set_add_pollset(chand->interested_parties_, op->bind_pollset);
|
1391
2010
|
}
|
1392
|
-
// Pop into control plane
|
1393
|
-
op->handler_private.extra_arg = elem;
|
2011
|
+
// Pop into control plane work_serializer for remaining ops.
|
1394
2012
|
GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "start_transport_op");
|
1395
|
-
|
1396
|
-
|
1397
|
-
ChannelData::StartTransportOpLocked, op,
|
1398
|
-
grpc_combiner_scheduler(chand->combiner_)),
|
1399
|
-
GRPC_ERROR_NONE);
|
2013
|
+
chand->work_serializer_->Run(
|
2014
|
+
[chand, op]() { chand->StartTransportOpLocked(op); }, DEBUG_LOCATION);
|
1400
2015
|
}
|
1401
2016
|
|
1402
2017
|
void ChannelData::GetChannelInfo(grpc_channel_element* elem,
|
@@ -1436,26 +2051,47 @@ void ChannelData::RemoveQueuedPick(QueuedPick* to_remove,
|
|
1436
2051
|
}
|
1437
2052
|
}
|
1438
2053
|
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
2054
|
+
RefCountedPtr<ConnectedSubchannel>
|
2055
|
+
ChannelData::GetConnectedSubchannelInDataPlane(
|
2056
|
+
SubchannelInterface* subchannel) const {
|
2057
|
+
SubchannelWrapper* subchannel_wrapper =
|
2058
|
+
static_cast<SubchannelWrapper*>(subchannel);
|
2059
|
+
ConnectedSubchannel* connected_subchannel =
|
2060
|
+
subchannel_wrapper->connected_subchannel_in_data_plane();
|
2061
|
+
if (connected_subchannel == nullptr) return nullptr;
|
2062
|
+
return connected_subchannel->Ref();
|
2063
|
+
}
|
2064
|
+
|
2065
|
+
void ChannelData::TryToConnectLocked() {
|
2066
|
+
if (resolving_lb_policy_ != nullptr) {
|
2067
|
+
resolving_lb_policy_->ExitIdleLocked();
|
2068
|
+
} else {
|
2069
|
+
CreateResolvingLoadBalancingPolicyLocked();
|
1443
2070
|
}
|
1444
|
-
GRPC_CHANNEL_STACK_UNREF(
|
2071
|
+
GRPC_CHANNEL_STACK_UNREF(owning_stack_, "TryToConnect");
|
1445
2072
|
}
|
1446
2073
|
|
1447
2074
|
grpc_connectivity_state ChannelData::CheckConnectivityState(
|
1448
2075
|
bool try_to_connect) {
|
1449
|
-
grpc_connectivity_state out =
|
2076
|
+
grpc_connectivity_state out = state_tracker_.state();
|
1450
2077
|
if (out == GRPC_CHANNEL_IDLE && try_to_connect) {
|
1451
2078
|
GRPC_CHANNEL_STACK_REF(owning_stack_, "TryToConnect");
|
1452
|
-
|
1453
|
-
grpc_combiner_scheduler(combiner_)),
|
1454
|
-
GRPC_ERROR_NONE);
|
2079
|
+
work_serializer_->Run([this]() { TryToConnectLocked(); }, DEBUG_LOCATION);
|
1455
2080
|
}
|
1456
2081
|
return out;
|
1457
2082
|
}
|
1458
2083
|
|
2084
|
+
void ChannelData::AddConnectivityWatcher(
|
2085
|
+
grpc_connectivity_state initial_state,
|
2086
|
+
OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher) {
|
2087
|
+
new ConnectivityWatcherAdder(this, initial_state, std::move(watcher));
|
2088
|
+
}
|
2089
|
+
|
2090
|
+
void ChannelData::RemoveConnectivityWatcher(
|
2091
|
+
AsyncConnectivityStateWatcherInterface* watcher) {
|
2092
|
+
new ConnectivityWatcherRemover(this, watcher);
|
2093
|
+
}
|
2094
|
+
|
1459
2095
|
//
|
1460
2096
|
// CallData implementation
|
1461
2097
|
//
|
@@ -1508,6 +2144,7 @@ CallData::CallData(grpc_call_element* elem, const ChannelData& chand,
|
|
1508
2144
|
owning_call_(args.call_stack),
|
1509
2145
|
call_combiner_(args.call_combiner),
|
1510
2146
|
call_context_(args.context),
|
2147
|
+
lb_call_state_(this),
|
1511
2148
|
pending_send_initial_metadata_(false),
|
1512
2149
|
pending_send_message_(false),
|
1513
2150
|
pending_send_trailing_metadata_(false),
|
@@ -1518,6 +2155,10 @@ CallData::CallData(grpc_call_element* elem, const ChannelData& chand,
|
|
1518
2155
|
CallData::~CallData() {
|
1519
2156
|
grpc_slice_unref_internal(path_);
|
1520
2157
|
GRPC_ERROR_UNREF(cancel_error_);
|
2158
|
+
if (backend_metric_data_ != nullptr) {
|
2159
|
+
backend_metric_data_
|
2160
|
+
->LoadBalancingPolicy::BackendMetricData::~BackendMetricData();
|
2161
|
+
}
|
1521
2162
|
// Make sure there are no remaining pending batches.
|
1522
2163
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
1523
2164
|
GPR_ASSERT(pending_batches_[i].batch == nullptr);
|
@@ -1532,15 +2173,17 @@ grpc_error* CallData::Init(grpc_call_element* elem,
|
|
1532
2173
|
}
|
1533
2174
|
|
1534
2175
|
void CallData::Destroy(grpc_call_element* elem,
|
1535
|
-
const grpc_call_final_info* final_info
|
2176
|
+
const grpc_call_final_info* /*final_info*/,
|
1536
2177
|
grpc_closure* then_schedule_closure) {
|
1537
2178
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
1538
|
-
|
1539
|
-
calld->subchannel_call_->SetAfterCallStackDestroy(then_schedule_closure);
|
1540
|
-
then_schedule_closure = nullptr;
|
1541
|
-
}
|
2179
|
+
RefCountedPtr<SubchannelCall> subchannel_call = calld->subchannel_call_;
|
1542
2180
|
calld->~CallData();
|
1543
|
-
|
2181
|
+
if (GPR_LIKELY(subchannel_call != nullptr)) {
|
2182
|
+
subchannel_call->SetAfterCallStackDestroy(then_schedule_closure);
|
2183
|
+
} else {
|
2184
|
+
// TODO(yashkt) : This can potentially be a Closure::Run
|
2185
|
+
ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
|
2186
|
+
}
|
1544
2187
|
}
|
1545
2188
|
|
1546
2189
|
void CallData::StartTransportStreamOpBatch(
|
@@ -1596,8 +2239,8 @@ void CallData::StartTransportStreamOpBatch(
|
|
1596
2239
|
// Add the batch to the pending list.
|
1597
2240
|
calld->PendingBatchesAdd(elem, batch);
|
1598
2241
|
// Check if we've already gotten a subchannel call.
|
1599
|
-
// Note that once we have
|
1600
|
-
// the channel
|
2242
|
+
// Note that once we have picked a subchannel, we do not need to acquire
|
2243
|
+
// the channel's data plane mutex, which is more efficient (especially for
|
1601
2244
|
// streaming calls).
|
1602
2245
|
if (calld->subchannel_call_ != nullptr) {
|
1603
2246
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
@@ -1609,18 +2252,15 @@ void CallData::StartTransportStreamOpBatch(
|
|
1609
2252
|
return;
|
1610
2253
|
}
|
1611
2254
|
// We do not yet have a subchannel call.
|
1612
|
-
// For batches containing a send_initial_metadata op,
|
1613
|
-
//
|
2255
|
+
// For batches containing a send_initial_metadata op, acquire the
|
2256
|
+
// channel's data plane mutex to pick a subchannel.
|
1614
2257
|
if (GPR_LIKELY(batch->send_initial_metadata)) {
|
1615
2258
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1616
|
-
gpr_log(GPR_INFO,
|
2259
|
+
gpr_log(GPR_INFO,
|
2260
|
+
"chand=%p calld=%p: grabbing data plane mutex to perform pick",
|
1617
2261
|
chand, calld);
|
1618
2262
|
}
|
1619
|
-
|
1620
|
-
GRPC_CLOSURE_INIT(
|
1621
|
-
&batch->handler_private.closure, StartPickLocked, elem,
|
1622
|
-
grpc_combiner_scheduler(chand->data_plane_combiner())),
|
1623
|
-
GRPC_ERROR_NONE);
|
2263
|
+
PickSubchannel(elem, GRPC_ERROR_NONE);
|
1624
2264
|
} else {
|
1625
2265
|
// For all other batches, release the call combiner.
|
1626
2266
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
@@ -1740,18 +2380,52 @@ void CallData::FreeCachedSendOpDataForCompletedBatch(
|
|
1740
2380
|
// LB recv_trailing_metadata_ready handling
|
1741
2381
|
//
|
1742
2382
|
|
2383
|
+
void CallData::RecvTrailingMetadataReadyForLoadBalancingPolicy(
|
2384
|
+
void* arg, grpc_error* error) {
|
2385
|
+
CallData* calld = static_cast<CallData*>(arg);
|
2386
|
+
// Set error if call did not succeed.
|
2387
|
+
grpc_error* error_for_lb = GRPC_ERROR_NONE;
|
2388
|
+
if (error != GRPC_ERROR_NONE) {
|
2389
|
+
error_for_lb = error;
|
2390
|
+
} else {
|
2391
|
+
const auto& fields = calld->recv_trailing_metadata_->idx.named;
|
2392
|
+
GPR_ASSERT(fields.grpc_status != nullptr);
|
2393
|
+
grpc_status_code status =
|
2394
|
+
grpc_get_status_code_from_metadata(fields.grpc_status->md);
|
2395
|
+
std::string msg;
|
2396
|
+
if (status != GRPC_STATUS_OK) {
|
2397
|
+
error_for_lb = grpc_error_set_int(
|
2398
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("call failed"),
|
2399
|
+
GRPC_ERROR_INT_GRPC_STATUS, status);
|
2400
|
+
if (fields.grpc_message != nullptr) {
|
2401
|
+
error_for_lb = grpc_error_set_str(
|
2402
|
+
error_for_lb, GRPC_ERROR_STR_GRPC_MESSAGE,
|
2403
|
+
grpc_slice_ref_internal(GRPC_MDVALUE(fields.grpc_message->md)));
|
2404
|
+
}
|
2405
|
+
}
|
2406
|
+
}
|
2407
|
+
// Invoke callback to LB policy.
|
2408
|
+
Metadata trailing_metadata(calld, calld->recv_trailing_metadata_);
|
2409
|
+
calld->lb_recv_trailing_metadata_ready_(error_for_lb, &trailing_metadata,
|
2410
|
+
&calld->lb_call_state_);
|
2411
|
+
if (error == GRPC_ERROR_NONE) GRPC_ERROR_UNREF(error_for_lb);
|
2412
|
+
// Chain to original callback.
|
2413
|
+
Closure::Run(DEBUG_LOCATION, calld->original_recv_trailing_metadata_ready_,
|
2414
|
+
GRPC_ERROR_REF(error));
|
2415
|
+
}
|
2416
|
+
|
1743
2417
|
void CallData::MaybeInjectRecvTrailingMetadataReadyForLoadBalancingPolicy(
|
1744
|
-
const LoadBalancingPolicy::PickArgs& pick,
|
1745
2418
|
grpc_transport_stream_op_batch* batch) {
|
1746
|
-
if (
|
1747
|
-
|
2419
|
+
if (lb_recv_trailing_metadata_ready_ != nullptr) {
|
2420
|
+
recv_trailing_metadata_ =
|
2421
|
+
batch->payload->recv_trailing_metadata.recv_trailing_metadata;
|
2422
|
+
original_recv_trailing_metadata_ready_ =
|
1748
2423
|
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
|
2424
|
+
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
|
2425
|
+
RecvTrailingMetadataReadyForLoadBalancingPolicy, this,
|
2426
|
+
grpc_schedule_on_exec_ctx);
|
1749
2427
|
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
1750
|
-
|
1751
|
-
if (pick.recv_trailing_metadata != nullptr) {
|
1752
|
-
*pick.recv_trailing_metadata =
|
1753
|
-
batch->payload->recv_trailing_metadata.recv_trailing_metadata;
|
1754
|
-
}
|
2428
|
+
&recv_trailing_metadata_ready_;
|
1755
2429
|
}
|
1756
2430
|
}
|
1757
2431
|
|
@@ -1897,8 +2571,7 @@ void CallData::PendingBatchesFail(
|
|
1897
2571
|
grpc_transport_stream_op_batch* batch = pending->batch;
|
1898
2572
|
if (batch != nullptr) {
|
1899
2573
|
if (batch->recv_trailing_metadata) {
|
1900
|
-
MaybeInjectRecvTrailingMetadataReadyForLoadBalancingPolicy(
|
1901
|
-
batch);
|
2574
|
+
MaybeInjectRecvTrailingMetadataReadyForLoadBalancingPolicy(batch);
|
1902
2575
|
}
|
1903
2576
|
batch->handler_private.extra_arg = this;
|
1904
2577
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
@@ -1919,7 +2592,7 @@ void CallData::PendingBatchesFail(
|
|
1919
2592
|
|
1920
2593
|
// This is called via the call combiner, so access to calld is synchronized.
|
1921
2594
|
void CallData::ResumePendingBatchInCallCombiner(void* arg,
|
1922
|
-
grpc_error* ignored) {
|
2595
|
+
grpc_error* /*ignored*/) {
|
1923
2596
|
grpc_transport_stream_op_batch* batch =
|
1924
2597
|
static_cast<grpc_transport_stream_op_batch*>(arg);
|
1925
2598
|
SubchannelCall* subchannel_call =
|
@@ -1952,8 +2625,7 @@ void CallData::PendingBatchesResume(grpc_call_element* elem) {
|
|
1952
2625
|
grpc_transport_stream_op_batch* batch = pending->batch;
|
1953
2626
|
if (batch != nullptr) {
|
1954
2627
|
if (batch->recv_trailing_metadata) {
|
1955
|
-
MaybeInjectRecvTrailingMetadataReadyForLoadBalancingPolicy(
|
1956
|
-
batch);
|
2628
|
+
MaybeInjectRecvTrailingMetadataReadyForLoadBalancingPolicy(batch);
|
1957
2629
|
}
|
1958
2630
|
batch->handler_private.extra_arg = subchannel_call_.get();
|
1959
2631
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
@@ -2012,9 +2684,8 @@ void CallData::DoRetry(grpc_call_element* elem,
|
|
2012
2684
|
GPR_ASSERT(method_params_ != nullptr);
|
2013
2685
|
const auto* retry_policy = method_params_->retry_policy();
|
2014
2686
|
GPR_ASSERT(retry_policy != nullptr);
|
2015
|
-
// Reset subchannel call
|
2687
|
+
// Reset subchannel call.
|
2016
2688
|
subchannel_call_.reset();
|
2017
|
-
pick_.pick.connected_subchannel.reset();
|
2018
2689
|
// Compute backoff delay.
|
2019
2690
|
grpc_millis next_attempt_time;
|
2020
2691
|
if (server_pushback_ms >= 0) {
|
@@ -2038,8 +2709,8 @@ void CallData::DoRetry(grpc_call_element* elem,
|
|
2038
2709
|
this, next_attempt_time - ExecCtx::Get()->Now());
|
2039
2710
|
}
|
2040
2711
|
// Schedule retry after computed delay.
|
2041
|
-
GRPC_CLOSURE_INIT(&pick_closure_,
|
2042
|
-
|
2712
|
+
GRPC_CLOSURE_INIT(&pick_closure_, PickSubchannel, elem,
|
2713
|
+
grpc_schedule_on_exec_ctx);
|
2043
2714
|
grpc_timer_init(&retry_timer_, next_attempt_time, &pick_closure_);
|
2044
2715
|
// Update bookkeeping.
|
2045
2716
|
if (retry_state != nullptr) retry_state->retry_dispatched = true;
|
@@ -2235,7 +2906,8 @@ void CallData::InvokeRecvInitialMetadataCallback(void* arg, grpc_error* error) {
|
|
2235
2906
|
calld->MaybeClearPendingBatch(batch_data->elem, pending);
|
2236
2907
|
batch_data->Unref();
|
2237
2908
|
// Invoke callback.
|
2238
|
-
|
2909
|
+
Closure::Run(DEBUG_LOCATION, recv_initial_metadata_ready,
|
2910
|
+
GRPC_ERROR_REF(error));
|
2239
2911
|
}
|
2240
2912
|
|
2241
2913
|
void CallData::RecvInitialMetadataReady(void* arg, grpc_error* error) {
|
@@ -2289,6 +2961,7 @@ void CallData::RecvInitialMetadataReady(void* arg, grpc_error* error) {
|
|
2289
2961
|
}
|
2290
2962
|
// Received valid initial metadata, so commit the call.
|
2291
2963
|
calld->RetryCommit(elem, retry_state);
|
2964
|
+
calld->MaybeInvokeConfigSelectorCommitCallback();
|
2292
2965
|
// Invoke the callback to return the result to the surface.
|
2293
2966
|
// Manually invoking a callback function; it does not take ownership of error.
|
2294
2967
|
calld->InvokeRecvInitialMetadataCallback(batch_data, error);
|
@@ -2325,7 +2998,7 @@ void CallData::InvokeRecvMessageCallback(void* arg, grpc_error* error) {
|
|
2325
2998
|
calld->MaybeClearPendingBatch(batch_data->elem, pending);
|
2326
2999
|
batch_data->Unref();
|
2327
3000
|
// Invoke callback.
|
2328
|
-
|
3001
|
+
Closure::Run(DEBUG_LOCATION, recv_message_ready, GRPC_ERROR_REF(error));
|
2329
3002
|
}
|
2330
3003
|
|
2331
3004
|
void CallData::RecvMessageReady(void* arg, grpc_error* error) {
|
@@ -2375,6 +3048,7 @@ void CallData::RecvMessageReady(void* arg, grpc_error* error) {
|
|
2375
3048
|
}
|
2376
3049
|
// Received a valid message, so commit the call.
|
2377
3050
|
calld->RetryCommit(elem, retry_state);
|
3051
|
+
calld->MaybeInvokeConfigSelectorCommitCallback();
|
2378
3052
|
// Invoke the callback to return the result to the surface.
|
2379
3053
|
// Manually invoking a callback function; it does not take ownership of error.
|
2380
3054
|
calld->InvokeRecvMessageCallback(batch_data, error);
|
@@ -2384,8 +3058,7 @@ void CallData::RecvMessageReady(void* arg, grpc_error* error) {
|
|
2384
3058
|
// recv_trailing_metadata handling
|
2385
3059
|
//
|
2386
3060
|
|
2387
|
-
void CallData::GetCallStatus(
|
2388
|
-
grpc_metadata_batch* md_batch, grpc_error* error,
|
3061
|
+
void CallData::GetCallStatus(grpc_metadata_batch* md_batch, grpc_error* error,
|
2389
3062
|
grpc_status_code* status,
|
2390
3063
|
grpc_mdelem** server_pushback_md) {
|
2391
3064
|
if (error != GRPC_ERROR_NONE) {
|
@@ -2554,7 +3227,7 @@ void CallData::RecvTrailingMetadataReady(void* arg, grpc_error* error) {
|
|
2554
3227
|
grpc_mdelem* server_pushback_md = nullptr;
|
2555
3228
|
grpc_metadata_batch* md_batch =
|
2556
3229
|
batch_data->batch.payload->recv_trailing_metadata.recv_trailing_metadata;
|
2557
|
-
calld->GetCallStatus(
|
3230
|
+
calld->GetCallStatus(md_batch, GRPC_ERROR_REF(error), &status,
|
2558
3231
|
&server_pushback_md);
|
2559
3232
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2560
3233
|
gpr_log(GPR_INFO, "chand=%p calld=%p: call finished, status=%s", chand,
|
@@ -2577,6 +3250,7 @@ void CallData::RecvTrailingMetadataReady(void* arg, grpc_error* error) {
|
|
2577
3250
|
}
|
2578
3251
|
// Not retrying, so commit the call.
|
2579
3252
|
calld->RetryCommit(elem, retry_state);
|
3253
|
+
calld->MaybeInvokeConfigSelectorCommitCallback();
|
2580
3254
|
// Run any necessary closures.
|
2581
3255
|
calld->RunClosuresForCompletedCall(batch_data, GRPC_ERROR_REF(error));
|
2582
3256
|
}
|
@@ -2587,8 +3261,7 @@ void CallData::RecvTrailingMetadataReady(void* arg, grpc_error* error) {
|
|
2587
3261
|
|
2588
3262
|
void CallData::AddClosuresForCompletedPendingBatch(
|
2589
3263
|
grpc_call_element* elem, SubchannelCallBatchData* batch_data,
|
2590
|
-
|
2591
|
-
CallCombinerClosureList* closures) {
|
3264
|
+
grpc_error* error, CallCombinerClosureList* closures) {
|
2592
3265
|
PendingBatch* pending = PendingBatchFind(
|
2593
3266
|
elem, "completed", [batch_data](grpc_transport_stream_op_batch* batch) {
|
2594
3267
|
// Match the pending batch with the same set of send ops as the
|
@@ -2655,10 +3328,9 @@ void CallData::OnComplete(void* arg, grpc_error* error) {
|
|
2655
3328
|
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
2656
3329
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
2657
3330
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2658
|
-
char* batch_str = grpc_transport_stream_op_batch_string(&batch_data->batch);
|
2659
3331
|
gpr_log(GPR_INFO, "chand=%p calld=%p: got on_complete, error=%s, batch=%s",
|
2660
|
-
chand, calld, grpc_error_string(error),
|
2661
|
-
|
3332
|
+
chand, calld, grpc_error_string(error),
|
3333
|
+
grpc_transport_stream_op_batch_string(&batch_data->batch).c_str());
|
2662
3334
|
}
|
2663
3335
|
SubchannelCallRetryState* retry_state =
|
2664
3336
|
static_cast<SubchannelCallRetryState*>(
|
@@ -2686,7 +3358,7 @@ void CallData::OnComplete(void* arg, grpc_error* error) {
|
|
2686
3358
|
if (!retry_state->retry_dispatched) {
|
2687
3359
|
// Add closure for the completed pending batch, if any.
|
2688
3360
|
calld->AddClosuresForCompletedPendingBatch(
|
2689
|
-
elem, batch_data,
|
3361
|
+
elem, batch_data, GRPC_ERROR_REF(error), &closures);
|
2690
3362
|
// If needed, add a callback to start any replay or pending send ops on
|
2691
3363
|
// the subchannel call.
|
2692
3364
|
if (!retry_state->completed_recv_trailing_metadata) {
|
@@ -2714,7 +3386,7 @@ void CallData::OnComplete(void* arg, grpc_error* error) {
|
|
2714
3386
|
// subchannel batch construction
|
2715
3387
|
//
|
2716
3388
|
|
2717
|
-
void CallData::StartBatchInCallCombiner(void* arg, grpc_error* ignored) {
|
3389
|
+
void CallData::StartBatchInCallCombiner(void* arg, grpc_error* /*ignored*/) {
|
2718
3390
|
grpc_transport_stream_op_batch* batch =
|
2719
3391
|
static_cast<grpc_transport_stream_op_batch*>(arg);
|
2720
3392
|
SubchannelCall* subchannel_call =
|
@@ -2731,10 +3403,8 @@ void CallData::AddClosureForSubchannelBatch(
|
|
2731
3403
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure, StartBatchInCallCombiner,
|
2732
3404
|
batch, grpc_schedule_on_exec_ctx);
|
2733
3405
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2734
|
-
char* batch_str = grpc_transport_stream_op_batch_string(batch);
|
2735
3406
|
gpr_log(GPR_INFO, "chand=%p calld=%p: starting subchannel batch: %s", chand,
|
2736
|
-
this,
|
2737
|
-
gpr_free(batch_str);
|
3407
|
+
this, grpc_transport_stream_op_batch_string(batch).c_str());
|
2738
3408
|
}
|
2739
3409
|
closures->Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
|
2740
3410
|
"start_subchannel_batch");
|
@@ -2744,8 +3414,8 @@ void CallData::AddRetriableSendInitialMetadataOp(
|
|
2744
3414
|
SubchannelCallRetryState* retry_state,
|
2745
3415
|
SubchannelCallBatchData* batch_data) {
|
2746
3416
|
// Maps the number of retries to the corresponding metadata value slice.
|
2747
|
-
|
2748
|
-
|
3417
|
+
const grpc_slice* retry_count_strings[] = {&GRPC_MDSTR_1, &GRPC_MDSTR_2,
|
3418
|
+
&GRPC_MDSTR_3, &GRPC_MDSTR_4};
|
2749
3419
|
// We need to make a copy of the metadata batch for each attempt, since
|
2750
3420
|
// the filters in the subchannel stack may modify this batch, and we don't
|
2751
3421
|
// want those modifications to be passed forward to subsequent attempts.
|
@@ -2762,8 +3432,7 @@ void CallData::AddRetriableSendInitialMetadataOp(
|
|
2762
3432
|
if (GPR_UNLIKELY(retry_state->send_initial_metadata.idx.named
|
2763
3433
|
.grpc_previous_rpc_attempts != nullptr)) {
|
2764
3434
|
grpc_metadata_batch_remove(&retry_state->send_initial_metadata,
|
2765
|
-
|
2766
|
-
.grpc_previous_rpc_attempts);
|
3435
|
+
GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
|
2767
3436
|
}
|
2768
3437
|
if (GPR_UNLIKELY(num_attempts_completed_ > 0)) {
|
2769
3438
|
grpc_mdelem retry_md = grpc_mdelem_create(
|
@@ -2773,7 +3442,7 @@ void CallData::AddRetriableSendInitialMetadataOp(
|
|
2773
3442
|
&retry_state->send_initial_metadata,
|
2774
3443
|
&retry_state
|
2775
3444
|
->send_initial_metadata_storage[send_initial_metadata_.list.count],
|
2776
|
-
retry_md);
|
3445
|
+
retry_md, GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
|
2777
3446
|
if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
|
2778
3447
|
gpr_log(GPR_ERROR, "error adding retry metadata: %s",
|
2779
3448
|
grpc_error_string(error));
|
@@ -2871,7 +3540,7 @@ void CallData::AddRetriableRecvTrailingMetadataOp(
|
|
2871
3540
|
.recv_trailing_metadata_ready =
|
2872
3541
|
&retry_state->recv_trailing_metadata_ready;
|
2873
3542
|
MaybeInjectRecvTrailingMetadataReadyForLoadBalancingPolicy(
|
2874
|
-
|
3543
|
+
&batch_data->batch);
|
2875
3544
|
}
|
2876
3545
|
|
2877
3546
|
void CallData::StartInternalRecvTrailingMetadata(grpc_call_element* elem) {
|
@@ -3085,7 +3754,8 @@ void CallData::AddSubchannelBatchesForPendingBatches(
|
|
3085
3754
|
}
|
3086
3755
|
}
|
3087
3756
|
|
3088
|
-
void CallData::StartRetriableSubchannelBatches(void* arg,
|
3757
|
+
void CallData::StartRetriableSubchannelBatches(void* arg,
|
3758
|
+
grpc_error* /*ignored*/) {
|
3089
3759
|
grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
|
3090
3760
|
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
3091
3761
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
@@ -3132,14 +3802,14 @@ void CallData::CreateSubchannelCall(grpc_call_element* elem) {
|
|
3132
3802
|
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
3133
3803
|
const size_t parent_data_size =
|
3134
3804
|
enable_retries_ ? sizeof(SubchannelCallRetryState) : 0;
|
3135
|
-
|
3136
|
-
pollent_, path_, call_start_time_,
|
3805
|
+
SubchannelCall::Args call_args = {
|
3806
|
+
std::move(connected_subchannel_), pollent_, path_, call_start_time_,
|
3807
|
+
deadline_, arena_,
|
3137
3808
|
// TODO(roth): When we implement hedging support, we will probably
|
3138
3809
|
// need to use a separate call context for each subchannel call.
|
3139
3810
|
call_context_, call_combiner_, parent_data_size};
|
3140
3811
|
grpc_error* error = GRPC_ERROR_NONE;
|
3141
|
-
subchannel_call_ =
|
3142
|
-
pick_.pick.connected_subchannel->CreateCall(call_args, &error);
|
3812
|
+
subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
|
3143
3813
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
3144
3814
|
gpr_log(GPR_INFO, "chand=%p calld=%p: create subchannel_call=%p: error=%s",
|
3145
3815
|
chand, this, subchannel_call_.get(), grpc_error_string(error));
|
@@ -3155,6 +3825,11 @@ void CallData::CreateSubchannelCall(grpc_call_element* elem) {
|
|
3155
3825
|
}
|
3156
3826
|
}
|
3157
3827
|
|
3828
|
+
void CallData::AsyncPickDone(grpc_call_element* elem, grpc_error* error) {
|
3829
|
+
GRPC_CLOSURE_INIT(&pick_closure_, PickDone, elem, grpc_schedule_on_exec_ctx);
|
3830
|
+
ExecCtx::Run(DEBUG_LOCATION, &pick_closure_, error);
|
3831
|
+
}
|
3832
|
+
|
3158
3833
|
void CallData::PickDone(void* arg, grpc_error* error) {
|
3159
3834
|
grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
|
3160
3835
|
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
@@ -3177,10 +3852,9 @@ class CallData::QueuedPickCanceller {
|
|
3177
3852
|
public:
|
3178
3853
|
explicit QueuedPickCanceller(grpc_call_element* elem) : elem_(elem) {
|
3179
3854
|
auto* calld = static_cast<CallData*>(elem->call_data);
|
3180
|
-
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
3181
3855
|
GRPC_CALL_STACK_REF(calld->owning_call_, "QueuedPickCanceller");
|
3182
3856
|
GRPC_CLOSURE_INIT(&closure_, &CancelLocked, this,
|
3183
|
-
|
3857
|
+
grpc_schedule_on_exec_ctx);
|
3184
3858
|
calld->call_combiner_->SetNotifyOnCancel(&closure_);
|
3185
3859
|
}
|
3186
3860
|
|
@@ -3189,6 +3863,7 @@ class CallData::QueuedPickCanceller {
|
|
3189
3863
|
auto* self = static_cast<QueuedPickCanceller*>(arg);
|
3190
3864
|
auto* chand = static_cast<ChannelData*>(self->elem_->channel_data);
|
3191
3865
|
auto* calld = static_cast<CallData*>(self->elem_->call_data);
|
3866
|
+
MutexLock lock(chand->data_plane_mu());
|
3192
3867
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
3193
3868
|
gpr_log(GPR_INFO,
|
3194
3869
|
"chand=%p calld=%p: cancelling queued pick: "
|
@@ -3198,20 +3873,21 @@ class CallData::QueuedPickCanceller {
|
|
3198
3873
|
}
|
3199
3874
|
if (calld->pick_canceller_ == self && error != GRPC_ERROR_NONE) {
|
3200
3875
|
// Remove pick from list of queued picks.
|
3201
|
-
calld->
|
3876
|
+
calld->MaybeRemoveCallFromQueuedPicksLocked(self->elem_);
|
3202
3877
|
// Fail pending batches on the call.
|
3203
3878
|
calld->PendingBatchesFail(self->elem_, GRPC_ERROR_REF(error),
|
3204
3879
|
YieldCallCombinerIfPendingBatchesFound);
|
3205
3880
|
}
|
3206
3881
|
GRPC_CALL_STACK_UNREF(calld->owning_call_, "QueuedPickCanceller");
|
3207
|
-
|
3882
|
+
delete self;
|
3208
3883
|
}
|
3209
3884
|
|
3210
3885
|
grpc_call_element* elem_;
|
3211
3886
|
grpc_closure closure_;
|
3212
3887
|
};
|
3213
3888
|
|
3214
|
-
void CallData::
|
3889
|
+
void CallData::MaybeRemoveCallFromQueuedPicksLocked(grpc_call_element* elem) {
|
3890
|
+
if (!pick_queued_) return;
|
3215
3891
|
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
3216
3892
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
3217
3893
|
gpr_log(GPR_INFO, "chand=%p calld=%p: removing from queued picks list",
|
@@ -3223,7 +3899,8 @@ void CallData::RemoveCallFromQueuedPicksLocked(grpc_call_element* elem) {
|
|
3223
3899
|
pick_canceller_ = nullptr;
|
3224
3900
|
}
|
3225
3901
|
|
3226
|
-
void CallData::
|
3902
|
+
void CallData::MaybeAddCallToQueuedPicksLocked(grpc_call_element* elem) {
|
3903
|
+
if (pick_queued_) return;
|
3227
3904
|
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
3228
3905
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
3229
3906
|
gpr_log(GPR_INFO, "chand=%p calld=%p: adding to queued picks list", chand,
|
@@ -3233,91 +3910,179 @@ void CallData::AddCallToQueuedPicksLocked(grpc_call_element* elem) {
|
|
3233
3910
|
pick_.elem = elem;
|
3234
3911
|
chand->AddQueuedPick(&pick_, pollent_);
|
3235
3912
|
// Register call combiner cancellation callback.
|
3236
|
-
pick_canceller_ =
|
3913
|
+
pick_canceller_ = new QueuedPickCanceller(elem);
|
3237
3914
|
}
|
3238
3915
|
|
3239
|
-
|
3916
|
+
grpc_error* CallData::ApplyServiceConfigToCallLocked(
|
3917
|
+
grpc_call_element* elem, grpc_metadata_batch* initial_metadata) {
|
3240
3918
|
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
3241
3919
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
3242
3920
|
gpr_log(GPR_INFO, "chand=%p calld=%p: applying service config to call",
|
3243
3921
|
chand, this);
|
3244
3922
|
}
|
3245
|
-
|
3246
|
-
|
3247
|
-
|
3248
|
-
|
3249
|
-
|
3250
|
-
|
3251
|
-
|
3252
|
-
|
3253
|
-
|
3254
|
-
|
3923
|
+
ConfigSelector* config_selector = chand->config_selector();
|
3924
|
+
auto service_config = chand->service_config();
|
3925
|
+
if (service_config != nullptr) {
|
3926
|
+
// Use the ConfigSelector to determine the config for the call.
|
3927
|
+
ConfigSelector::CallConfig call_config =
|
3928
|
+
config_selector->GetCallConfig({&path_, initial_metadata, arena_});
|
3929
|
+
if (call_config.error != GRPC_ERROR_NONE) return call_config.error;
|
3930
|
+
call_attributes_ = std::move(call_config.call_attributes);
|
3931
|
+
on_call_committed_ = std::move(call_config.on_call_committed);
|
3932
|
+
// Create a ServiceConfigCallData for the call. This stores a ref to the
|
3933
|
+
// ServiceConfig and caches the right set of parsed configs to use for
|
3934
|
+
// the call. The MethodConfig will store itself in the call context,
|
3935
|
+
// so that it can be accessed by filters in the subchannel, and it
|
3936
|
+
// will be cleaned up when the call ends.
|
3937
|
+
auto* service_config_call_data = arena_->New<ServiceConfigCallData>(
|
3938
|
+
std::move(service_config), call_config.method_configs, call_context_);
|
3939
|
+
// Apply our own method params to the call.
|
3940
|
+
method_params_ = static_cast<ClientChannelMethodParsedConfig*>(
|
3941
|
+
service_config_call_data->GetMethodParsedConfig(
|
3255
3942
|
internal::ClientChannelServiceConfigParser::ParserIndex()));
|
3256
|
-
|
3257
|
-
|
3258
|
-
|
3259
|
-
|
3260
|
-
|
3261
|
-
|
3262
|
-
|
3263
|
-
|
3264
|
-
|
3265
|
-
|
3266
|
-
|
3267
|
-
|
3943
|
+
if (method_params_ != nullptr) {
|
3944
|
+
// If the deadline from the service config is shorter than the one
|
3945
|
+
// from the client API, reset the deadline timer.
|
3946
|
+
if (chand->deadline_checking_enabled() &&
|
3947
|
+
method_params_->timeout() != 0) {
|
3948
|
+
const grpc_millis per_method_deadline =
|
3949
|
+
grpc_cycle_counter_to_millis_round_up(call_start_time_) +
|
3950
|
+
method_params_->timeout();
|
3951
|
+
if (per_method_deadline < deadline_) {
|
3952
|
+
deadline_ = per_method_deadline;
|
3953
|
+
grpc_deadline_state_reset(elem, deadline_);
|
3954
|
+
}
|
3268
3955
|
}
|
3269
|
-
|
3270
|
-
|
3271
|
-
|
3272
|
-
|
3273
|
-
|
3274
|
-
|
3275
|
-
|
3276
|
-
|
3277
|
-
|
3278
|
-
|
3279
|
-
|
3280
|
-
|
3281
|
-
|
3956
|
+
// If the service config set wait_for_ready and the application
|
3957
|
+
// did not explicitly set it, use the value from the service config.
|
3958
|
+
uint32_t* send_initial_metadata_flags =
|
3959
|
+
&pending_batches_[0]
|
3960
|
+
.batch->payload->send_initial_metadata
|
3961
|
+
.send_initial_metadata_flags;
|
3962
|
+
if (method_params_->wait_for_ready().has_value() &&
|
3963
|
+
!(*send_initial_metadata_flags &
|
3964
|
+
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)) {
|
3965
|
+
if (method_params_->wait_for_ready().value()) {
|
3966
|
+
*send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
|
3967
|
+
} else {
|
3968
|
+
*send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
|
3969
|
+
}
|
3282
3970
|
}
|
3283
3971
|
}
|
3972
|
+
// Set retry throttle data for call.
|
3973
|
+
retry_throttle_data_ = chand->retry_throttle_data();
|
3284
3974
|
}
|
3285
3975
|
// If no retry policy, disable retries.
|
3286
3976
|
// TODO(roth): Remove this when adding support for transparent retries.
|
3287
3977
|
if (method_params_ == nullptr || method_params_->retry_policy() == nullptr) {
|
3288
3978
|
enable_retries_ = false;
|
3289
3979
|
}
|
3980
|
+
return GRPC_ERROR_NONE;
|
3290
3981
|
}
|
3291
3982
|
|
3292
|
-
void CallData::
|
3293
|
-
|
3294
|
-
|
3295
|
-
|
3296
|
-
if (GPR_LIKELY(chand->received_service_config_data() &&
|
3297
|
-
!service_config_applied_)) {
|
3298
|
-
service_config_applied_ = true;
|
3299
|
-
ApplyServiceConfigToCallLocked(elem);
|
3983
|
+
void CallData::MaybeInvokeConfigSelectorCommitCallback() {
|
3984
|
+
if (on_call_committed_ != nullptr) {
|
3985
|
+
on_call_committed_();
|
3986
|
+
on_call_committed_ = nullptr;
|
3300
3987
|
}
|
3301
3988
|
}
|
3302
3989
|
|
3303
|
-
const char*
|
3304
|
-
|
3305
|
-
|
3990
|
+
const char* PickResultTypeName(
|
3991
|
+
LoadBalancingPolicy::PickResult::ResultType type) {
|
3992
|
+
switch (type) {
|
3993
|
+
case LoadBalancingPolicy::PickResult::PICK_COMPLETE:
|
3306
3994
|
return "COMPLETE";
|
3307
|
-
case LoadBalancingPolicy::PICK_QUEUE:
|
3995
|
+
case LoadBalancingPolicy::PickResult::PICK_QUEUE:
|
3308
3996
|
return "QUEUE";
|
3309
|
-
case LoadBalancingPolicy::
|
3310
|
-
return "
|
3997
|
+
case LoadBalancingPolicy::PickResult::PICK_FAILED:
|
3998
|
+
return "FAILED";
|
3311
3999
|
}
|
3312
4000
|
GPR_UNREACHABLE_CODE(return "UNKNOWN");
|
3313
4001
|
}
|
3314
4002
|
|
3315
|
-
void CallData::
|
4003
|
+
void CallData::PickSubchannel(void* arg, grpc_error* error) {
|
3316
4004
|
grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
|
3317
4005
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
3318
4006
|
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
3319
|
-
|
3320
|
-
|
4007
|
+
bool pick_complete;
|
4008
|
+
{
|
4009
|
+
MutexLock lock(chand->data_plane_mu());
|
4010
|
+
pick_complete = calld->PickSubchannelLocked(elem, &error);
|
4011
|
+
}
|
4012
|
+
if (pick_complete) {
|
4013
|
+
PickDone(elem, error);
|
4014
|
+
GRPC_ERROR_UNREF(error);
|
4015
|
+
}
|
4016
|
+
}
|
4017
|
+
|
4018
|
+
bool CallData::PickSubchannelLocked(grpc_call_element* elem,
|
4019
|
+
grpc_error** error) {
|
4020
|
+
ChannelData* chand = static_cast<ChannelData*>(elem->channel_data);
|
4021
|
+
GPR_ASSERT(connected_subchannel_ == nullptr);
|
4022
|
+
GPR_ASSERT(subchannel_call_ == nullptr);
|
4023
|
+
// The picker being null means that the channel is currently in IDLE state.
|
4024
|
+
// The incoming call will make the channel exit IDLE.
|
4025
|
+
if (chand->picker() == nullptr) {
|
4026
|
+
GRPC_CHANNEL_STACK_REF(chand->owning_stack(), "PickSubchannelLocked");
|
4027
|
+
// Bounce into the control plane work serializer to exit IDLE. Since we are
|
4028
|
+
// holding on to the data plane mutex here, we offload it on the ExecCtx so
|
4029
|
+
// that we don't deadlock with ourselves.
|
4030
|
+
ExecCtx::Run(
|
4031
|
+
DEBUG_LOCATION,
|
4032
|
+
GRPC_CLOSURE_CREATE(
|
4033
|
+
[](void* arg, grpc_error* /*error*/) {
|
4034
|
+
auto* chand = static_cast<ChannelData*>(arg);
|
4035
|
+
chand->work_serializer()->Run(
|
4036
|
+
[chand]() {
|
4037
|
+
chand->CheckConnectivityState(/*try_to_connect=*/true);
|
4038
|
+
GRPC_CHANNEL_STACK_UNREF(chand->owning_stack(),
|
4039
|
+
"PickSubchannelLocked");
|
4040
|
+
},
|
4041
|
+
DEBUG_LOCATION);
|
4042
|
+
},
|
4043
|
+
chand, nullptr),
|
4044
|
+
GRPC_ERROR_NONE);
|
4045
|
+
// Queue the pick, so that it will be attempted once the channel
|
4046
|
+
// becomes connected.
|
4047
|
+
MaybeAddCallToQueuedPicksLocked(elem);
|
4048
|
+
return false;
|
4049
|
+
}
|
4050
|
+
grpc_metadata_batch* initial_metadata_batch =
|
4051
|
+
seen_send_initial_metadata_
|
4052
|
+
? &send_initial_metadata_
|
4053
|
+
: pending_batches_[0]
|
4054
|
+
.batch->payload->send_initial_metadata.send_initial_metadata;
|
4055
|
+
// Grab initial metadata flags so that we can check later if the call has
|
4056
|
+
// wait_for_ready enabled.
|
4057
|
+
const uint32_t send_initial_metadata_flags =
|
4058
|
+
seen_send_initial_metadata_ ? send_initial_metadata_flags_
|
4059
|
+
: pending_batches_[0]
|
4060
|
+
.batch->payload->send_initial_metadata
|
4061
|
+
.send_initial_metadata_flags;
|
4062
|
+
// Avoid picking if we haven't yet received service config data.
|
4063
|
+
if (GPR_UNLIKELY(!chand->received_service_config_data())) {
|
4064
|
+
// If the resolver returned transient failure before returning the
|
4065
|
+
// first service config, fail any non-wait_for_ready calls.
|
4066
|
+
grpc_error* resolver_error = chand->resolver_transient_failure_error();
|
4067
|
+
if (resolver_error != GRPC_ERROR_NONE &&
|
4068
|
+
(send_initial_metadata_flags & GRPC_INITIAL_METADATA_WAIT_FOR_READY) ==
|
4069
|
+
0) {
|
4070
|
+
MaybeRemoveCallFromQueuedPicksLocked(elem);
|
4071
|
+
*error = GRPC_ERROR_REF(resolver_error);
|
4072
|
+
return true;
|
4073
|
+
}
|
4074
|
+
// Either the resolver has not yet returned a result, or it has
|
4075
|
+
// returned transient failure but the call is wait_for_ready. In
|
4076
|
+
// either case, queue the call.
|
4077
|
+
MaybeAddCallToQueuedPicksLocked(elem);
|
4078
|
+
return false;
|
4079
|
+
}
|
4080
|
+
// Apply service config to call if not yet applied.
|
4081
|
+
if (GPR_LIKELY(!service_config_applied_)) {
|
4082
|
+
service_config_applied_ = true;
|
4083
|
+
*error = ApplyServiceConfigToCallLocked(elem, initial_metadata_batch);
|
4084
|
+
if (*error != GRPC_ERROR_NONE) return true;
|
4085
|
+
}
|
3321
4086
|
// If this is a retry, use the send_initial_metadata payload that
|
3322
4087
|
// we've cached; otherwise, use the pending batch. The
|
3323
4088
|
// send_initial_metadata batch will be the first pending batch in the
|
@@ -3328,79 +4093,80 @@ void CallData::StartPickLocked(void* arg, grpc_error* error) {
|
|
3328
4093
|
// allocate the subchannel batch earlier so that we can give the
|
3329
4094
|
// subchannel's copy of the metadata batch (which is copied for each
|
3330
4095
|
// attempt) to the LB policy instead the one from the parent channel.
|
3331
|
-
|
3332
|
-
|
3333
|
-
|
3334
|
-
|
3335
|
-
|
3336
|
-
uint32_t* send_initial_metadata_flags =
|
3337
|
-
calld->seen_send_initial_metadata_
|
3338
|
-
? &calld->send_initial_metadata_flags_
|
3339
|
-
: &calld->pending_batches_[0]
|
3340
|
-
.batch->payload->send_initial_metadata
|
3341
|
-
.send_initial_metadata_flags;
|
3342
|
-
// Apply service config to call if needed.
|
3343
|
-
calld->MaybeApplyServiceConfigToCallLocked(elem);
|
3344
|
-
// When done, we schedule this closure to leave the data plane combiner.
|
3345
|
-
GRPC_CLOSURE_INIT(&calld->pick_closure_, PickDone, elem,
|
3346
|
-
grpc_schedule_on_exec_ctx);
|
4096
|
+
LoadBalancingPolicy::PickArgs pick_args;
|
4097
|
+
pick_args.path = StringViewFromSlice(path_);
|
4098
|
+
pick_args.call_state = &lb_call_state_;
|
4099
|
+
Metadata initial_metadata(this, initial_metadata_batch);
|
4100
|
+
pick_args.initial_metadata = &initial_metadata;
|
3347
4101
|
// Attempt pick.
|
3348
|
-
|
3349
|
-
auto pick_result = chand->picker()->Pick(&calld->pick_.pick, &error);
|
4102
|
+
auto result = chand->picker()->Pick(pick_args);
|
3350
4103
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
3351
4104
|
gpr_log(GPR_INFO,
|
3352
|
-
"chand=%p calld=%p: LB pick returned %s (
|
3353
|
-
|
3354
|
-
|
3355
|
-
|
3356
|
-
|
3357
|
-
|
3358
|
-
switch (pick_result) {
|
3359
|
-
case LoadBalancingPolicy::PICK_TRANSIENT_FAILURE: {
|
4105
|
+
"chand=%p calld=%p: LB pick returned %s (subchannel=%p, error=%s)",
|
4106
|
+
chand, this, PickResultTypeName(result.type),
|
4107
|
+
result.subchannel.get(), grpc_error_string(result.error));
|
4108
|
+
}
|
4109
|
+
switch (result.type) {
|
4110
|
+
case LoadBalancingPolicy::PickResult::PICK_FAILED: {
|
3360
4111
|
// If we're shutting down, fail all RPCs.
|
3361
4112
|
grpc_error* disconnect_error = chand->disconnect_error();
|
3362
4113
|
if (disconnect_error != GRPC_ERROR_NONE) {
|
3363
|
-
GRPC_ERROR_UNREF(error);
|
3364
|
-
|
3365
|
-
|
3366
|
-
|
4114
|
+
GRPC_ERROR_UNREF(result.error);
|
4115
|
+
MaybeRemoveCallFromQueuedPicksLocked(elem);
|
4116
|
+
MaybeInvokeConfigSelectorCommitCallback();
|
4117
|
+
*error = GRPC_ERROR_REF(disconnect_error);
|
4118
|
+
return true;
|
3367
4119
|
}
|
3368
4120
|
// If wait_for_ready is false, then the error indicates the RPC
|
3369
4121
|
// attempt's final status.
|
3370
|
-
if ((
|
4122
|
+
if ((send_initial_metadata_flags &
|
3371
4123
|
GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
|
3372
4124
|
// Retry if appropriate; otherwise, fail.
|
3373
4125
|
grpc_status_code status = GRPC_STATUS_OK;
|
3374
|
-
grpc_error_get_status(error,
|
4126
|
+
grpc_error_get_status(result.error, deadline_, &status, nullptr,
|
3375
4127
|
nullptr, nullptr);
|
3376
|
-
|
3377
|
-
|
3378
|
-
|
4128
|
+
const bool retried = enable_retries_ &&
|
4129
|
+
MaybeRetry(elem, nullptr /* batch_data */, status,
|
4130
|
+
nullptr /* server_pushback_md */);
|
4131
|
+
if (!retried) {
|
3379
4132
|
grpc_error* new_error =
|
3380
4133
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
3381
|
-
"Failed to pick subchannel", &error, 1);
|
3382
|
-
GRPC_ERROR_UNREF(error);
|
3383
|
-
|
4134
|
+
"Failed to pick subchannel", &result.error, 1);
|
4135
|
+
GRPC_ERROR_UNREF(result.error);
|
4136
|
+
*error = new_error;
|
4137
|
+
MaybeInvokeConfigSelectorCommitCallback();
|
3384
4138
|
}
|
3385
|
-
|
3386
|
-
|
4139
|
+
MaybeRemoveCallFromQueuedPicksLocked(elem);
|
4140
|
+
return !retried;
|
3387
4141
|
}
|
3388
4142
|
// If wait_for_ready is true, then queue to retry when we get a new
|
3389
4143
|
// picker.
|
3390
|
-
GRPC_ERROR_UNREF(error);
|
4144
|
+
GRPC_ERROR_UNREF(result.error);
|
3391
4145
|
}
|
3392
4146
|
// Fallthrough
|
3393
|
-
case LoadBalancingPolicy::PICK_QUEUE:
|
3394
|
-
|
3395
|
-
|
4147
|
+
case LoadBalancingPolicy::PickResult::PICK_QUEUE:
|
4148
|
+
MaybeAddCallToQueuedPicksLocked(elem);
|
4149
|
+
return false;
|
3396
4150
|
default: // PICK_COMPLETE
|
4151
|
+
MaybeRemoveCallFromQueuedPicksLocked(elem);
|
3397
4152
|
// Handle drops.
|
3398
|
-
if (GPR_UNLIKELY(
|
3399
|
-
error =
|
3400
|
-
|
4153
|
+
if (GPR_UNLIKELY(result.subchannel == nullptr)) {
|
4154
|
+
result.error = grpc_error_set_int(
|
4155
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
4156
|
+
"Call dropped by load balancing policy"),
|
4157
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
4158
|
+
MaybeInvokeConfigSelectorCommitCallback();
|
4159
|
+
} else {
|
4160
|
+
// Grab a ref to the connected subchannel while we're still
|
4161
|
+
// holding the data plane mutex.
|
4162
|
+
connected_subchannel_ =
|
4163
|
+
chand->GetConnectedSubchannelInDataPlane(result.subchannel.get());
|
4164
|
+
GPR_ASSERT(connected_subchannel_ != nullptr);
|
4165
|
+
if (retry_committed_) MaybeInvokeConfigSelectorCommitCallback();
|
3401
4166
|
}
|
3402
|
-
|
3403
|
-
|
4167
|
+
lb_recv_trailing_metadata_ready_ = result.recv_trailing_metadata_ready;
|
4168
|
+
*error = result.error;
|
4169
|
+
return true;
|
3404
4170
|
}
|
3405
4171
|
}
|
3406
4172
|
|
@@ -3428,20 +4194,6 @@ const grpc_channel_filter grpc_client_channel_filter = {
|
|
3428
4194
|
"client-channel",
|
3429
4195
|
};
|
3430
4196
|
|
3431
|
-
void grpc_client_channel_set_channelz_node(
|
3432
|
-
grpc_channel_element* elem, grpc_core::channelz::ClientChannelNode* node) {
|
3433
|
-
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
3434
|
-
chand->set_channelz_node(node);
|
3435
|
-
}
|
3436
|
-
|
3437
|
-
void grpc_client_channel_populate_child_refs(
|
3438
|
-
grpc_channel_element* elem,
|
3439
|
-
grpc_core::channelz::ChildRefsList* child_subchannels,
|
3440
|
-
grpc_core::channelz::ChildRefsList* child_channels) {
|
3441
|
-
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
3442
|
-
chand->FillChildRefsForChannelz(child_subchannels, child_channels);
|
3443
|
-
}
|
3444
|
-
|
3445
4197
|
grpc_connectivity_state grpc_client_channel_check_connectivity_state(
|
3446
4198
|
grpc_channel_element* elem, int try_to_connect) {
|
3447
4199
|
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
@@ -3459,10 +4211,32 @@ void grpc_client_channel_watch_connectivity_state(
|
|
3459
4211
|
grpc_connectivity_state* state, grpc_closure* closure,
|
3460
4212
|
grpc_closure* watcher_timer_init) {
|
3461
4213
|
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
4214
|
+
if (state == nullptr) {
|
4215
|
+
// Handle cancellation.
|
4216
|
+
GPR_ASSERT(watcher_timer_init == nullptr);
|
4217
|
+
chand->RemoveExternalConnectivityWatcher(closure, /*cancel=*/true);
|
4218
|
+
return;
|
4219
|
+
}
|
4220
|
+
// Handle addition.
|
3462
4221
|
return chand->AddExternalConnectivityWatcher(pollent, state, closure,
|
3463
4222
|
watcher_timer_init);
|
3464
4223
|
}
|
3465
4224
|
|
4225
|
+
void grpc_client_channel_start_connectivity_watch(
|
4226
|
+
grpc_channel_element* elem, grpc_connectivity_state initial_state,
|
4227
|
+
grpc_core::OrphanablePtr<grpc_core::AsyncConnectivityStateWatcherInterface>
|
4228
|
+
watcher) {
|
4229
|
+
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
4230
|
+
chand->AddConnectivityWatcher(initial_state, std::move(watcher));
|
4231
|
+
}
|
4232
|
+
|
4233
|
+
void grpc_client_channel_stop_connectivity_watch(
|
4234
|
+
grpc_channel_element* elem,
|
4235
|
+
grpc_core::AsyncConnectivityStateWatcherInterface* watcher) {
|
4236
|
+
auto* chand = static_cast<ChannelData*>(elem->channel_data);
|
4237
|
+
chand->RemoveConnectivityWatcher(watcher);
|
4238
|
+
}
|
4239
|
+
|
3466
4240
|
grpc_core::RefCountedPtr<grpc_core::SubchannelCall>
|
3467
4241
|
grpc_client_channel_get_subchannel_call(grpc_call_element* elem) {
|
3468
4242
|
auto* calld = static_cast<CallData*>(elem->call_data);
|