grpc 1.28.0.pre2 → 1.31.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +8313 -11862
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security.h +30 -9
- data/include/grpc/grpc_security_constants.h +4 -0
- data/include/grpc/impl/codegen/grpc_types.h +23 -23
- data/include/grpc/impl/codegen/port_platform.h +6 -34
- data/include/grpc/module.modulemap +24 -39
- data/src/core/ext/filters/client_channel/backend_metric.cc +18 -12
- data/src/core/ext/filters/client_channel/client_channel.cc +618 -482
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
- 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/global_subchannel_pool.cc +24 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +9 -22
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +23 -14
- data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
- data/src/core/ext/filters/client_channel/lb_policy.h +44 -33
- 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 +297 -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/grpclb.cc +311 -497
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -17
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +117 -41
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1142 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +10 -7
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
- data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
- data/src/core/ext/filters/client_channel/resolver.cc +5 -8
- data/src/core/ext/filters/client_channel/resolver.h +12 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +78 -61
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +41 -40
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +22 -24
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +12 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +79 -122
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +199 -163
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +46 -45
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +64 -12
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_registry.cc +19 -17
- data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +21 -22
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +73 -217
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +45 -27
- data/src/core/ext/filters/client_channel/server_address.cc +6 -9
- data/src/core/ext/filters/client_channel/server_address.h +6 -12
- data/src/core/ext/filters/client_channel/service_config.cc +104 -144
- data/src/core/ext/filters/client_channel/service_config.h +28 -98
- 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 +55 -25
- data/src/core/ext/filters/client_channel/subchannel.h +35 -11
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +1200 -246
- data/src/core/ext/filters/client_channel/xds/xds_api.h +130 -44
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +90 -29
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +9 -4
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +839 -431
- data/src/core/ext/filters/client_channel/xds/xds_client.h +84 -33
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +40 -28
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -33
- data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
- 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/message_size/message_size_filter.cc +61 -88
- data/src/core/ext/filters/message_size/message_size_filter.h +10 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +386 -350
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +42 -26
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +25 -30
- data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
- 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 +29 -16
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
- 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/internal.h +27 -21
- data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +24 -22
- data/src/core/ext/transport/inproc/inproc_transport.cc +54 -15
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -876
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +429 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +198 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +388 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +23 -10
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +352 -310
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +79 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +48 -27
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +258 -214
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +157 -122
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +173 -73
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +53 -38
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +95 -63
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +68 -46
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +770 -722
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +305 -210
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +22 -16
- data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +48 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
- data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +12 -11
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +421 -389
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
- 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/data/orca/v1/orca_load_report.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
- data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
- data/src/core/ext/upb-generated/validate/validate.upb.h +569 -562
- data/src/core/lib/channel/channel_args.cc +15 -14
- data/src/core/lib/channel/channel_args.h +3 -1
- data/src/core/lib/channel/channel_stack.h +20 -13
- data/src/core/lib/channel/channel_trace.cc +2 -6
- data/src/core/lib/channel/channelz.cc +10 -21
- data/src/core/lib/channel/channelz.h +3 -2
- data/src/core/lib/channel/channelz_registry.cc +5 -3
- data/src/core/lib/channel/connected_channel.cc +7 -5
- data/src/core/lib/channel/context.h +1 -1
- data/src/core/lib/channel/handshaker.cc +11 -13
- data/src/core/lib/channel/handshaker.h +4 -2
- data/src/core/lib/channel/handshaker_registry.cc +5 -17
- data/src/core/lib/channel/status_util.cc +2 -3
- data/src/core/lib/compression/message_compress.cc +5 -1
- data/src/core/lib/debug/stats.cc +21 -27
- data/src/core/lib/debug/stats.h +3 -1
- data/src/core/lib/gpr/log_linux.cc +6 -8
- data/src/core/lib/gpr/log_posix.cc +6 -8
- data/src/core/lib/gpr/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +10 -33
- data/src/core/lib/gpr/string.h +4 -18
- data/src/core/lib/gpr/sync_abseil.cc +2 -0
- data/src/core/lib/gpr/time.cc +4 -0
- data/src/core/lib/gpr/time_posix.cc +1 -1
- data/src/core/lib/gprpp/atomic.h +6 -6
- data/src/core/lib/gprpp/fork.cc +1 -1
- data/src/core/lib/gprpp/global_config_env.cc +8 -6
- data/src/core/lib/gprpp/host_port.cc +29 -35
- data/src/core/lib/gprpp/host_port.h +14 -17
- data/src/core/lib/gprpp/map.h +5 -11
- data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
- data/src/core/lib/gprpp/sync.h +9 -0
- data/src/core/lib/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +15 -13
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +10 -10
- data/src/core/lib/http/parser.h +2 -3
- data/src/core/lib/iomgr/buffer_list.h +22 -21
- data/src/core/lib/iomgr/call_combiner.h +3 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +4 -2
- data/src/core/lib/iomgr/closure.h +2 -3
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
- data/src/core/lib/iomgr/endpoint_pair.h +2 -3
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
- data/src/core/lib/iomgr/error.cc +6 -9
- data/src/core/lib/iomgr/error.h +0 -1
- data/src/core/lib/iomgr/error_cfstream.cc +9 -8
- 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 +25 -29
- data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -24
- data/src/core/lib/iomgr/ev_poll_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.cc +4 -3
- data/src/core/lib/iomgr/exec_ctx.h +14 -2
- data/src/core/lib/iomgr/iomgr.cc +10 -0
- data/src/core/lib/iomgr/iomgr.h +10 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
- data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
- data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
- data/src/core/lib/iomgr/port.h +2 -21
- 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 +42 -57
- data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
- data/src/core/lib/iomgr/resolve_address_windows.cc +16 -25
- data/src/core/lib/iomgr/resource_quota.cc +38 -37
- data/src/core/lib/iomgr/sockaddr_utils.cc +29 -33
- data/src/core/lib/iomgr/sockaddr_utils.h +10 -15
- 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 +102 -81
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/socket_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -18
- data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +30 -36
- data/src/core/lib/iomgr/tcp_client_windows.cc +10 -11
- data/src/core/lib/iomgr/tcp_custom.cc +3 -4
- data/src/core/lib/iomgr/tcp_custom.h +1 -1
- data/src/core/lib/iomgr/tcp_server.cc +3 -4
- data/src/core/lib/iomgr/tcp_server.h +7 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +11 -23
- data/src/core/lib/iomgr/tcp_server_posix.cc +38 -44
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -8
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
- data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
- data/src/core/lib/iomgr/tcp_uv.cc +3 -2
- data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
- data/src/core/lib/iomgr/timer_generic.cc +15 -15
- data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
- data/src/core/lib/iomgr/timer_heap.h +2 -3
- data/src/core/lib/iomgr/udp_server.cc +32 -36
- data/src/core/lib/iomgr/udp_server.h +5 -2
- 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/json/json.h +3 -2
- data/src/core/lib/json/json_reader.cc +25 -26
- data/src/core/lib/json/json_writer.cc +13 -12
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
- data/src/core/lib/security/credentials/credentials.cc +0 -84
- data/src/core/lib/security/credentials/credentials.h +13 -62
- data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
- 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 +15 -17
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
- data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +73 -54
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +19 -6
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +48 -11
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -17
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +2 -0
- data/src/core/lib/security/security_connector/security_connector.h +2 -2
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +38 -36
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +89 -21
- data/src/core/lib/security/security_connector/ssl_utils.h +18 -12
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +101 -72
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
- data/src/core/lib/security/transport/auth_filters.h +0 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +11 -11
- data/src/core/lib/security/util/json_util.cc +12 -13
- data/src/core/lib/slice/slice.cc +38 -1
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +15 -0
- data/src/core/lib/slice/slice_utils.h +9 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
- data/src/core/lib/surface/call.cc +42 -44
- data/src/core/lib/surface/call_log_batch.cc +50 -58
- data/src/core/lib/surface/channel.cc +53 -31
- data/src/core/lib/surface/channel.h +35 -4
- data/src/core/lib/surface/channel_ping.cc +2 -3
- data/src/core/lib/surface/completion_queue.cc +304 -47
- data/src/core/lib/surface/completion_queue.h +8 -0
- 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 +2 -0
- data/src/core/lib/surface/init_secure.cc +1 -4
- data/src/core/lib/surface/server.cc +971 -837
- data/src/core/lib/surface/server.h +66 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.h +7 -2
- data/src/core/lib/transport/connectivity_state.cc +7 -6
- data/src/core/lib/transport/connectivity_state.h +5 -3
- data/src/core/lib/transport/metadata.cc +3 -3
- data/src/core/lib/transport/metadata_batch.h +2 -3
- data/src/core/lib/transport/static_metadata.h +1 -1
- data/src/core/lib/transport/status_conversion.cc +6 -14
- data/src/core/lib/transport/transport.cc +2 -3
- data/src/core/lib/transport/transport.h +9 -2
- data/src/core/lib/transport/transport_op_string.cc +61 -102
- data/src/core/lib/uri/uri_parser.cc +8 -15
- data/src/core/lib/uri/uri_parser.h +2 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +24 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +31 -14
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +34 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
- data/src/core/tsi/fake_transport_security.cc +10 -15
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
- data/src/core/tsi/ssl_transport_security.cc +154 -50
- data/src/core/tsi/ssl_transport_security.h +22 -10
- data/src/core/tsi/ssl_types.h +0 -2
- data/src/core/tsi/transport_security.h +6 -9
- data/src/core/tsi/transport_security_grpc.h +2 -3
- data/src/core/tsi/transport_security_interface.h +8 -3
- data/src/ruby/ext/grpc/extconf.rb +5 -2
- data/src/ruby/ext/grpc/rb_call.c +12 -3
- data/src/ruby/ext/grpc/rb_call.h +4 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/errors.rb +103 -42
- data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
- data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
- data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
- data/src/ruby/lib/grpc/generic/service.rb +5 -4
- data/src/ruby/lib/grpc/structs.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +5 -3
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
- data/src/ruby/spec/debug_message_spec.rb +134 -0
- data/src/ruby/spec/generic/service_spec.rb +2 -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 +7 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +7 -1
- 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/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/boringssl-with-bazel/err_data.c +335 -297
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
- data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -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 +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +25 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +434 -161
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +18 -25
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +104 -122
- 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 +90 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
- 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 +41 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +47 -16
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -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-with-bazel/src/crypto/x509/a_strex.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +57 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +33 -9
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +191 -79
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +791 -715
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
- data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +23 -5
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +30 -22
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +21 -4
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +74 -54
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +34 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +44 -5
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +51 -26
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +129 -48
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +55 -22
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
- data/third_party/upb/upb/decode.c +467 -504
- data/third_party/upb/upb/encode.c +163 -121
- data/third_party/upb/upb/msg.c +130 -64
- data/third_party/upb/upb/msg.h +418 -14
- data/third_party/upb/upb/port_def.inc +35 -6
- data/third_party/upb/upb/port_undef.inc +8 -1
- data/third_party/upb/upb/table.c +53 -75
- data/third_party/upb/upb/table.int.h +11 -43
- data/third_party/upb/upb/upb.c +148 -124
- data/third_party/upb/upb/upb.h +65 -147
- data/third_party/upb/upb/upb.hpp +86 -0
- metadata +122 -41
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1908
- data/src/core/lib/gprpp/string_view.h +0 -60
- data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
- data/third_party/upb/upb/generated_util.h +0 -105
@@ -24,15 +24,16 @@
|
|
24
24
|
#include <functional>
|
25
25
|
#include <iterator>
|
26
26
|
|
27
|
+
#include "absl/strings/string_view.h"
|
28
|
+
|
27
29
|
#include "src/core/ext/filters/client_channel/server_address.h"
|
28
30
|
#include "src/core/ext/filters/client_channel/service_config.h"
|
29
31
|
#include "src/core/ext/filters/client_channel/subchannel_interface.h"
|
30
32
|
#include "src/core/lib/gprpp/map.h"
|
31
33
|
#include "src/core/lib/gprpp/orphanable.h"
|
32
34
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
33
|
-
#include "src/core/lib/gprpp/string_view.h"
|
34
|
-
#include "src/core/lib/iomgr/combiner.h"
|
35
35
|
#include "src/core/lib/iomgr/polling_entity.h"
|
36
|
+
#include "src/core/lib/iomgr/work_serializer.h"
|
36
37
|
#include "src/core/lib/transport/connectivity_state.h"
|
37
38
|
|
38
39
|
namespace grpc_core {
|
@@ -72,7 +73,7 @@ extern DebugOnlyTraceFlag grpc_trace_lb_policy_refcount;
|
|
72
73
|
/// LoadBalacingPolicy API.
|
73
74
|
///
|
74
75
|
/// Note: All methods with a "Locked" suffix must be called from the
|
75
|
-
///
|
76
|
+
/// work_serializer passed to the constructor.
|
76
77
|
///
|
77
78
|
/// Any I/O done by the LB policy should be done under the pollset_set
|
78
79
|
/// returned by \a interested_parties().
|
@@ -93,11 +94,11 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
93
94
|
/// Application-specific requests cost metrics. Metric names are
|
94
95
|
/// determined by the application. Each value is an absolute cost
|
95
96
|
/// (e.g. 3487 bytes of storage) associated with the request.
|
96
|
-
std::map<
|
97
|
+
std::map<absl::string_view, double, StringLess> request_cost;
|
97
98
|
/// Application-specific resource utilization metrics. Metric names
|
98
99
|
/// are determined by the application. Each value is expressed as a
|
99
100
|
/// fraction of total resources available.
|
100
|
-
std::map<
|
101
|
+
std::map<absl::string_view, double, StringLess> utilization;
|
101
102
|
};
|
102
103
|
|
103
104
|
/// Interface for accessing per-call state.
|
@@ -115,7 +116,17 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
115
116
|
|
116
117
|
/// Returns the backend metric data returned by the server for the call,
|
117
118
|
/// or null if no backend metric data was returned.
|
119
|
+
// TODO(roth): Move this out of CallState, since it should not be
|
120
|
+
// accessible to the picker, only to the recv_trailing_metadata_ready
|
121
|
+
// callback. It should instead be in its own interface.
|
118
122
|
virtual const BackendMetricData* GetBackendMetricData() = 0;
|
123
|
+
|
124
|
+
/// EXPERIMENTAL API.
|
125
|
+
/// Returns the value of the call attribute \a key.
|
126
|
+
/// Keys are static strings, so an attribute can be accessed by an LB
|
127
|
+
/// policy implementation only if it knows about the internal key.
|
128
|
+
/// Returns a null string_view if key not found.
|
129
|
+
virtual absl::string_view ExperimentalGetCallAttribute(const char* key) = 0;
|
119
130
|
};
|
120
131
|
|
121
132
|
/// Interface for accessing metadata.
|
@@ -123,12 +134,13 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
123
134
|
class MetadataInterface {
|
124
135
|
public:
|
125
136
|
class iterator
|
126
|
-
: public std::iterator<
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
137
|
+
: public std::iterator<
|
138
|
+
std::input_iterator_tag,
|
139
|
+
std::pair<absl::string_view, absl::string_view>, // value_type
|
140
|
+
std::ptrdiff_t, // difference_type
|
141
|
+
std::pair<absl::string_view, absl::string_view>*, // pointer
|
142
|
+
std::pair<absl::string_view, absl::string_view>& // reference
|
143
|
+
> {
|
132
144
|
public:
|
133
145
|
iterator(const MetadataInterface* md, intptr_t handle)
|
134
146
|
: md_(md), handle_(handle) {}
|
@@ -155,7 +167,7 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
155
167
|
/// Implementations must ensure that the key and value remain alive
|
156
168
|
/// until the call ends. If desired, they may be allocated via
|
157
169
|
/// CallState::Alloc().
|
158
|
-
virtual void Add(
|
170
|
+
virtual void Add(absl::string_view key, absl::string_view value) = 0;
|
159
171
|
|
160
172
|
/// Iteration interface.
|
161
173
|
virtual iterator begin() const = 0;
|
@@ -172,19 +184,21 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
172
184
|
friend class iterator;
|
173
185
|
|
174
186
|
virtual intptr_t IteratorHandleNext(intptr_t handle) const = 0;
|
175
|
-
virtual std::pair<
|
187
|
+
virtual std::pair<absl::string_view /*key*/, absl::string_view /*value */>
|
176
188
|
IteratorHandleGet(intptr_t handle) const = 0;
|
177
189
|
};
|
178
190
|
|
179
191
|
/// Arguments used when picking a subchannel for a call.
|
180
192
|
struct PickArgs {
|
193
|
+
/// The path of the call. Indicates the RPC service and method name.
|
194
|
+
absl::string_view path;
|
181
195
|
/// Initial metadata associated with the picking call.
|
182
196
|
/// The LB policy may use the existing metadata to influence its routing
|
183
197
|
/// decision, and it may add new metadata elements to be sent with the
|
184
198
|
/// call to the chosen backend.
|
185
199
|
MetadataInterface* initial_metadata;
|
186
200
|
/// An interface for accessing call state. Can be used to allocate
|
187
|
-
///
|
201
|
+
/// memory associated with the call in an efficient way.
|
188
202
|
CallState* call_state;
|
189
203
|
};
|
190
204
|
|
@@ -226,6 +240,9 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
226
240
|
/// does not take ownership, so any data that needs to be used after
|
227
241
|
/// returning must be copied.
|
228
242
|
/// The call state can be used to obtain backend metric data.
|
243
|
+
// TODO(roth): The arguments to this callback should be moved into a
|
244
|
+
// struct, so that we can later add new fields without breaking
|
245
|
+
// existing implementations.
|
229
246
|
std::function<void(grpc_error*, MetadataInterface*, CallState*)>
|
230
247
|
recv_trailing_metadata_ready;
|
231
248
|
};
|
@@ -242,7 +259,7 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
242
259
|
/// live in the LB policy object itself.
|
243
260
|
///
|
244
261
|
/// Currently, pickers are always accessed from within the
|
245
|
-
/// client_channel data plane
|
262
|
+
/// client_channel data plane mutex, so they do not have to be
|
246
263
|
/// thread-safe.
|
247
264
|
class SubchannelPicker {
|
248
265
|
public:
|
@@ -254,9 +271,6 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
254
271
|
|
255
272
|
/// A proxy object implemented by the client channel and used by the
|
256
273
|
/// LB policy to communicate with the channel.
|
257
|
-
// TODO(juanlishen): Consider adding a mid-layer subclass that helps handle
|
258
|
-
// things like swapping in pending policy when it's ready. Currently, we are
|
259
|
-
// duplicating the logic in many subclasses.
|
260
274
|
class ChannelControlHelper {
|
261
275
|
public:
|
262
276
|
ChannelControlHelper() = default;
|
@@ -276,7 +290,8 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
276
290
|
|
277
291
|
/// Adds a trace message associated with the channel.
|
278
292
|
enum TraceSeverity { TRACE_INFO, TRACE_WARNING, TRACE_ERROR };
|
279
|
-
virtual void AddTraceEvent(TraceSeverity severity,
|
293
|
+
virtual void AddTraceEvent(TraceSeverity severity,
|
294
|
+
absl::string_view message) = 0;
|
280
295
|
};
|
281
296
|
|
282
297
|
/// Interface for configuration data used by an LB policy implementation.
|
@@ -302,19 +317,15 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
302
317
|
UpdateArgs() = default;
|
303
318
|
~UpdateArgs() { grpc_channel_args_destroy(args); }
|
304
319
|
UpdateArgs(const UpdateArgs& other);
|
305
|
-
UpdateArgs(UpdateArgs&& other);
|
320
|
+
UpdateArgs(UpdateArgs&& other) noexcept;
|
306
321
|
UpdateArgs& operator=(const UpdateArgs& other);
|
307
|
-
UpdateArgs& operator=(UpdateArgs&& other);
|
322
|
+
UpdateArgs& operator=(UpdateArgs&& other) noexcept;
|
308
323
|
};
|
309
324
|
|
310
325
|
/// Args used to instantiate an LB policy.
|
311
326
|
struct Args {
|
312
|
-
/// The
|
313
|
-
|
314
|
-
// TODO(roth): Once we have a C++-like interface for combiners, this
|
315
|
-
// API should change to take a smart pointer that does pass ownership
|
316
|
-
// of a reference.
|
317
|
-
Combiner* combiner = nullptr;
|
327
|
+
/// The work_serializer under which all LB policy calls will be run.
|
328
|
+
std::shared_ptr<WorkSerializer> work_serializer;
|
318
329
|
/// Channel control helper.
|
319
330
|
/// Note: LB policies MUST NOT call any method on the helper from
|
320
331
|
/// their constructor.
|
@@ -352,7 +363,7 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
352
363
|
|
353
364
|
grpc_pollset_set* interested_parties() const { return interested_parties_; }
|
354
365
|
|
355
|
-
// Note: This must be invoked while holding the
|
366
|
+
// Note: This must be invoked while holding the work_serializer.
|
356
367
|
void Orphan() override;
|
357
368
|
|
358
369
|
// A picker that returns PICK_QUEUE for all picks.
|
@@ -368,8 +379,6 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
368
379
|
PickResult Pick(PickArgs args) override;
|
369
380
|
|
370
381
|
private:
|
371
|
-
static void CallExitIdle(void* arg, grpc_error* error);
|
372
|
-
|
373
382
|
RefCountedPtr<LoadBalancingPolicy> parent_;
|
374
383
|
bool exit_idle_called_ = false;
|
375
384
|
};
|
@@ -387,7 +396,9 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
387
396
|
};
|
388
397
|
|
389
398
|
protected:
|
390
|
-
|
399
|
+
std::shared_ptr<WorkSerializer> work_serializer() const {
|
400
|
+
return work_serializer_;
|
401
|
+
}
|
391
402
|
|
392
403
|
// Note: LB policies MUST NOT call any method on the helper from their
|
393
404
|
// constructor.
|
@@ -399,8 +410,8 @@ class LoadBalancingPolicy : public InternallyRefCounted
|
|
399
410
|
virtual void ShutdownLocked() = 0;
|
400
411
|
|
401
412
|
private:
|
402
|
-
///
|
403
|
-
|
413
|
+
/// Work Serializer under which LB policy actions take place.
|
414
|
+
std::shared_ptr<WorkSerializer> work_serializer_;
|
404
415
|
/// Owned pointer to interested parties in load balancing decisions.
|
405
416
|
grpc_pollset_set* interested_parties_;
|
406
417
|
/// Channel control helper.
|
@@ -0,0 +1,83 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2020 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
|
20
|
+
|
21
|
+
#include "src/core/lib/channel/channel_args.h"
|
22
|
+
|
23
|
+
#define GRPC_ARG_HIERARCHICAL_PATH "grpc.internal.address.hierarchical_path"
|
24
|
+
|
25
|
+
namespace grpc_core {
|
26
|
+
|
27
|
+
namespace {
|
28
|
+
|
29
|
+
void* HierarchicalPathCopy(void* p) {
|
30
|
+
std::vector<std::string>* path = static_cast<std::vector<std::string>*>(p);
|
31
|
+
return static_cast<void*>(new std::vector<std::string>(*path));
|
32
|
+
}
|
33
|
+
|
34
|
+
void HierarchicalPathDestroy(void* p) {
|
35
|
+
std::vector<std::string>* path = static_cast<std::vector<std::string>*>(p);
|
36
|
+
delete path;
|
37
|
+
}
|
38
|
+
|
39
|
+
int HierarchicalPathCompare(void* p1, void* p2) {
|
40
|
+
std::vector<std::string>* path1 = static_cast<std::vector<std::string>*>(p1);
|
41
|
+
std::vector<std::string>* path2 = static_cast<std::vector<std::string>*>(p2);
|
42
|
+
for (size_t i = 0; i < path1->size(); ++i) {
|
43
|
+
if (path2->size() == i) return 1;
|
44
|
+
int r = (*path1)[i].compare((*path2)[i]);
|
45
|
+
if (r != 0) return r;
|
46
|
+
}
|
47
|
+
if (path2->size() > path1->size()) return -1;
|
48
|
+
return 0;
|
49
|
+
}
|
50
|
+
|
51
|
+
const grpc_arg_pointer_vtable hierarchical_path_arg_vtable = {
|
52
|
+
HierarchicalPathCopy, HierarchicalPathDestroy, HierarchicalPathCompare};
|
53
|
+
|
54
|
+
} // namespace
|
55
|
+
|
56
|
+
grpc_arg MakeHierarchicalPathArg(const std::vector<std::string>& path) {
|
57
|
+
return grpc_channel_arg_pointer_create(
|
58
|
+
const_cast<char*>(GRPC_ARG_HIERARCHICAL_PATH),
|
59
|
+
const_cast<std::vector<std::string>*>(&path),
|
60
|
+
&hierarchical_path_arg_vtable);
|
61
|
+
}
|
62
|
+
|
63
|
+
HierarchicalAddressMap MakeHierarchicalAddressMap(
|
64
|
+
const ServerAddressList& addresses) {
|
65
|
+
HierarchicalAddressMap result;
|
66
|
+
for (const ServerAddress& address : addresses) {
|
67
|
+
auto* path = grpc_channel_args_find_pointer<std::vector<std::string>>(
|
68
|
+
address.args(), GRPC_ARG_HIERARCHICAL_PATH);
|
69
|
+
if (path == nullptr || path->empty()) continue;
|
70
|
+
auto it = path->begin();
|
71
|
+
ServerAddressList& target_list = result[*it];
|
72
|
+
++it;
|
73
|
+
std::vector<std::string> remaining_path(it, path->end());
|
74
|
+
const char* name_to_remove = GRPC_ARG_HIERARCHICAL_PATH;
|
75
|
+
grpc_arg new_arg = MakeHierarchicalPathArg(remaining_path);
|
76
|
+
grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
|
77
|
+
address.args(), &name_to_remove, 1, &new_arg, 1);
|
78
|
+
target_list.emplace_back(address.address(), new_args);
|
79
|
+
}
|
80
|
+
return result;
|
81
|
+
}
|
82
|
+
|
83
|
+
} // namespace grpc_core
|
@@ -0,0 +1,99 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2020 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_ADDRESS_FILTERING_H
|
18
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_ADDRESS_FILTERING_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include <map>
|
23
|
+
#include <string>
|
24
|
+
#include <vector>
|
25
|
+
|
26
|
+
#include "absl/strings/string_view.h"
|
27
|
+
|
28
|
+
#include "src/core/ext/filters/client_channel/server_address.h"
|
29
|
+
|
30
|
+
// The resolver returns a flat list of addresses. When a hierarchy of
|
31
|
+
// LB policies is in use, each leaf of the hierarchy will need a
|
32
|
+
// different subset of those addresses. This library provides a
|
33
|
+
// mechanism for determining which address is passed to which leaf
|
34
|
+
// policy.
|
35
|
+
//
|
36
|
+
// Each address will have an associated path that indicates which child
|
37
|
+
// it should be sent to at each level of the hierarchy to wind up at the
|
38
|
+
// right leaf policy. Each LB policy will look at the first element of
|
39
|
+
// the path of each address to determine which child to send the address
|
40
|
+
// to. It will then remove that first element when passing the address
|
41
|
+
// down to its child.
|
42
|
+
//
|
43
|
+
// For example, consider the following LB policy hierarchy:
|
44
|
+
//
|
45
|
+
// - priority
|
46
|
+
// - child0 (weighted_target)
|
47
|
+
// - localityA (round_robin)
|
48
|
+
// - localityB (round_robin)
|
49
|
+
// - child1 (weighted_target)
|
50
|
+
// - localityC (round_robin)
|
51
|
+
// - localityD (round_robin)
|
52
|
+
//
|
53
|
+
// Now consider the following addresses:
|
54
|
+
// - 10.0.0.1:80 path=["child0", "localityA"]
|
55
|
+
// - 10.0.0.2:80 path=["child0", "localityB"]
|
56
|
+
// - 10.0.0.3:80 path=["child1", "localityC"]
|
57
|
+
// - 10.0.0.4:80 path=["child1", "localityD"]
|
58
|
+
//
|
59
|
+
// The priority policy will split this up into two lists, one for each
|
60
|
+
// of its children:
|
61
|
+
// - child0:
|
62
|
+
// - 10.0.0.1:80 path=["localityA"]
|
63
|
+
// - 10.0.0.2:80 path=["localityB"]
|
64
|
+
// - child1:
|
65
|
+
// - 10.0.0.3:80 path=["localityC"]
|
66
|
+
// - 10.0.0.4:80 path=["localityD"]
|
67
|
+
//
|
68
|
+
// The weighted_target policy for child0 will split its list up into two
|
69
|
+
// lists, one for each of its children:
|
70
|
+
// - localityA:
|
71
|
+
// - 10.0.0.1:80 path=[]
|
72
|
+
// - localityB:
|
73
|
+
// - 10.0.0.2:80 path=[]
|
74
|
+
//
|
75
|
+
// Similarly, the weighted_target policy for child1 will split its list
|
76
|
+
// up into two lists, one for each of its children:
|
77
|
+
// - localityC:
|
78
|
+
// - 10.0.0.3:80 path=[]
|
79
|
+
// - localityD:
|
80
|
+
// - 10.0.0.4:80 path=[]
|
81
|
+
|
82
|
+
namespace grpc_core {
|
83
|
+
|
84
|
+
// Constructs a channel arg containing the hierarchical path
|
85
|
+
// to be associated with an address.
|
86
|
+
grpc_arg MakeHierarchicalPathArg(const std::vector<std::string>& path);
|
87
|
+
|
88
|
+
// A map from the next path element to the addresses that fall under
|
89
|
+
// that path element.
|
90
|
+
using HierarchicalAddressMap = std::map<std::string, ServerAddressList>;
|
91
|
+
|
92
|
+
// Splits up the addresses into a separate list for each child.
|
93
|
+
HierarchicalAddressMap MakeHierarchicalAddressMap(
|
94
|
+
const ServerAddressList& addresses);
|
95
|
+
|
96
|
+
} // namespace grpc_core
|
97
|
+
|
98
|
+
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_ADDRESS_FILTERING_H \
|
99
|
+
*/
|
@@ -0,0 +1,297 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include <cstring>
|
20
|
+
|
21
|
+
#include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
|
22
|
+
|
23
|
+
#include "absl/strings/str_cat.h"
|
24
|
+
|
25
|
+
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
//
|
30
|
+
// ChildPolicyHandler::Helper
|
31
|
+
//
|
32
|
+
|
33
|
+
class ChildPolicyHandler::Helper
|
34
|
+
: public LoadBalancingPolicy::ChannelControlHelper {
|
35
|
+
public:
|
36
|
+
explicit Helper(RefCountedPtr<ChildPolicyHandler> parent)
|
37
|
+
: parent_(std::move(parent)) {}
|
38
|
+
|
39
|
+
~Helper() { parent_.reset(DEBUG_LOCATION, "Helper"); }
|
40
|
+
|
41
|
+
RefCountedPtr<SubchannelInterface> CreateSubchannel(
|
42
|
+
const grpc_channel_args& args) override {
|
43
|
+
if (parent_->shutting_down_) return nullptr;
|
44
|
+
if (!CalledByCurrentChild() && !CalledByPendingChild()) return nullptr;
|
45
|
+
return parent_->channel_control_helper()->CreateSubchannel(args);
|
46
|
+
}
|
47
|
+
|
48
|
+
void UpdateState(grpc_connectivity_state state,
|
49
|
+
std::unique_ptr<SubchannelPicker> picker) override {
|
50
|
+
if (parent_->shutting_down_) return;
|
51
|
+
// If this request is from the pending child policy, ignore it until
|
52
|
+
// it reports something other than CONNECTING, at which point we swap it
|
53
|
+
// into place.
|
54
|
+
if (CalledByPendingChild()) {
|
55
|
+
if (GRPC_TRACE_FLAG_ENABLED(*(parent_->tracer_))) {
|
56
|
+
gpr_log(GPR_INFO,
|
57
|
+
"[child_policy_handler %p] helper %p: pending child policy %p "
|
58
|
+
"reports state=%s",
|
59
|
+
parent_.get(), this, child_, ConnectivityStateName(state));
|
60
|
+
}
|
61
|
+
if (state == GRPC_CHANNEL_CONNECTING) return;
|
62
|
+
grpc_pollset_set_del_pollset_set(
|
63
|
+
parent_->child_policy_->interested_parties(),
|
64
|
+
parent_->interested_parties());
|
65
|
+
parent_->child_policy_ = std::move(parent_->pending_child_policy_);
|
66
|
+
} else if (!CalledByCurrentChild()) {
|
67
|
+
// This request is from an outdated child, so ignore it.
|
68
|
+
return;
|
69
|
+
}
|
70
|
+
parent_->channel_control_helper()->UpdateState(state, std::move(picker));
|
71
|
+
}
|
72
|
+
|
73
|
+
void RequestReresolution() override {
|
74
|
+
if (parent_->shutting_down_) return;
|
75
|
+
// Only forward re-resolution requests from the most recent child,
|
76
|
+
// since that's the one that will be receiving any update we receive
|
77
|
+
// from the resolver.
|
78
|
+
const LoadBalancingPolicy* latest_child_policy =
|
79
|
+
parent_->pending_child_policy_ != nullptr
|
80
|
+
? parent_->pending_child_policy_.get()
|
81
|
+
: parent_->child_policy_.get();
|
82
|
+
if (child_ != latest_child_policy) return;
|
83
|
+
if (GRPC_TRACE_FLAG_ENABLED(*(parent_->tracer_))) {
|
84
|
+
gpr_log(GPR_INFO, "[child_policy_handler %p] started name re-resolving",
|
85
|
+
parent_.get());
|
86
|
+
}
|
87
|
+
parent_->channel_control_helper()->RequestReresolution();
|
88
|
+
}
|
89
|
+
|
90
|
+
void AddTraceEvent(TraceSeverity severity,
|
91
|
+
absl::string_view message) override {
|
92
|
+
if (parent_->shutting_down_) return;
|
93
|
+
if (!CalledByPendingChild() && !CalledByCurrentChild()) return;
|
94
|
+
parent_->channel_control_helper()->AddTraceEvent(severity, message);
|
95
|
+
}
|
96
|
+
|
97
|
+
void set_child(LoadBalancingPolicy* child) { child_ = child; }
|
98
|
+
|
99
|
+
private:
|
100
|
+
bool CalledByPendingChild() const {
|
101
|
+
GPR_ASSERT(child_ != nullptr);
|
102
|
+
return child_ == parent_->pending_child_policy_.get();
|
103
|
+
}
|
104
|
+
|
105
|
+
bool CalledByCurrentChild() const {
|
106
|
+
GPR_ASSERT(child_ != nullptr);
|
107
|
+
return child_ == parent_->child_policy_.get();
|
108
|
+
};
|
109
|
+
|
110
|
+
RefCountedPtr<ChildPolicyHandler> parent_;
|
111
|
+
LoadBalancingPolicy* child_ = nullptr;
|
112
|
+
};
|
113
|
+
|
114
|
+
//
|
115
|
+
// ChildPolicyHandler
|
116
|
+
//
|
117
|
+
|
118
|
+
void ChildPolicyHandler::ShutdownLocked() {
|
119
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
|
120
|
+
gpr_log(GPR_INFO, "[child_policy_handler %p] shutting down", this);
|
121
|
+
}
|
122
|
+
shutting_down_ = true;
|
123
|
+
if (child_policy_ != nullptr) {
|
124
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
|
125
|
+
gpr_log(GPR_INFO, "[child_policy_handler %p] shutting down lb_policy %p",
|
126
|
+
this, child_policy_.get());
|
127
|
+
}
|
128
|
+
grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
|
129
|
+
interested_parties());
|
130
|
+
child_policy_.reset();
|
131
|
+
}
|
132
|
+
if (pending_child_policy_ != nullptr) {
|
133
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
|
134
|
+
gpr_log(GPR_INFO,
|
135
|
+
"[child_policy_handler %p] shutting down pending lb_policy %p",
|
136
|
+
this, pending_child_policy_.get());
|
137
|
+
}
|
138
|
+
grpc_pollset_set_del_pollset_set(
|
139
|
+
pending_child_policy_->interested_parties(), interested_parties());
|
140
|
+
pending_child_policy_.reset();
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
void ChildPolicyHandler::UpdateLocked(UpdateArgs args) {
|
145
|
+
// If the child policy name changes, we need to create a new child
|
146
|
+
// policy. When this happens, we leave child_policy_ as-is and store
|
147
|
+
// the new child policy in pending_child_policy_. Once the new child
|
148
|
+
// policy transitions into state READY, we swap it into child_policy_,
|
149
|
+
// replacing the original child policy. So pending_child_policy_ is
|
150
|
+
// non-null only between when we apply an update that changes the child
|
151
|
+
// policy name and when the new child reports state READY.
|
152
|
+
//
|
153
|
+
// Updates can arrive at any point during this transition. We always
|
154
|
+
// apply updates relative to the most recently created child policy,
|
155
|
+
// even if the most recent one is still in pending_child_policy_. This
|
156
|
+
// is true both when applying the updates to an existing child policy
|
157
|
+
// and when determining whether we need to create a new policy.
|
158
|
+
//
|
159
|
+
// As a result of this, there are several cases to consider here:
|
160
|
+
//
|
161
|
+
// 1. We have no existing child policy (i.e., this is the first update
|
162
|
+
// we receive after being created; in this case, both child_policy_
|
163
|
+
// and pending_child_policy_ are null). In this case, we create a
|
164
|
+
// new child policy and store it in child_policy_.
|
165
|
+
//
|
166
|
+
// 2. We have an existing child policy and have no pending child policy
|
167
|
+
// from a previous update (i.e., either there has not been a
|
168
|
+
// previous update that changed the policy name, or we have already
|
169
|
+
// finished swapping in the new policy; in this case, child_policy_
|
170
|
+
// is non-null but pending_child_policy_ is null). In this case:
|
171
|
+
// a. If going from the current config to the new config does not
|
172
|
+
// require a new policy, then we update the existing child policy.
|
173
|
+
// b. If going from the current config to the new config does require a
|
174
|
+
// new policy, we create a new policy. The policy will be stored in
|
175
|
+
// pending_child_policy_ and will later be swapped into
|
176
|
+
// child_policy_ by the helper when the new child transitions
|
177
|
+
// into state READY.
|
178
|
+
//
|
179
|
+
// 3. We have an existing child policy and have a pending child policy
|
180
|
+
// from a previous update (i.e., a previous update set
|
181
|
+
// pending_child_policy_ as per case 2b above and that policy has
|
182
|
+
// not yet transitioned into state READY and been swapped into
|
183
|
+
// child_policy_; in this case, both child_policy_ and
|
184
|
+
// pending_child_policy_ are non-null). In this case:
|
185
|
+
// a. If going from the current config to the new config does not
|
186
|
+
// require a new policy, then we update the existing pending
|
187
|
+
// child policy.
|
188
|
+
// b. If going from the current config to the new config does require a
|
189
|
+
// new child policy, then we create a new policy. The new
|
190
|
+
// policy is stored in pending_child_policy_ (replacing the one
|
191
|
+
// that was there before, which will be immediately shut down)
|
192
|
+
// and will later be swapped into child_policy_ by the helper
|
193
|
+
// when the new child transitions into state READY.
|
194
|
+
const bool create_policy =
|
195
|
+
// case 1
|
196
|
+
child_policy_ == nullptr ||
|
197
|
+
// cases 2b and 3b
|
198
|
+
ConfigChangeRequiresNewPolicyInstance(current_config_.get(),
|
199
|
+
args.config.get());
|
200
|
+
current_config_ = args.config;
|
201
|
+
LoadBalancingPolicy* policy_to_update = nullptr;
|
202
|
+
if (create_policy) {
|
203
|
+
// Cases 1, 2b, and 3b: create a new child policy.
|
204
|
+
// If child_policy_ is null, we set it (case 1), else we set
|
205
|
+
// pending_child_policy_ (cases 2b and 3b).
|
206
|
+
// TODO(roth): In cases 2b and 3b, we should start a timer here, so
|
207
|
+
// that there's an upper bound on the amount of time it takes us to
|
208
|
+
// switch to the new policy, even if the new policy stays in
|
209
|
+
// CONNECTING for a very long period of time.
|
210
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
|
211
|
+
gpr_log(GPR_INFO,
|
212
|
+
"[child_policy_handler %p] creating new %schild policy %s", this,
|
213
|
+
child_policy_ == nullptr ? "" : "pending ", args.config->name());
|
214
|
+
}
|
215
|
+
auto& lb_policy =
|
216
|
+
child_policy_ == nullptr ? child_policy_ : pending_child_policy_;
|
217
|
+
lb_policy = CreateChildPolicy(args.config->name(), *args.args);
|
218
|
+
policy_to_update = lb_policy.get();
|
219
|
+
} else {
|
220
|
+
// Cases 2a and 3a: update an existing policy.
|
221
|
+
// If we have a pending child policy, send the update to the pending
|
222
|
+
// policy (case 3a), else send it to the current policy (case 2a).
|
223
|
+
policy_to_update = pending_child_policy_ != nullptr
|
224
|
+
? pending_child_policy_.get()
|
225
|
+
: child_policy_.get();
|
226
|
+
}
|
227
|
+
GPR_ASSERT(policy_to_update != nullptr);
|
228
|
+
// Update the policy.
|
229
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
|
230
|
+
gpr_log(GPR_INFO, "[child_policy_handler %p] updating %schild policy %p",
|
231
|
+
this,
|
232
|
+
policy_to_update == pending_child_policy_.get() ? "pending " : "",
|
233
|
+
policy_to_update);
|
234
|
+
}
|
235
|
+
policy_to_update->UpdateLocked(std::move(args));
|
236
|
+
}
|
237
|
+
|
238
|
+
void ChildPolicyHandler::ExitIdleLocked() {
|
239
|
+
if (child_policy_ != nullptr) {
|
240
|
+
child_policy_->ExitIdleLocked();
|
241
|
+
if (pending_child_policy_ != nullptr) {
|
242
|
+
pending_child_policy_->ExitIdleLocked();
|
243
|
+
}
|
244
|
+
}
|
245
|
+
}
|
246
|
+
|
247
|
+
void ChildPolicyHandler::ResetBackoffLocked() {
|
248
|
+
if (child_policy_ != nullptr) {
|
249
|
+
child_policy_->ResetBackoffLocked();
|
250
|
+
if (pending_child_policy_ != nullptr) {
|
251
|
+
pending_child_policy_->ResetBackoffLocked();
|
252
|
+
}
|
253
|
+
}
|
254
|
+
}
|
255
|
+
|
256
|
+
OrphanablePtr<LoadBalancingPolicy> ChildPolicyHandler::CreateChildPolicy(
|
257
|
+
const char* child_policy_name, const grpc_channel_args& args) {
|
258
|
+
Helper* helper = new Helper(Ref(DEBUG_LOCATION, "Helper"));
|
259
|
+
LoadBalancingPolicy::Args lb_policy_args;
|
260
|
+
lb_policy_args.work_serializer = work_serializer();
|
261
|
+
lb_policy_args.channel_control_helper =
|
262
|
+
std::unique_ptr<ChannelControlHelper>(helper);
|
263
|
+
lb_policy_args.args = &args;
|
264
|
+
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
265
|
+
CreateLoadBalancingPolicy(child_policy_name, std::move(lb_policy_args));
|
266
|
+
if (GPR_UNLIKELY(lb_policy == nullptr)) {
|
267
|
+
gpr_log(GPR_ERROR, "could not create LB policy \"%s\"", child_policy_name);
|
268
|
+
return nullptr;
|
269
|
+
}
|
270
|
+
helper->set_child(lb_policy.get());
|
271
|
+
if (GRPC_TRACE_FLAG_ENABLED(*tracer_)) {
|
272
|
+
gpr_log(GPR_INFO,
|
273
|
+
"[child_policy_handler %p] created new LB policy \"%s\" (%p)", this,
|
274
|
+
child_policy_name, lb_policy.get());
|
275
|
+
}
|
276
|
+
channel_control_helper()->AddTraceEvent(
|
277
|
+
ChannelControlHelper::TRACE_INFO,
|
278
|
+
absl::StrCat("Created new LB policy \"", child_policy_name, "\""));
|
279
|
+
grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
|
280
|
+
interested_parties());
|
281
|
+
return lb_policy;
|
282
|
+
}
|
283
|
+
|
284
|
+
bool ChildPolicyHandler::ConfigChangeRequiresNewPolicyInstance(
|
285
|
+
LoadBalancingPolicy::Config* old_config,
|
286
|
+
LoadBalancingPolicy::Config* new_config) const {
|
287
|
+
return strcmp(old_config->name(), new_config->name()) != 0;
|
288
|
+
}
|
289
|
+
|
290
|
+
OrphanablePtr<LoadBalancingPolicy>
|
291
|
+
ChildPolicyHandler::CreateLoadBalancingPolicy(
|
292
|
+
const char* name, LoadBalancingPolicy::Args args) const {
|
293
|
+
return LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
|
294
|
+
name, std::move(args));
|
295
|
+
}
|
296
|
+
|
297
|
+
} // namespace grpc_core
|