grpc 1.28.0 → 1.30.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +7694 -11190
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security.h +22 -9
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/grpc_types.h +19 -21
- data/include/grpc/impl/codegen/port_platform.h +6 -2
- data/include/grpc/module.modulemap +24 -39
- data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
- data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
- data/src/core/ext/filters/client_channel/lb_policy.h +42 -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 +10 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
- 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 +5 -11
- 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 +84 -37
- 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 +834 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
- 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 +73 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
- 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 +16 -20
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
- 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 +40 -43
- 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 +32 -5
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
- data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
- 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_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 +54 -24
- data/src/core/ext/filters/client_channel/subchannel.h +35 -11
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
- data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
- 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 +532 -339
- data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
- 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 +31 -19
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
- data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +27 -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 +358 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
- data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
- 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.h +2 -3
- 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 +14 -21
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
- data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
- 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 -875
- 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 +418 -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 +197 -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 +378 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
- 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/filter.upb.c +1 -0
- 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/core/address.upb.c +2 -1
- 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 +78 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
- 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/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -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/health_check.upb.c +24 -20
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
- 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/protocol.upb.c +38 -18
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
- 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 +89 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
- 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_components.upb.c +9 -6
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
- 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/lds.upb.c +1 -0
- 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 +16 -0
- 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_components.upb.c +2 -1
- 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/rds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
- 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_components.upb.c +63 -41
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
- 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 +90 -30
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
- 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/load_stats/v2/lrs.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
- 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 +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
- data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
- 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/channelz.cc +5 -6
- 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/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +2 -26
- data/src/core/lib/gpr/string.h +0 -16
- 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/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/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +2 -3
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- 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 +3 -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/error.cc +6 -9
- data/src/core/lib/iomgr/error.h +0 -1
- data/src/core/lib/iomgr/ev_apple.cc +356 -0
- data/src/core/lib/iomgr/ev_apple.h +43 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
- data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.cc +2 -3
- data/src/core/lib/iomgr/exec_ctx.h +14 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
- 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 +1 -0
- 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 +29 -39
- 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 +8 -17
- data/src/core/lib/iomgr/resource_quota.cc +4 -6
- data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
- data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
- 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 +7 -26
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
- data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_custom.cc +2 -3
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
- data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
- 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 +2 -3
- 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 +9 -14
- data/src/core/lib/json/json.h +3 -2
- data/src/core/lib/json/json_reader.cc +5 -5
- 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 +8 -59
- data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
- 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.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 +55 -27
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -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 +38 -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 +7 -7
- 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.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +14 -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 +2 -3
- 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 +33 -33
- 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_secure.cc +1 -4
- data/src/core/lib/surface/server.cc +570 -369
- data/src/core/lib/surface/server.h +32 -0
- 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 +3 -2
- data/src/core/lib/transport/transport_op_string.cc +61 -102
- data/src/core/lib/uri/uri_parser.h +2 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
- 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 +52 -39
- data/src/core/tsi/ssl_transport_security.h +8 -8
- 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 +3 -3
- data/src/ruby/ext/grpc/rb_call.c +9 -1
- 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 +4 -4
- 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_ruby_style.proto +5 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
- 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 +329 -297
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
- 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 +425 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -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/fipsmodule/aes/aes_nohw.c +1 -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 +14 -11
- 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 +432 -160
- 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 +5 -14
- 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 +80 -99
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -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/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/sha/sha512.c +44 -35
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
- 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 +278 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- 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/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 +172 -77
- 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 +291 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
- 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 +14 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
- 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 +6 -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 +64 -5
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
- 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 +98 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
- 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
- metadata +111 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
- 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/src/core/lib/http/httpcli.h
CHANGED
@@ -41,13 +41,12 @@ typedef struct grpc_httpcli_context {
|
|
41
41
|
grpc_pollset_set* pollset_set;
|
42
42
|
} grpc_httpcli_context;
|
43
43
|
|
44
|
-
|
44
|
+
struct grpc_httpcli_handshaker {
|
45
45
|
const char* default_port;
|
46
46
|
void (*handshake)(void* arg, grpc_endpoint* endpoint, const char* host,
|
47
47
|
grpc_millis deadline,
|
48
48
|
void (*on_done)(void* arg, grpc_endpoint* endpoint));
|
49
|
-
}
|
50
|
-
|
49
|
+
};
|
51
50
|
extern const grpc_httpcli_handshaker grpc_httpcli_plaintext;
|
52
51
|
extern const grpc_httpcli_handshaker grpc_httpcli_ssl;
|
53
52
|
|
@@ -22,6 +22,8 @@
|
|
22
22
|
|
23
23
|
#include <string.h>
|
24
24
|
|
25
|
+
#include "absl/strings/string_view.h"
|
26
|
+
|
25
27
|
#include <grpc/support/alloc.h>
|
26
28
|
#include <grpc/support/log.h>
|
27
29
|
#include <grpc/support/string_util.h>
|
@@ -30,7 +32,6 @@
|
|
30
32
|
#include "src/core/lib/channel/handshaker_registry.h"
|
31
33
|
#include "src/core/lib/gpr/string.h"
|
32
34
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
33
|
-
#include "src/core/lib/gprpp/string_view.h"
|
34
35
|
#include "src/core/lib/iomgr/pollset.h"
|
35
36
|
#include "src/core/lib/security/credentials/credentials.h"
|
36
37
|
#include "src/core/lib/security/security_connector/ssl_utils.h"
|
@@ -111,7 +112,7 @@ class grpc_httpcli_ssl_channel_security_connector final
|
|
111
112
|
return strcmp(secure_peer_name_, other->secure_peer_name_);
|
112
113
|
}
|
113
114
|
|
114
|
-
bool check_call_host(
|
115
|
+
bool check_call_host(absl::string_view /*host*/,
|
115
116
|
grpc_auth_context* /*auth_context*/,
|
116
117
|
grpc_closure* /*on_call_host_checked*/,
|
117
118
|
grpc_error** error) override {
|
@@ -154,12 +155,11 @@ httpcli_ssl_channel_security_connector_create(
|
|
154
155
|
|
155
156
|
/* handshaker */
|
156
157
|
|
157
|
-
|
158
|
+
struct on_done_closure {
|
158
159
|
void (*func)(void* arg, grpc_endpoint* endpoint);
|
159
160
|
void* arg;
|
160
161
|
grpc_core::RefCountedPtr<grpc_core::HandshakeManager> handshake_mgr;
|
161
|
-
}
|
162
|
-
|
162
|
+
};
|
163
163
|
static void on_handshake_done(void* arg, grpc_error* error) {
|
164
164
|
auto* args = static_cast<grpc_core::HandshakerArgs*>(arg);
|
165
165
|
on_done_closure* c = static_cast<on_done_closure*>(args->user_data);
|
data/src/core/lib/http/parser.h
CHANGED
@@ -79,7 +79,7 @@ typedef struct grpc_http_response {
|
|
79
79
|
char* body = nullptr;
|
80
80
|
} grpc_http_response;
|
81
81
|
|
82
|
-
|
82
|
+
struct grpc_http_parser {
|
83
83
|
grpc_http_parser_state state;
|
84
84
|
grpc_http_type type;
|
85
85
|
|
@@ -94,8 +94,7 @@ typedef struct {
|
|
94
94
|
uint8_t cur_line[GRPC_HTTP_PARSER_MAX_HEADER_LENGTH];
|
95
95
|
size_t cur_line_length;
|
96
96
|
size_t cur_line_end_length;
|
97
|
-
}
|
98
|
-
|
97
|
+
};
|
99
98
|
void grpc_http_parser_init(grpc_http_parser* parser, grpc_http_type type,
|
100
99
|
void* request_or_response);
|
101
100
|
void grpc_http_parser_destroy(grpc_http_parser* parser);
|
@@ -21,12 +21,13 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include "absl/types/optional.h"
|
25
|
+
|
24
26
|
#include "src/core/lib/iomgr/port.h"
|
25
27
|
|
26
28
|
#include <grpc/support/time.h>
|
27
29
|
|
28
30
|
#include "src/core/lib/gprpp/memory.h"
|
29
|
-
#include "src/core/lib/gprpp/optional.h"
|
30
31
|
#include "src/core/lib/iomgr/error.h"
|
31
32
|
#include "src/core/lib/iomgr/internal_errqueue.h"
|
32
33
|
|
@@ -34,52 +35,52 @@ namespace grpc_core {
|
|
34
35
|
|
35
36
|
struct ConnectionMetrics {
|
36
37
|
/* Delivery rate in Bytes/s. */
|
37
|
-
|
38
|
+
absl::optional<uint64_t> delivery_rate;
|
38
39
|
/* If the delivery rate is limited by the application, this is set to true. */
|
39
|
-
|
40
|
+
absl::optional<bool> is_delivery_rate_app_limited;
|
40
41
|
/* Total packets retransmitted. */
|
41
|
-
|
42
|
+
absl::optional<uint32_t> packet_retx;
|
42
43
|
/* Total packets retransmitted spuriously. This metric is smaller than or
|
43
44
|
equal to packet_retx. */
|
44
|
-
|
45
|
+
absl::optional<uint32_t> packet_spurious_retx;
|
45
46
|
/* Total packets sent. */
|
46
|
-
|
47
|
+
absl::optional<uint32_t> packet_sent;
|
47
48
|
/* Total packets delivered. */
|
48
|
-
|
49
|
+
absl::optional<uint32_t> packet_delivered;
|
49
50
|
/* Total packets delivered with ECE marked. This metric is smaller than or
|
50
51
|
equal to packet_delivered. */
|
51
|
-
|
52
|
+
absl::optional<uint32_t> packet_delivered_ce;
|
52
53
|
/* Total bytes lost so far. */
|
53
|
-
|
54
|
+
absl::optional<uint64_t> data_retx;
|
54
55
|
/* Total bytes sent so far. */
|
55
|
-
|
56
|
+
absl::optional<uint64_t> data_sent;
|
56
57
|
/* Total bytes in write queue but not sent. */
|
57
|
-
|
58
|
+
absl::optional<uint64_t> data_notsent;
|
58
59
|
/* Pacing rate of the connection in Bps */
|
59
|
-
|
60
|
+
absl::optional<uint64_t> pacing_rate;
|
60
61
|
/* Minimum RTT observed in usec. */
|
61
|
-
|
62
|
+
absl::optional<uint32_t> min_rtt;
|
62
63
|
/* Smoothed RTT in usec */
|
63
|
-
|
64
|
+
absl::optional<uint32_t> srtt;
|
64
65
|
/* Send congestion window. */
|
65
|
-
|
66
|
+
absl::optional<uint32_t> congestion_window;
|
66
67
|
/* Slow start threshold in packets. */
|
67
|
-
|
68
|
+
absl::optional<uint32_t> snd_ssthresh;
|
68
69
|
/* Maximum degree of reordering (i.e., maximum number of packets reodered)
|
69
70
|
on the connection. */
|
70
|
-
|
71
|
+
absl::optional<uint32_t> reordering;
|
71
72
|
/* Represents the number of recurring retransmissions of the first sequence
|
72
73
|
that is not acknowledged yet. */
|
73
|
-
|
74
|
+
absl::optional<uint8_t> recurring_retrans;
|
74
75
|
/* The cumulative time (in usec) that the transport protocol was busy
|
75
76
|
sending data. */
|
76
|
-
|
77
|
+
absl::optional<uint64_t> busy_usec;
|
77
78
|
/* The cumulative time (in usec) that the transport protocol was limited by
|
78
79
|
the receive window size. */
|
79
|
-
|
80
|
+
absl::optional<uint64_t> rwnd_limited_usec;
|
80
81
|
/* The cumulative time (in usec) that the transport protocol was limited by
|
81
82
|
the send buffer size. */
|
82
|
-
|
83
|
+
absl::optional<uint64_t> sndbuf_limited_usec;
|
83
84
|
};
|
84
85
|
|
85
86
|
struct Timestamp {
|
@@ -23,9 +23,10 @@
|
|
23
23
|
|
24
24
|
#include <stddef.h>
|
25
25
|
|
26
|
+
#include "absl/container/inlined_vector.h"
|
27
|
+
|
26
28
|
#include <grpc/support/atm.h>
|
27
29
|
|
28
|
-
#include "src/core/lib/gprpp/inlined_vector.h"
|
29
30
|
#include "src/core/lib/gprpp/mpscq.h"
|
30
31
|
#include "src/core/lib/gprpp/ref_counted.h"
|
31
32
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
@@ -208,7 +209,7 @@ class CallCombinerClosureList {
|
|
208
209
|
|
209
210
|
// There are generally a maximum of 6 closures to run in the call
|
210
211
|
// combiner, one for each pending op.
|
211
|
-
InlinedVector<CallCombinerClosure, 6> closures_;
|
212
|
+
absl::InlinedVector<CallCombinerClosure, 6> closures_;
|
212
213
|
};
|
213
214
|
|
214
215
|
} // namespace grpc_core
|
@@ -32,6 +32,7 @@
|
|
32
32
|
#include "src/core/lib/debug/trace.h"
|
33
33
|
#include "src/core/lib/iomgr/closure.h"
|
34
34
|
#include "src/core/lib/iomgr/error_cfstream.h"
|
35
|
+
#include "src/core/lib/iomgr/ev_apple.h"
|
35
36
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
36
37
|
|
37
38
|
extern grpc_core::TraceFlag grpc_tcp_trace;
|
@@ -147,8 +148,8 @@ CFStreamHandle::CFStreamHandle(CFReadStreamRef read_stream,
|
|
147
148
|
kCFStreamEventOpenCompleted | kCFStreamEventCanAcceptBytes |
|
148
149
|
kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered,
|
149
150
|
CFStreamHandle::WriteCallback, &ctx);
|
150
|
-
|
151
|
-
|
151
|
+
grpc_apple_register_read_stream(read_stream, dispatch_queue_);
|
152
|
+
grpc_apple_register_write_stream(write_stream, dispatch_queue_);
|
152
153
|
}
|
153
154
|
|
154
155
|
CFStreamHandle::~CFStreamHandle() {
|
@@ -121,12 +121,11 @@ inline grpc_closure* grpc_closure_init(grpc_closure* closure,
|
|
121
121
|
|
122
122
|
namespace closure_impl {
|
123
123
|
|
124
|
-
|
124
|
+
struct wrapped_closure {
|
125
125
|
grpc_iomgr_cb_func cb;
|
126
126
|
void* cb_arg;
|
127
127
|
grpc_closure wrapper;
|
128
|
-
}
|
129
|
-
|
128
|
+
};
|
130
129
|
inline void closure_wrapper(void* arg, grpc_error* error) {
|
131
130
|
wrapped_closure* wc = static_cast<wrapped_closure*>(arg);
|
132
131
|
grpc_iomgr_cb_func cb = wc->cb;
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2020 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include "src/core/lib/iomgr/port.h"
|
22
|
+
|
23
|
+
#ifdef GRPC_POSIX_SOCKET_UTILS_COMMON
|
24
|
+
|
25
|
+
#include <netinet/in.h>
|
26
|
+
#include "src/core/lib/iomgr/socket_utils_posix.h"
|
27
|
+
|
28
|
+
#ifndef GRPC_SET_SOCKET_DUALSTACK_CUSTOM
|
29
|
+
|
30
|
+
/* This should be 0 in production, but it may be enabled for testing or
|
31
|
+
debugging purposes, to simulate an environment where IPv6 sockets can't
|
32
|
+
also speak IPv4. */
|
33
|
+
int grpc_forbid_dualstack_sockets_for_testing = 0;
|
34
|
+
|
35
|
+
int grpc_set_socket_dualstack(int fd) {
|
36
|
+
if (!grpc_forbid_dualstack_sockets_for_testing) {
|
37
|
+
const int off = 0;
|
38
|
+
return 0 == setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &off, sizeof(off));
|
39
|
+
} else {
|
40
|
+
/* Force an IPv6-only socket, for testing purposes. */
|
41
|
+
const int on = 1;
|
42
|
+
setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on));
|
43
|
+
return 0;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
#endif // GRPC_SET_SOCKET_DUALSTACK_CUSTOM
|
47
|
+
#endif // GRPC_POSIX_SOCKET_UTILS_COMMON
|
@@ -39,7 +39,7 @@
|
|
39
39
|
|
40
40
|
extern grpc_core::TraceFlag grpc_tcp_trace;
|
41
41
|
|
42
|
-
|
42
|
+
struct CFStreamEndpoint {
|
43
43
|
grpc_endpoint base;
|
44
44
|
gpr_refcount refcount;
|
45
45
|
|
@@ -58,8 +58,7 @@ typedef struct {
|
|
58
58
|
char* peer_string;
|
59
59
|
grpc_resource_user* resource_user;
|
60
60
|
grpc_resource_user_slice_allocator slice_allocator;
|
61
|
-
}
|
62
|
-
|
61
|
+
};
|
63
62
|
static void CFStreamFree(CFStreamEndpoint* ep) {
|
64
63
|
grpc_resource_user_unref(ep->resource_user);
|
65
64
|
CFRelease(ep->read_stream);
|
@@ -23,11 +23,10 @@
|
|
23
23
|
|
24
24
|
#include "src/core/lib/iomgr/endpoint.h"
|
25
25
|
|
26
|
-
|
26
|
+
struct grpc_endpoint_pair {
|
27
27
|
grpc_endpoint* client;
|
28
28
|
grpc_endpoint* server;
|
29
|
-
}
|
30
|
-
|
29
|
+
};
|
31
30
|
grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char* name,
|
32
31
|
grpc_channel_args* args);
|
33
32
|
|
data/src/core/lib/iomgr/error.cc
CHANGED
@@ -446,12 +446,11 @@ grpc_error* grpc_error_set_int(grpc_error* src, grpc_error_ints which,
|
|
446
446
|
return new_err;
|
447
447
|
}
|
448
448
|
|
449
|
-
|
449
|
+
struct special_error_status_map {
|
450
450
|
grpc_status_code code;
|
451
451
|
const char* msg;
|
452
452
|
size_t len;
|
453
|
-
}
|
454
|
-
|
453
|
+
};
|
455
454
|
const special_error_status_map error_status_map[] = {
|
456
455
|
{GRPC_STATUS_OK, "", 0}, // GRPC_ERROR_NONE
|
457
456
|
{GRPC_STATUS_INVALID_ARGUMENT, "", 0}, // GRPC_ERROR_RESERVED_1
|
@@ -532,17 +531,15 @@ static const char* no_error_string = "\"No Error\"";
|
|
532
531
|
static const char* oom_error_string = "\"Out of memory\"";
|
533
532
|
static const char* cancelled_error_string = "\"Cancelled\"";
|
534
533
|
|
535
|
-
|
534
|
+
struct kv_pair {
|
536
535
|
char* key;
|
537
536
|
char* value;
|
538
|
-
}
|
539
|
-
|
540
|
-
typedef struct {
|
537
|
+
};
|
538
|
+
struct kv_pairs {
|
541
539
|
kv_pair* kvs;
|
542
540
|
size_t num_kvs;
|
543
541
|
size_t cap_kvs;
|
544
|
-
}
|
545
|
-
|
542
|
+
};
|
546
543
|
static void append_chr(char c, char** s, size_t* sz, size_t* cap) {
|
547
544
|
if (*sz == *cap) {
|
548
545
|
*cap = GPR_MAX(8, 3 * *cap / 2);
|
data/src/core/lib/iomgr/error.h
CHANGED
@@ -0,0 +1,356 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2020 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
/// Event engine based on Apple's CFRunLoop API family. If the CFRunLoop engine
|
20
|
+
/// is enabled (see iomgr_posix_cfstream.cc), a global thread is started to
|
21
|
+
/// handle and trigger all the CFStream events. The CFStream streams register
|
22
|
+
/// themselves with the run loop with functions grpc_apple_register_read_stream
|
23
|
+
/// and grpc_apple_register_read_stream. Pollsets are dummy and block on a
|
24
|
+
/// condition variable in pollset_work().
|
25
|
+
|
26
|
+
#include <grpc/support/port_platform.h>
|
27
|
+
|
28
|
+
#include "src/core/lib/iomgr/port.h"
|
29
|
+
|
30
|
+
#ifdef GRPC_APPLE_EV
|
31
|
+
|
32
|
+
#include <CoreFoundation/CoreFoundation.h>
|
33
|
+
|
34
|
+
#include <list>
|
35
|
+
|
36
|
+
#include "src/core/lib/gprpp/thd.h"
|
37
|
+
#include "src/core/lib/iomgr/ev_apple.h"
|
38
|
+
|
39
|
+
grpc_core::DebugOnlyTraceFlag grpc_apple_polling_trace(false, "apple_polling");
|
40
|
+
|
41
|
+
#ifndef NDEBUG
|
42
|
+
#define GRPC_POLLING_TRACE(format, ...) \
|
43
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_apple_polling_trace)) { \
|
44
|
+
gpr_log(GPR_DEBUG, "(polling) " format, __VA_ARGS__); \
|
45
|
+
}
|
46
|
+
#else
|
47
|
+
#define GRPC_POLLING_TRACE(...)
|
48
|
+
#endif // NDEBUG
|
49
|
+
|
50
|
+
#define GRPC_POLLSET_KICK_BROADCAST ((grpc_pollset_worker*)1)
|
51
|
+
|
52
|
+
struct GlobalRunLoopContext {
|
53
|
+
grpc_core::CondVar init_cv;
|
54
|
+
grpc_core::CondVar input_source_cv;
|
55
|
+
|
56
|
+
grpc_core::Mutex mu;
|
57
|
+
|
58
|
+
// Whether an input source registration is pending. Protected by mu.
|
59
|
+
bool input_source_registered = false;
|
60
|
+
|
61
|
+
// The reference to the global run loop object. Protected by mu.
|
62
|
+
CFRunLoopRef run_loop;
|
63
|
+
|
64
|
+
// Whether the pollset has been globally shut down. Protected by mu.
|
65
|
+
bool is_shutdown = false;
|
66
|
+
};
|
67
|
+
|
68
|
+
struct GrpcAppleWorker {
|
69
|
+
// The condition varible to kick the worker. Works with the pollset's lock
|
70
|
+
// (GrpcApplePollset.mu).
|
71
|
+
grpc_core::CondVar cv;
|
72
|
+
|
73
|
+
// Whether the worker is kicked. Protected by the pollset's lock
|
74
|
+
// (GrpcApplePollset.mu).
|
75
|
+
bool kicked = false;
|
76
|
+
};
|
77
|
+
|
78
|
+
struct GrpcApplePollset {
|
79
|
+
grpc_core::Mutex mu;
|
80
|
+
|
81
|
+
// Tracks the current workers in the pollset. Protected by mu.
|
82
|
+
std::list<GrpcAppleWorker*> workers;
|
83
|
+
|
84
|
+
// Whether the pollset is shut down. Protected by mu.
|
85
|
+
bool is_shutdown = false;
|
86
|
+
|
87
|
+
// Closure to call when shutdown is done. Protected by mu.
|
88
|
+
grpc_closure* shutdown_closure;
|
89
|
+
|
90
|
+
// Whether there's an outstanding kick that was not processed. Protected by
|
91
|
+
// mu.
|
92
|
+
bool kicked_without_poller = false;
|
93
|
+
};
|
94
|
+
|
95
|
+
static GlobalRunLoopContext* gGlobalRunLoopContext = nullptr;
|
96
|
+
static grpc_core::Thread* gGlobalRunLoopThread = nullptr;
|
97
|
+
|
98
|
+
/// Register the stream with the dispatch queue. Callbacks of the stream will be
|
99
|
+
/// issued to the dispatch queue when a network event happens and will be
|
100
|
+
/// managed by Grand Central Dispatch.
|
101
|
+
static void grpc_apple_register_read_stream_queue(
|
102
|
+
CFReadStreamRef read_stream, dispatch_queue_t dispatch_queue) {
|
103
|
+
CFReadStreamSetDispatchQueue(read_stream, dispatch_queue);
|
104
|
+
}
|
105
|
+
|
106
|
+
/// Register the stream with the dispatch queue. Callbacks of the stream will be
|
107
|
+
/// issued to the dispatch queue when a network event happens and will be
|
108
|
+
/// managed by Grand Central Dispatch.
|
109
|
+
static void grpc_apple_register_write_stream_queue(
|
110
|
+
CFWriteStreamRef write_stream, dispatch_queue_t dispatch_queue) {
|
111
|
+
CFWriteStreamSetDispatchQueue(write_stream, dispatch_queue);
|
112
|
+
}
|
113
|
+
|
114
|
+
/// Register the stream with the global run loop. Callbacks of the stream will
|
115
|
+
/// be issued to the run loop when a network event happens and will be driven by
|
116
|
+
/// the global run loop thread gGlobalRunLoopThread.
|
117
|
+
static void grpc_apple_register_read_stream_run_loop(
|
118
|
+
CFReadStreamRef read_stream, dispatch_queue_t dispatch_queue) {
|
119
|
+
GRPC_POLLING_TRACE("Register read stream: %p", read_stream);
|
120
|
+
grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
|
121
|
+
CFReadStreamScheduleWithRunLoop(read_stream, gGlobalRunLoopContext->run_loop,
|
122
|
+
kCFRunLoopDefaultMode);
|
123
|
+
gGlobalRunLoopContext->input_source_registered = true;
|
124
|
+
gGlobalRunLoopContext->input_source_cv.Signal();
|
125
|
+
}
|
126
|
+
|
127
|
+
/// Register the stream with the global run loop. Callbacks of the stream will
|
128
|
+
/// be issued to the run loop when a network event happens, and will be driven
|
129
|
+
/// by the global run loop thread gGlobalRunLoopThread.
|
130
|
+
static void grpc_apple_register_write_stream_run_loop(
|
131
|
+
CFWriteStreamRef write_stream, dispatch_queue_t dispatch_queue) {
|
132
|
+
GRPC_POLLING_TRACE("Register write stream: %p", write_stream);
|
133
|
+
grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
|
134
|
+
CFWriteStreamScheduleWithRunLoop(
|
135
|
+
write_stream, gGlobalRunLoopContext->run_loop, kCFRunLoopDefaultMode);
|
136
|
+
gGlobalRunLoopContext->input_source_registered = true;
|
137
|
+
gGlobalRunLoopContext->input_source_cv.Signal();
|
138
|
+
}
|
139
|
+
|
140
|
+
/// The default implementation of stream registration is to register the stream
|
141
|
+
/// to a dispatch queue. However, if the CFRunLoop based pollset is enabled (by
|
142
|
+
/// macro and environment variable, see docs in iomgr_posix_cfstream.cc), the
|
143
|
+
/// CFStream streams are registered with the global run loop instead (see
|
144
|
+
/// pollset_global_init below).
|
145
|
+
static void (*grpc_apple_register_read_stream_impl)(
|
146
|
+
CFReadStreamRef, dispatch_queue_t) = grpc_apple_register_read_stream_queue;
|
147
|
+
static void (*grpc_apple_register_write_stream_impl)(CFWriteStreamRef,
|
148
|
+
dispatch_queue_t) =
|
149
|
+
grpc_apple_register_write_stream_queue;
|
150
|
+
|
151
|
+
void grpc_apple_register_read_stream(CFReadStreamRef read_stream,
|
152
|
+
dispatch_queue_t dispatch_queue) {
|
153
|
+
grpc_apple_register_read_stream_impl(read_stream, dispatch_queue);
|
154
|
+
}
|
155
|
+
|
156
|
+
void grpc_apple_register_write_stream(CFWriteStreamRef write_stream,
|
157
|
+
dispatch_queue_t dispatch_queue) {
|
158
|
+
grpc_apple_register_write_stream_impl(write_stream, dispatch_queue);
|
159
|
+
}
|
160
|
+
|
161
|
+
/// Drive the run loop in a global singleton thread until the global run loop is
|
162
|
+
/// shutdown.
|
163
|
+
static void GlobalRunLoopFunc(void* arg) {
|
164
|
+
grpc_core::ReleasableMutexLock lock(&gGlobalRunLoopContext->mu);
|
165
|
+
gGlobalRunLoopContext->run_loop = CFRunLoopGetCurrent();
|
166
|
+
gGlobalRunLoopContext->init_cv.Signal();
|
167
|
+
|
168
|
+
while (!gGlobalRunLoopContext->is_shutdown) {
|
169
|
+
// CFRunLoopRun() will return immediately if no stream is registered on it.
|
170
|
+
// So we wait on a conditional variable until a stream is registered;
|
171
|
+
// otherwise we'll be running a spinning loop.
|
172
|
+
while (!gGlobalRunLoopContext->input_source_registered) {
|
173
|
+
gGlobalRunLoopContext->input_source_cv.Wait(&gGlobalRunLoopContext->mu);
|
174
|
+
}
|
175
|
+
gGlobalRunLoopContext->input_source_registered = false;
|
176
|
+
lock.Unlock();
|
177
|
+
CFRunLoopRun();
|
178
|
+
lock.Lock();
|
179
|
+
}
|
180
|
+
lock.Unlock();
|
181
|
+
}
|
182
|
+
|
183
|
+
// pollset implementation
|
184
|
+
|
185
|
+
static void pollset_global_init(void) {
|
186
|
+
gGlobalRunLoopContext = new GlobalRunLoopContext;
|
187
|
+
|
188
|
+
grpc_apple_register_read_stream_impl =
|
189
|
+
grpc_apple_register_read_stream_run_loop;
|
190
|
+
grpc_apple_register_write_stream_impl =
|
191
|
+
grpc_apple_register_write_stream_run_loop;
|
192
|
+
|
193
|
+
grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
|
194
|
+
gGlobalRunLoopThread =
|
195
|
+
new grpc_core::Thread("apple_ev", GlobalRunLoopFunc, nullptr);
|
196
|
+
gGlobalRunLoopThread->Start();
|
197
|
+
while (gGlobalRunLoopContext->run_loop == NULL)
|
198
|
+
gGlobalRunLoopContext->init_cv.Wait(&gGlobalRunLoopContext->mu);
|
199
|
+
}
|
200
|
+
|
201
|
+
static void pollset_global_shutdown(void) {
|
202
|
+
{
|
203
|
+
grpc_core::MutexLock lock(&gGlobalRunLoopContext->mu);
|
204
|
+
gGlobalRunLoopContext->is_shutdown = true;
|
205
|
+
CFRunLoopStop(gGlobalRunLoopContext->run_loop);
|
206
|
+
}
|
207
|
+
gGlobalRunLoopThread->Join();
|
208
|
+
delete gGlobalRunLoopThread;
|
209
|
+
delete gGlobalRunLoopContext;
|
210
|
+
}
|
211
|
+
|
212
|
+
/// The caller must acquire the lock GrpcApplePollset.mu before calling this
|
213
|
+
/// function. The lock may be temporarily released when waiting on the condition
|
214
|
+
/// variable but will be re-acquired before the function returns.
|
215
|
+
///
|
216
|
+
/// The Apple pollset simply waits on a condition variable until it is kicked.
|
217
|
+
/// The network events are handled in the global run loop thread. Processing of
|
218
|
+
/// these events will eventually trigger the kick.
|
219
|
+
static grpc_error* pollset_work(grpc_pollset* pollset,
|
220
|
+
grpc_pollset_worker** worker,
|
221
|
+
grpc_millis deadline) {
|
222
|
+
GRPC_POLLING_TRACE("pollset work: %p, worker: %p, deadline: %" PRIu64,
|
223
|
+
pollset, worker, deadline);
|
224
|
+
GrpcApplePollset* apple_pollset =
|
225
|
+
reinterpret_cast<GrpcApplePollset*>(pollset);
|
226
|
+
GrpcAppleWorker actual_worker;
|
227
|
+
if (worker) {
|
228
|
+
*worker = reinterpret_cast<grpc_pollset_worker*>(&actual_worker);
|
229
|
+
}
|
230
|
+
|
231
|
+
if (apple_pollset->kicked_without_poller) {
|
232
|
+
// Process the outstanding kick and reset the flag. Do not block.
|
233
|
+
apple_pollset->kicked_without_poller = false;
|
234
|
+
} else {
|
235
|
+
// Block until kicked, timed out, or the pollset shuts down.
|
236
|
+
apple_pollset->workers.push_front(&actual_worker);
|
237
|
+
auto it = apple_pollset->workers.begin();
|
238
|
+
|
239
|
+
while (!actual_worker.kicked && !apple_pollset->is_shutdown) {
|
240
|
+
if (actual_worker.cv.Wait(
|
241
|
+
&apple_pollset->mu,
|
242
|
+
grpc_millis_to_timespec(deadline, GPR_CLOCK_REALTIME))) {
|
243
|
+
// timed out
|
244
|
+
break;
|
245
|
+
}
|
246
|
+
}
|
247
|
+
|
248
|
+
apple_pollset->workers.erase(it);
|
249
|
+
|
250
|
+
// If the pollset is shut down asynchronously and this is the last pending
|
251
|
+
// worker, the shutdown process is complete at this moment and the shutdown
|
252
|
+
// callback will be called.
|
253
|
+
if (apple_pollset->is_shutdown && apple_pollset->workers.empty()) {
|
254
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, apple_pollset->shutdown_closure,
|
255
|
+
GRPC_ERROR_NONE);
|
256
|
+
}
|
257
|
+
}
|
258
|
+
|
259
|
+
return GRPC_ERROR_NONE;
|
260
|
+
}
|
261
|
+
|
262
|
+
/// Kick a specific worker. The caller must acquire the lock GrpcApplePollset.mu
|
263
|
+
/// before calling this function.
|
264
|
+
static void kick_worker(GrpcAppleWorker* worker) {
|
265
|
+
worker->kicked = true;
|
266
|
+
worker->cv.Signal();
|
267
|
+
}
|
268
|
+
|
269
|
+
/// The caller must acquire the lock GrpcApplePollset.mu before calling this
|
270
|
+
/// function. The kick action simply signals the condition variable of the
|
271
|
+
/// worker.
|
272
|
+
static grpc_error* pollset_kick(grpc_pollset* pollset,
|
273
|
+
grpc_pollset_worker* specific_worker) {
|
274
|
+
GrpcApplePollset* apple_pollset =
|
275
|
+
reinterpret_cast<GrpcApplePollset*>(pollset);
|
276
|
+
|
277
|
+
GRPC_POLLING_TRACE("pollset kick: %p, worker:%p", pollset, specific_worker);
|
278
|
+
|
279
|
+
if (specific_worker == nullptr) {
|
280
|
+
if (apple_pollset->workers.empty()) {
|
281
|
+
apple_pollset->kicked_without_poller = true;
|
282
|
+
} else {
|
283
|
+
GrpcAppleWorker* actual_worker = apple_pollset->workers.front();
|
284
|
+
kick_worker(actual_worker);
|
285
|
+
}
|
286
|
+
} else if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) {
|
287
|
+
for (auto& actual_worker : apple_pollset->workers) {
|
288
|
+
kick_worker(actual_worker);
|
289
|
+
}
|
290
|
+
} else {
|
291
|
+
GrpcAppleWorker* actual_worker =
|
292
|
+
reinterpret_cast<GrpcAppleWorker*>(specific_worker);
|
293
|
+
kick_worker(actual_worker);
|
294
|
+
}
|
295
|
+
|
296
|
+
return GRPC_ERROR_NONE;
|
297
|
+
}
|
298
|
+
|
299
|
+
static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
|
300
|
+
GRPC_POLLING_TRACE("pollset init: %p", pollset);
|
301
|
+
GrpcApplePollset* apple_pollset = new (pollset) GrpcApplePollset();
|
302
|
+
*mu = apple_pollset->mu.get();
|
303
|
+
}
|
304
|
+
|
305
|
+
/// The caller must acquire the lock GrpcApplePollset.mu before calling this
|
306
|
+
/// function.
|
307
|
+
static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
|
308
|
+
GRPC_POLLING_TRACE("pollset shutdown: %p", pollset);
|
309
|
+
|
310
|
+
GrpcApplePollset* apple_pollset =
|
311
|
+
reinterpret_cast<GrpcApplePollset*>(pollset);
|
312
|
+
apple_pollset->is_shutdown = true;
|
313
|
+
pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
|
314
|
+
|
315
|
+
// If there is any worker blocked, shutdown will be done asynchronously.
|
316
|
+
if (apple_pollset->workers.empty()) {
|
317
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
|
318
|
+
} else {
|
319
|
+
apple_pollset->shutdown_closure = closure;
|
320
|
+
}
|
321
|
+
}
|
322
|
+
|
323
|
+
static void pollset_destroy(grpc_pollset* pollset) {
|
324
|
+
GRPC_POLLING_TRACE("pollset destroy: %p", pollset);
|
325
|
+
GrpcApplePollset* apple_pollset =
|
326
|
+
reinterpret_cast<GrpcApplePollset*>(pollset);
|
327
|
+
apple_pollset->~GrpcApplePollset();
|
328
|
+
}
|
329
|
+
|
330
|
+
size_t pollset_size(void) { return sizeof(GrpcApplePollset); }
|
331
|
+
|
332
|
+
grpc_pollset_vtable grpc_apple_pollset_vtable = {
|
333
|
+
pollset_global_init, pollset_global_shutdown,
|
334
|
+
pollset_init, pollset_shutdown,
|
335
|
+
pollset_destroy, pollset_work,
|
336
|
+
pollset_kick, pollset_size};
|
337
|
+
|
338
|
+
// pollset_set implementation
|
339
|
+
|
340
|
+
grpc_pollset_set* pollset_set_create(void) { return nullptr; }
|
341
|
+
void pollset_set_destroy(grpc_pollset_set* pollset_set) {}
|
342
|
+
void pollset_set_add_pollset(grpc_pollset_set* pollset_set,
|
343
|
+
grpc_pollset* pollset) {}
|
344
|
+
void pollset_set_del_pollset(grpc_pollset_set* pollset_set,
|
345
|
+
grpc_pollset* pollset) {}
|
346
|
+
void pollset_set_add_pollset_set(grpc_pollset_set* bag,
|
347
|
+
grpc_pollset_set* item) {}
|
348
|
+
void pollset_set_del_pollset_set(grpc_pollset_set* bag,
|
349
|
+
grpc_pollset_set* item) {}
|
350
|
+
|
351
|
+
grpc_pollset_set_vtable grpc_apple_pollset_set_vtable = {
|
352
|
+
pollset_set_create, pollset_set_destroy,
|
353
|
+
pollset_set_add_pollset, pollset_set_del_pollset,
|
354
|
+
pollset_set_add_pollset_set, pollset_set_del_pollset_set};
|
355
|
+
|
356
|
+
#endif
|