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
@@ -0,0 +1,83 @@
|
|
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
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_CHILD_POLICY_HANDLER_H
|
18
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_CHILD_POLICY_HANDLER_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include "src/core/ext/filters/client_channel/lb_policy.h"
|
23
|
+
#include "src/core/lib/debug/trace.h"
|
24
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
25
|
+
|
26
|
+
namespace grpc_core {
|
27
|
+
|
28
|
+
// A class that makes it easy to gracefully switch child policies.
|
29
|
+
//
|
30
|
+
// Callers should instantiate this instead of using
|
31
|
+
// LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(). Once
|
32
|
+
// instantiated, this object will automatically take care of
|
33
|
+
// constructing the child policy as needed upon receiving an update.
|
34
|
+
class ChildPolicyHandler : public LoadBalancingPolicy {
|
35
|
+
public:
|
36
|
+
ChildPolicyHandler(Args args, TraceFlag* tracer)
|
37
|
+
: LoadBalancingPolicy(std::move(args)), tracer_(tracer) {}
|
38
|
+
|
39
|
+
virtual const char* name() const override { return "child_policy_handler"; }
|
40
|
+
|
41
|
+
void UpdateLocked(UpdateArgs args) override;
|
42
|
+
void ExitIdleLocked() override;
|
43
|
+
void ResetBackoffLocked() override;
|
44
|
+
|
45
|
+
// Returns true if transitioning from the old config to the new config
|
46
|
+
// requires instantiating a new policy object.
|
47
|
+
virtual bool ConfigChangeRequiresNewPolicyInstance(
|
48
|
+
LoadBalancingPolicy::Config* old_config,
|
49
|
+
LoadBalancingPolicy::Config* new_config) const;
|
50
|
+
|
51
|
+
// Instantiates a new policy of the specified name.
|
52
|
+
// May be overridden by subclasses to avoid recursion when an LB
|
53
|
+
// policy factory returns a ChildPolicyHandler.
|
54
|
+
virtual OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
|
55
|
+
const char* name, LoadBalancingPolicy::Args args) const;
|
56
|
+
|
57
|
+
private:
|
58
|
+
class Helper;
|
59
|
+
|
60
|
+
void ShutdownLocked() override;
|
61
|
+
|
62
|
+
OrphanablePtr<LoadBalancingPolicy> CreateChildPolicy(
|
63
|
+
const char* child_policy_name, const grpc_channel_args& args);
|
64
|
+
|
65
|
+
// Passed in from caller at construction time.
|
66
|
+
TraceFlag* tracer_;
|
67
|
+
|
68
|
+
bool shutting_down_ = false;
|
69
|
+
|
70
|
+
// The most recent config passed to UpdateLocked().
|
71
|
+
// If pending_child_policy_ is non-null, this is the config passed to
|
72
|
+
// pending_child_policy_; otherwise, it's the config passed to child_policy_.
|
73
|
+
RefCountedPtr<LoadBalancingPolicy::Config> current_config_;
|
74
|
+
|
75
|
+
// Child LB policy.
|
76
|
+
OrphanablePtr<LoadBalancingPolicy> child_policy_;
|
77
|
+
OrphanablePtr<LoadBalancingPolicy> pending_child_policy_;
|
78
|
+
};
|
79
|
+
|
80
|
+
} // namespace grpc_core
|
81
|
+
|
82
|
+
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_CHILD_POLICY_HANDLER_H \
|
83
|
+
*/
|
@@ -64,6 +64,13 @@
|
|
64
64
|
#include <limits.h>
|
65
65
|
#include <string.h>
|
66
66
|
|
67
|
+
#include "absl/container/inlined_vector.h"
|
68
|
+
#include "absl/strings/str_cat.h"
|
69
|
+
#include "absl/strings/str_format.h"
|
70
|
+
#include "absl/strings/str_join.h"
|
71
|
+
|
72
|
+
#include "upb/upb.hpp"
|
73
|
+
|
67
74
|
#include <grpc/byte_buffer_reader.h>
|
68
75
|
#include <grpc/grpc.h>
|
69
76
|
#include <grpc/support/alloc.h>
|
@@ -71,8 +78,10 @@
|
|
71
78
|
#include <grpc/support/time.h>
|
72
79
|
|
73
80
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
81
|
+
#include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
|
74
82
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h"
|
75
83
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
|
84
|
+
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
|
76
85
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h"
|
77
86
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
|
78
87
|
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h"
|
@@ -89,7 +98,6 @@
|
|
89
98
|
#include "src/core/lib/gprpp/memory.h"
|
90
99
|
#include "src/core/lib/gprpp/orphanable.h"
|
91
100
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
92
|
-
#include "src/core/lib/iomgr/combiner.h"
|
93
101
|
#include "src/core/lib/iomgr/sockaddr.h"
|
94
102
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
95
103
|
#include "src/core/lib/iomgr/timer.h"
|
@@ -123,16 +131,21 @@ constexpr char kGrpclb[] = "grpclb";
|
|
123
131
|
|
124
132
|
class GrpcLbConfig : public LoadBalancingPolicy::Config {
|
125
133
|
public:
|
126
|
-
|
127
|
-
|
134
|
+
GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
|
135
|
+
std::string service_name)
|
136
|
+
: child_policy_(std::move(child_policy)),
|
137
|
+
service_name_(std::move(service_name)) {}
|
128
138
|
const char* name() const override { return kGrpclb; }
|
129
139
|
|
130
140
|
RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
|
131
141
|
return child_policy_;
|
132
142
|
}
|
133
143
|
|
144
|
+
const std::string& service_name() const { return service_name_; }
|
145
|
+
|
134
146
|
private:
|
135
147
|
RefCountedPtr<LoadBalancingPolicy::Config> child_policy_;
|
148
|
+
std::string service_name_;
|
136
149
|
};
|
137
150
|
|
138
151
|
class GrpcLb : public LoadBalancingPolicy {
|
@@ -177,11 +190,11 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
177
190
|
static void OnBalancerMessageReceived(void* arg, grpc_error* error);
|
178
191
|
static void OnBalancerStatusReceived(void* arg, grpc_error* error);
|
179
192
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
193
|
+
void MaybeSendClientLoadReportLocked(grpc_error* error);
|
194
|
+
void ClientLoadReportDoneLocked(grpc_error* error);
|
195
|
+
void OnInitialRequestSentLocked();
|
196
|
+
void OnBalancerMessageReceivedLocked();
|
197
|
+
void OnBalancerStatusReceivedLocked(grpc_error* error);
|
185
198
|
|
186
199
|
// The owning LB policy.
|
187
200
|
RefCountedPtr<LoadBalancingPolicy> grpclb_policy_;
|
@@ -232,7 +245,7 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
232
245
|
const std::vector<GrpcLbServer>& serverlist() const { return serverlist_; }
|
233
246
|
|
234
247
|
// Returns a text representation suitable for logging.
|
235
|
-
|
248
|
+
std::string AsText() const;
|
236
249
|
|
237
250
|
// Extracts all non-drop entries into a ServerAddressList.
|
238
251
|
ServerAddressList GetServerAddressList(
|
@@ -246,16 +259,16 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
246
259
|
// should not be dropped.
|
247
260
|
//
|
248
261
|
// Note: This is called from the picker, so it will be invoked in
|
249
|
-
// the channel's data plane
|
250
|
-
//
|
262
|
+
// the channel's data plane mutex, NOT the control plane
|
263
|
+
// work_serializer. It should not be accessed by any other part of the LB
|
251
264
|
// policy.
|
252
265
|
const char* ShouldDrop();
|
253
266
|
|
254
267
|
private:
|
255
268
|
std::vector<GrpcLbServer> serverlist_;
|
256
269
|
|
257
|
-
// Guarded by the channel's data plane
|
258
|
-
// plane
|
270
|
+
// Guarded by the channel's data plane mutex, NOT the control
|
271
|
+
// plane work_serializer. It should not be accessed by anything but the
|
259
272
|
// picker via the ShouldDrop() method.
|
260
273
|
size_t drop_index_ = 0;
|
261
274
|
};
|
@@ -294,16 +307,42 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
294
307
|
void UpdateState(grpc_connectivity_state state,
|
295
308
|
std::unique_ptr<SubchannelPicker> picker) override;
|
296
309
|
void RequestReresolution() override;
|
297
|
-
void AddTraceEvent(TraceSeverity severity,
|
310
|
+
void AddTraceEvent(TraceSeverity severity,
|
311
|
+
absl::string_view message) override;
|
298
312
|
|
299
|
-
|
313
|
+
private:
|
314
|
+
RefCountedPtr<GrpcLb> parent_;
|
315
|
+
};
|
316
|
+
|
317
|
+
class StateWatcher : public AsyncConnectivityStateWatcherInterface {
|
318
|
+
public:
|
319
|
+
explicit StateWatcher(RefCountedPtr<GrpcLb> parent)
|
320
|
+
: AsyncConnectivityStateWatcherInterface(parent->work_serializer()),
|
321
|
+
parent_(std::move(parent)) {}
|
322
|
+
|
323
|
+
~StateWatcher() { parent_.reset(DEBUG_LOCATION, "StateWatcher"); }
|
300
324
|
|
301
325
|
private:
|
302
|
-
|
303
|
-
|
326
|
+
void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
|
327
|
+
if (parent_->fallback_at_startup_checks_pending_ &&
|
328
|
+
new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
329
|
+
// In TRANSIENT_FAILURE. Cancel the fallback timer and go into
|
330
|
+
// fallback mode immediately.
|
331
|
+
gpr_log(GPR_INFO,
|
332
|
+
"[grpclb %p] balancer channel in state TRANSIENT_FAILURE; "
|
333
|
+
"entering fallback mode",
|
334
|
+
parent_.get());
|
335
|
+
parent_->fallback_at_startup_checks_pending_ = false;
|
336
|
+
grpc_timer_cancel(&parent_->lb_fallback_timer_);
|
337
|
+
parent_->fallback_mode_ = true;
|
338
|
+
parent_->CreateOrUpdateChildPolicyLocked();
|
339
|
+
// Cancel the watch, since we don't care about the channel state once we
|
340
|
+
// go into fallback mode.
|
341
|
+
parent_->CancelBalancerChannelConnectivityWatchLocked();
|
342
|
+
}
|
343
|
+
}
|
304
344
|
|
305
345
|
RefCountedPtr<GrpcLb> parent_;
|
306
|
-
LoadBalancingPolicy* child_ = nullptr;
|
307
346
|
};
|
308
347
|
|
309
348
|
~GrpcLb();
|
@@ -313,32 +352,31 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
313
352
|
// Helper functions used in UpdateLocked().
|
314
353
|
void ProcessAddressesAndChannelArgsLocked(const ServerAddressList& addresses,
|
315
354
|
const grpc_channel_args& args);
|
316
|
-
|
317
|
-
grpc_error* error);
|
318
|
-
static void OnBalancerChannelConnectivityChangedLocked(void* arg,
|
319
|
-
grpc_error* error);
|
355
|
+
|
320
356
|
void CancelBalancerChannelConnectivityWatchLocked();
|
321
357
|
|
322
358
|
// Methods for dealing with fallback state.
|
323
359
|
void MaybeEnterFallbackModeAfterStartup();
|
324
360
|
static void OnFallbackTimer(void* arg, grpc_error* error);
|
325
|
-
|
361
|
+
void OnFallbackTimerLocked(grpc_error* error);
|
326
362
|
|
327
363
|
// Methods for dealing with the balancer call.
|
328
364
|
void StartBalancerCallLocked();
|
329
365
|
void StartBalancerCallRetryTimerLocked();
|
330
366
|
static void OnBalancerCallRetryTimer(void* arg, grpc_error* error);
|
331
|
-
|
367
|
+
void OnBalancerCallRetryTimerLocked(grpc_error* error);
|
332
368
|
|
333
369
|
// Methods for dealing with the child policy.
|
334
370
|
grpc_channel_args* CreateChildPolicyArgsLocked(
|
335
371
|
bool is_backend_from_grpclb_load_balancer);
|
336
372
|
OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
|
337
|
-
const
|
373
|
+
const grpc_channel_args* args);
|
338
374
|
void CreateOrUpdateChildPolicyLocked();
|
339
375
|
|
340
376
|
// Who the client is trying to communicate with.
|
341
377
|
const char* server_name_ = nullptr;
|
378
|
+
// Configurations for the policy.
|
379
|
+
RefCountedPtr<GrpcLbConfig> config_;
|
342
380
|
|
343
381
|
// Current channel args from the resolver.
|
344
382
|
grpc_channel_args* args_ = nullptr;
|
@@ -348,6 +386,7 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
348
386
|
|
349
387
|
// The channel for communicating with the LB server.
|
350
388
|
grpc_channel* lb_channel_ = nullptr;
|
389
|
+
StateWatcher* watcher_ = nullptr;
|
351
390
|
// Response generator to inject address updates into lb_channel_.
|
352
391
|
RefCountedPtr<FakeResolverResponseGenerator> response_generator_;
|
353
392
|
|
@@ -380,16 +419,9 @@ class GrpcLb : public LoadBalancingPolicy {
|
|
380
419
|
bool fallback_at_startup_checks_pending_ = false;
|
381
420
|
grpc_timer lb_fallback_timer_;
|
382
421
|
grpc_closure lb_on_fallback_;
|
383
|
-
grpc_connectivity_state lb_channel_connectivity_ = GRPC_CHANNEL_IDLE;
|
384
|
-
grpc_closure lb_channel_on_connectivity_changed_;
|
385
422
|
|
386
423
|
// The child policy to use for the backends.
|
387
424
|
OrphanablePtr<LoadBalancingPolicy> child_policy_;
|
388
|
-
// When switching child policies, the new policy will be stored here
|
389
|
-
// until it reports READY, at which point it will be moved to child_policy_.
|
390
|
-
OrphanablePtr<LoadBalancingPolicy> pending_child_policy_;
|
391
|
-
// The child policy config.
|
392
|
-
RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config_;
|
393
425
|
// Child policy in state READY.
|
394
426
|
bool child_policy_ready_ = false;
|
395
427
|
};
|
@@ -423,28 +455,22 @@ void ParseServer(const GrpcLbServer& server, grpc_resolved_address* addr) {
|
|
423
455
|
}
|
424
456
|
}
|
425
457
|
|
426
|
-
|
427
|
-
|
428
|
-
gpr_strvec_init(&entries);
|
458
|
+
std::string GrpcLb::Serverlist::AsText() const {
|
459
|
+
std::vector<std::string> entries;
|
429
460
|
for (size_t i = 0; i < serverlist_.size(); ++i) {
|
430
461
|
const GrpcLbServer& server = serverlist_[i];
|
431
|
-
|
462
|
+
std::string ipport;
|
432
463
|
if (server.drop) {
|
433
|
-
ipport =
|
464
|
+
ipport = "(drop)";
|
434
465
|
} else {
|
435
466
|
grpc_resolved_address addr;
|
436
467
|
ParseServer(server, &addr);
|
437
|
-
grpc_sockaddr_to_string(&
|
468
|
+
ipport = grpc_sockaddr_to_string(&addr, false);
|
438
469
|
}
|
439
|
-
|
440
|
-
|
441
|
-
server.load_balance_token);
|
442
|
-
gpr_free(ipport);
|
443
|
-
gpr_strvec_add(&entries, entry);
|
470
|
+
entries.push_back(absl::StrFormat(" %" PRIuPTR ": %s token=%s\n", i,
|
471
|
+
ipport, server.load_balance_token));
|
444
472
|
}
|
445
|
-
|
446
|
-
gpr_strvec_destroy(&entries);
|
447
|
-
return result;
|
473
|
+
return absl::StrJoin(entries, "");
|
448
474
|
}
|
449
475
|
|
450
476
|
// vtables for channel args for LB token and client stats.
|
@@ -527,16 +553,14 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
|
|
527
553
|
memcpy(lb_token, server.load_balance_token, lb_token_length);
|
528
554
|
lb_token[lb_token_length] = '\0';
|
529
555
|
} else {
|
530
|
-
char* uri = grpc_sockaddr_to_uri(&addr);
|
531
556
|
gpr_log(GPR_INFO,
|
532
557
|
"Missing LB token for backend address '%s'. The empty token will "
|
533
558
|
"be used instead",
|
534
|
-
|
535
|
-
gpr_free(uri);
|
559
|
+
grpc_sockaddr_to_uri(&addr).c_str());
|
536
560
|
lb_token[0] = '\0';
|
537
561
|
}
|
538
562
|
// Add address.
|
539
|
-
InlinedVector<grpc_arg, 2> args_to_add;
|
563
|
+
absl::InlinedVector<grpc_arg, 2> args_to_add;
|
540
564
|
args_to_add.emplace_back(grpc_channel_arg_pointer_create(
|
541
565
|
const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN), lb_token,
|
542
566
|
&lb_token_arg_vtable));
|
@@ -607,7 +631,7 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
|
|
607
631
|
// how to interpret it.
|
608
632
|
args.initial_metadata->Add(
|
609
633
|
kGrpcLbClientStatsMetadataKey,
|
610
|
-
|
634
|
+
absl::string_view(reinterpret_cast<const char*>(client_stats), 0));
|
611
635
|
// Update calls-started.
|
612
636
|
client_stats->AddCallStarted();
|
613
637
|
}
|
@@ -629,46 +653,15 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
|
|
629
653
|
// GrpcLb::Helper
|
630
654
|
//
|
631
655
|
|
632
|
-
bool GrpcLb::Helper::CalledByPendingChild() const {
|
633
|
-
GPR_ASSERT(child_ != nullptr);
|
634
|
-
return child_ == parent_->pending_child_policy_.get();
|
635
|
-
}
|
636
|
-
|
637
|
-
bool GrpcLb::Helper::CalledByCurrentChild() const {
|
638
|
-
GPR_ASSERT(child_ != nullptr);
|
639
|
-
return child_ == parent_->child_policy_.get();
|
640
|
-
}
|
641
|
-
|
642
656
|
RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
|
643
657
|
const grpc_channel_args& args) {
|
644
|
-
if (parent_->shutting_down_
|
645
|
-
(!CalledByPendingChild() && !CalledByCurrentChild())) {
|
646
|
-
return nullptr;
|
647
|
-
}
|
658
|
+
if (parent_->shutting_down_) return nullptr;
|
648
659
|
return parent_->channel_control_helper()->CreateSubchannel(args);
|
649
660
|
}
|
650
661
|
|
651
662
|
void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
|
652
663
|
std::unique_ptr<SubchannelPicker> picker) {
|
653
664
|
if (parent_->shutting_down_) return;
|
654
|
-
// If this request is from the pending child policy, ignore it until
|
655
|
-
// it reports READY, at which point we swap it into place.
|
656
|
-
if (CalledByPendingChild()) {
|
657
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
658
|
-
gpr_log(GPR_INFO,
|
659
|
-
"[grpclb %p helper %p] pending child policy %p reports state=%s",
|
660
|
-
parent_.get(), this, parent_->pending_child_policy_.get(),
|
661
|
-
ConnectivityStateName(state));
|
662
|
-
}
|
663
|
-
if (state != GRPC_CHANNEL_READY) return;
|
664
|
-
grpc_pollset_set_del_pollset_set(
|
665
|
-
parent_->child_policy_->interested_parties(),
|
666
|
-
parent_->interested_parties());
|
667
|
-
parent_->child_policy_ = std::move(parent_->pending_child_policy_);
|
668
|
-
} else if (!CalledByCurrentChild()) {
|
669
|
-
// This request is from an outdated child, so ignore it.
|
670
|
-
return;
|
671
|
-
}
|
672
665
|
// Record whether child policy reports READY.
|
673
666
|
parent_->child_policy_ready_ = state == GRPC_CHANNEL_READY;
|
674
667
|
// Enter fallback mode if needed.
|
@@ -721,16 +714,6 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
|
|
721
714
|
|
722
715
|
void GrpcLb::Helper::RequestReresolution() {
|
723
716
|
if (parent_->shutting_down_) return;
|
724
|
-
const LoadBalancingPolicy* latest_child_policy =
|
725
|
-
parent_->pending_child_policy_ != nullptr
|
726
|
-
? parent_->pending_child_policy_.get()
|
727
|
-
: parent_->child_policy_.get();
|
728
|
-
if (child_ != latest_child_policy) return;
|
729
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
730
|
-
gpr_log(GPR_INFO,
|
731
|
-
"[grpclb %p] Re-resolution requested from %schild policy (%p).",
|
732
|
-
parent_.get(), CalledByPendingChild() ? "pending " : "", child_);
|
733
|
-
}
|
734
717
|
// If we are talking to a balancer, we expect to get updated addresses
|
735
718
|
// from the balancer, so we can ignore the re-resolution request from
|
736
719
|
// the child policy. Otherwise, pass the re-resolution request up to the
|
@@ -741,11 +724,9 @@ void GrpcLb::Helper::RequestReresolution() {
|
|
741
724
|
}
|
742
725
|
}
|
743
726
|
|
744
|
-
void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity,
|
745
|
-
|
746
|
-
|
747
|
-
return;
|
748
|
-
}
|
727
|
+
void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity,
|
728
|
+
absl::string_view message) {
|
729
|
+
if (parent_->shutting_down_) return;
|
749
730
|
parent_->channel_control_helper()->AddTraceEvent(severity, message);
|
750
731
|
}
|
751
732
|
|
@@ -764,6 +745,15 @@ GrpcLb::BalancerCallState::BalancerCallState(
|
|
764
745
|
// the polling entities from client_channel.
|
765
746
|
GPR_ASSERT(grpclb_policy()->server_name_ != nullptr);
|
766
747
|
GPR_ASSERT(grpclb_policy()->server_name_[0] != '\0');
|
748
|
+
// Closure Initialization
|
749
|
+
GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSent, this,
|
750
|
+
grpc_schedule_on_exec_ctx);
|
751
|
+
GRPC_CLOSURE_INIT(&lb_on_balancer_message_received_,
|
752
|
+
OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
|
753
|
+
GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
|
754
|
+
this, grpc_schedule_on_exec_ctx);
|
755
|
+
GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
|
756
|
+
this, grpc_schedule_on_exec_ctx);
|
767
757
|
const grpc_millis deadline =
|
768
758
|
grpclb_policy()->lb_call_timeout_ms_ == 0
|
769
759
|
? GRPC_MILLIS_INF_FUTURE
|
@@ -775,8 +765,11 @@ GrpcLb::BalancerCallState::BalancerCallState(
|
|
775
765
|
nullptr, deadline, nullptr);
|
776
766
|
// Init the LB call request payload.
|
777
767
|
upb::Arena arena;
|
778
|
-
grpc_slice request_payload_slice =
|
779
|
-
|
768
|
+
grpc_slice request_payload_slice = GrpcLbRequestCreate(
|
769
|
+
grpclb_policy()->config_->service_name().empty()
|
770
|
+
? grpclb_policy()->server_name_
|
771
|
+
: grpclb_policy()->config_->service_name().c_str(),
|
772
|
+
arena.ptr());
|
780
773
|
send_message_payload_ =
|
781
774
|
grpc_raw_byte_buffer_create(&request_payload_slice, 1);
|
782
775
|
grpc_slice_unref_internal(request_payload_slice);
|
@@ -840,8 +833,6 @@ void GrpcLb::BalancerCallState::StartQuery() {
|
|
840
833
|
// with the callback.
|
841
834
|
auto self = Ref(DEBUG_LOCATION, "on_initial_request_sent");
|
842
835
|
self.release();
|
843
|
-
GRPC_CLOSURE_INIT(&lb_on_initial_request_sent_, OnInitialRequestSent, this,
|
844
|
-
grpc_schedule_on_exec_ctx);
|
845
836
|
call_error = grpc_call_start_batch_and_execute(
|
846
837
|
lb_call_, ops, (size_t)(op - ops), &lb_on_initial_request_sent_);
|
847
838
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
@@ -864,8 +855,6 @@ void GrpcLb::BalancerCallState::StartQuery() {
|
|
864
855
|
// with the callback.
|
865
856
|
self = Ref(DEBUG_LOCATION, "on_message_received");
|
866
857
|
self.release();
|
867
|
-
GRPC_CLOSURE_INIT(&lb_on_balancer_message_received_,
|
868
|
-
OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
|
869
858
|
call_error = grpc_call_start_batch_and_execute(
|
870
859
|
lb_call_, ops, (size_t)(op - ops), &lb_on_balancer_message_received_);
|
871
860
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
@@ -882,8 +871,6 @@ void GrpcLb::BalancerCallState::StartQuery() {
|
|
882
871
|
// This callback signals the end of the LB call, so it relies on the initial
|
883
872
|
// ref instead of a new ref. When it's invoked, it's the initial ref that is
|
884
873
|
// unreffed.
|
885
|
-
GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
|
886
|
-
this, grpc_schedule_on_exec_ctx);
|
887
874
|
call_error = grpc_call_start_batch_and_execute(
|
888
875
|
lb_call_, ops, (size_t)(op - ops), &lb_on_balancer_status_received_);
|
889
876
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
@@ -902,28 +889,27 @@ void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
|
|
902
889
|
void GrpcLb::BalancerCallState::MaybeSendClientLoadReport(void* arg,
|
903
890
|
grpc_error* error) {
|
904
891
|
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
892
|
+
GRPC_ERROR_REF(error); // ref owned by lambda
|
893
|
+
lb_calld->grpclb_policy()->work_serializer()->Run(
|
894
|
+
[lb_calld, error]() { lb_calld->MaybeSendClientLoadReportLocked(error); },
|
895
|
+
DEBUG_LOCATION);
|
909
896
|
}
|
910
897
|
|
911
898
|
void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked(
|
912
|
-
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
|
899
|
+
grpc_error* error) {
|
900
|
+
client_load_report_timer_callback_pending_ = false;
|
901
|
+
if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
|
902
|
+
Unref(DEBUG_LOCATION, "client_load_report");
|
903
|
+
GRPC_ERROR_UNREF(error);
|
918
904
|
return;
|
919
905
|
}
|
920
906
|
// If we've already sent the initial request, then we can go ahead and send
|
921
907
|
// the load report. Otherwise, we need to wait until the initial request has
|
922
908
|
// been sent to send this (see OnInitialRequestSentLocked()).
|
923
|
-
if (
|
924
|
-
|
909
|
+
if (send_message_payload_ == nullptr) {
|
910
|
+
SendClientLoadReportLocked();
|
925
911
|
} else {
|
926
|
-
|
912
|
+
client_load_report_is_due_ = true;
|
927
913
|
}
|
928
914
|
}
|
929
915
|
|
@@ -982,140 +968,125 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
|
|
982
968
|
void GrpcLb::BalancerCallState::ClientLoadReportDone(void* arg,
|
983
969
|
grpc_error* error) {
|
984
970
|
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
971
|
+
GRPC_ERROR_REF(error); // ref owned by lambda
|
972
|
+
lb_calld->grpclb_policy()->work_serializer()->Run(
|
973
|
+
[lb_calld, error]() { lb_calld->ClientLoadReportDoneLocked(error); },
|
974
|
+
DEBUG_LOCATION);
|
989
975
|
}
|
990
976
|
|
991
|
-
void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(
|
992
|
-
|
993
|
-
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
if (error != GRPC_ERROR_NONE || lb_calld != grpclb_policy->lb_calld_.get()) {
|
998
|
-
lb_calld->Unref(DEBUG_LOCATION, "client_load_report");
|
977
|
+
void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(grpc_error* error) {
|
978
|
+
grpc_byte_buffer_destroy(send_message_payload_);
|
979
|
+
send_message_payload_ = nullptr;
|
980
|
+
if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
|
981
|
+
Unref(DEBUG_LOCATION, "client_load_report");
|
982
|
+
GRPC_ERROR_UNREF(error);
|
999
983
|
return;
|
1000
984
|
}
|
1001
|
-
|
985
|
+
ScheduleNextClientLoadReportLocked();
|
1002
986
|
}
|
1003
987
|
|
1004
988
|
void GrpcLb::BalancerCallState::OnInitialRequestSent(void* arg,
|
1005
|
-
grpc_error* error) {
|
989
|
+
grpc_error* /*error*/) {
|
1006
990
|
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
1007
|
-
lb_calld->grpclb_policy()->
|
1008
|
-
|
1009
|
-
OnInitialRequestSentLocked, lb_calld, nullptr),
|
1010
|
-
GRPC_ERROR_REF(error));
|
991
|
+
lb_calld->grpclb_policy()->work_serializer()->Run(
|
992
|
+
[lb_calld]() { lb_calld->OnInitialRequestSentLocked(); }, DEBUG_LOCATION);
|
1011
993
|
}
|
1012
994
|
|
1013
|
-
void GrpcLb::BalancerCallState::OnInitialRequestSentLocked(
|
1014
|
-
|
1015
|
-
|
1016
|
-
grpc_byte_buffer_destroy(lb_calld->send_message_payload_);
|
1017
|
-
lb_calld->send_message_payload_ = nullptr;
|
995
|
+
void GrpcLb::BalancerCallState::OnInitialRequestSentLocked() {
|
996
|
+
grpc_byte_buffer_destroy(send_message_payload_);
|
997
|
+
send_message_payload_ = nullptr;
|
1018
998
|
// If we attempted to send a client load report before the initial request was
|
1019
999
|
// sent (and this lb_calld is still in use), send the load report now.
|
1020
|
-
if (
|
1021
|
-
|
1022
|
-
|
1023
|
-
lb_calld->client_load_report_is_due_ = false;
|
1000
|
+
if (client_load_report_is_due_ && this == grpclb_policy()->lb_calld_.get()) {
|
1001
|
+
SendClientLoadReportLocked();
|
1002
|
+
client_load_report_is_due_ = false;
|
1024
1003
|
}
|
1025
|
-
|
1004
|
+
Unref(DEBUG_LOCATION, "on_initial_request_sent");
|
1026
1005
|
}
|
1027
1006
|
|
1028
|
-
void GrpcLb::BalancerCallState::OnBalancerMessageReceived(
|
1029
|
-
|
1007
|
+
void GrpcLb::BalancerCallState::OnBalancerMessageReceived(
|
1008
|
+
void* arg, grpc_error* /*error*/) {
|
1030
1009
|
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
1031
|
-
lb_calld->grpclb_policy()->
|
1032
|
-
|
1033
|
-
|
1034
|
-
GRPC_ERROR_REF(error));
|
1010
|
+
lb_calld->grpclb_policy()->work_serializer()->Run(
|
1011
|
+
[lb_calld]() { lb_calld->OnBalancerMessageReceivedLocked(); },
|
1012
|
+
DEBUG_LOCATION);
|
1035
1013
|
}
|
1036
1014
|
|
1037
|
-
void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
|
1038
|
-
void* arg, grpc_error* /*error*/) {
|
1039
|
-
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
1040
|
-
GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
|
1015
|
+
void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
|
1041
1016
|
// Null payload means the LB call was cancelled.
|
1042
|
-
if (
|
1043
|
-
|
1044
|
-
|
1017
|
+
if (this != grpclb_policy()->lb_calld_.get() ||
|
1018
|
+
recv_message_payload_ == nullptr) {
|
1019
|
+
Unref(DEBUG_LOCATION, "on_message_received");
|
1045
1020
|
return;
|
1046
1021
|
}
|
1047
1022
|
grpc_byte_buffer_reader bbr;
|
1048
|
-
grpc_byte_buffer_reader_init(&bbr,
|
1023
|
+
grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
|
1049
1024
|
grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
|
1050
1025
|
grpc_byte_buffer_reader_destroy(&bbr);
|
1051
|
-
grpc_byte_buffer_destroy(
|
1052
|
-
|
1026
|
+
grpc_byte_buffer_destroy(recv_message_payload_);
|
1027
|
+
recv_message_payload_ = nullptr;
|
1053
1028
|
GrpcLbResponse response;
|
1054
1029
|
upb::Arena arena;
|
1055
1030
|
if (!GrpcLbResponseParse(response_slice, arena.ptr(), &response) ||
|
1056
|
-
(response.type == response.INITIAL &&
|
1031
|
+
(response.type == response.INITIAL && seen_initial_response_)) {
|
1057
1032
|
char* response_slice_str =
|
1058
1033
|
grpc_dump_slice(response_slice, GPR_DUMP_ASCII | GPR_DUMP_HEX);
|
1059
1034
|
gpr_log(GPR_ERROR,
|
1060
1035
|
"[grpclb %p] lb_calld=%p: Invalid LB response received: '%s'. "
|
1061
1036
|
"Ignoring.",
|
1062
|
-
grpclb_policy,
|
1037
|
+
grpclb_policy(), this, response_slice_str);
|
1063
1038
|
gpr_free(response_slice_str);
|
1064
1039
|
} else {
|
1065
1040
|
switch (response.type) {
|
1066
1041
|
case response.INITIAL: {
|
1067
1042
|
if (response.client_stats_report_interval != 0) {
|
1068
|
-
|
1043
|
+
client_stats_report_interval_ =
|
1069
1044
|
GPR_MAX(GPR_MS_PER_SEC, response.client_stats_report_interval);
|
1070
1045
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1071
1046
|
gpr_log(GPR_INFO,
|
1072
1047
|
"[grpclb %p] lb_calld=%p: Received initial LB response "
|
1073
1048
|
"message; client load reporting interval = %" PRId64
|
1074
1049
|
" milliseconds",
|
1075
|
-
grpclb_policy,
|
1076
|
-
lb_calld->client_stats_report_interval_);
|
1050
|
+
grpclb_policy(), this, client_stats_report_interval_);
|
1077
1051
|
}
|
1078
1052
|
} else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1079
1053
|
gpr_log(GPR_INFO,
|
1080
1054
|
"[grpclb %p] lb_calld=%p: Received initial LB response "
|
1081
1055
|
"message; client load reporting NOT enabled",
|
1082
|
-
grpclb_policy,
|
1056
|
+
grpclb_policy(), this);
|
1083
1057
|
}
|
1084
|
-
|
1058
|
+
seen_initial_response_ = true;
|
1085
1059
|
break;
|
1086
1060
|
}
|
1087
1061
|
case response.SERVERLIST: {
|
1088
|
-
GPR_ASSERT(
|
1062
|
+
GPR_ASSERT(lb_call_ != nullptr);
|
1089
1063
|
auto serverlist_wrapper =
|
1090
1064
|
MakeRefCounted<Serverlist>(std::move(response.serverlist));
|
1091
1065
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1092
|
-
grpc_core::UniquePtr<char> serverlist_text =
|
1093
|
-
serverlist_wrapper->AsText();
|
1094
1066
|
gpr_log(GPR_INFO,
|
1095
1067
|
"[grpclb %p] lb_calld=%p: Serverlist with %" PRIuPTR
|
1096
1068
|
" servers received:\n%s",
|
1097
|
-
grpclb_policy,
|
1069
|
+
grpclb_policy(), this,
|
1098
1070
|
serverlist_wrapper->serverlist().size(),
|
1099
|
-
|
1071
|
+
serverlist_wrapper->AsText().c_str());
|
1100
1072
|
}
|
1101
|
-
|
1073
|
+
seen_serverlist_ = true;
|
1102
1074
|
// Start sending client load report only after we start using the
|
1103
1075
|
// serverlist returned from the current LB call.
|
1104
|
-
if (
|
1105
|
-
|
1106
|
-
lb_calld->client_stats_ = MakeRefCounted<GrpcLbClientStats>();
|
1076
|
+
if (client_stats_report_interval_ > 0 && client_stats_ == nullptr) {
|
1077
|
+
client_stats_ = MakeRefCounted<GrpcLbClientStats>();
|
1107
1078
|
// Ref held by callback.
|
1108
|
-
|
1109
|
-
|
1079
|
+
Ref(DEBUG_LOCATION, "client_load_report").release();
|
1080
|
+
ScheduleNextClientLoadReportLocked();
|
1110
1081
|
}
|
1111
1082
|
// Check if the serverlist differs from the previous one.
|
1112
|
-
if (grpclb_policy->serverlist_ != nullptr &&
|
1113
|
-
*grpclb_policy->serverlist_ == *serverlist_wrapper) {
|
1083
|
+
if (grpclb_policy()->serverlist_ != nullptr &&
|
1084
|
+
*grpclb_policy()->serverlist_ == *serverlist_wrapper) {
|
1114
1085
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1115
1086
|
gpr_log(GPR_INFO,
|
1116
1087
|
"[grpclb %p] lb_calld=%p: Incoming server list identical "
|
1117
1088
|
"to current, ignoring.",
|
1118
|
-
grpclb_policy,
|
1089
|
+
grpclb_policy(), this);
|
1119
1090
|
}
|
1120
1091
|
} else { // New serverlist.
|
1121
1092
|
// Dispose of the fallback.
|
@@ -1137,155 +1108,135 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked(
|
|
1137
1108
|
// the grpclb implementation at this point, since we're deprecating
|
1138
1109
|
// it in favor of the xds policy. We will implement this the
|
1139
1110
|
// right way in the xds policy instead.
|
1140
|
-
if (grpclb_policy->fallback_mode_) {
|
1111
|
+
if (grpclb_policy()->fallback_mode_) {
|
1141
1112
|
gpr_log(GPR_INFO,
|
1142
1113
|
"[grpclb %p] Received response from balancer; exiting "
|
1143
1114
|
"fallback mode",
|
1144
|
-
grpclb_policy);
|
1145
|
-
grpclb_policy->fallback_mode_ = false;
|
1115
|
+
grpclb_policy());
|
1116
|
+
grpclb_policy()->fallback_mode_ = false;
|
1146
1117
|
}
|
1147
|
-
if (grpclb_policy->fallback_at_startup_checks_pending_) {
|
1148
|
-
grpclb_policy->fallback_at_startup_checks_pending_ = false;
|
1149
|
-
grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
|
1150
|
-
grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
|
1118
|
+
if (grpclb_policy()->fallback_at_startup_checks_pending_) {
|
1119
|
+
grpclb_policy()->fallback_at_startup_checks_pending_ = false;
|
1120
|
+
grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
|
1121
|
+
grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
|
1151
1122
|
}
|
1152
1123
|
// Update the serverlist in the GrpcLb instance. This serverlist
|
1153
1124
|
// instance will be destroyed either upon the next update or when the
|
1154
1125
|
// GrpcLb instance is destroyed.
|
1155
|
-
grpclb_policy->serverlist_ = std::move(serverlist_wrapper);
|
1156
|
-
grpclb_policy->CreateOrUpdateChildPolicyLocked();
|
1126
|
+
grpclb_policy()->serverlist_ = std::move(serverlist_wrapper);
|
1127
|
+
grpclb_policy()->CreateOrUpdateChildPolicyLocked();
|
1157
1128
|
}
|
1158
1129
|
break;
|
1159
1130
|
}
|
1160
1131
|
case response.FALLBACK: {
|
1161
|
-
if (!grpclb_policy->fallback_mode_) {
|
1132
|
+
if (!grpclb_policy()->fallback_mode_) {
|
1162
1133
|
gpr_log(GPR_INFO,
|
1163
1134
|
"[grpclb %p] Entering fallback mode as requested by balancer",
|
1164
|
-
grpclb_policy);
|
1165
|
-
if (grpclb_policy->fallback_at_startup_checks_pending_) {
|
1166
|
-
grpclb_policy->fallback_at_startup_checks_pending_ = false;
|
1167
|
-
grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
|
1168
|
-
grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
|
1135
|
+
grpclb_policy());
|
1136
|
+
if (grpclb_policy()->fallback_at_startup_checks_pending_) {
|
1137
|
+
grpclb_policy()->fallback_at_startup_checks_pending_ = false;
|
1138
|
+
grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
|
1139
|
+
grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
|
1169
1140
|
}
|
1170
|
-
grpclb_policy->fallback_mode_ = true;
|
1171
|
-
grpclb_policy->CreateOrUpdateChildPolicyLocked();
|
1141
|
+
grpclb_policy()->fallback_mode_ = true;
|
1142
|
+
grpclb_policy()->CreateOrUpdateChildPolicyLocked();
|
1172
1143
|
// Reset serverlist, so that if the balancer exits fallback
|
1173
1144
|
// mode by sending the same serverlist we were previously
|
1174
1145
|
// using, we don't incorrectly ignore it as a duplicate.
|
1175
|
-
grpclb_policy->serverlist_.reset();
|
1146
|
+
grpclb_policy()->serverlist_.reset();
|
1176
1147
|
}
|
1177
1148
|
break;
|
1178
1149
|
}
|
1179
1150
|
}
|
1180
1151
|
}
|
1181
1152
|
grpc_slice_unref_internal(response_slice);
|
1182
|
-
if (!grpclb_policy->shutting_down_) {
|
1153
|
+
if (!grpclb_policy()->shutting_down_) {
|
1183
1154
|
// Keep listening for serverlist updates.
|
1184
1155
|
grpc_op op;
|
1185
1156
|
memset(&op, 0, sizeof(op));
|
1186
1157
|
op.op = GRPC_OP_RECV_MESSAGE;
|
1187
|
-
op.data.recv_message.recv_message = &
|
1158
|
+
op.data.recv_message.recv_message = &recv_message_payload_;
|
1188
1159
|
op.flags = 0;
|
1189
1160
|
op.reserved = nullptr;
|
1190
1161
|
// Reuse the "OnBalancerMessageReceivedLocked" ref taken in StartQuery().
|
1191
|
-
GRPC_CLOSURE_INIT(&lb_calld->lb_on_balancer_message_received_,
|
1192
|
-
GrpcLb::BalancerCallState::OnBalancerMessageReceived,
|
1193
|
-
lb_calld, grpc_schedule_on_exec_ctx);
|
1194
1162
|
const grpc_call_error call_error = grpc_call_start_batch_and_execute(
|
1195
|
-
|
1196
|
-
&lb_calld->lb_on_balancer_message_received_);
|
1163
|
+
lb_call_, &op, 1, &lb_on_balancer_message_received_);
|
1197
1164
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1198
1165
|
} else {
|
1199
|
-
|
1166
|
+
Unref(DEBUG_LOCATION, "on_message_received+grpclb_shutdown");
|
1200
1167
|
}
|
1201
1168
|
}
|
1202
1169
|
|
1203
1170
|
void GrpcLb::BalancerCallState::OnBalancerStatusReceived(void* arg,
|
1204
1171
|
grpc_error* error) {
|
1205
1172
|
BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1173
|
+
GRPC_ERROR_REF(error); // owned by lambda
|
1174
|
+
lb_calld->grpclb_policy()->work_serializer()->Run(
|
1175
|
+
[lb_calld, error]() { lb_calld->OnBalancerStatusReceivedLocked(error); },
|
1176
|
+
DEBUG_LOCATION);
|
1210
1177
|
}
|
1211
1178
|
|
1212
1179
|
void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
|
1213
|
-
|
1214
|
-
|
1215
|
-
GrpcLb* grpclb_policy = lb_calld->grpclb_policy();
|
1216
|
-
GPR_ASSERT(lb_calld->lb_call_ != nullptr);
|
1180
|
+
grpc_error* error) {
|
1181
|
+
GPR_ASSERT(lb_call_ != nullptr);
|
1217
1182
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1218
|
-
char* status_details =
|
1219
|
-
grpc_slice_to_c_string(lb_calld->lb_call_status_details_);
|
1183
|
+
char* status_details = grpc_slice_to_c_string(lb_call_status_details_);
|
1220
1184
|
gpr_log(GPR_INFO,
|
1221
1185
|
"[grpclb %p] lb_calld=%p: Status from LB server received. "
|
1222
1186
|
"Status = %d, details = '%s', (lb_call: %p), error '%s'",
|
1223
|
-
grpclb_policy,
|
1224
|
-
|
1187
|
+
grpclb_policy(), this, lb_call_status_, status_details, lb_call_,
|
1188
|
+
grpc_error_string(error));
|
1225
1189
|
gpr_free(status_details);
|
1226
1190
|
}
|
1191
|
+
GRPC_ERROR_UNREF(error);
|
1227
1192
|
// If this lb_calld is still in use, this call ended because of a failure so
|
1228
1193
|
// we want to retry connecting. Otherwise, we have deliberately ended this
|
1229
1194
|
// call and no further action is required.
|
1230
|
-
if (
|
1195
|
+
if (this == grpclb_policy()->lb_calld_.get()) {
|
1231
1196
|
// If the fallback-at-startup checks are pending, go into fallback mode
|
1232
1197
|
// immediately. This short-circuits the timeout for the fallback-at-startup
|
1233
1198
|
// case.
|
1234
|
-
if (grpclb_policy->fallback_at_startup_checks_pending_) {
|
1235
|
-
GPR_ASSERT(!
|
1199
|
+
if (grpclb_policy()->fallback_at_startup_checks_pending_) {
|
1200
|
+
GPR_ASSERT(!seen_serverlist_);
|
1236
1201
|
gpr_log(GPR_INFO,
|
1237
1202
|
"[grpclb %p] Balancer call finished without receiving "
|
1238
1203
|
"serverlist; entering fallback mode",
|
1239
|
-
grpclb_policy);
|
1240
|
-
grpclb_policy->fallback_at_startup_checks_pending_ = false;
|
1241
|
-
grpc_timer_cancel(&grpclb_policy->lb_fallback_timer_);
|
1242
|
-
grpclb_policy->CancelBalancerChannelConnectivityWatchLocked();
|
1243
|
-
grpclb_policy->fallback_mode_ = true;
|
1244
|
-
grpclb_policy->CreateOrUpdateChildPolicyLocked();
|
1204
|
+
grpclb_policy());
|
1205
|
+
grpclb_policy()->fallback_at_startup_checks_pending_ = false;
|
1206
|
+
grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
|
1207
|
+
grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
|
1208
|
+
grpclb_policy()->fallback_mode_ = true;
|
1209
|
+
grpclb_policy()->CreateOrUpdateChildPolicyLocked();
|
1245
1210
|
} else {
|
1246
1211
|
// This handles the fallback-after-startup case.
|
1247
|
-
grpclb_policy->MaybeEnterFallbackModeAfterStartup();
|
1212
|
+
grpclb_policy()->MaybeEnterFallbackModeAfterStartup();
|
1248
1213
|
}
|
1249
|
-
grpclb_policy->lb_calld_.reset();
|
1250
|
-
GPR_ASSERT(!grpclb_policy->shutting_down_);
|
1251
|
-
grpclb_policy->channel_control_helper()->RequestReresolution();
|
1252
|
-
if (
|
1214
|
+
grpclb_policy()->lb_calld_.reset();
|
1215
|
+
GPR_ASSERT(!grpclb_policy()->shutting_down_);
|
1216
|
+
grpclb_policy()->channel_control_helper()->RequestReresolution();
|
1217
|
+
if (seen_initial_response_) {
|
1253
1218
|
// If we lose connection to the LB server, reset the backoff and restart
|
1254
1219
|
// the LB call immediately.
|
1255
|
-
grpclb_policy->lb_call_backoff_.Reset();
|
1256
|
-
grpclb_policy->StartBalancerCallLocked();
|
1220
|
+
grpclb_policy()->lb_call_backoff_.Reset();
|
1221
|
+
grpclb_policy()->StartBalancerCallLocked();
|
1257
1222
|
} else {
|
1258
1223
|
// If this LB call fails establishing any connection to the LB server,
|
1259
1224
|
// retry later.
|
1260
|
-
grpclb_policy->StartBalancerCallRetryTimerLocked();
|
1225
|
+
grpclb_policy()->StartBalancerCallRetryTimerLocked();
|
1261
1226
|
}
|
1262
1227
|
}
|
1263
|
-
|
1228
|
+
Unref(DEBUG_LOCATION, "lb_call_ended");
|
1264
1229
|
}
|
1265
1230
|
|
1266
1231
|
//
|
1267
1232
|
// helper code for creating balancer channel
|
1268
1233
|
//
|
1269
1234
|
|
1270
|
-
ServerAddressList ExtractBalancerAddresses(const
|
1271
|
-
ServerAddressList
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
// recursively use the grpclb policy in the channel used to talk to
|
1276
|
-
// the balancers. Note that we do NOT strip out the balancer_name
|
1277
|
-
// channel arg, since we need that to set the authority correctly
|
1278
|
-
// to talk to the balancers.
|
1279
|
-
static const char* args_to_remove[] = {
|
1280
|
-
GRPC_ARG_ADDRESS_IS_BALANCER,
|
1281
|
-
};
|
1282
|
-
balancer_addresses.emplace_back(
|
1283
|
-
addresses[i].address(),
|
1284
|
-
grpc_channel_args_copy_and_remove(addresses[i].args(), args_to_remove,
|
1285
|
-
GPR_ARRAY_SIZE(args_to_remove)));
|
1286
|
-
}
|
1287
|
-
}
|
1288
|
-
return balancer_addresses;
|
1235
|
+
ServerAddressList ExtractBalancerAddresses(const grpc_channel_args& args) {
|
1236
|
+
const ServerAddressList* addresses =
|
1237
|
+
FindGrpclbBalancerAddressesInChannelArgs(args);
|
1238
|
+
if (addresses != nullptr) return *addresses;
|
1239
|
+
return ServerAddressList();
|
1289
1240
|
}
|
1290
1241
|
|
1291
1242
|
/* Returns the channel args for the LB channel, used to create a bidirectional
|
@@ -1329,7 +1280,7 @@ grpc_channel_args* BuildBalancerChannelArgs(
|
|
1329
1280
|
GRPC_ARG_CHANNELZ_CHANNEL_NODE,
|
1330
1281
|
};
|
1331
1282
|
// Channel args to add.
|
1332
|
-
InlinedVector<grpc_arg, 3> args_to_add;
|
1283
|
+
absl::InlinedVector<grpc_arg, 3> args_to_add;
|
1333
1284
|
// The fake resolver response generator, which we use to inject
|
1334
1285
|
// address updates into the LB channel.
|
1335
1286
|
args_to_add.emplace_back(
|
@@ -1371,6 +1322,11 @@ GrpcLb::GrpcLb(Args args)
|
|
1371
1322
|
.set_jitter(GRPC_GRPCLB_RECONNECT_JITTER)
|
1372
1323
|
.set_max_backoff(GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS *
|
1373
1324
|
1000)) {
|
1325
|
+
// Closure Initialization
|
1326
|
+
GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimer, this,
|
1327
|
+
grpc_schedule_on_exec_ctx);
|
1328
|
+
GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimer, this,
|
1329
|
+
grpc_schedule_on_exec_ctx);
|
1374
1330
|
// Record server name.
|
1375
1331
|
const grpc_arg* arg = grpc_channel_args_find(args.args, GRPC_ARG_SERVER_URI);
|
1376
1332
|
const char* server_uri = grpc_channel_arg_get_string(arg);
|
@@ -1405,19 +1361,15 @@ void GrpcLb::ShutdownLocked() {
|
|
1405
1361
|
grpc_timer_cancel(&lb_call_retry_timer_);
|
1406
1362
|
}
|
1407
1363
|
if (fallback_at_startup_checks_pending_) {
|
1364
|
+
fallback_at_startup_checks_pending_ = false;
|
1408
1365
|
grpc_timer_cancel(&lb_fallback_timer_);
|
1409
1366
|
CancelBalancerChannelConnectivityWatchLocked();
|
1410
1367
|
}
|
1411
1368
|
if (child_policy_ != nullptr) {
|
1412
1369
|
grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
|
1413
1370
|
interested_parties());
|
1371
|
+
child_policy_.reset();
|
1414
1372
|
}
|
1415
|
-
if (pending_child_policy_ != nullptr) {
|
1416
|
-
grpc_pollset_set_del_pollset_set(
|
1417
|
-
pending_child_policy_->interested_parties(), interested_parties());
|
1418
|
-
}
|
1419
|
-
child_policy_.reset();
|
1420
|
-
pending_child_policy_.reset();
|
1421
1373
|
// We destroy the LB channel here instead of in our destructor because
|
1422
1374
|
// destroying the channel triggers a last callback to
|
1423
1375
|
// OnBalancerChannelConnectivityChangedLocked(), and we need to be
|
@@ -1439,19 +1391,12 @@ void GrpcLb::ResetBackoffLocked() {
|
|
1439
1391
|
if (child_policy_ != nullptr) {
|
1440
1392
|
child_policy_->ResetBackoffLocked();
|
1441
1393
|
}
|
1442
|
-
if (pending_child_policy_ != nullptr) {
|
1443
|
-
pending_child_policy_->ResetBackoffLocked();
|
1444
|
-
}
|
1445
1394
|
}
|
1446
1395
|
|
1447
1396
|
void GrpcLb::UpdateLocked(UpdateArgs args) {
|
1448
1397
|
const bool is_initial_update = lb_channel_ == nullptr;
|
1449
|
-
|
1450
|
-
|
1451
|
-
child_policy_config_ = grpclb_config->child_policy();
|
1452
|
-
} else {
|
1453
|
-
child_policy_config_ = nullptr;
|
1454
|
-
}
|
1398
|
+
config_ = args.config;
|
1399
|
+
GPR_ASSERT(config_ != nullptr);
|
1455
1400
|
ProcessAddressesAndChannelArgsLocked(args.addresses, *args.args);
|
1456
1401
|
// Update the existing child policy.
|
1457
1402
|
if (child_policy_ != nullptr) CreateOrUpdateChildPolicyLocked();
|
@@ -1462,8 +1407,6 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
|
|
1462
1407
|
// Start timer.
|
1463
1408
|
grpc_millis deadline = ExecCtx::Get()->Now() + fallback_at_startup_timeout_;
|
1464
1409
|
Ref(DEBUG_LOCATION, "on_fallback_timer").release(); // Ref for callback
|
1465
|
-
GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimer, this,
|
1466
|
-
grpc_schedule_on_exec_ctx);
|
1467
1410
|
grpc_timer_init(&lb_fallback_timer_, deadline, &lb_on_fallback_);
|
1468
1411
|
// Start watching the channel's connectivity state. If the channel
|
1469
1412
|
// goes into state TRANSIENT_FAILURE before the timer fires, we go into
|
@@ -1472,15 +1415,10 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
|
|
1472
1415
|
grpc_channel_get_channel_stack(lb_channel_));
|
1473
1416
|
GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
|
1474
1417
|
// Ref held by callback.
|
1475
|
-
Ref(DEBUG_LOCATION, "
|
1476
|
-
|
1477
|
-
|
1478
|
-
|
1479
|
-
grpc_client_channel_watch_connectivity_state(
|
1480
|
-
client_channel_elem,
|
1481
|
-
grpc_polling_entity_create_from_pollset_set(interested_parties()),
|
1482
|
-
&lb_channel_connectivity_, &lb_channel_on_connectivity_changed_,
|
1483
|
-
nullptr);
|
1418
|
+
watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "StateWatcher"));
|
1419
|
+
grpc_client_channel_start_connectivity_watch(
|
1420
|
+
client_channel_elem, GRPC_CHANNEL_IDLE,
|
1421
|
+
OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
|
1484
1422
|
// Start balancer call.
|
1485
1423
|
StartBalancerCallLocked();
|
1486
1424
|
}
|
@@ -1490,27 +1428,25 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
|
|
1490
1428
|
// helpers for UpdateLocked()
|
1491
1429
|
//
|
1492
1430
|
|
1493
|
-
|
1494
|
-
|
1431
|
+
ServerAddressList AddNullLbTokenToAddresses(
|
1432
|
+
const ServerAddressList& addresses) {
|
1495
1433
|
static const char* lb_token = "";
|
1496
1434
|
grpc_arg arg = grpc_channel_arg_pointer_create(
|
1497
1435
|
const_cast<char*>(GRPC_ARG_GRPCLB_ADDRESS_LB_TOKEN),
|
1498
1436
|
const_cast<char*>(lb_token), &lb_token_arg_vtable);
|
1499
|
-
ServerAddressList
|
1437
|
+
ServerAddressList addresses_out;
|
1500
1438
|
for (size_t i = 0; i < addresses.size(); ++i) {
|
1501
|
-
|
1502
|
-
|
1503
|
-
|
1504
|
-
grpc_channel_args_copy_and_add(addresses[i].args(), &arg, 1));
|
1505
|
-
}
|
1439
|
+
addresses_out.emplace_back(
|
1440
|
+
addresses[i].address(),
|
1441
|
+
grpc_channel_args_copy_and_add(addresses[i].args(), &arg, 1));
|
1506
1442
|
}
|
1507
|
-
return
|
1443
|
+
return addresses_out;
|
1508
1444
|
}
|
1509
1445
|
|
1510
1446
|
void GrpcLb::ProcessAddressesAndChannelArgsLocked(
|
1511
1447
|
const ServerAddressList& addresses, const grpc_channel_args& args) {
|
1512
1448
|
// Update fallback address list.
|
1513
|
-
fallback_backend_addresses_ =
|
1449
|
+
fallback_backend_addresses_ = AddNullLbTokenToAddresses(addresses);
|
1514
1450
|
// Make sure that GRPC_ARG_LB_POLICY_NAME is set in channel args,
|
1515
1451
|
// since we use this to trigger the client_load_reporting filter.
|
1516
1452
|
static const char* args_to_remove[] = {GRPC_ARG_LB_POLICY_NAME};
|
@@ -1520,16 +1456,15 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
|
|
1520
1456
|
args_ = grpc_channel_args_copy_and_add_and_remove(
|
1521
1457
|
&args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
|
1522
1458
|
// Construct args for balancer channel.
|
1523
|
-
ServerAddressList balancer_addresses = ExtractBalancerAddresses(
|
1459
|
+
ServerAddressList balancer_addresses = ExtractBalancerAddresses(args);
|
1524
1460
|
grpc_channel_args* lb_channel_args = BuildBalancerChannelArgs(
|
1525
1461
|
balancer_addresses, response_generator_.get(), &args);
|
1526
1462
|
// Create balancer channel if needed.
|
1527
1463
|
if (lb_channel_ == nullptr) {
|
1528
|
-
|
1529
|
-
|
1530
|
-
|
1464
|
+
std::string uri_str = absl::StrCat("fake:///", server_name_);
|
1465
|
+
lb_channel_ =
|
1466
|
+
CreateGrpclbBalancerChannel(uri_str.c_str(), *lb_channel_args);
|
1531
1467
|
GPR_ASSERT(lb_channel_ != nullptr);
|
1532
|
-
gpr_free(uri_str);
|
1533
1468
|
}
|
1534
1469
|
// Propagate updates to the LB channel (pick_first) through the fake
|
1535
1470
|
// resolver.
|
@@ -1539,60 +1474,11 @@ void GrpcLb::ProcessAddressesAndChannelArgsLocked(
|
|
1539
1474
|
response_generator_->SetResponse(std::move(result));
|
1540
1475
|
}
|
1541
1476
|
|
1542
|
-
void GrpcLb::OnBalancerChannelConnectivityChanged(void* arg,
|
1543
|
-
grpc_error* error) {
|
1544
|
-
GrpcLb* self = static_cast<GrpcLb*>(arg);
|
1545
|
-
self->combiner()->Run(
|
1546
|
-
GRPC_CLOSURE_INIT(&self->lb_channel_on_connectivity_changed_,
|
1547
|
-
&GrpcLb::OnBalancerChannelConnectivityChangedLocked,
|
1548
|
-
self, nullptr),
|
1549
|
-
GRPC_ERROR_REF(error));
|
1550
|
-
}
|
1551
|
-
|
1552
|
-
void GrpcLb::OnBalancerChannelConnectivityChangedLocked(void* arg,
|
1553
|
-
grpc_error* /*error*/) {
|
1554
|
-
GrpcLb* self = static_cast<GrpcLb*>(arg);
|
1555
|
-
if (!self->shutting_down_ && self->fallback_at_startup_checks_pending_) {
|
1556
|
-
if (self->lb_channel_connectivity_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
1557
|
-
// Not in TRANSIENT_FAILURE. Renew connectivity watch.
|
1558
|
-
grpc_channel_element* client_channel_elem =
|
1559
|
-
grpc_channel_stack_last_element(
|
1560
|
-
grpc_channel_get_channel_stack(self->lb_channel_));
|
1561
|
-
GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
|
1562
|
-
GRPC_CLOSURE_INIT(&self->lb_channel_on_connectivity_changed_,
|
1563
|
-
&GrpcLb::OnBalancerChannelConnectivityChanged, self,
|
1564
|
-
grpc_schedule_on_exec_ctx);
|
1565
|
-
grpc_client_channel_watch_connectivity_state(
|
1566
|
-
client_channel_elem,
|
1567
|
-
grpc_polling_entity_create_from_pollset_set(
|
1568
|
-
self->interested_parties()),
|
1569
|
-
&self->lb_channel_connectivity_,
|
1570
|
-
&self->lb_channel_on_connectivity_changed_, nullptr);
|
1571
|
-
return; // Early out so we don't drop the ref below.
|
1572
|
-
}
|
1573
|
-
// In TRANSIENT_FAILURE. Cancel the fallback timer and go into
|
1574
|
-
// fallback mode immediately.
|
1575
|
-
gpr_log(GPR_INFO,
|
1576
|
-
"[grpclb %p] balancer channel in state TRANSIENT_FAILURE; "
|
1577
|
-
"entering fallback mode",
|
1578
|
-
self);
|
1579
|
-
self->fallback_at_startup_checks_pending_ = false;
|
1580
|
-
grpc_timer_cancel(&self->lb_fallback_timer_);
|
1581
|
-
self->fallback_mode_ = true;
|
1582
|
-
self->CreateOrUpdateChildPolicyLocked();
|
1583
|
-
}
|
1584
|
-
// Done watching connectivity state, so drop ref.
|
1585
|
-
self->Unref(DEBUG_LOCATION, "watch_lb_channel_connectivity");
|
1586
|
-
}
|
1587
|
-
|
1588
1477
|
void GrpcLb::CancelBalancerChannelConnectivityWatchLocked() {
|
1589
1478
|
grpc_channel_element* client_channel_elem = grpc_channel_stack_last_element(
|
1590
1479
|
grpc_channel_get_channel_stack(lb_channel_));
|
1591
1480
|
GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
|
1592
|
-
|
1593
|
-
client_channel_elem,
|
1594
|
-
grpc_polling_entity_create_from_pollset_set(interested_parties()),
|
1595
|
-
nullptr, &lb_channel_on_connectivity_changed_, nullptr);
|
1481
|
+
grpc_client_channel_stop_connectivity_watch(client_channel_elem, watcher_);
|
1596
1482
|
}
|
1597
1483
|
|
1598
1484
|
//
|
@@ -1631,33 +1517,30 @@ void GrpcLb::StartBalancerCallRetryTimerLocked() {
|
|
1631
1517
|
// with the callback.
|
1632
1518
|
auto self = Ref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
|
1633
1519
|
self.release();
|
1634
|
-
GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimer, this,
|
1635
|
-
grpc_schedule_on_exec_ctx);
|
1636
1520
|
retry_timer_callback_pending_ = true;
|
1637
1521
|
grpc_timer_init(&lb_call_retry_timer_, next_try, &lb_on_call_retry_);
|
1638
1522
|
}
|
1639
1523
|
|
1640
1524
|
void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error* error) {
|
1641
1525
|
GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1526
|
+
GRPC_ERROR_REF(error); // ref owned by lambda
|
1527
|
+
grpclb_policy->work_serializer()->Run(
|
1528
|
+
[grpclb_policy, error]() {
|
1529
|
+
grpclb_policy->OnBalancerCallRetryTimerLocked(error);
|
1530
|
+
},
|
1531
|
+
DEBUG_LOCATION);
|
1647
1532
|
}
|
1648
1533
|
|
1649
|
-
void GrpcLb::OnBalancerCallRetryTimerLocked(
|
1650
|
-
|
1651
|
-
|
1652
|
-
if (!grpclb_policy->shutting_down_ && error == GRPC_ERROR_NONE &&
|
1653
|
-
grpclb_policy->lb_calld_ == nullptr) {
|
1534
|
+
void GrpcLb::OnBalancerCallRetryTimerLocked(grpc_error* error) {
|
1535
|
+
retry_timer_callback_pending_ = false;
|
1536
|
+
if (!shutting_down_ && error == GRPC_ERROR_NONE && lb_calld_ == nullptr) {
|
1654
1537
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1655
|
-
gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server",
|
1656
|
-
grpclb_policy);
|
1538
|
+
gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server", this);
|
1657
1539
|
}
|
1658
|
-
|
1540
|
+
StartBalancerCallLocked();
|
1659
1541
|
}
|
1660
|
-
|
1542
|
+
Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
|
1543
|
+
GRPC_ERROR_UNREF(error);
|
1661
1544
|
}
|
1662
1545
|
|
1663
1546
|
//
|
@@ -1684,28 +1567,28 @@ void GrpcLb::MaybeEnterFallbackModeAfterStartup() {
|
|
1684
1567
|
|
1685
1568
|
void GrpcLb::OnFallbackTimer(void* arg, grpc_error* error) {
|
1686
1569
|
GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
|
1570
|
+
GRPC_ERROR_REF(error); // ref owned by lambda
|
1571
|
+
grpclb_policy->work_serializer()->Run(
|
1572
|
+
[grpclb_policy, error]() { grpclb_policy->OnFallbackTimerLocked(error); },
|
1573
|
+
DEBUG_LOCATION);
|
1691
1574
|
}
|
1692
1575
|
|
1693
|
-
void GrpcLb::OnFallbackTimerLocked(
|
1694
|
-
GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
|
1576
|
+
void GrpcLb::OnFallbackTimerLocked(grpc_error* error) {
|
1695
1577
|
// If we receive a serverlist after the timer fires but before this callback
|
1696
1578
|
// actually runs, don't fall back.
|
1697
|
-
if (
|
1698
|
-
|
1579
|
+
if (fallback_at_startup_checks_pending_ && !shutting_down_ &&
|
1580
|
+
error == GRPC_ERROR_NONE) {
|
1699
1581
|
gpr_log(GPR_INFO,
|
1700
1582
|
"[grpclb %p] No response from balancer after fallback timeout; "
|
1701
1583
|
"entering fallback mode",
|
1702
|
-
|
1703
|
-
|
1704
|
-
|
1705
|
-
|
1706
|
-
|
1584
|
+
this);
|
1585
|
+
fallback_at_startup_checks_pending_ = false;
|
1586
|
+
CancelBalancerChannelConnectivityWatchLocked();
|
1587
|
+
fallback_mode_ = true;
|
1588
|
+
CreateOrUpdateChildPolicyLocked();
|
1707
1589
|
}
|
1708
|
-
|
1590
|
+
Unref(DEBUG_LOCATION, "on_fallback_timer");
|
1591
|
+
GRPC_ERROR_UNREF(error);
|
1709
1592
|
}
|
1710
1593
|
|
1711
1594
|
//
|
@@ -1714,7 +1597,7 @@ void GrpcLb::OnFallbackTimerLocked(void* arg, grpc_error* error) {
|
|
1714
1597
|
|
1715
1598
|
grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
|
1716
1599
|
bool is_backend_from_grpclb_load_balancer) {
|
1717
|
-
InlinedVector<grpc_arg, 2> args_to_add;
|
1600
|
+
absl::InlinedVector<grpc_arg, 2> args_to_add;
|
1718
1601
|
args_to_add.emplace_back(grpc_channel_arg_integer_create(
|
1719
1602
|
const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER),
|
1720
1603
|
is_backend_from_grpclb_load_balancer));
|
@@ -1727,25 +1610,17 @@ grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
|
|
1727
1610
|
}
|
1728
1611
|
|
1729
1612
|
OrphanablePtr<LoadBalancingPolicy> GrpcLb::CreateChildPolicyLocked(
|
1730
|
-
const
|
1731
|
-
Helper* helper = new Helper(Ref());
|
1613
|
+
const grpc_channel_args* args) {
|
1732
1614
|
LoadBalancingPolicy::Args lb_policy_args;
|
1733
|
-
lb_policy_args.
|
1615
|
+
lb_policy_args.work_serializer = work_serializer();
|
1734
1616
|
lb_policy_args.args = args;
|
1735
|
-
lb_policy_args.channel_control_helper =
|
1736
|
-
std::unique_ptr<ChannelControlHelper>(helper);
|
1617
|
+
lb_policy_args.channel_control_helper = absl::make_unique<Helper>(Ref());
|
1737
1618
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
1738
|
-
|
1739
|
-
|
1740
|
-
if (GPR_UNLIKELY(lb_policy == nullptr)) {
|
1741
|
-
gpr_log(GPR_ERROR, "[grpclb %p] Failure creating child policy %s", this,
|
1742
|
-
name);
|
1743
|
-
return nullptr;
|
1744
|
-
}
|
1745
|
-
helper->set_child(lb_policy.get());
|
1619
|
+
MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
|
1620
|
+
&grpc_lb_glb_trace);
|
1746
1621
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1747
|
-
gpr_log(GPR_INFO, "[grpclb %p] Created new child policy
|
1748
|
-
|
1622
|
+
gpr_log(GPR_INFO, "[grpclb %p] Created new child policy handler (%p)", this,
|
1623
|
+
lb_policy.get());
|
1749
1624
|
}
|
1750
1625
|
// Add the gRPC LB's interested_parties pollset_set to that of the newly
|
1751
1626
|
// created child policy. This will make the child policy progress upon
|
@@ -1775,98 +1650,17 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
|
|
1775
1650
|
update_args.args =
|
1776
1651
|
CreateChildPolicyArgsLocked(is_backend_from_grpclb_load_balancer);
|
1777
1652
|
GPR_ASSERT(update_args.args != nullptr);
|
1778
|
-
update_args.config =
|
1779
|
-
//
|
1780
|
-
|
1781
|
-
|
1782
|
-
// policy transitions into state READY, we swap it into child_policy_,
|
1783
|
-
// replacing the original child policy. So pending_child_policy_ is
|
1784
|
-
// non-null only between when we apply an update that changes the child
|
1785
|
-
// policy name and when the new child reports state READY.
|
1786
|
-
//
|
1787
|
-
// Updates can arrive at any point during this transition. We always
|
1788
|
-
// apply updates relative to the most recently created child policy,
|
1789
|
-
// even if the most recent one is still in pending_child_policy_. This
|
1790
|
-
// is true both when applying the updates to an existing child policy
|
1791
|
-
// and when determining whether we need to create a new policy.
|
1792
|
-
//
|
1793
|
-
// As a result of this, there are several cases to consider here:
|
1794
|
-
//
|
1795
|
-
// 1. We have no existing child policy (i.e., we have started up but
|
1796
|
-
// have not yet received a serverlist from the balancer or gone
|
1797
|
-
// into fallback mode; in this case, both child_policy_ and
|
1798
|
-
// pending_child_policy_ are null). In this case, we create a
|
1799
|
-
// new child policy and store it in child_policy_.
|
1800
|
-
//
|
1801
|
-
// 2. We have an existing child policy and have no pending child policy
|
1802
|
-
// from a previous update (i.e., either there has not been a
|
1803
|
-
// previous update that changed the policy name, or we have already
|
1804
|
-
// finished swapping in the new policy; in this case, child_policy_
|
1805
|
-
// is non-null but pending_child_policy_ is null). In this case:
|
1806
|
-
// a. If child_policy_->name() equals child_policy_name, then we
|
1807
|
-
// update the existing child policy.
|
1808
|
-
// b. If child_policy_->name() does not equal child_policy_name,
|
1809
|
-
// we create a new policy. The policy will be stored in
|
1810
|
-
// pending_child_policy_ and will later be swapped into
|
1811
|
-
// child_policy_ by the helper when the new child transitions
|
1812
|
-
// into state READY.
|
1813
|
-
//
|
1814
|
-
// 3. We have an existing child policy and have a pending child policy
|
1815
|
-
// from a previous update (i.e., a previous update set
|
1816
|
-
// pending_child_policy_ as per case 2b above and that policy has
|
1817
|
-
// not yet transitioned into state READY and been swapped into
|
1818
|
-
// child_policy_; in this case, both child_policy_ and
|
1819
|
-
// pending_child_policy_ are non-null). In this case:
|
1820
|
-
// a. If pending_child_policy_->name() equals child_policy_name,
|
1821
|
-
// then we update the existing pending child policy.
|
1822
|
-
// b. If pending_child_policy->name() does not equal
|
1823
|
-
// child_policy_name, then we create a new policy. The new
|
1824
|
-
// policy is stored in pending_child_policy_ (replacing the one
|
1825
|
-
// that was there before, which will be immediately shut down)
|
1826
|
-
// and will later be swapped into child_policy_ by the helper
|
1827
|
-
// when the new child transitions into state READY.
|
1828
|
-
const char* child_policy_name = child_policy_config_ == nullptr
|
1829
|
-
? "round_robin"
|
1830
|
-
: child_policy_config_->name();
|
1831
|
-
const bool create_policy =
|
1832
|
-
// case 1
|
1833
|
-
child_policy_ == nullptr ||
|
1834
|
-
// case 2b
|
1835
|
-
(pending_child_policy_ == nullptr &&
|
1836
|
-
strcmp(child_policy_->name(), child_policy_name) != 0) ||
|
1837
|
-
// case 3b
|
1838
|
-
(pending_child_policy_ != nullptr &&
|
1839
|
-
strcmp(pending_child_policy_->name(), child_policy_name) != 0);
|
1840
|
-
LoadBalancingPolicy* policy_to_update = nullptr;
|
1841
|
-
if (create_policy) {
|
1842
|
-
// Cases 1, 2b, and 3b: create a new child policy.
|
1843
|
-
// If child_policy_ is null, we set it (case 1), else we set
|
1844
|
-
// pending_child_policy_ (cases 2b and 3b).
|
1845
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1846
|
-
gpr_log(GPR_INFO, "[grpclb %p] Creating new %schild policy %s", this,
|
1847
|
-
child_policy_ == nullptr ? "" : "pending ", child_policy_name);
|
1848
|
-
}
|
1849
|
-
// Swap the policy into place.
|
1850
|
-
auto& lb_policy =
|
1851
|
-
child_policy_ == nullptr ? child_policy_ : pending_child_policy_;
|
1852
|
-
lb_policy = CreateChildPolicyLocked(child_policy_name, update_args.args);
|
1853
|
-
policy_to_update = lb_policy.get();
|
1854
|
-
} else {
|
1855
|
-
// Cases 2a and 3a: update an existing policy.
|
1856
|
-
// If we have a pending child policy, send the update to the pending
|
1857
|
-
// policy (case 3a), else send it to the current policy (case 2a).
|
1858
|
-
policy_to_update = pending_child_policy_ != nullptr
|
1859
|
-
? pending_child_policy_.get()
|
1860
|
-
: child_policy_.get();
|
1653
|
+
update_args.config = config_->child_policy();
|
1654
|
+
// Create child policy if needed.
|
1655
|
+
if (child_policy_ == nullptr) {
|
1656
|
+
child_policy_ = CreateChildPolicyLocked(update_args.args);
|
1861
1657
|
}
|
1862
|
-
GPR_ASSERT(policy_to_update != nullptr);
|
1863
1658
|
// Update the policy.
|
1864
1659
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
|
1865
|
-
gpr_log(GPR_INFO, "[grpclb %p] Updating
|
1866
|
-
|
1867
|
-
policy_to_update);
|
1660
|
+
gpr_log(GPR_INFO, "[grpclb %p] Updating child policy handler %p", this,
|
1661
|
+
child_policy_.get());
|
1868
1662
|
}
|
1869
|
-
|
1663
|
+
child_policy_->UpdateLocked(std::move(update_args));
|
1870
1664
|
}
|
1871
1665
|
|
1872
1666
|
//
|
@@ -1886,24 +1680,44 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
|
|
1886
1680
|
const Json& json, grpc_error** error) const override {
|
1887
1681
|
GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
|
1888
1682
|
if (json.type() == Json::Type::JSON_NULL) {
|
1889
|
-
return MakeRefCounted<GrpcLbConfig>(nullptr);
|
1683
|
+
return MakeRefCounted<GrpcLbConfig>(nullptr, "");
|
1890
1684
|
}
|
1891
1685
|
std::vector<grpc_error*> error_list;
|
1892
|
-
|
1893
|
-
|
1686
|
+
Json child_policy_config_json_tmp;
|
1687
|
+
const Json* child_policy_config_json;
|
1688
|
+
std::string service_name;
|
1689
|
+
auto it = json.object_value().find("serviceName");
|
1894
1690
|
if (it != json.object_value().end()) {
|
1895
|
-
|
1896
|
-
|
1897
|
-
|
1898
|
-
|
1899
|
-
|
1900
|
-
|
1901
|
-
error_list.push_back(
|
1902
|
-
GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
|
1691
|
+
const Json& service_name_json = it->second;
|
1692
|
+
if (service_name_json.type() != Json::Type::STRING) {
|
1693
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1694
|
+
"field:serviceName error:type should be string"));
|
1695
|
+
} else {
|
1696
|
+
service_name = service_name_json.string_value();
|
1903
1697
|
}
|
1904
1698
|
}
|
1699
|
+
it = json.object_value().find("childPolicy");
|
1700
|
+
if (it == json.object_value().end()) {
|
1701
|
+
child_policy_config_json_tmp = Json::Array{Json::Object{
|
1702
|
+
{"round_robin", Json::Object()},
|
1703
|
+
}};
|
1704
|
+
child_policy_config_json = &child_policy_config_json_tmp;
|
1705
|
+
} else {
|
1706
|
+
child_policy_config_json = &it->second;
|
1707
|
+
}
|
1708
|
+
grpc_error* parse_error = GRPC_ERROR_NONE;
|
1709
|
+
RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config =
|
1710
|
+
LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
|
1711
|
+
*child_policy_config_json, &parse_error);
|
1712
|
+
if (parse_error != GRPC_ERROR_NONE) {
|
1713
|
+
std::vector<grpc_error*> child_errors;
|
1714
|
+
child_errors.push_back(parse_error);
|
1715
|
+
error_list.push_back(
|
1716
|
+
GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
|
1717
|
+
}
|
1905
1718
|
if (error_list.empty()) {
|
1906
|
-
return MakeRefCounted<GrpcLbConfig>(std::move(
|
1719
|
+
return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config),
|
1720
|
+
std::move(service_name));
|
1907
1721
|
} else {
|
1908
1722
|
*error = GRPC_ERROR_CREATE_FROM_VECTOR("GrpcLb Parser", &error_list);
|
1909
1723
|
return nullptr;
|