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
@@ -22,98 +22,90 @@
|
|
22
22
|
|
23
23
|
#include <inttypes.h>
|
24
24
|
|
25
|
+
#include <vector>
|
26
|
+
|
27
|
+
#include "absl/strings/str_format.h"
|
28
|
+
#include "absl/strings/str_join.h"
|
29
|
+
|
25
30
|
#include <grpc/support/alloc.h>
|
26
31
|
#include <grpc/support/string_util.h>
|
27
32
|
#include "src/core/lib/gpr/string.h"
|
28
33
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
29
34
|
|
30
|
-
static void add_metadata(
|
31
|
-
|
35
|
+
static void add_metadata(const grpc_metadata* md, size_t count,
|
36
|
+
std::vector<std::string>* b) {
|
32
37
|
if (md == nullptr) {
|
33
|
-
|
38
|
+
b->push_back("(nil)");
|
34
39
|
return;
|
35
40
|
}
|
36
|
-
for (i = 0; i < count; i++) {
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
41
|
+
for (size_t i = 0; i < count; i++) {
|
42
|
+
b->push_back("\nkey=");
|
43
|
+
b->push_back(std::string(grpc_core::StringViewFromSlice(md[i].key)));
|
44
|
+
b->push_back(" value=");
|
45
|
+
char* dump = grpc_dump_slice(md[i].value, GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
46
|
+
b->push_back(dump);
|
47
|
+
gpr_free(dump);
|
43
48
|
}
|
44
49
|
}
|
45
50
|
|
46
|
-
|
47
|
-
|
48
|
-
char* out;
|
49
|
-
|
50
|
-
gpr_strvec b;
|
51
|
-
gpr_strvec_init(&b);
|
52
|
-
|
51
|
+
static std::string grpc_op_string(const grpc_op* op) {
|
52
|
+
std::vector<std::string> parts;
|
53
53
|
switch (op->op) {
|
54
54
|
case GRPC_OP_SEND_INITIAL_METADATA:
|
55
|
-
|
56
|
-
add_metadata(
|
57
|
-
op->data.send_initial_metadata.count);
|
55
|
+
parts.push_back("SEND_INITIAL_METADATA");
|
56
|
+
add_metadata(op->data.send_initial_metadata.metadata,
|
57
|
+
op->data.send_initial_metadata.count, &parts);
|
58
58
|
break;
|
59
59
|
case GRPC_OP_SEND_MESSAGE:
|
60
|
-
|
61
|
-
|
62
|
-
gpr_strvec_add(&b, tmp);
|
60
|
+
parts.push_back(absl::StrFormat("SEND_MESSAGE ptr=%p",
|
61
|
+
op->data.send_message.send_message));
|
63
62
|
break;
|
64
63
|
case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
|
65
|
-
|
64
|
+
parts.push_back("SEND_CLOSE_FROM_CLIENT");
|
66
65
|
break;
|
67
66
|
case GRPC_OP_SEND_STATUS_FROM_SERVER:
|
68
|
-
|
69
|
-
|
70
|
-
|
67
|
+
parts.push_back(
|
68
|
+
absl::StrFormat("SEND_STATUS_FROM_SERVER status=%d details=",
|
69
|
+
op->data.send_status_from_server.status));
|
71
70
|
if (op->data.send_status_from_server.status_details != nullptr) {
|
72
|
-
|
73
|
-
|
74
|
-
|
71
|
+
char* dump = grpc_dump_slice(
|
72
|
+
*op->data.send_status_from_server.status_details, GPR_DUMP_ASCII);
|
73
|
+
parts.push_back(dump);
|
74
|
+
gpr_free(dump);
|
75
75
|
} else {
|
76
|
-
|
76
|
+
parts.push_back("(null)");
|
77
77
|
}
|
78
|
-
add_metadata(
|
79
|
-
op->data.send_status_from_server.trailing_metadata_count
|
78
|
+
add_metadata(op->data.send_status_from_server.trailing_metadata,
|
79
|
+
op->data.send_status_from_server.trailing_metadata_count,
|
80
|
+
&parts);
|
80
81
|
break;
|
81
82
|
case GRPC_OP_RECV_INITIAL_METADATA:
|
82
|
-
|
83
|
-
|
84
|
-
|
83
|
+
parts.push_back(absl::StrFormat(
|
84
|
+
"RECV_INITIAL_METADATA ptr=%p",
|
85
|
+
op->data.recv_initial_metadata.recv_initial_metadata));
|
85
86
|
break;
|
86
87
|
case GRPC_OP_RECV_MESSAGE:
|
87
|
-
|
88
|
-
|
89
|
-
gpr_strvec_add(&b, tmp);
|
88
|
+
parts.push_back(absl::StrFormat("RECV_MESSAGE ptr=%p",
|
89
|
+
op->data.recv_message.recv_message));
|
90
90
|
break;
|
91
91
|
case GRPC_OP_RECV_STATUS_ON_CLIENT:
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
gpr_strvec_add(&b, tmp);
|
92
|
+
parts.push_back(absl::StrFormat(
|
93
|
+
"RECV_STATUS_ON_CLIENT metadata=%p status=%p details=%p",
|
94
|
+
op->data.recv_status_on_client.trailing_metadata,
|
95
|
+
op->data.recv_status_on_client.status,
|
96
|
+
op->data.recv_status_on_client.status_details));
|
98
97
|
break;
|
99
98
|
case GRPC_OP_RECV_CLOSE_ON_SERVER:
|
100
|
-
|
101
|
-
|
102
|
-
gpr_strvec_add(&b, tmp);
|
99
|
+
parts.push_back(absl::StrFormat("RECV_CLOSE_ON_SERVER cancelled=%p",
|
100
|
+
op->data.recv_close_on_server.cancelled));
|
103
101
|
}
|
104
|
-
|
105
|
-
gpr_strvec_destroy(&b);
|
106
|
-
|
107
|
-
return out;
|
102
|
+
return absl::StrJoin(parts, "");
|
108
103
|
}
|
109
104
|
|
110
105
|
void grpc_call_log_batch(const char* file, int line, gpr_log_severity severity,
|
111
106
|
const grpc_op* ops, size_t nops) {
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
tmp = grpc_op_string(&ops[i]);
|
116
|
-
gpr_log(file, line, severity, "ops[%" PRIuPTR "]: %s", i, tmp);
|
117
|
-
gpr_free(tmp);
|
107
|
+
for (size_t i = 0; i < nops; i++) {
|
108
|
+
gpr_log(file, line, severity, "ops[%" PRIuPTR "]: %s", i,
|
109
|
+
grpc_op_string(&ops[i]).c_str());
|
118
110
|
}
|
119
111
|
}
|
@@ -54,12 +54,6 @@
|
|
54
54
|
* (OK, Cancelled, Unknown). */
|
55
55
|
#define NUM_CACHED_STATUS_ELEMS 3
|
56
56
|
|
57
|
-
typedef struct registered_call {
|
58
|
-
grpc_mdelem path;
|
59
|
-
grpc_mdelem authority;
|
60
|
-
struct registered_call* next;
|
61
|
-
} registered_call;
|
62
|
-
|
63
57
|
static void destroy_channel(void* arg, grpc_error* error);
|
64
58
|
|
65
59
|
grpc_channel* grpc_channel_create_with_builder(
|
@@ -90,8 +84,7 @@ grpc_channel* grpc_channel_create_with_builder(
|
|
90
84
|
channel->target = target;
|
91
85
|
channel->resource_user = resource_user;
|
92
86
|
channel->is_client = grpc_channel_stack_type_is_client(channel_stack_type);
|
93
|
-
|
94
|
-
channel->registered_calls = nullptr;
|
87
|
+
channel->registration_table.Init();
|
95
88
|
|
96
89
|
gpr_atm_no_barrier_store(
|
97
90
|
&channel->call_size_estimate,
|
@@ -336,6 +329,7 @@ char* grpc_channel_get_target(grpc_channel* channel) {
|
|
336
329
|
|
337
330
|
void grpc_channel_get_info(grpc_channel* channel,
|
338
331
|
const grpc_channel_info* channel_info) {
|
332
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
339
333
|
grpc_core::ExecCtx exec_ctx;
|
340
334
|
grpc_channel_element* elem =
|
341
335
|
grpc_channel_stack_element(CHANNEL_STACK_FROM_CHANNEL(channel), 0);
|
@@ -343,6 +337,7 @@ void grpc_channel_get_info(grpc_channel* channel,
|
|
343
337
|
}
|
344
338
|
|
345
339
|
void grpc_channel_reset_connect_backoff(grpc_channel* channel) {
|
340
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
346
341
|
grpc_core::ExecCtx exec_ctx;
|
347
342
|
GRPC_API_TRACE("grpc_channel_reset_connect_backoff(channel=%p)", 1,
|
348
343
|
(channel));
|
@@ -393,6 +388,7 @@ grpc_call* grpc_channel_create_call(grpc_channel* channel,
|
|
393
388
|
grpc_slice method, const grpc_slice* host,
|
394
389
|
gpr_timespec deadline, void* reserved) {
|
395
390
|
GPR_ASSERT(!reserved);
|
391
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
396
392
|
grpc_core::ExecCtx exec_ctx;
|
397
393
|
grpc_call* call = grpc_channel_create_call_internal(
|
398
394
|
channel, parent_call, propagation_mask, cq, nullptr,
|
@@ -417,35 +413,66 @@ grpc_call* grpc_channel_create_pollset_set_call(
|
|
417
413
|
deadline);
|
418
414
|
}
|
419
415
|
|
416
|
+
namespace grpc_core {
|
417
|
+
|
418
|
+
RegisteredCall::RegisteredCall(const char* method, const char* host) {
|
419
|
+
path = grpc_mdelem_from_slices(GRPC_MDSTR_PATH,
|
420
|
+
grpc_core::ExternallyManagedSlice(method));
|
421
|
+
authority =
|
422
|
+
host ? grpc_mdelem_from_slices(GRPC_MDSTR_AUTHORITY,
|
423
|
+
grpc_core::ExternallyManagedSlice(host))
|
424
|
+
: GRPC_MDNULL;
|
425
|
+
}
|
426
|
+
|
427
|
+
// TODO(vjpai): Delete copy-constructor when allowed by all supported compilers.
|
428
|
+
RegisteredCall::RegisteredCall(const RegisteredCall& other) {
|
429
|
+
path = other.path;
|
430
|
+
authority = other.authority;
|
431
|
+
GRPC_MDELEM_REF(path);
|
432
|
+
GRPC_MDELEM_REF(authority);
|
433
|
+
}
|
434
|
+
|
435
|
+
RegisteredCall::RegisteredCall(RegisteredCall&& other) noexcept {
|
436
|
+
path = other.path;
|
437
|
+
authority = other.authority;
|
438
|
+
other.path = GRPC_MDNULL;
|
439
|
+
other.authority = GRPC_MDNULL;
|
440
|
+
}
|
441
|
+
|
442
|
+
RegisteredCall::~RegisteredCall() {
|
443
|
+
GRPC_MDELEM_UNREF(path);
|
444
|
+
GRPC_MDELEM_UNREF(authority);
|
445
|
+
}
|
446
|
+
|
447
|
+
} // namespace grpc_core
|
448
|
+
|
420
449
|
void* grpc_channel_register_call(grpc_channel* channel, const char* method,
|
421
450
|
const char* host, void* reserved) {
|
422
|
-
registered_call* rc =
|
423
|
-
static_cast<registered_call*>(gpr_malloc(sizeof(registered_call)));
|
424
451
|
GRPC_API_TRACE(
|
425
452
|
"grpc_channel_register_call(channel=%p, method=%s, host=%s, reserved=%p)",
|
426
453
|
4, (channel, method, host, reserved));
|
427
454
|
GPR_ASSERT(!reserved);
|
455
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
428
456
|
grpc_core::ExecCtx exec_ctx;
|
429
457
|
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
return rc;
|
458
|
+
grpc_core::MutexLock lock(&channel->registration_table->mu);
|
459
|
+
channel->registration_table->method_registration_attempts++;
|
460
|
+
auto key = std::make_pair(host, method);
|
461
|
+
auto rc_posn = channel->registration_table->map.find(key);
|
462
|
+
if (rc_posn != channel->registration_table->map.end()) {
|
463
|
+
return &rc_posn->second;
|
464
|
+
}
|
465
|
+
auto insertion_result = channel->registration_table->map.insert(
|
466
|
+
{key, grpc_core::RegisteredCall(method, host)});
|
467
|
+
return &insertion_result.first->second;
|
442
468
|
}
|
443
469
|
|
444
470
|
grpc_call* grpc_channel_create_registered_call(
|
445
471
|
grpc_channel* channel, grpc_call* parent_call, uint32_t propagation_mask,
|
446
472
|
grpc_completion_queue* completion_queue, void* registered_call_handle,
|
447
473
|
gpr_timespec deadline, void* reserved) {
|
448
|
-
|
474
|
+
grpc_core::RegisteredCall* rc =
|
475
|
+
static_cast<grpc_core::RegisteredCall*>(registered_call_handle);
|
449
476
|
GRPC_API_TRACE(
|
450
477
|
"grpc_channel_create_registered_call("
|
451
478
|
"channel=%p, parent_call=%p, propagation_mask=%x, completion_queue=%p, "
|
@@ -458,6 +485,7 @@ grpc_call* grpc_channel_create_registered_call(
|
|
458
485
|
registered_call_handle, deadline.tv_sec, deadline.tv_nsec,
|
459
486
|
(int)deadline.clock_type, reserved));
|
460
487
|
GPR_ASSERT(!reserved);
|
488
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
461
489
|
grpc_core::ExecCtx exec_ctx;
|
462
490
|
grpc_call* call = grpc_channel_create_call_internal(
|
463
491
|
channel, parent_call, propagation_mask, completion_queue, nullptr,
|
@@ -486,18 +514,11 @@ static void destroy_channel(void* arg, grpc_error* /*error*/) {
|
|
486
514
|
channel->channelz_node.reset();
|
487
515
|
}
|
488
516
|
grpc_channel_stack_destroy(CHANNEL_STACK_FROM_CHANNEL(channel));
|
489
|
-
|
490
|
-
registered_call* rc = channel->registered_calls;
|
491
|
-
channel->registered_calls = rc->next;
|
492
|
-
GRPC_MDELEM_UNREF(rc->path);
|
493
|
-
GRPC_MDELEM_UNREF(rc->authority);
|
494
|
-
gpr_free(rc);
|
495
|
-
}
|
517
|
+
channel->registration_table.Destroy();
|
496
518
|
if (channel->resource_user != nullptr) {
|
497
519
|
grpc_resource_user_free(channel->resource_user,
|
498
520
|
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
499
521
|
}
|
500
|
-
gpr_mu_destroy(&channel->registered_call_mu);
|
501
522
|
gpr_free(channel->target);
|
502
523
|
gpr_free(channel);
|
503
524
|
// See comment in grpc_channel_create() for why we do this.
|
@@ -516,6 +537,7 @@ void grpc_channel_destroy_internal(grpc_channel* channel) {
|
|
516
537
|
}
|
517
538
|
|
518
539
|
void grpc_channel_destroy(grpc_channel* channel) {
|
540
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
519
541
|
grpc_core::ExecCtx exec_ctx;
|
520
542
|
grpc_channel_destroy_internal(channel);
|
521
543
|
}
|
@@ -21,10 +21,14 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include <map>
|
25
|
+
|
24
26
|
#include "src/core/lib/channel/channel_stack.h"
|
25
27
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
26
28
|
#include "src/core/lib/channel/channelz.h"
|
29
|
+
#include "src/core/lib/gprpp/manual_constructor.h"
|
27
30
|
#include "src/core/lib/surface/channel_stack_type.h"
|
31
|
+
#include "src/core/lib/transport/metadata.h"
|
28
32
|
|
29
33
|
grpc_channel* grpc_channel_create(const char* target,
|
30
34
|
const grpc_channel_args* args,
|
@@ -62,7 +66,30 @@ grpc_core::channelz::ChannelNode* grpc_channel_get_channelz_node(
|
|
62
66
|
size_t grpc_channel_get_call_size_estimate(grpc_channel* channel);
|
63
67
|
void grpc_channel_update_call_size_estimate(grpc_channel* channel, size_t size);
|
64
68
|
|
65
|
-
|
69
|
+
namespace grpc_core {
|
70
|
+
|
71
|
+
struct RegisteredCall {
|
72
|
+
grpc_mdelem path;
|
73
|
+
grpc_mdelem authority;
|
74
|
+
|
75
|
+
explicit RegisteredCall(const char* method, const char* host);
|
76
|
+
// TODO(vjpai): delete copy constructor once all supported compilers allow
|
77
|
+
// std::map value_type to be MoveConstructible.
|
78
|
+
RegisteredCall(const RegisteredCall& other);
|
79
|
+
RegisteredCall(RegisteredCall&& other) noexcept;
|
80
|
+
|
81
|
+
~RegisteredCall();
|
82
|
+
};
|
83
|
+
|
84
|
+
struct CallRegistrationTable {
|
85
|
+
grpc_core::Mutex mu;
|
86
|
+
std::map<std::pair<const char*, const char*>, RegisteredCall>
|
87
|
+
map /* GUARDED_BY(mu) */;
|
88
|
+
int method_registration_attempts /* GUARDED_BY(mu) */ = 0;
|
89
|
+
};
|
90
|
+
|
91
|
+
} // namespace grpc_core
|
92
|
+
|
66
93
|
struct grpc_channel {
|
67
94
|
int is_client;
|
68
95
|
grpc_compression_options compression_options;
|
@@ -70,9 +97,13 @@ struct grpc_channel {
|
|
70
97
|
gpr_atm call_size_estimate;
|
71
98
|
grpc_resource_user* resource_user;
|
72
99
|
|
73
|
-
|
74
|
-
|
75
|
-
|
100
|
+
// TODO(vjpai): Once the grpc_channel is allocated via new rather than malloc,
|
101
|
+
// expand the members of the CallRegistrationTable directly into
|
102
|
+
// the grpc_channel. For now it is kept separate so that all the
|
103
|
+
// manual constructing can be done with a single call rather than
|
104
|
+
// a separate manual construction for each field.
|
105
|
+
grpc_core::ManualConstructor<grpc_core::CallRegistrationTable>
|
106
|
+
registration_table;
|
76
107
|
grpc_core::RefCountedPtr<grpc_core::channelz::ChannelNode> channelz_node;
|
77
108
|
|
78
109
|
char* target;
|
@@ -28,13 +28,12 @@
|
|
28
28
|
#include "src/core/lib/surface/api_trace.h"
|
29
29
|
#include "src/core/lib/surface/completion_queue.h"
|
30
30
|
|
31
|
-
|
31
|
+
struct ping_result {
|
32
32
|
grpc_closure closure;
|
33
33
|
void* tag;
|
34
34
|
grpc_completion_queue* cq;
|
35
35
|
grpc_cq_completion completion_storage;
|
36
|
-
}
|
37
|
-
|
36
|
+
};
|
38
37
|
static void ping_destroy(void* arg, grpc_cq_completion* /*storage*/) {
|
39
38
|
gpr_free(arg);
|
40
39
|
}
|
@@ -23,6 +23,11 @@
|
|
23
23
|
#include <stdio.h>
|
24
24
|
#include <string.h>
|
25
25
|
|
26
|
+
#include <vector>
|
27
|
+
|
28
|
+
#include "absl/strings/str_format.h"
|
29
|
+
#include "absl/strings/str_join.h"
|
30
|
+
|
26
31
|
#include <grpc/support/alloc.h>
|
27
32
|
#include <grpc/support/atm.h>
|
28
33
|
#include <grpc/support/log.h>
|
@@ -34,6 +39,7 @@
|
|
34
39
|
#include "src/core/lib/gpr/string.h"
|
35
40
|
#include "src/core/lib/gpr/tls.h"
|
36
41
|
#include "src/core/lib/gprpp/atomic.h"
|
42
|
+
#include "src/core/lib/iomgr/closure.h"
|
37
43
|
#include "src/core/lib/iomgr/executor.h"
|
38
44
|
#include "src/core/lib/iomgr/pollset.h"
|
39
45
|
#include "src/core/lib/iomgr/timer.h"
|
@@ -56,12 +62,11 @@ namespace {
|
|
56
62
|
GPR_TLS_DECL(g_cached_event);
|
57
63
|
GPR_TLS_DECL(g_cached_cq);
|
58
64
|
|
59
|
-
|
65
|
+
struct plucker {
|
60
66
|
grpc_pollset_worker** worker;
|
61
67
|
void* tag;
|
62
|
-
}
|
63
|
-
|
64
|
-
typedef struct {
|
68
|
+
};
|
69
|
+
struct cq_poller_vtable {
|
65
70
|
bool can_get_pollset;
|
66
71
|
bool can_listen;
|
67
72
|
size_t (*size)(void);
|
@@ -72,8 +77,7 @@ typedef struct {
|
|
72
77
|
grpc_millis deadline);
|
73
78
|
void (*shutdown)(grpc_pollset* pollset, grpc_closure* closure);
|
74
79
|
void (*destroy)(grpc_pollset* pollset);
|
75
|
-
}
|
76
|
-
|
80
|
+
};
|
77
81
|
typedef struct non_polling_worker {
|
78
82
|
gpr_cv cv;
|
79
83
|
bool kicked;
|
@@ -81,13 +85,12 @@ typedef struct non_polling_worker {
|
|
81
85
|
struct non_polling_worker* prev;
|
82
86
|
} non_polling_worker;
|
83
87
|
|
84
|
-
|
88
|
+
struct non_polling_poller {
|
85
89
|
gpr_mu mu;
|
86
90
|
bool kicked_without_poller;
|
87
91
|
non_polling_worker* root;
|
88
92
|
grpc_closure* shutdown;
|
89
|
-
}
|
90
|
-
|
93
|
+
};
|
91
94
|
size_t non_polling_poller_size(void) { return sizeof(non_polling_poller); }
|
92
95
|
|
93
96
|
void non_polling_poller_init(grpc_pollset* pollset, gpr_mu** mu) {
|
@@ -206,6 +209,9 @@ struct cq_vtable {
|
|
206
209
|
void* reserved);
|
207
210
|
grpc_event (*pluck)(grpc_completion_queue* cq, void* tag,
|
208
211
|
gpr_timespec deadline, void* reserved);
|
212
|
+
// TODO(vjpai): Remove proxy_pollset once callback_alternative no longer
|
213
|
+
// needed.
|
214
|
+
grpc_pollset* (*proxy_pollset)(grpc_completion_queue* cq);
|
209
215
|
};
|
210
216
|
|
211
217
|
namespace {
|
@@ -307,7 +313,7 @@ struct cq_pluck_data {
|
|
307
313
|
};
|
308
314
|
|
309
315
|
struct cq_callback_data {
|
310
|
-
cq_callback_data(
|
316
|
+
explicit cq_callback_data(
|
311
317
|
grpc_experimental_completion_queue_functor* shutdown_callback)
|
312
318
|
: shutdown_callback(shutdown_callback) {}
|
313
319
|
|
@@ -325,17 +331,88 @@ struct cq_callback_data {
|
|
325
331
|
Initial count is dropped by grpc_completion_queue_shutdown. */
|
326
332
|
grpc_core::Atomic<intptr_t> pending_events{1};
|
327
333
|
|
328
|
-
/**
|
329
|
-
|
330
|
-
|
334
|
+
/** 0 initially. 1 once we initiated shutdown */
|
335
|
+
bool shutdown_called = false;
|
336
|
+
|
337
|
+
/** A callback that gets invoked when the CQ completes shutdown */
|
338
|
+
grpc_experimental_completion_queue_functor* shutdown_callback;
|
339
|
+
};
|
340
|
+
|
341
|
+
// TODO(vjpai): Remove all callback_alternative variants when event manager is
|
342
|
+
// the only supported poller.
|
343
|
+
struct cq_callback_alternative_data {
|
344
|
+
explicit cq_callback_alternative_data(
|
345
|
+
grpc_experimental_completion_queue_functor* shutdown_callback)
|
346
|
+
: implementation(SharedNextableCQ()),
|
347
|
+
shutdown_callback(shutdown_callback) {}
|
348
|
+
|
349
|
+
/* This just points to a single shared nextable CQ */
|
350
|
+
grpc_completion_queue* const implementation;
|
351
|
+
|
352
|
+
/** Number of outstanding events (+1 if not shut down)
|
353
|
+
Initial count is dropped by grpc_completion_queue_shutdown */
|
354
|
+
grpc_core::Atomic<intptr_t> pending_events{1};
|
331
355
|
|
332
356
|
/** 0 initially. 1 once we initiated shutdown */
|
333
357
|
bool shutdown_called = false;
|
334
358
|
|
335
359
|
/** A callback that gets invoked when the CQ completes shutdown */
|
336
360
|
grpc_experimental_completion_queue_functor* shutdown_callback;
|
361
|
+
|
362
|
+
static grpc_completion_queue* SharedNextableCQ() {
|
363
|
+
grpc_core::MutexLock lock(&*shared_cq_next_mu);
|
364
|
+
|
365
|
+
if (shared_cq_next == nullptr) {
|
366
|
+
shared_cq_next = grpc_completion_queue_create_for_next(nullptr);
|
367
|
+
int num_nexting_threads = GPR_CLAMP(gpr_cpu_num_cores(), 1, 32);
|
368
|
+
threads_remaining.Store(num_nexting_threads,
|
369
|
+
grpc_core::MemoryOrder::RELEASE);
|
370
|
+
for (int i = 0; i < num_nexting_threads; i++) {
|
371
|
+
grpc_core::Executor::Run(
|
372
|
+
GRPC_CLOSURE_CREATE(
|
373
|
+
[](void* arg, grpc_error* /*error*/) {
|
374
|
+
grpc_completion_queue* cq =
|
375
|
+
static_cast<grpc_completion_queue*>(arg);
|
376
|
+
while (true) {
|
377
|
+
grpc_event event = grpc_completion_queue_next(
|
378
|
+
cq, gpr_inf_future(GPR_CLOCK_REALTIME), nullptr);
|
379
|
+
if (event.type == GRPC_QUEUE_SHUTDOWN) {
|
380
|
+
break;
|
381
|
+
}
|
382
|
+
GPR_DEBUG_ASSERT(event.type == GRPC_OP_COMPLETE);
|
383
|
+
// We can always execute the callback inline rather than
|
384
|
+
// pushing it to another Executor thread because this
|
385
|
+
// thread is definitely running on an executor, does not
|
386
|
+
// hold any application locks before executing the callback,
|
387
|
+
// and cannot be entered recursively.
|
388
|
+
auto* functor = static_cast<
|
389
|
+
grpc_experimental_completion_queue_functor*>(event.tag);
|
390
|
+
functor->functor_run(functor, event.success);
|
391
|
+
}
|
392
|
+
if (threads_remaining.FetchSub(
|
393
|
+
1, grpc_core::MemoryOrder::ACQ_REL) == 1) {
|
394
|
+
grpc_completion_queue_destroy(cq);
|
395
|
+
}
|
396
|
+
},
|
397
|
+
shared_cq_next, nullptr),
|
398
|
+
GRPC_ERROR_NONE, grpc_core::ExecutorType::DEFAULT,
|
399
|
+
grpc_core::ExecutorJobType::LONG);
|
400
|
+
}
|
401
|
+
}
|
402
|
+
return shared_cq_next;
|
403
|
+
}
|
404
|
+
// Use manually-constructed Mutex to avoid static construction issues
|
405
|
+
static grpc_core::ManualConstructor<grpc_core::Mutex> shared_cq_next_mu;
|
406
|
+
static grpc_completion_queue*
|
407
|
+
shared_cq_next; // GUARDED_BY(shared_cq_next_mu)
|
408
|
+
static grpc_core::Atomic<int> threads_remaining;
|
337
409
|
};
|
338
410
|
|
411
|
+
grpc_core::ManualConstructor<grpc_core::Mutex>
|
412
|
+
cq_callback_alternative_data::shared_cq_next_mu;
|
413
|
+
grpc_completion_queue* cq_callback_alternative_data::shared_cq_next = nullptr;
|
414
|
+
grpc_core::Atomic<int> cq_callback_alternative_data::threads_remaining{0};
|
415
|
+
|
339
416
|
} // namespace
|
340
417
|
|
341
418
|
/* Completion queue structure */
|
@@ -348,6 +425,12 @@ struct grpc_completion_queue {
|
|
348
425
|
const cq_vtable* vtable;
|
349
426
|
const cq_poller_vtable* poller_vtable;
|
350
427
|
|
428
|
+
// The pollset entry is allowed to enable proxy CQs like the
|
429
|
+
// callback_alternative.
|
430
|
+
// TODO(vjpai): Consider removing pollset and reverting to previous
|
431
|
+
// calculation of pollset once callback_alternative is no longer needed.
|
432
|
+
grpc_pollset* pollset;
|
433
|
+
|
351
434
|
#ifndef NDEBUG
|
352
435
|
void** outstanding_tags;
|
353
436
|
size_t outstanding_tag_count;
|
@@ -362,13 +445,17 @@ struct grpc_completion_queue {
|
|
362
445
|
static void cq_finish_shutdown_next(grpc_completion_queue* cq);
|
363
446
|
static void cq_finish_shutdown_pluck(grpc_completion_queue* cq);
|
364
447
|
static void cq_finish_shutdown_callback(grpc_completion_queue* cq);
|
448
|
+
static void cq_finish_shutdown_callback_alternative(grpc_completion_queue* cq);
|
365
449
|
static void cq_shutdown_next(grpc_completion_queue* cq);
|
366
450
|
static void cq_shutdown_pluck(grpc_completion_queue* cq);
|
367
451
|
static void cq_shutdown_callback(grpc_completion_queue* cq);
|
452
|
+
static void cq_shutdown_callback_alternative(grpc_completion_queue* cq);
|
368
453
|
|
369
454
|
static bool cq_begin_op_for_next(grpc_completion_queue* cq, void* tag);
|
370
455
|
static bool cq_begin_op_for_pluck(grpc_completion_queue* cq, void* tag);
|
371
456
|
static bool cq_begin_op_for_callback(grpc_completion_queue* cq, void* tag);
|
457
|
+
static bool cq_begin_op_for_callback_alternative(grpc_completion_queue* cq,
|
458
|
+
void* tag);
|
372
459
|
|
373
460
|
// A cq_end_op function is called when an operation on a given CQ with
|
374
461
|
// a given tag has completed. The storage argument is a reference to the
|
@@ -391,12 +478,20 @@ static void cq_end_op_for_callback(
|
|
391
478
|
void (*done)(void* done_arg, grpc_cq_completion* storage), void* done_arg,
|
392
479
|
grpc_cq_completion* storage, bool internal);
|
393
480
|
|
481
|
+
static void cq_end_op_for_callback_alternative(
|
482
|
+
grpc_completion_queue* cq, void* tag, grpc_error* error,
|
483
|
+
void (*done)(void* done_arg, grpc_cq_completion* storage), void* done_arg,
|
484
|
+
grpc_cq_completion* storage, bool internal);
|
485
|
+
|
394
486
|
static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
395
487
|
void* reserved);
|
396
488
|
|
397
489
|
static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
398
490
|
gpr_timespec deadline, void* reserved);
|
399
491
|
|
492
|
+
static grpc_pollset* cq_proxy_pollset_for_callback_alternative(
|
493
|
+
grpc_completion_queue* cq);
|
494
|
+
|
400
495
|
// Note that cq_init_next and cq_init_pluck do not use the shutdown_callback
|
401
496
|
static void cq_init_next(
|
402
497
|
void* data, grpc_experimental_completion_queue_functor* shutdown_callback);
|
@@ -404,41 +499,50 @@ static void cq_init_pluck(
|
|
404
499
|
void* data, grpc_experimental_completion_queue_functor* shutdown_callback);
|
405
500
|
static void cq_init_callback(
|
406
501
|
void* data, grpc_experimental_completion_queue_functor* shutdown_callback);
|
502
|
+
// poller becomes only option.
|
503
|
+
static void cq_init_callback_alternative(
|
504
|
+
void* data, grpc_experimental_completion_queue_functor* shutdown_callback);
|
407
505
|
static void cq_destroy_next(void* data);
|
408
506
|
static void cq_destroy_pluck(void* data);
|
409
507
|
static void cq_destroy_callback(void* data);
|
508
|
+
static void cq_destroy_callback_alternative(void* data);
|
410
509
|
|
411
510
|
/* Completion queue vtables based on the completion-type */
|
412
|
-
|
511
|
+
// TODO(vjpai): Make this const again once we stop needing callback_alternative
|
512
|
+
static cq_vtable g_polling_cq_vtable[] = {
|
413
513
|
/* GRPC_CQ_NEXT */
|
414
514
|
{GRPC_CQ_NEXT, sizeof(cq_next_data), cq_init_next, cq_shutdown_next,
|
415
515
|
cq_destroy_next, cq_begin_op_for_next, cq_end_op_for_next, cq_next,
|
416
|
-
nullptr},
|
516
|
+
nullptr, nullptr},
|
417
517
|
/* GRPC_CQ_PLUCK */
|
418
518
|
{GRPC_CQ_PLUCK, sizeof(cq_pluck_data), cq_init_pluck, cq_shutdown_pluck,
|
419
519
|
cq_destroy_pluck, cq_begin_op_for_pluck, cq_end_op_for_pluck, nullptr,
|
420
|
-
cq_pluck},
|
520
|
+
cq_pluck, nullptr},
|
421
521
|
/* GRPC_CQ_CALLBACK */
|
422
522
|
{GRPC_CQ_CALLBACK, sizeof(cq_callback_data), cq_init_callback,
|
423
523
|
cq_shutdown_callback, cq_destroy_callback, cq_begin_op_for_callback,
|
424
|
-
cq_end_op_for_callback, nullptr, nullptr},
|
524
|
+
cq_end_op_for_callback, nullptr, nullptr, nullptr},
|
425
525
|
};
|
426
526
|
|
527
|
+
// Separate vtable for non-polling cqs, assign at init
|
528
|
+
static cq_vtable g_nonpolling_cq_vtable[sizeof(g_polling_cq_vtable) /
|
529
|
+
sizeof(g_polling_cq_vtable[0])];
|
530
|
+
|
427
531
|
#define DATA_FROM_CQ(cq) ((void*)(cq + 1))
|
428
|
-
#define
|
532
|
+
#define INLINE_POLLSET_FROM_CQ(cq) \
|
429
533
|
((grpc_pollset*)(cq->vtable->data_size + (char*)DATA_FROM_CQ(cq)))
|
534
|
+
#define POLLSET_FROM_CQ(cq) (cq->pollset)
|
430
535
|
|
431
536
|
grpc_core::TraceFlag grpc_cq_pluck_trace(false, "queue_pluck");
|
432
537
|
|
433
|
-
#define GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, event)
|
434
|
-
do {
|
435
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_api_trace) &&
|
436
|
-
(GRPC_TRACE_FLAG_ENABLED(grpc_cq_pluck_trace) ||
|
437
|
-
(event)->type != GRPC_QUEUE_TIMEOUT)) {
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
} \
|
538
|
+
#define GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, event) \
|
539
|
+
do { \
|
540
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_api_trace) && \
|
541
|
+
(GRPC_TRACE_FLAG_ENABLED(grpc_cq_pluck_trace) || \
|
542
|
+
(event)->type != GRPC_QUEUE_TIMEOUT)) { \
|
543
|
+
gpr_log(GPR_INFO, "RETURN_EVENT[%p]: %s", cq, \
|
544
|
+
grpc_event_string(event).c_str()); \
|
545
|
+
} \
|
442
546
|
} while (0)
|
443
547
|
|
444
548
|
static void on_pollset_shutdown_done(void* cq, grpc_error* error);
|
@@ -446,6 +550,46 @@ static void on_pollset_shutdown_done(void* cq, grpc_error* error);
|
|
446
550
|
void grpc_cq_global_init() {
|
447
551
|
gpr_tls_init(&g_cached_event);
|
448
552
|
gpr_tls_init(&g_cached_cq);
|
553
|
+
g_nonpolling_cq_vtable[GRPC_CQ_NEXT] = g_polling_cq_vtable[GRPC_CQ_NEXT];
|
554
|
+
g_nonpolling_cq_vtable[GRPC_CQ_PLUCK] = g_polling_cq_vtable[GRPC_CQ_PLUCK];
|
555
|
+
g_nonpolling_cq_vtable[GRPC_CQ_CALLBACK] =
|
556
|
+
g_polling_cq_vtable[GRPC_CQ_CALLBACK];
|
557
|
+
}
|
558
|
+
|
559
|
+
// TODO(vjpai): Remove when callback_alternative is no longer needed
|
560
|
+
void grpc_cq_init() {
|
561
|
+
// If the iomgr runs in the background, we can use the preferred callback CQ.
|
562
|
+
// If the iomgr is non-polling, we cannot use the alternative callback CQ.
|
563
|
+
if (!grpc_iomgr_run_in_background() && !grpc_iomgr_non_polling()) {
|
564
|
+
cq_callback_alternative_data::shared_cq_next_mu.Init();
|
565
|
+
g_polling_cq_vtable[GRPC_CQ_CALLBACK] = {
|
566
|
+
GRPC_CQ_CALLBACK,
|
567
|
+
sizeof(cq_callback_alternative_data),
|
568
|
+
cq_init_callback_alternative,
|
569
|
+
cq_shutdown_callback_alternative,
|
570
|
+
cq_destroy_callback_alternative,
|
571
|
+
cq_begin_op_for_callback_alternative,
|
572
|
+
cq_end_op_for_callback_alternative,
|
573
|
+
nullptr,
|
574
|
+
nullptr,
|
575
|
+
cq_proxy_pollset_for_callback_alternative};
|
576
|
+
}
|
577
|
+
}
|
578
|
+
|
579
|
+
// TODO(vjpai): Remove when callback_alternative is no longer needed
|
580
|
+
void grpc_cq_shutdown() {
|
581
|
+
if (!grpc_iomgr_run_in_background() && !grpc_iomgr_non_polling()) {
|
582
|
+
{
|
583
|
+
grpc_core::MutexLock lock(
|
584
|
+
&*cq_callback_alternative_data::shared_cq_next_mu);
|
585
|
+
if (cq_callback_alternative_data::shared_cq_next != nullptr) {
|
586
|
+
grpc_completion_queue_shutdown(
|
587
|
+
cq_callback_alternative_data::shared_cq_next);
|
588
|
+
}
|
589
|
+
cq_callback_alternative_data::shared_cq_next = nullptr;
|
590
|
+
}
|
591
|
+
cq_callback_alternative_data::shared_cq_next_mu.Destroy();
|
592
|
+
}
|
449
593
|
}
|
450
594
|
|
451
595
|
void grpc_completion_queue_thread_local_cache_init(grpc_completion_queue* cq) {
|
@@ -524,7 +668,9 @@ grpc_completion_queue* grpc_completion_queue_create_internal(
|
|
524
668
|
"polling_type=%d)",
|
525
669
|
2, (completion_type, polling_type));
|
526
670
|
|
527
|
-
const cq_vtable* vtable =
|
671
|
+
const cq_vtable* vtable = (polling_type == GRPC_CQ_NON_POLLING)
|
672
|
+
? &g_nonpolling_cq_vtable[completion_type]
|
673
|
+
: &g_polling_cq_vtable[completion_type];
|
528
674
|
const cq_poller_vtable* poller_vtable =
|
529
675
|
&g_poller_vtable_by_poller_type[polling_type];
|
530
676
|
|
@@ -541,9 +687,18 @@ grpc_completion_queue* grpc_completion_queue_create_internal(
|
|
541
687
|
/* One for destroy(), one for pollset_shutdown */
|
542
688
|
new (&cq->owning_refs) grpc_core::RefCount(2);
|
543
689
|
|
544
|
-
poller_vtable->init(POLLSET_FROM_CQ(cq), &cq->mu);
|
545
690
|
vtable->init(DATA_FROM_CQ(cq), shutdown_callback);
|
546
691
|
|
692
|
+
// TODO(vjpai): When callback_alternative is no longer needed, cq->pollset can
|
693
|
+
// be removed and the nullptr proxy_pollset value below can be the definition
|
694
|
+
// of POLLSET_FROM_CQ.
|
695
|
+
cq->pollset = cq->vtable->proxy_pollset == nullptr
|
696
|
+
? INLINE_POLLSET_FROM_CQ(cq)
|
697
|
+
: cq->vtable->proxy_pollset(cq);
|
698
|
+
// Init the inline pollset. If a proxy CQ is used, the proxy pollset will be
|
699
|
+
// init'ed in its CQ init.
|
700
|
+
cq->poller_vtable->init(INLINE_POLLSET_FROM_CQ(cq), &cq->mu);
|
701
|
+
|
547
702
|
GRPC_CLOSURE_INIT(&cq->pollset_shutdown_done, on_pollset_shutdown_done, cq,
|
548
703
|
grpc_schedule_on_exec_ctx);
|
549
704
|
return cq;
|
@@ -581,6 +736,17 @@ static void cq_destroy_callback(void* data) {
|
|
581
736
|
cqd->~cq_callback_data();
|
582
737
|
}
|
583
738
|
|
739
|
+
static void cq_init_callback_alternative(
|
740
|
+
void* data, grpc_experimental_completion_queue_functor* shutdown_callback) {
|
741
|
+
new (data) cq_callback_alternative_data(shutdown_callback);
|
742
|
+
}
|
743
|
+
|
744
|
+
static void cq_destroy_callback_alternative(void* data) {
|
745
|
+
cq_callback_alternative_data* cqd =
|
746
|
+
static_cast<cq_callback_alternative_data*>(data);
|
747
|
+
cqd->~cq_callback_alternative_data();
|
748
|
+
}
|
749
|
+
|
584
750
|
grpc_cq_completion_type grpc_get_cq_completion_type(grpc_completion_queue* cq) {
|
585
751
|
return cq->vtable->cq_completion_type;
|
586
752
|
}
|
@@ -621,7 +787,9 @@ void grpc_cq_internal_unref(grpc_completion_queue* cq) {
|
|
621
787
|
#endif
|
622
788
|
if (GPR_UNLIKELY(cq->owning_refs.Unref(debug_location, reason))) {
|
623
789
|
cq->vtable->destroy(DATA_FROM_CQ(cq));
|
624
|
-
|
790
|
+
// Only destroy the inlined pollset. If a proxy CQ is used, the proxy
|
791
|
+
// pollset will be destroyed by the proxy CQ.
|
792
|
+
cq->poller_vtable->destroy(INLINE_POLLSET_FROM_CQ(cq));
|
625
793
|
#ifndef NDEBUG
|
626
794
|
gpr_free(cq->outstanding_tags);
|
627
795
|
#endif
|
@@ -672,6 +840,14 @@ static bool cq_begin_op_for_callback(grpc_completion_queue* cq, void* /*tag*/) {
|
|
672
840
|
return cqd->pending_events.IncrementIfNonzero();
|
673
841
|
}
|
674
842
|
|
843
|
+
static bool cq_begin_op_for_callback_alternative(grpc_completion_queue* cq,
|
844
|
+
void* tag) {
|
845
|
+
cq_callback_alternative_data* cqd =
|
846
|
+
static_cast<cq_callback_alternative_data*> DATA_FROM_CQ(cq);
|
847
|
+
return grpc_cq_begin_op(cqd->implementation, tag) &&
|
848
|
+
cqd->pending_events.IncrementIfNonzero();
|
849
|
+
}
|
850
|
+
|
675
851
|
bool grpc_cq_begin_op(grpc_completion_queue* cq, void* tag) {
|
676
852
|
#ifndef NDEBUG
|
677
853
|
gpr_mu_lock(cq->mu);
|
@@ -835,7 +1011,7 @@ static void cq_end_op_for_pluck(
|
|
835
1011
|
GRPC_ERROR_UNREF(error);
|
836
1012
|
}
|
837
1013
|
|
838
|
-
|
1014
|
+
void functor_callback(void* arg, grpc_error* error) {
|
839
1015
|
auto* functor = static_cast<grpc_experimental_completion_queue_functor*>(arg);
|
840
1016
|
functor->functor_run(functor, error == GRPC_ERROR_NONE);
|
841
1017
|
}
|
@@ -869,13 +1045,19 @@ static void cq_end_op_for_callback(
|
|
869
1045
|
|
870
1046
|
cq_check_tag(cq, tag, true); /* Used in debug builds only */
|
871
1047
|
|
872
|
-
cqd->things_queued_ever.FetchAdd(1, grpc_core::MemoryOrder::RELAXED);
|
873
1048
|
if (cqd->pending_events.FetchSub(1, grpc_core::MemoryOrder::ACQ_REL) == 1) {
|
874
1049
|
cq_finish_shutdown_callback(cq);
|
875
1050
|
}
|
876
1051
|
|
1052
|
+
// If possible, schedule the callback onto an existing thread-local
|
1053
|
+
// ApplicationCallbackExecCtx, which is a work queue. This is possible for:
|
1054
|
+
// 1. The callback is internally-generated and there is an ACEC available
|
1055
|
+
// 2. The callback is marked inlineable and there is an ACEC available
|
1056
|
+
// 3. We are already running in a background poller thread (which always has
|
1057
|
+
// an ACEC available at the base of the stack).
|
877
1058
|
auto* functor = static_cast<grpc_experimental_completion_queue_functor*>(tag);
|
878
|
-
if (internal || functor->inlineable
|
1059
|
+
if (((internal || functor->inlineable) &&
|
1060
|
+
grpc_core::ApplicationCallbackExecCtx::Available()) ||
|
879
1061
|
grpc_iomgr_is_any_background_poller_thread()) {
|
880
1062
|
grpc_core::ApplicationCallbackExecCtx::Enqueue(functor,
|
881
1063
|
(error == GRPC_ERROR_NONE));
|
@@ -889,6 +1071,40 @@ static void cq_end_op_for_callback(
|
|
889
1071
|
GRPC_CLOSURE_CREATE(functor_callback, functor, nullptr), error);
|
890
1072
|
}
|
891
1073
|
|
1074
|
+
static void cq_end_op_for_callback_alternative(
|
1075
|
+
grpc_completion_queue* cq, void* tag, grpc_error* error,
|
1076
|
+
void (*done)(void* done_arg, grpc_cq_completion* storage), void* done_arg,
|
1077
|
+
grpc_cq_completion* storage, bool internal) {
|
1078
|
+
GPR_TIMER_SCOPE("cq_end_op_for_callback_alternative", 0);
|
1079
|
+
|
1080
|
+
cq_callback_alternative_data* cqd =
|
1081
|
+
static_cast<cq_callback_alternative_data*> DATA_FROM_CQ(cq);
|
1082
|
+
|
1083
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_api_trace) ||
|
1084
|
+
(GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures) &&
|
1085
|
+
error != GRPC_ERROR_NONE)) {
|
1086
|
+
const char* errmsg = grpc_error_string(error);
|
1087
|
+
GRPC_API_TRACE(
|
1088
|
+
"cq_end_op_for_callback_alternative(cq=%p, tag=%p, error=%s, "
|
1089
|
+
"done=%p, done_arg=%p, storage=%p)",
|
1090
|
+
6, (cq, tag, errmsg, done, done_arg, storage));
|
1091
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures) &&
|
1092
|
+
error != GRPC_ERROR_NONE) {
|
1093
|
+
gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
|
1094
|
+
}
|
1095
|
+
}
|
1096
|
+
|
1097
|
+
// Pass through the actual work to the internal nextable CQ
|
1098
|
+
grpc_cq_end_op(cqd->implementation, tag, error, done, done_arg, storage,
|
1099
|
+
internal);
|
1100
|
+
|
1101
|
+
cq_check_tag(cq, tag, true); /* Used in debug builds only */
|
1102
|
+
|
1103
|
+
if (cqd->pending_events.FetchSub(1, grpc_core::MemoryOrder::ACQ_REL) == 1) {
|
1104
|
+
cq_finish_shutdown_callback_alternative(cq);
|
1105
|
+
}
|
1106
|
+
}
|
1107
|
+
|
892
1108
|
void grpc_cq_end_op(grpc_completion_queue* cq, void* tag, grpc_error* error,
|
893
1109
|
void (*done)(void* done_arg, grpc_cq_completion* storage),
|
894
1110
|
void* done_arg, grpc_cq_completion* storage,
|
@@ -896,15 +1112,21 @@ void grpc_cq_end_op(grpc_completion_queue* cq, void* tag, grpc_error* error,
|
|
896
1112
|
cq->vtable->end_op(cq, tag, error, done, done_arg, storage, internal);
|
897
1113
|
}
|
898
1114
|
|
899
|
-
|
1115
|
+
static grpc_pollset* cq_proxy_pollset_for_callback_alternative(
|
1116
|
+
grpc_completion_queue* cq) {
|
1117
|
+
cq_callback_alternative_data* cqd =
|
1118
|
+
static_cast<cq_callback_alternative_data*>(DATA_FROM_CQ(cq));
|
1119
|
+
return POLLSET_FROM_CQ(cqd->implementation);
|
1120
|
+
}
|
1121
|
+
|
1122
|
+
struct cq_is_finished_arg {
|
900
1123
|
gpr_atm last_seen_things_queued_ever;
|
901
1124
|
grpc_completion_queue* cq;
|
902
1125
|
grpc_millis deadline;
|
903
1126
|
grpc_cq_completion* stolen_completion;
|
904
1127
|
void* tag; /* for pluck */
|
905
1128
|
bool first_loop;
|
906
|
-
}
|
907
|
-
|
1129
|
+
};
|
908
1130
|
class ExecCtxNext : public grpc_core::ExecCtx {
|
909
1131
|
public:
|
910
1132
|
ExecCtxNext(void* arg) : ExecCtx(0), check_ready_to_finish_arg_(arg) {}
|
@@ -944,21 +1166,14 @@ class ExecCtxNext : public grpc_core::ExecCtx {
|
|
944
1166
|
#ifndef NDEBUG
|
945
1167
|
static void dump_pending_tags(grpc_completion_queue* cq) {
|
946
1168
|
if (!GRPC_TRACE_FLAG_ENABLED(grpc_trace_pending_tags)) return;
|
947
|
-
|
948
|
-
|
949
|
-
gpr_strvec_init(&v);
|
950
|
-
gpr_strvec_add(&v, gpr_strdup("PENDING TAGS:"));
|
1169
|
+
std::vector<std::string> parts;
|
1170
|
+
parts.push_back("PENDING TAGS:");
|
951
1171
|
gpr_mu_lock(cq->mu);
|
952
1172
|
for (size_t i = 0; i < cq->outstanding_tag_count; i++) {
|
953
|
-
|
954
|
-
gpr_asprintf(&s, " %p", cq->outstanding_tags[i]);
|
955
|
-
gpr_strvec_add(&v, s);
|
1173
|
+
parts.push_back(absl::StrFormat(" %p", cq->outstanding_tags[i]));
|
956
1174
|
}
|
957
1175
|
gpr_mu_unlock(cq->mu);
|
958
|
-
|
959
|
-
gpr_strvec_destroy(&v);
|
960
|
-
gpr_log(GPR_DEBUG, "%s", out);
|
961
|
-
gpr_free(out);
|
1176
|
+
gpr_log(GPR_DEBUG, "%s", absl::StrJoin(parts, "").c_str());
|
962
1177
|
}
|
963
1178
|
#else
|
964
1179
|
static void dump_pending_tags(grpc_completion_queue* /*cq*/) {}
|
@@ -1384,6 +1599,21 @@ static void cq_finish_shutdown_callback(grpc_completion_queue* cq) {
|
|
1384
1599
|
GRPC_ERROR_NONE);
|
1385
1600
|
}
|
1386
1601
|
|
1602
|
+
static void cq_finish_shutdown_callback_alternative(grpc_completion_queue* cq) {
|
1603
|
+
cq_callback_alternative_data* cqd =
|
1604
|
+
static_cast<cq_callback_alternative_data*> DATA_FROM_CQ(cq);
|
1605
|
+
auto* callback = cqd->shutdown_callback;
|
1606
|
+
|
1607
|
+
GPR_ASSERT(cqd->shutdown_called);
|
1608
|
+
|
1609
|
+
// Shutdown the non-proxy pollset
|
1610
|
+
cq->poller_vtable->shutdown(INLINE_POLLSET_FROM_CQ(cq),
|
1611
|
+
&cq->pollset_shutdown_done);
|
1612
|
+
grpc_core::Executor::Run(
|
1613
|
+
GRPC_CLOSURE_CREATE(functor_callback, callback, nullptr),
|
1614
|
+
GRPC_ERROR_NONE);
|
1615
|
+
}
|
1616
|
+
|
1387
1617
|
static void cq_shutdown_callback(grpc_completion_queue* cq) {
|
1388
1618
|
cq_callback_data* cqd = static_cast<cq_callback_data*> DATA_FROM_CQ(cq);
|
1389
1619
|
|
@@ -1410,6 +1640,33 @@ static void cq_shutdown_callback(grpc_completion_queue* cq) {
|
|
1410
1640
|
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (callback cq)");
|
1411
1641
|
}
|
1412
1642
|
|
1643
|
+
static void cq_shutdown_callback_alternative(grpc_completion_queue* cq) {
|
1644
|
+
cq_callback_alternative_data* cqd =
|
1645
|
+
static_cast<cq_callback_alternative_data*> DATA_FROM_CQ(cq);
|
1646
|
+
|
1647
|
+
/* Need an extra ref for cq here because:
|
1648
|
+
* We call cq_finish_shutdown_callback() below, which calls pollset shutdown.
|
1649
|
+
* Pollset shutdown decrements the cq ref count which can potentially destroy
|
1650
|
+
* the cq (if that happens to be the last ref).
|
1651
|
+
* Creating an extra ref here prevents the cq from getting destroyed while
|
1652
|
+
* this function is still active */
|
1653
|
+
GRPC_CQ_INTERNAL_REF(cq, "shutting_down (callback cq)");
|
1654
|
+
gpr_mu_lock(cq->mu);
|
1655
|
+
if (cqd->shutdown_called) {
|
1656
|
+
gpr_mu_unlock(cq->mu);
|
1657
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (callback cq)");
|
1658
|
+
return;
|
1659
|
+
}
|
1660
|
+
cqd->shutdown_called = true;
|
1661
|
+
if (cqd->pending_events.FetchSub(1, grpc_core::MemoryOrder::ACQ_REL) == 1) {
|
1662
|
+
gpr_mu_unlock(cq->mu);
|
1663
|
+
cq_finish_shutdown_callback_alternative(cq);
|
1664
|
+
} else {
|
1665
|
+
gpr_mu_unlock(cq->mu);
|
1666
|
+
}
|
1667
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (callback cq)");
|
1668
|
+
}
|
1669
|
+
|
1413
1670
|
/* Shutdown simply drops a ref that we reserved at creation time; if we drop
|
1414
1671
|
to zero here, then enter shutdown mode and wake up any waiters */
|
1415
1672
|
void grpc_completion_queue_shutdown(grpc_completion_queue* cq) {
|