grpc 1.36.0 → 1.38.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 +126 -92
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/channel_args.h +28 -0
- data/include/grpc/event_engine/event_engine.h +336 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/event_engine/slice_allocator.h +81 -0
- data/include/grpc/grpc.h +15 -1
- data/include/grpc/grpc_security_constants.h +14 -0
- data/include/grpc/impl/codegen/grpc_types.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +715 -3166
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +9 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +18 -14
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +29 -44
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +32 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +86 -63
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
- data/src/core/ext/filters/client_channel/resolver.cc +3 -0
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- 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 +17 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +38 -33
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -14
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +334 -114
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
- data/src/core/ext/filters/client_channel/server_address.cc +4 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +86 -162
- data/src/core/ext/filters/client_channel/subchannel.h +68 -99
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +501 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -4
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -8
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +5 -4
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +2 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +485 -199
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -3
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +167 -122
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +6 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +44 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +6 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +13 -9
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +13 -7
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +21 -20
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +1649 -329
- data/src/core/ext/xds/xds_api.h +284 -44
- data/src/core/ext/xds/xds_bootstrap.cc +110 -156
- data/src/core/ext/xds/xds_bootstrap.h +24 -25
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +454 -177
- data/src/core/ext/xds/xds_client.h +62 -22
- data/src/core/ext/xds/xds_client_stats.h +5 -4
- data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
- data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
- data/src/core/ext/xds/xds_http_filters.cc +114 -0
- data/src/core/ext/xds/xds_http_filters.h +130 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +410 -131
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +107 -4
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +26 -6
- data/src/core/lib/channel/channel_stack.cc +22 -9
- data/src/core/lib/channel/channel_stack.h +17 -9
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +108 -12
- data/src/core/lib/channel/channelz.h +30 -1
- data/src/core/lib/channel/channelz_registry.cc +14 -0
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -45
- data/src/core/lib/channel/handshaker.h +5 -22
- data/src/core/lib/channel/status_util.cc +12 -2
- data/src/core/lib/channel/status_util.h +5 -0
- data/src/core/lib/event_engine/slice_allocator.cc +59 -0
- data/src/core/lib/event_engine/sockaddr.cc +38 -0
- data/src/core/lib/gpr/sync_abseil.cc +3 -6
- data/src/core/lib/gpr/sync_windows.cc +2 -2
- data/src/core/lib/gprpp/atomic.h +3 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -0
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +180 -0
- data/src/core/lib/gprpp/thd.h +1 -1
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +5 -5
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +167 -61
- data/src/core/lib/iomgr/error.h +218 -107
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +6 -6
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +22 -22
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +12 -11
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/exec_ctx.cc +10 -6
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +5 -5
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +3 -3
- data/src/core/lib/iomgr/resolve_address.h +6 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +12 -11
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +37 -38
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
- data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +27 -25
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +8 -8
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/{security/authorization → matchers}/matchers.cc +47 -47
- data/src/core/lib/{security/authorization → matchers}/matchers.h +42 -40
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +28 -8
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +62 -60
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +65 -34
- data/src/core/lib/security/transport/server_auth_filter.cc +24 -11
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/slice_intern.cc +6 -7
- data/src/core/lib/surface/call.cc +46 -45
- data/src/core/lib/surface/call.h +2 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +6 -5
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +46 -47
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/lame_client.cc +43 -24
- data/src/core/lib/surface/lame_client.h +4 -3
- data/src/core/lib/surface/server.cc +68 -55
- data/src/core/lib/surface/server.h +89 -29
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +19 -8
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +64 -37
- data/src/core/lib/transport/metadata_batch.h +33 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +4 -4
- data/src/core/lib/transport/transport_op_string.cc +5 -5
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/tsi/alts/crypt/gsec.h +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +6 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
- data/src/core/tsi/fake_transport_security.cc +10 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +9 -1
- data/src/ruby/ext/grpc/rb_channel.c +10 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
- data/src/ruby/ext/grpc/rb_server.c +13 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +32 -0
- data/src/ruby/spec/channel_spec.rb +17 -6
- data/src/ruby/spec/client_auth_spec.rb +27 -1
- data/src/ruby/spec/errors_spec.rb +1 -1
- data/src/ruby/spec/generic/active_call_spec.rb +2 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/src/ruby/spec/server_credentials_spec.rb +25 -0
- data/src/ruby/spec/server_spec.rb +22 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +478 -462
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +7 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -30
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +210 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -122
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +131 -83
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- data/third_party/xxhash/xxhash.h +5443 -0
- metadata +128 -61
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
- data/src/core/lib/security/authorization/authorization_engine.h +0 -84
- data/src/core/lib/security/authorization/evaluate_args.cc +0 -148
- data/src/core/lib/security/authorization/evaluate_args.h +0 -59
- data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -99
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
- data/third_party/upb/upb/json_decode.c +0 -1443
- data/third_party/upb/upb/json_decode.h +0 -23
- data/third_party/upb/upb/json_encode.c +0 -713
- data/third_party/upb/upb/json_encode.h +0 -36
@@ -37,8 +37,9 @@
|
|
37
37
|
#include "src/core/lib/surface/call.h"
|
38
38
|
#include "src/core/lib/surface/channel_init.h"
|
39
39
|
|
40
|
-
static void recv_message_ready(void* user_data,
|
41
|
-
static void recv_trailing_metadata_ready(void* user_data,
|
40
|
+
static void recv_message_ready(void* user_data, grpc_error_handle error);
|
41
|
+
static void recv_trailing_metadata_ready(void* user_data,
|
42
|
+
grpc_error_handle error);
|
42
43
|
|
43
44
|
namespace grpc_core {
|
44
45
|
|
@@ -67,9 +68,10 @@ const MessageSizeParsedConfig* MessageSizeParsedConfig::GetFromCallContext(
|
|
67
68
|
|
68
69
|
std::unique_ptr<ServiceConfigParser::ParsedConfig>
|
69
70
|
MessageSizeParser::ParsePerMethodParams(const grpc_channel_args* /*args*/,
|
70
|
-
const Json& json,
|
71
|
+
const Json& json,
|
72
|
+
grpc_error_handle* error) {
|
71
73
|
GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
|
72
|
-
std::vector<
|
74
|
+
std::vector<grpc_error_handle> error_list;
|
73
75
|
// Max request size.
|
74
76
|
int max_request_message_bytes = -1;
|
75
77
|
auto it = json.object_value().find("maxRequestMessageBytes");
|
@@ -179,7 +181,7 @@ struct call_data {
|
|
179
181
|
grpc_closure recv_message_ready;
|
180
182
|
grpc_closure recv_trailing_metadata_ready;
|
181
183
|
// The error caused by a message that is too large, or GRPC_ERROR_NONE
|
182
|
-
|
184
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
183
185
|
// Used by recv_message_ready.
|
184
186
|
grpc_core::OrphanablePtr<grpc_core::ByteStream>* recv_message = nullptr;
|
185
187
|
// Original recv_message_ready callback, invoked after our own.
|
@@ -187,20 +189,20 @@ struct call_data {
|
|
187
189
|
// Original recv_trailing_metadata callback, invoked after our own.
|
188
190
|
grpc_closure* original_recv_trailing_metadata_ready;
|
189
191
|
bool seen_recv_trailing_metadata = false;
|
190
|
-
|
192
|
+
grpc_error_handle recv_trailing_metadata_error;
|
191
193
|
};
|
192
194
|
|
193
195
|
} // namespace
|
194
196
|
|
195
197
|
// Callback invoked when we receive a message. Here we check the max
|
196
198
|
// receive message size.
|
197
|
-
static void recv_message_ready(void* user_data,
|
199
|
+
static void recv_message_ready(void* user_data, grpc_error_handle error) {
|
198
200
|
grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
|
199
201
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
200
202
|
if (*calld->recv_message != nullptr && calld->limits.max_recv_size >= 0 &&
|
201
203
|
(*calld->recv_message)->length() >
|
202
204
|
static_cast<size_t>(calld->limits.max_recv_size)) {
|
203
|
-
|
205
|
+
grpc_error_handle new_error = grpc_error_set_int(
|
204
206
|
GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
205
207
|
absl::StrFormat("Received message larger than max (%u vs. %d)",
|
206
208
|
(*calld->recv_message)->length(),
|
@@ -233,7 +235,8 @@ static void recv_message_ready(void* user_data, grpc_error* error) {
|
|
233
235
|
|
234
236
|
// Callback invoked on completion of recv_trailing_metadata
|
235
237
|
// Notifies the recv_trailing_metadata batch of any message size failures
|
236
|
-
static void recv_trailing_metadata_ready(void* user_data,
|
238
|
+
static void recv_trailing_metadata_ready(void* user_data,
|
239
|
+
grpc_error_handle error) {
|
237
240
|
grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
|
238
241
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
239
242
|
if (calld->next_recv_message_ready != nullptr) {
|
@@ -291,7 +294,7 @@ static void message_size_start_transport_stream_op_batch(
|
|
291
294
|
}
|
292
295
|
|
293
296
|
// Constructor for call_data.
|
294
|
-
static
|
297
|
+
static grpc_error_handle message_size_init_call_elem(
|
295
298
|
grpc_call_element* elem, const grpc_call_element_args* args) {
|
296
299
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
297
300
|
new (elem->call_data) call_data(elem, *chand, *args);
|
@@ -315,7 +318,7 @@ grpc_core::MessageSizeParsedConfig::message_size_limits get_message_size_limits(
|
|
315
318
|
}
|
316
319
|
|
317
320
|
// Constructor for channel_data.
|
318
|
-
static
|
321
|
+
static grpc_error_handle message_size_init_channel_elem(
|
319
322
|
grpc_channel_element* elem, grpc_channel_element_args* args) {
|
320
323
|
GPR_ASSERT(!args->is_last);
|
321
324
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
@@ -51,7 +51,7 @@ class MessageSizeParser : public ServiceConfigParser::Parser {
|
|
51
51
|
public:
|
52
52
|
std::unique_ptr<ServiceConfigParser::ParsedConfig> ParsePerMethodParams(
|
53
53
|
const grpc_channel_args* /*args*/, const Json& json,
|
54
|
-
|
54
|
+
grpc_error_handle* error) override;
|
55
55
|
|
56
56
|
static void Register();
|
57
57
|
|
@@ -54,7 +54,8 @@ static bool get_user_agent_mdelem(const grpc_metadata_batch* batch,
|
|
54
54
|
}
|
55
55
|
|
56
56
|
// Callback invoked when we receive an initial metadata.
|
57
|
-
static void recv_initial_metadata_ready(void* user_data,
|
57
|
+
static void recv_initial_metadata_ready(void* user_data,
|
58
|
+
grpc_error_handle error) {
|
58
59
|
grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
|
59
60
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
60
61
|
|
@@ -105,7 +106,7 @@ static void cronet_compression_start_transport_stream_op_batch(
|
|
105
106
|
}
|
106
107
|
|
107
108
|
// Constructor for call_data.
|
108
|
-
static
|
109
|
+
static grpc_error_handle cronet_compression_init_call_elem(
|
109
110
|
grpc_call_element* elem, const grpc_call_element_args* /*args*/) {
|
110
111
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
111
112
|
calld->next_recv_initial_metadata_ready = nullptr;
|
@@ -122,7 +123,7 @@ static void cronet_compression_destroy_call_elem(
|
|
122
123
|
grpc_closure* /*ignored*/) {}
|
123
124
|
|
124
125
|
// Constructor for channel_data.
|
125
|
-
static
|
126
|
+
static grpc_error_handle cronet_compression_init_channel_elem(
|
126
127
|
grpc_channel_element* /*elem*/, grpc_channel_element_args* /*args*/) {
|
127
128
|
return GRPC_ERROR_NONE;
|
128
129
|
}
|
@@ -192,7 +193,7 @@ static bool register_workaround_cronet_compression(
|
|
192
193
|
if (a == nullptr) {
|
193
194
|
return true;
|
194
195
|
}
|
195
|
-
if (grpc_channel_arg_get_bool(a, false)
|
196
|
+
if (!grpc_channel_arg_get_bool(a, false)) {
|
196
197
|
return true;
|
197
198
|
}
|
198
199
|
return grpc_channel_stack_builder_prepend_filter(
|
@@ -75,7 +75,7 @@ void Chttp2Connector::Connect(const Args& args, Result* result,
|
|
75
75
|
args.channel_args, &addr, args.deadline);
|
76
76
|
}
|
77
77
|
|
78
|
-
void Chttp2Connector::Shutdown(
|
78
|
+
void Chttp2Connector::Shutdown(grpc_error_handle error) {
|
79
79
|
MutexLock lock(&mu_);
|
80
80
|
shutdown_ = true;
|
81
81
|
if (handshake_mgr_ != nullptr) {
|
@@ -89,7 +89,7 @@ void Chttp2Connector::Shutdown(grpc_error* error) {
|
|
89
89
|
GRPC_ERROR_UNREF(error);
|
90
90
|
}
|
91
91
|
|
92
|
-
void Chttp2Connector::Connected(void* arg,
|
92
|
+
void Chttp2Connector::Connected(void* arg, grpc_error_handle error) {
|
93
93
|
Chttp2Connector* self = static_cast<Chttp2Connector*>(arg);
|
94
94
|
bool unref = false;
|
95
95
|
{
|
@@ -131,14 +131,14 @@ void Chttp2Connector::StartHandshakeLocked() {
|
|
131
131
|
|
132
132
|
namespace {
|
133
133
|
void NullThenSchedClosure(const DebugLocation& location, grpc_closure** closure,
|
134
|
-
|
134
|
+
grpc_error_handle error) {
|
135
135
|
grpc_closure* c = *closure;
|
136
136
|
*closure = nullptr;
|
137
137
|
ExecCtx::Run(location, c, error);
|
138
138
|
}
|
139
139
|
} // namespace
|
140
140
|
|
141
|
-
void Chttp2Connector::OnHandshakeDone(void* arg,
|
141
|
+
void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error_handle error) {
|
142
142
|
auto* args = static_cast<HandshakerArgs*>(arg);
|
143
143
|
Chttp2Connector* self = static_cast<Chttp2Connector*>(args->user_data);
|
144
144
|
{
|
@@ -178,7 +178,7 @@ void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error* error) {
|
|
178
178
|
self->Ref().release(); // Ref held by OnTimeout()
|
179
179
|
grpc_chttp2_transport_start_reading(self->result_->transport,
|
180
180
|
args->read_buffer,
|
181
|
-
&self->on_receive_settings_);
|
181
|
+
&self->on_receive_settings_, nullptr);
|
182
182
|
GRPC_CLOSURE_INIT(&self->on_timeout_, OnTimeout, self,
|
183
183
|
grpc_schedule_on_exec_ctx);
|
184
184
|
grpc_timer_init(&self->timer_, self->args_.deadline, &self->on_timeout_);
|
@@ -194,7 +194,7 @@ void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error* error) {
|
|
194
194
|
self->Unref();
|
195
195
|
}
|
196
196
|
|
197
|
-
void Chttp2Connector::OnReceiveSettings(void* arg,
|
197
|
+
void Chttp2Connector::OnReceiveSettings(void* arg, grpc_error_handle error) {
|
198
198
|
Chttp2Connector* self = static_cast<Chttp2Connector*>(arg);
|
199
199
|
{
|
200
200
|
MutexLock lock(&self->mu_);
|
@@ -220,7 +220,7 @@ void Chttp2Connector::OnReceiveSettings(void* arg, grpc_error* error) {
|
|
220
220
|
self->Unref();
|
221
221
|
}
|
222
222
|
|
223
|
-
void Chttp2Connector::OnTimeout(void* arg,
|
223
|
+
void Chttp2Connector::OnTimeout(void* arg, grpc_error_handle /*error*/) {
|
224
224
|
Chttp2Connector* self = static_cast<Chttp2Connector*>(arg);
|
225
225
|
{
|
226
226
|
MutexLock lock(&self->mu_);
|
@@ -245,7 +245,7 @@ void Chttp2Connector::OnTimeout(void* arg, grpc_error* /*error*/) {
|
|
245
245
|
self->Unref();
|
246
246
|
}
|
247
247
|
|
248
|
-
void Chttp2Connector::MaybeNotify(
|
248
|
+
void Chttp2Connector::MaybeNotify(grpc_error_handle error) {
|
249
249
|
if (notify_error_.has_value()) {
|
250
250
|
GRPC_ERROR_UNREF(error);
|
251
251
|
NullThenSchedClosure(DEBUG_LOCATION, ¬ify_, notify_error_.value());
|
@@ -33,14 +33,14 @@ class Chttp2Connector : public SubchannelConnector {
|
|
33
33
|
~Chttp2Connector() override;
|
34
34
|
|
35
35
|
void Connect(const Args& args, Result* result, grpc_closure* notify) override;
|
36
|
-
void Shutdown(
|
36
|
+
void Shutdown(grpc_error_handle error) override;
|
37
37
|
|
38
38
|
private:
|
39
|
-
static void Connected(void* arg,
|
39
|
+
static void Connected(void* arg, grpc_error_handle error);
|
40
40
|
void StartHandshakeLocked();
|
41
|
-
static void OnHandshakeDone(void* arg,
|
42
|
-
static void OnReceiveSettings(void* arg,
|
43
|
-
static void OnTimeout(void* arg,
|
41
|
+
static void OnHandshakeDone(void* arg, grpc_error_handle error);
|
42
|
+
static void OnReceiveSettings(void* arg, grpc_error_handle error);
|
43
|
+
static void OnTimeout(void* arg, grpc_error_handle error);
|
44
44
|
|
45
45
|
// We cannot invoke notify_ until both OnTimeout() and OnReceiveSettings()
|
46
46
|
// have been called since that is an indicator to the upper layer that we are
|
@@ -51,7 +51,7 @@ class Chttp2Connector : public SubchannelConnector {
|
|
51
51
|
// invoked, we call MaybeNotify() again to actually invoke the notify_
|
52
52
|
// callback. Note that this only happens if the handshake is done and the
|
53
53
|
// connector is waiting on the SETTINGS frame.
|
54
|
-
void MaybeNotify(
|
54
|
+
void MaybeNotify(grpc_error_handle error);
|
55
55
|
|
56
56
|
Mutex mu_;
|
57
57
|
Args args_;
|
@@ -66,7 +66,7 @@ class Chttp2Connector : public SubchannelConnector {
|
|
66
66
|
grpc_closure on_receive_settings_;
|
67
67
|
grpc_timer timer_;
|
68
68
|
grpc_closure on_timeout_;
|
69
|
-
absl::optional<
|
69
|
+
absl::optional<grpc_error_handle> notify_error_;
|
70
70
|
RefCountedPtr<HandshakeManager> handshake_mgr_;
|
71
71
|
};
|
72
72
|
|
@@ -37,10 +37,11 @@ namespace grpc_core {
|
|
37
37
|
|
38
38
|
class Chttp2InsecureClientChannelFactory : public ClientChannelFactory {
|
39
39
|
public:
|
40
|
-
Subchannel
|
40
|
+
RefCountedPtr<Subchannel> CreateSubchannel(
|
41
|
+
const grpc_channel_args* args) override {
|
41
42
|
grpc_channel_args* new_args =
|
42
43
|
grpc_default_authority_add_if_not_present(args);
|
43
|
-
Subchannel
|
44
|
+
RefCountedPtr<Subchannel> s =
|
44
45
|
Subchannel::Create(MakeOrphanable<Chttp2Connector>(), new_args);
|
45
46
|
grpc_channel_args_destroy(new_args);
|
46
47
|
return s;
|
@@ -50,7 +51,7 @@ class Chttp2InsecureClientChannelFactory : public ClientChannelFactory {
|
|
50
51
|
namespace {
|
51
52
|
|
52
53
|
grpc_channel* CreateChannel(const char* target, const grpc_channel_args* args,
|
53
|
-
|
54
|
+
grpc_error_handle* error) {
|
54
55
|
if (target == nullptr) {
|
55
56
|
gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
|
56
57
|
if (error != nullptr) {
|
@@ -105,7 +106,7 @@ grpc_channel* grpc_insecure_channel_create(const char* target,
|
|
105
106
|
const char* arg_to_remove = arg.key;
|
106
107
|
grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
|
107
108
|
args, &arg_to_remove, 1, &arg, 1);
|
108
|
-
|
109
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
109
110
|
// Create channel.
|
110
111
|
grpc_channel* channel = grpc_core::CreateChannel(target, new_args, &error);
|
111
112
|
// Clean up.
|
@@ -56,13 +56,13 @@ grpc_channel* grpc_insecure_channel_create_from_fd(
|
|
56
56
|
grpc_transport* transport =
|
57
57
|
grpc_create_chttp2_transport(final_args, client, true);
|
58
58
|
GPR_ASSERT(transport);
|
59
|
-
|
59
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
60
60
|
grpc_channel* channel =
|
61
61
|
grpc_channel_create(target, final_args, GRPC_CLIENT_DIRECT_CHANNEL,
|
62
62
|
transport, nullptr, &error);
|
63
63
|
grpc_channel_args_destroy(final_args);
|
64
64
|
if (channel != nullptr) {
|
65
|
-
grpc_chttp2_transport_start_reading(transport, nullptr, nullptr);
|
65
|
+
grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
|
66
66
|
grpc_core::ExecCtx::Get()->Flush();
|
67
67
|
} else {
|
68
68
|
intptr_t integer;
|
@@ -28,9 +28,9 @@
|
|
28
28
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
29
29
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
30
30
|
#include "src/core/ext/transport/chttp2/client/chttp2_connector.h"
|
31
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
31
32
|
#include "src/core/lib/channel/channel_args.h"
|
32
33
|
#include "src/core/lib/gprpp/memory.h"
|
33
|
-
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
34
34
|
#include "src/core/lib/security/credentials/credentials.h"
|
35
35
|
#include "src/core/lib/security/security_connector/security_connector.h"
|
36
36
|
#include "src/core/lib/slice/slice_internal.h"
|
@@ -43,14 +43,15 @@ namespace grpc_core {
|
|
43
43
|
|
44
44
|
class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
|
45
45
|
public:
|
46
|
-
Subchannel
|
46
|
+
RefCountedPtr<Subchannel> CreateSubchannel(
|
47
|
+
const grpc_channel_args* args) override {
|
47
48
|
grpc_channel_args* new_args = GetSecureNamingChannelArgs(args);
|
48
49
|
if (new_args == nullptr) {
|
49
50
|
gpr_log(GPR_ERROR,
|
50
51
|
"Failed to create channel args during subchannel creation.");
|
51
52
|
return nullptr;
|
52
53
|
}
|
53
|
-
Subchannel
|
54
|
+
RefCountedPtr<Subchannel> s =
|
54
55
|
Subchannel::Create(MakeOrphanable<Chttp2Connector>(), new_args);
|
55
56
|
grpc_channel_args_destroy(new_args);
|
56
57
|
return s;
|
@@ -128,7 +129,7 @@ class Chttp2SecureClientChannelFactory : public ClientChannelFactory {
|
|
128
129
|
namespace {
|
129
130
|
|
130
131
|
grpc_channel* CreateChannel(const char* target, const grpc_channel_args* args,
|
131
|
-
|
132
|
+
grpc_error_handle* error) {
|
132
133
|
if (target == nullptr) {
|
133
134
|
gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
|
134
135
|
if (error != nullptr) {
|
@@ -180,7 +181,7 @@ grpc_channel* grpc_secure_channel_create(grpc_channel_credentials* creds,
|
|
180
181
|
4, ((void*)creds, target, (void*)args, (void*)reserved));
|
181
182
|
GPR_ASSERT(reserved == nullptr);
|
182
183
|
grpc_channel* channel = nullptr;
|
183
|
-
|
184
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
184
185
|
if (creds != nullptr) {
|
185
186
|
// Add channel args containing the client channel factory and channel
|
186
187
|
// credentials.
|
@@ -38,6 +38,7 @@
|
|
38
38
|
#include "src/core/ext/filters/http/server/http_server_filter.h"
|
39
39
|
#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
|
40
40
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
41
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
41
42
|
#include "src/core/lib/channel/channel_args.h"
|
42
43
|
#include "src/core/lib/channel/handshaker.h"
|
43
44
|
#include "src/core/lib/channel/handshaker_registry.h"
|
@@ -46,7 +47,6 @@
|
|
46
47
|
#include "src/core/lib/iomgr/endpoint.h"
|
47
48
|
#include "src/core/lib/iomgr/resolve_address.h"
|
48
49
|
#include "src/core/lib/iomgr/resource_quota.h"
|
49
|
-
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
50
50
|
#include "src/core/lib/iomgr/tcp_server.h"
|
51
51
|
#include "src/core/lib/iomgr/unix_sockets_posix.h"
|
52
52
|
#include "src/core/lib/slice/slice_internal.h"
|
@@ -61,14 +61,14 @@ const char kUnixAbstractUriPrefix[] = "unix-abstract:";
|
|
61
61
|
|
62
62
|
class Chttp2ServerListener : public Server::ListenerInterface {
|
63
63
|
public:
|
64
|
-
static
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
static grpc_error_handle Create(Server* server, grpc_resolved_address* addr,
|
65
|
+
grpc_channel_args* args,
|
66
|
+
Chttp2ServerArgsModifier args_modifier,
|
67
|
+
int* port_num);
|
68
68
|
|
69
|
-
static
|
70
|
-
|
71
|
-
|
69
|
+
static grpc_error_handle CreateWithAcceptor(
|
70
|
+
Server* server, const char* name, grpc_channel_args* args,
|
71
|
+
Chttp2ServerArgsModifier args_modifier);
|
72
72
|
|
73
73
|
// Do not instantiate directly. Use one of the factory methods above.
|
74
74
|
Chttp2ServerListener(Server* server, grpc_channel_args* args,
|
@@ -90,98 +90,209 @@ class Chttp2ServerListener : public Server::ListenerInterface {
|
|
90
90
|
class ConfigFetcherWatcher
|
91
91
|
: public grpc_server_config_fetcher::WatcherInterface {
|
92
92
|
public:
|
93
|
-
explicit ConfigFetcherWatcher(Chttp2ServerListener
|
94
|
-
: listener_(listener) {}
|
95
|
-
|
96
|
-
void
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
args = listener_->args_modifier_(args, &error);
|
102
|
-
if (error != GRPC_ERROR_NONE) {
|
103
|
-
// TODO(yashykt): Set state to close down connections immediately
|
104
|
-
// after accepting.
|
105
|
-
GPR_ASSERT(0);
|
106
|
-
}
|
107
|
-
listener_->args_ = args;
|
108
|
-
if (!listener_->shutdown_) return; // Already started listening.
|
109
|
-
}
|
110
|
-
int port_temp;
|
111
|
-
grpc_error* error = grpc_tcp_server_add_port(
|
112
|
-
listener_->tcp_server_, &listener_->resolved_address_, &port_temp);
|
113
|
-
if (error != GRPC_ERROR_NONE) {
|
114
|
-
GRPC_ERROR_UNREF(error);
|
115
|
-
gpr_log(GPR_ERROR, "Error adding port to server: %s",
|
116
|
-
grpc_error_string(error));
|
117
|
-
// TODO(yashykt): We wouldn't need to assert here if we bound to the
|
118
|
-
// port earlier during AddPort.
|
119
|
-
GPR_ASSERT(0);
|
120
|
-
}
|
121
|
-
listener_->StartListening();
|
122
|
-
}
|
93
|
+
explicit ConfigFetcherWatcher(RefCountedPtr<Chttp2ServerListener> listener)
|
94
|
+
: listener_(std::move(listener)) {}
|
95
|
+
|
96
|
+
void UpdateConnectionManager(
|
97
|
+
RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
|
98
|
+
connection_manager) override;
|
99
|
+
|
100
|
+
void StopServing() override;
|
123
101
|
|
124
102
|
private:
|
125
|
-
Chttp2ServerListener
|
103
|
+
RefCountedPtr<Chttp2ServerListener> listener_;
|
126
104
|
};
|
127
105
|
|
128
|
-
class
|
106
|
+
class ActiveConnection : public InternallyRefCounted<ActiveConnection> {
|
129
107
|
public:
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
108
|
+
class HandshakingState : public InternallyRefCounted<HandshakingState> {
|
109
|
+
public:
|
110
|
+
HandshakingState(RefCountedPtr<ActiveConnection> connection_ref,
|
111
|
+
grpc_pollset* accepting_pollset,
|
112
|
+
grpc_tcp_server_acceptor* acceptor,
|
113
|
+
grpc_channel_args* args);
|
114
|
+
|
115
|
+
~HandshakingState() override;
|
116
|
+
|
117
|
+
void Orphan() override;
|
135
118
|
|
136
|
-
|
119
|
+
void Start(grpc_endpoint* endpoint, grpc_channel_args* args);
|
120
|
+
|
121
|
+
// Needed to be able to grab an external ref in ActiveConnection::Start()
|
122
|
+
using InternallyRefCounted<HandshakingState>::Ref;
|
123
|
+
|
124
|
+
private:
|
125
|
+
static void OnTimeout(void* arg, grpc_error_handle error);
|
126
|
+
static void OnReceiveSettings(void* arg, grpc_error_handle /* error */);
|
127
|
+
static void OnHandshakeDone(void* arg, grpc_error_handle error);
|
128
|
+
RefCountedPtr<ActiveConnection> const connection_;
|
129
|
+
grpc_pollset* const accepting_pollset_;
|
130
|
+
grpc_tcp_server_acceptor* const acceptor_;
|
131
|
+
RefCountedPtr<HandshakeManager> handshake_mgr_
|
132
|
+
ABSL_GUARDED_BY(&connection_->mu_);
|
133
|
+
// State for enforcing handshake timeout on receiving HTTP/2 settings.
|
134
|
+
grpc_millis const deadline_;
|
135
|
+
grpc_timer timer_ ABSL_GUARDED_BY(&connection_->mu_);
|
136
|
+
grpc_closure on_timeout_ ABSL_GUARDED_BY(&connection_->mu_);
|
137
|
+
grpc_closure on_receive_settings_ ABSL_GUARDED_BY(&connection_->mu_);
|
138
|
+
grpc_pollset_set* const interested_parties_;
|
139
|
+
};
|
140
|
+
|
141
|
+
ActiveConnection(grpc_pollset* accepting_pollset,
|
142
|
+
grpc_tcp_server_acceptor* acceptor,
|
143
|
+
grpc_channel_args* args);
|
144
|
+
~ActiveConnection() override;
|
145
|
+
|
146
|
+
void Orphan() override;
|
147
|
+
|
148
|
+
void SendGoAway();
|
149
|
+
|
150
|
+
void Start(RefCountedPtr<Chttp2ServerListener> listener,
|
151
|
+
grpc_endpoint* endpoint, grpc_channel_args* args);
|
152
|
+
|
153
|
+
// Needed to be able to grab an external ref in
|
154
|
+
// Chttp2ServerListener::OnAccept()
|
155
|
+
using InternallyRefCounted<ActiveConnection>::Ref;
|
137
156
|
|
138
157
|
private:
|
139
|
-
static void
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
//
|
148
|
-
grpc_chttp2_transport* transport_ = nullptr;
|
149
|
-
|
150
|
-
|
151
|
-
grpc_closure on_timeout_;
|
152
|
-
grpc_closure on_receive_settings_;
|
153
|
-
grpc_pollset_set* const interested_parties_;
|
158
|
+
static void OnClose(void* arg, grpc_error_handle error);
|
159
|
+
|
160
|
+
RefCountedPtr<Chttp2ServerListener> listener_;
|
161
|
+
Mutex mu_ ABSL_ACQUIRED_AFTER(&listener_->mu_);
|
162
|
+
// Set by HandshakingState before the handshaking begins and reset when
|
163
|
+
// handshaking is done.
|
164
|
+
OrphanablePtr<HandshakingState> handshaking_state_ ABSL_GUARDED_BY(&mu_);
|
165
|
+
// Set by HandshakingState when handshaking is done and a valid transport is
|
166
|
+
// created.
|
167
|
+
grpc_chttp2_transport* transport_ ABSL_GUARDED_BY(&mu_) = nullptr;
|
168
|
+
grpc_closure on_close_;
|
169
|
+
bool shutdown_ ABSL_GUARDED_BY(&mu_) = false;
|
154
170
|
};
|
155
171
|
|
172
|
+
// To allow access to RefCounted<> like interface.
|
173
|
+
friend class RefCountedPtr<Chttp2ServerListener>;
|
174
|
+
|
175
|
+
// Should only be called once so as to start the TCP server.
|
156
176
|
void StartListening();
|
157
177
|
|
158
178
|
static void OnAccept(void* arg, grpc_endpoint* tcp,
|
159
179
|
grpc_pollset* accepting_pollset,
|
160
180
|
grpc_tcp_server_acceptor* acceptor);
|
161
181
|
|
162
|
-
|
163
|
-
|
164
|
-
static void TcpServerShutdownComplete(void* arg, grpc_error* error);
|
182
|
+
static void TcpServerShutdownComplete(void* arg, grpc_error_handle error);
|
165
183
|
|
166
184
|
static void DestroyListener(Server* /*server*/, void* arg,
|
167
185
|
grpc_closure* destroy_done);
|
168
186
|
|
187
|
+
// The interface required by RefCountedPtr<> has been manually implemented
|
188
|
+
// here to take a ref on tcp_server_ instead. Note that, the handshaker needs
|
189
|
+
// tcp_server_ to exist for the lifetime of the handshake since it's needed by
|
190
|
+
// acceptor. Sharing refs between the listener and tcp_server_ is just an
|
191
|
+
// optimization to avoid taking additional refs on the listener, since
|
192
|
+
// TcpServerShutdownComplete already holds a ref to the listener.
|
193
|
+
void IncrementRefCount() { grpc_tcp_server_ref(tcp_server_); }
|
194
|
+
void IncrementRefCount(const DebugLocation& /* location */,
|
195
|
+
const char* /* reason */) {
|
196
|
+
IncrementRefCount();
|
197
|
+
}
|
198
|
+
|
199
|
+
RefCountedPtr<Chttp2ServerListener> Ref() GRPC_MUST_USE_RESULT {
|
200
|
+
IncrementRefCount();
|
201
|
+
return RefCountedPtr<Chttp2ServerListener>(this);
|
202
|
+
}
|
203
|
+
RefCountedPtr<Chttp2ServerListener> Ref(const DebugLocation& /* location */,
|
204
|
+
const char* /* reason */)
|
205
|
+
GRPC_MUST_USE_RESULT {
|
206
|
+
return Ref();
|
207
|
+
}
|
208
|
+
|
209
|
+
void Unref() { grpc_tcp_server_unref(tcp_server_); }
|
210
|
+
void Unref(const DebugLocation& /* location */, const char* /* reason */) {
|
211
|
+
Unref();
|
212
|
+
}
|
213
|
+
|
169
214
|
Server* const server_;
|
170
215
|
grpc_tcp_server* tcp_server_;
|
171
216
|
grpc_resolved_address resolved_address_;
|
172
|
-
Chttp2ServerArgsModifier args_modifier_;
|
173
|
-
Mutex mu_;
|
174
|
-
grpc_channel_args* args_; // guarded by mu_
|
217
|
+
Chttp2ServerArgsModifier const args_modifier_;
|
175
218
|
ConfigFetcherWatcher* config_fetcher_watcher_ = nullptr;
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
219
|
+
Mutex channel_args_mu_;
|
220
|
+
grpc_channel_args* args_ ABSL_GUARDED_BY(channel_args_mu_);
|
221
|
+
RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
|
222
|
+
connection_manager_ ABSL_GUARDED_BY(channel_args_mu_);
|
223
|
+
Mutex mu_;
|
224
|
+
// Signals whether grpc_tcp_server_start() has been called.
|
225
|
+
bool started_ ABSL_GUARDED_BY(mu_) = false;
|
226
|
+
// Signals whether grpc_tcp_server_start() has completed.
|
227
|
+
CondVar started_cv_ ABSL_GUARDED_BY(mu_);
|
228
|
+
// Signals whether new requests/connections are to be accepted.
|
229
|
+
bool is_serving_ ABSL_GUARDED_BY(mu_) = false;
|
230
|
+
// Signals whether the application has triggered shutdown.
|
231
|
+
bool shutdown_ ABSL_GUARDED_BY(mu_) = false;
|
232
|
+
std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections_
|
233
|
+
ABSL_GUARDED_BY(mu_);
|
234
|
+
grpc_closure tcp_server_shutdown_complete_ ABSL_GUARDED_BY(mu_);
|
235
|
+
grpc_closure* on_destroy_done_ ABSL_GUARDED_BY(mu_) = nullptr;
|
180
236
|
RefCountedPtr<channelz::ListenSocketNode> channelz_listen_socket_;
|
181
237
|
};
|
182
238
|
|
183
239
|
//
|
184
|
-
// Chttp2ServerListener::
|
240
|
+
// Chttp2ServerListener::ConfigFetcherWatcher
|
241
|
+
//
|
242
|
+
|
243
|
+
void Chttp2ServerListener::ConfigFetcherWatcher::UpdateConnectionManager(
|
244
|
+
RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
|
245
|
+
connection_manager) {
|
246
|
+
RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
|
247
|
+
connection_manager_to_destroy;
|
248
|
+
{
|
249
|
+
MutexLock lock(&listener_->channel_args_mu_);
|
250
|
+
connection_manager_to_destroy = listener_->connection_manager_;
|
251
|
+
listener_->connection_manager_ = std::move(connection_manager);
|
252
|
+
}
|
253
|
+
{
|
254
|
+
MutexLock lock(&listener_->mu_);
|
255
|
+
if (listener_->shutdown_) {
|
256
|
+
return;
|
257
|
+
}
|
258
|
+
listener_->is_serving_ = true;
|
259
|
+
if (listener_->started_) return;
|
260
|
+
}
|
261
|
+
int port_temp;
|
262
|
+
grpc_error_handle error = grpc_tcp_server_add_port(
|
263
|
+
listener_->tcp_server_, &listener_->resolved_address_, &port_temp);
|
264
|
+
if (error != GRPC_ERROR_NONE) {
|
265
|
+
GRPC_ERROR_UNREF(error);
|
266
|
+
gpr_log(GPR_ERROR, "Error adding port to server: %s",
|
267
|
+
grpc_error_std_string(error).c_str());
|
268
|
+
// TODO(yashykt): We wouldn't need to assert here if we bound to the
|
269
|
+
// port earlier during AddPort.
|
270
|
+
GPR_ASSERT(0);
|
271
|
+
}
|
272
|
+
listener_->StartListening();
|
273
|
+
{
|
274
|
+
MutexLock lock(&listener_->mu_);
|
275
|
+
listener_->started_ = true;
|
276
|
+
listener_->started_cv_.SignalAll();
|
277
|
+
}
|
278
|
+
}
|
279
|
+
|
280
|
+
void Chttp2ServerListener::ConfigFetcherWatcher::StopServing() {
|
281
|
+
std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections;
|
282
|
+
{
|
283
|
+
MutexLock lock(&listener_->mu_);
|
284
|
+
listener_->is_serving_ = false;
|
285
|
+
connections = std::move(listener_->connections_);
|
286
|
+
}
|
287
|
+
// Send GOAWAYs on the transports so that they disconnected when existing RPCs
|
288
|
+
// finish.
|
289
|
+
for (auto& connection : connections) {
|
290
|
+
connection.first->SendGoAway();
|
291
|
+
}
|
292
|
+
}
|
293
|
+
|
294
|
+
//
|
295
|
+
// Chttp2ServerListener::ActiveConnection::HandshakingState
|
185
296
|
//
|
186
297
|
|
187
298
|
grpc_millis GetConnectionDeadline(const grpc_channel_args* args) {
|
@@ -191,73 +302,96 @@ grpc_millis GetConnectionDeadline(const grpc_channel_args* args) {
|
|
191
302
|
return ExecCtx::Get()->Now() + timeout_ms;
|
192
303
|
}
|
193
304
|
|
194
|
-
Chttp2ServerListener::
|
195
|
-
|
196
|
-
grpc_tcp_server_acceptor* acceptor,
|
197
|
-
|
198
|
-
|
199
|
-
: listener_(listener),
|
305
|
+
Chttp2ServerListener::ActiveConnection::HandshakingState::HandshakingState(
|
306
|
+
RefCountedPtr<ActiveConnection> connection_ref,
|
307
|
+
grpc_pollset* accepting_pollset, grpc_tcp_server_acceptor* acceptor,
|
308
|
+
grpc_channel_args* args)
|
309
|
+
: connection_(std::move(connection_ref)),
|
200
310
|
accepting_pollset_(accepting_pollset),
|
201
311
|
acceptor_(acceptor),
|
202
|
-
handshake_mgr_(
|
312
|
+
handshake_mgr_(MakeRefCounted<HandshakeManager>()),
|
203
313
|
deadline_(GetConnectionDeadline(args)),
|
204
314
|
interested_parties_(grpc_pollset_set_create()) {
|
205
315
|
grpc_pollset_set_add_pollset(interested_parties_, accepting_pollset_);
|
206
316
|
HandshakerRegistry::AddHandshakers(HANDSHAKER_SERVER, args,
|
207
317
|
interested_parties_, handshake_mgr_.get());
|
208
|
-
handshake_mgr_->DoHandshake(endpoint, args, deadline_, acceptor_,
|
209
|
-
OnHandshakeDone, this);
|
210
318
|
}
|
211
319
|
|
212
|
-
Chttp2ServerListener::
|
213
|
-
if (transport_ != nullptr) {
|
214
|
-
GRPC_CHTTP2_UNREF_TRANSPORT(transport_, "receive settings timeout");
|
215
|
-
}
|
320
|
+
Chttp2ServerListener::ActiveConnection::HandshakingState::~HandshakingState() {
|
216
321
|
grpc_pollset_set_del_pollset(interested_parties_, accepting_pollset_);
|
217
322
|
grpc_pollset_set_destroy(interested_parties_);
|
218
323
|
}
|
219
324
|
|
220
|
-
void Chttp2ServerListener::
|
221
|
-
|
222
|
-
|
325
|
+
void Chttp2ServerListener::ActiveConnection::HandshakingState::Orphan() {
|
326
|
+
{
|
327
|
+
MutexLock lock(&connection_->mu_);
|
328
|
+
if (handshake_mgr_ != nullptr) {
|
329
|
+
handshake_mgr_->Shutdown(
|
330
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Listener stopped serving."));
|
331
|
+
}
|
332
|
+
}
|
333
|
+
Unref();
|
334
|
+
}
|
335
|
+
|
336
|
+
void Chttp2ServerListener::ActiveConnection::HandshakingState::Start(
|
337
|
+
grpc_endpoint* endpoint, grpc_channel_args* args) {
|
338
|
+
Ref().release(); // Held by OnHandshakeDone
|
339
|
+
RefCountedPtr<HandshakeManager> handshake_mgr;
|
340
|
+
{
|
341
|
+
MutexLock lock(&connection_->mu_);
|
342
|
+
if (handshake_mgr_ == nullptr) return;
|
343
|
+
handshake_mgr = handshake_mgr_;
|
344
|
+
}
|
345
|
+
handshake_mgr->DoHandshake(endpoint, args, deadline_, acceptor_,
|
346
|
+
OnHandshakeDone, this);
|
347
|
+
}
|
348
|
+
|
349
|
+
void Chttp2ServerListener::ActiveConnection::HandshakingState::OnTimeout(
|
350
|
+
void* arg, grpc_error_handle error) {
|
351
|
+
HandshakingState* self = static_cast<HandshakingState*>(arg);
|
223
352
|
// Note that we may be called with GRPC_ERROR_NONE when the timer fires
|
224
353
|
// or with an error indicating that the timer system is being shut down.
|
225
354
|
if (error != GRPC_ERROR_CANCELLED) {
|
226
355
|
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
227
356
|
op->disconnect_with_error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
228
357
|
"Did not receive HTTP/2 settings before handshake timeout");
|
229
|
-
|
358
|
+
grpc_chttp2_transport* transport = nullptr;
|
359
|
+
{
|
360
|
+
MutexLock lock(&self->connection_->mu_);
|
361
|
+
transport = self->connection_->transport_;
|
362
|
+
}
|
363
|
+
grpc_transport_perform_op(&transport->base, op);
|
230
364
|
}
|
231
365
|
self->Unref();
|
232
366
|
}
|
233
367
|
|
234
|
-
void Chttp2ServerListener::
|
235
|
-
void* arg,
|
236
|
-
|
237
|
-
|
238
|
-
grpc_timer_cancel(&self->timer_);
|
239
|
-
}
|
368
|
+
void Chttp2ServerListener::ActiveConnection::HandshakingState::
|
369
|
+
OnReceiveSettings(void* arg, grpc_error_handle /* error */) {
|
370
|
+
HandshakingState* self = static_cast<HandshakingState*>(arg);
|
371
|
+
grpc_timer_cancel(&self->timer_);
|
240
372
|
self->Unref();
|
241
373
|
}
|
242
374
|
|
243
|
-
void Chttp2ServerListener::
|
244
|
-
|
375
|
+
void Chttp2ServerListener::ActiveConnection::HandshakingState::OnHandshakeDone(
|
376
|
+
void* arg, grpc_error_handle error) {
|
245
377
|
auto* args = static_cast<HandshakerArgs*>(arg);
|
246
|
-
|
378
|
+
HandshakingState* self = static_cast<HandshakingState*>(args->user_data);
|
379
|
+
OrphanablePtr<HandshakingState> handshaking_state_ref;
|
380
|
+
RefCountedPtr<HandshakeManager> handshake_mgr;
|
381
|
+
bool cleanup_connection = false;
|
382
|
+
bool free_resource_quota = false;
|
383
|
+
grpc_resource_user* resource_user =
|
384
|
+
self->connection_->listener_->server_->default_resource_user();
|
247
385
|
{
|
248
|
-
MutexLock
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
if (resource_user != nullptr) {
|
255
|
-
grpc_resource_user_free(resource_user,
|
256
|
-
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
257
|
-
}
|
386
|
+
MutexLock connection_lock(&self->connection_->mu_);
|
387
|
+
if (error != GRPC_ERROR_NONE || self->connection_->shutdown_) {
|
388
|
+
std::string error_str = grpc_error_std_string(error);
|
389
|
+
gpr_log(GPR_DEBUG, "Handshaking failed: %s", error_str.c_str());
|
390
|
+
cleanup_connection = true;
|
391
|
+
free_resource_quota = true;
|
258
392
|
if (error == GRPC_ERROR_NONE && args->endpoint != nullptr) {
|
259
|
-
// We were shut down after handshaking completed
|
260
|
-
// destroy the endpoint here.
|
393
|
+
// We were shut down or stopped serving after handshaking completed
|
394
|
+
// successfully, so destroy the endpoint here.
|
261
395
|
// TODO(ctiller): It is currently necessary to shutdown endpoints
|
262
396
|
// before destroying them, even if we know that there are no
|
263
397
|
// pending read/write callbacks. This should be fixed, at which
|
@@ -275,9 +409,11 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
|
|
275
409
|
if (args->endpoint != nullptr) {
|
276
410
|
grpc_transport* transport = grpc_create_chttp2_transport(
|
277
411
|
args->args, args->endpoint, false, resource_user);
|
278
|
-
|
279
|
-
|
280
|
-
|
412
|
+
grpc_error_handle channel_init_err =
|
413
|
+
self->connection_->listener_->server_->SetupTransport(
|
414
|
+
transport, self->accepting_pollset_, args->args,
|
415
|
+
grpc_chttp2_transport_get_socket_node(transport),
|
416
|
+
resource_user);
|
281
417
|
if (channel_init_err == GRPC_ERROR_NONE) {
|
282
418
|
// Use notify_on_receive_settings callback to enforce the
|
283
419
|
// handshake deadline.
|
@@ -287,48 +423,153 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
|
|
287
423
|
// static_cast<> to a derived class.
|
288
424
|
// TODO(roth): Change to static_cast<> when we C++-ify the
|
289
425
|
// transport API.
|
290
|
-
self->transport_ =
|
426
|
+
self->connection_->transport_ =
|
291
427
|
reinterpret_cast<grpc_chttp2_transport*>(transport);
|
428
|
+
GRPC_CHTTP2_REF_TRANSPORT(self->connection_->transport_,
|
429
|
+
"ActiveConnection"); // Held by connection_
|
292
430
|
self->Ref().release(); // Held by OnReceiveSettings().
|
293
431
|
GRPC_CLOSURE_INIT(&self->on_receive_settings_, OnReceiveSettings,
|
294
432
|
self, grpc_schedule_on_exec_ctx);
|
433
|
+
// If the listener has been configured with a config fetcher, we need
|
434
|
+
// to watch on the transport being closed so that we can an updated
|
435
|
+
// list of active connections.
|
436
|
+
grpc_closure* on_close = nullptr;
|
437
|
+
if (self->connection_->listener_->config_fetcher_watcher_ !=
|
438
|
+
nullptr) {
|
439
|
+
// Refs helds by OnClose()
|
440
|
+
self->connection_->Ref().release();
|
441
|
+
on_close = &self->connection_->on_close_;
|
442
|
+
} else {
|
443
|
+
// Remove the connection from the connections_ map since OnClose()
|
444
|
+
// will not be invoked when a config fetcher is set.
|
445
|
+
cleanup_connection = true;
|
446
|
+
}
|
295
447
|
grpc_chttp2_transport_start_reading(transport, args->read_buffer,
|
296
|
-
&self->on_receive_settings_
|
448
|
+
&self->on_receive_settings_,
|
449
|
+
on_close);
|
297
450
|
grpc_channel_args_destroy(args->args);
|
298
451
|
self->Ref().release(); // Held by OnTimeout().
|
299
|
-
GRPC_CHTTP2_REF_TRANSPORT(
|
300
|
-
reinterpret_cast<grpc_chttp2_transport*>(transport),
|
301
|
-
"receive settings timeout");
|
302
452
|
GRPC_CLOSURE_INIT(&self->on_timeout_, OnTimeout, self,
|
303
453
|
grpc_schedule_on_exec_ctx);
|
304
454
|
grpc_timer_init(&self->timer_, self->deadline_, &self->on_timeout_);
|
305
455
|
} else {
|
306
456
|
// Failed to create channel from transport. Clean up.
|
307
457
|
gpr_log(GPR_ERROR, "Failed to create channel: %s",
|
308
|
-
|
458
|
+
grpc_error_std_string(channel_init_err).c_str());
|
309
459
|
GRPC_ERROR_UNREF(channel_init_err);
|
310
460
|
grpc_transport_destroy(transport);
|
311
461
|
grpc_slice_buffer_destroy_internal(args->read_buffer);
|
312
462
|
gpr_free(args->read_buffer);
|
313
|
-
|
314
|
-
|
315
|
-
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
316
|
-
}
|
463
|
+
cleanup_connection = true;
|
464
|
+
free_resource_quota = true;
|
317
465
|
grpc_channel_args_destroy(args->args);
|
318
466
|
}
|
319
467
|
} else {
|
320
|
-
|
321
|
-
|
322
|
-
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
323
|
-
}
|
468
|
+
cleanup_connection = true;
|
469
|
+
free_resource_quota = true;
|
324
470
|
}
|
325
471
|
}
|
326
|
-
|
327
|
-
|
472
|
+
// Since the handshake manager is done, the connection no longer needs to
|
473
|
+
// shutdown the handshake when the listener needs to stop serving.
|
474
|
+
// Avoid calling the destructor of HandshakeManager and HandshakingState
|
475
|
+
// from within the critical region.
|
476
|
+
handshake_mgr = std::move(self->handshake_mgr_);
|
477
|
+
handshaking_state_ref = std::move(self->connection_->handshaking_state_);
|
328
478
|
}
|
329
|
-
self->handshake_mgr_.reset();
|
330
479
|
gpr_free(self->acceptor_);
|
331
|
-
|
480
|
+
OrphanablePtr<ActiveConnection> connection;
|
481
|
+
if (free_resource_quota && resource_user != nullptr) {
|
482
|
+
grpc_resource_user_free(resource_user, GRPC_RESOURCE_QUOTA_CHANNEL_SIZE);
|
483
|
+
}
|
484
|
+
if (cleanup_connection) {
|
485
|
+
MutexLock listener_lock(&self->connection_->listener_->mu_);
|
486
|
+
auto it = self->connection_->listener_->connections_.find(
|
487
|
+
self->connection_.get());
|
488
|
+
if (it != self->connection_->listener_->connections_.end()) {
|
489
|
+
connection = std::move(it->second);
|
490
|
+
self->connection_->listener_->connections_.erase(it);
|
491
|
+
}
|
492
|
+
}
|
493
|
+
self->Unref();
|
494
|
+
}
|
495
|
+
|
496
|
+
//
|
497
|
+
// Chttp2ServerListener::ActiveConnection
|
498
|
+
//
|
499
|
+
|
500
|
+
Chttp2ServerListener::ActiveConnection::ActiveConnection(
|
501
|
+
grpc_pollset* accepting_pollset, grpc_tcp_server_acceptor* acceptor,
|
502
|
+
grpc_channel_args* args)
|
503
|
+
: handshaking_state_(MakeOrphanable<HandshakingState>(
|
504
|
+
Ref(), accepting_pollset, acceptor, args)) {
|
505
|
+
GRPC_CLOSURE_INIT(&on_close_, ActiveConnection::OnClose, this,
|
506
|
+
grpc_schedule_on_exec_ctx);
|
507
|
+
}
|
508
|
+
|
509
|
+
Chttp2ServerListener::ActiveConnection::~ActiveConnection() {
|
510
|
+
if (transport_ != nullptr) {
|
511
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(transport_, "ActiveConnection");
|
512
|
+
}
|
513
|
+
}
|
514
|
+
|
515
|
+
void Chttp2ServerListener::ActiveConnection::Orphan() {
|
516
|
+
OrphanablePtr<HandshakingState> handshaking_state;
|
517
|
+
{
|
518
|
+
MutexLock lock(&mu_);
|
519
|
+
shutdown_ = true;
|
520
|
+
// Reset handshaking_state_ since we have been orphaned by the listener
|
521
|
+
// signaling that the listener has stopped serving.
|
522
|
+
handshaking_state = std::move(handshaking_state_);
|
523
|
+
}
|
524
|
+
Unref();
|
525
|
+
}
|
526
|
+
|
527
|
+
void Chttp2ServerListener::ActiveConnection::SendGoAway() {
|
528
|
+
grpc_chttp2_transport* transport = nullptr;
|
529
|
+
{
|
530
|
+
MutexLock lock(&mu_);
|
531
|
+
transport = transport_;
|
532
|
+
}
|
533
|
+
if (transport != nullptr) {
|
534
|
+
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
535
|
+
op->goaway_error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
536
|
+
"Server is stopping to serve requests.");
|
537
|
+
grpc_transport_perform_op(&transport->base, op);
|
538
|
+
}
|
539
|
+
}
|
540
|
+
|
541
|
+
void Chttp2ServerListener::ActiveConnection::Start(
|
542
|
+
RefCountedPtr<Chttp2ServerListener> listener, grpc_endpoint* endpoint,
|
543
|
+
grpc_channel_args* args) {
|
544
|
+
RefCountedPtr<HandshakingState> handshaking_state_ref;
|
545
|
+
listener_ = std::move(listener);
|
546
|
+
{
|
547
|
+
MutexLock lock(&mu_);
|
548
|
+
if (shutdown_) return;
|
549
|
+
// Hold a ref to HandshakingState to allow starting the handshake outside
|
550
|
+
// the critical region.
|
551
|
+
handshaking_state_ref = handshaking_state_->Ref();
|
552
|
+
}
|
553
|
+
handshaking_state_ref->Start(endpoint, args);
|
554
|
+
}
|
555
|
+
|
556
|
+
void Chttp2ServerListener::ActiveConnection::OnClose(
|
557
|
+
void* arg, grpc_error_handle /* error */) {
|
558
|
+
ActiveConnection* self = static_cast<ActiveConnection*>(arg);
|
559
|
+
OrphanablePtr<ActiveConnection> connection;
|
560
|
+
{
|
561
|
+
MutexLock listener_lock(&self->listener_->mu_);
|
562
|
+
MutexLock connection_lock(&self->mu_);
|
563
|
+
// The node was already deleted from the connections_ list if the connection
|
564
|
+
// is shutdown.
|
565
|
+
if (!self->shutdown_) {
|
566
|
+
auto it = self->listener_->connections_.find(self);
|
567
|
+
if (it != self->listener_->connections_.end()) {
|
568
|
+
connection = std::move(it->second);
|
569
|
+
self->listener_->connections_.erase(it);
|
570
|
+
}
|
571
|
+
}
|
572
|
+
}
|
332
573
|
self->Unref();
|
333
574
|
}
|
334
575
|
|
@@ -336,15 +577,13 @@ void Chttp2ServerListener::ConnectionState::OnHandshakeDone(void* arg,
|
|
336
577
|
// Chttp2ServerListener
|
337
578
|
//
|
338
579
|
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
Chttp2ServerArgsModifier args_modifier,
|
343
|
-
int* port_num) {
|
580
|
+
grpc_error_handle Chttp2ServerListener::Create(
|
581
|
+
Server* server, grpc_resolved_address* addr, grpc_channel_args* args,
|
582
|
+
Chttp2ServerArgsModifier args_modifier, int* port_num) {
|
344
583
|
Chttp2ServerListener* listener = nullptr;
|
345
584
|
// The bulk of this method is inside of a lambda to make cleanup
|
346
585
|
// easier without using goto.
|
347
|
-
|
586
|
+
grpc_error_handle error = [&]() {
|
348
587
|
// Create Chttp2ServerListener.
|
349
588
|
listener = new Chttp2ServerListener(server, args, args_modifier);
|
350
589
|
error = grpc_tcp_server_create(&listener->tcp_server_shutdown_complete_,
|
@@ -361,7 +600,7 @@ grpc_error* Chttp2ServerListener::Create(Server* server,
|
|
361
600
|
// Create channelz node.
|
362
601
|
if (grpc_channel_args_find_bool(args, GRPC_ARG_ENABLE_CHANNELZ,
|
363
602
|
GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
364
|
-
std::string string_address =
|
603
|
+
std::string string_address = grpc_sockaddr_to_uri(addr);
|
365
604
|
listener->channelz_listen_socket_ =
|
366
605
|
MakeRefCounted<channelz::ListenSocketNode>(
|
367
606
|
string_address.c_str(),
|
@@ -386,12 +625,12 @@ grpc_error* Chttp2ServerListener::Create(Server* server,
|
|
386
625
|
return error;
|
387
626
|
}
|
388
627
|
|
389
|
-
|
628
|
+
grpc_error_handle Chttp2ServerListener::CreateWithAcceptor(
|
390
629
|
Server* server, const char* name, grpc_channel_args* args,
|
391
630
|
Chttp2ServerArgsModifier args_modifier) {
|
392
631
|
Chttp2ServerListener* listener =
|
393
632
|
new Chttp2ServerListener(server, args, args_modifier);
|
394
|
-
|
633
|
+
grpc_error_handle error = grpc_tcp_server_create(
|
395
634
|
&listener->tcp_server_shutdown_complete_, args, &listener->tcp_server_);
|
396
635
|
if (error != GRPC_ERROR_NONE) {
|
397
636
|
delete listener;
|
@@ -414,6 +653,13 @@ Chttp2ServerListener::Chttp2ServerListener(
|
|
414
653
|
}
|
415
654
|
|
416
655
|
Chttp2ServerListener::~Chttp2ServerListener() {
|
656
|
+
// Flush queued work before destroying handshaker factory, since that
|
657
|
+
// may do a synchronous unref.
|
658
|
+
ExecCtx::Get()->Flush();
|
659
|
+
if (on_destroy_done_ != nullptr) {
|
660
|
+
ExecCtx::Run(DEBUG_LOCATION, on_destroy_done_, GRPC_ERROR_NONE);
|
661
|
+
ExecCtx::Get()->Flush();
|
662
|
+
}
|
417
663
|
grpc_channel_args_destroy(args_);
|
418
664
|
}
|
419
665
|
|
@@ -422,24 +668,27 @@ void Chttp2ServerListener::Start(
|
|
422
668
|
Server* /*server*/, const std::vector<grpc_pollset*>* /* pollsets */) {
|
423
669
|
if (server_->config_fetcher() != nullptr) {
|
424
670
|
grpc_channel_args* args = nullptr;
|
425
|
-
auto watcher = absl::make_unique<ConfigFetcherWatcher>(
|
671
|
+
auto watcher = absl::make_unique<ConfigFetcherWatcher>(Ref());
|
672
|
+
config_fetcher_watcher_ = watcher.get();
|
426
673
|
{
|
427
|
-
MutexLock lock(&
|
428
|
-
config_fetcher_watcher_ = watcher.get();
|
674
|
+
MutexLock lock(&channel_args_mu_);
|
429
675
|
args = grpc_channel_args_copy(args_);
|
430
676
|
}
|
431
677
|
server_->config_fetcher()->StartWatch(
|
432
678
|
grpc_sockaddr_to_string(&resolved_address_, false), args,
|
433
679
|
std::move(watcher));
|
434
680
|
} else {
|
681
|
+
{
|
682
|
+
MutexLock lock(&mu_);
|
683
|
+
started_ = true;
|
684
|
+
is_serving_ = true;
|
685
|
+
}
|
435
686
|
StartListening();
|
436
687
|
}
|
437
688
|
}
|
438
689
|
|
439
690
|
void Chttp2ServerListener::StartListening() {
|
440
691
|
grpc_tcp_server_start(tcp_server_, &server_->pollsets(), OnAccept, this);
|
441
|
-
MutexLock lock(&mu_);
|
442
|
-
shutdown_ = false;
|
443
692
|
}
|
444
693
|
|
445
694
|
void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
|
@@ -447,67 +696,94 @@ void Chttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
|
|
447
696
|
on_destroy_done_ = on_destroy_done;
|
448
697
|
}
|
449
698
|
|
450
|
-
RefCountedPtr<HandshakeManager> Chttp2ServerListener::CreateHandshakeManager() {
|
451
|
-
MutexLock lock(&mu_);
|
452
|
-
if (shutdown_) return nullptr;
|
453
|
-
grpc_resource_user* resource_user = server_->default_resource_user();
|
454
|
-
if (resource_user != nullptr &&
|
455
|
-
!grpc_resource_user_safe_alloc(resource_user,
|
456
|
-
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE)) {
|
457
|
-
gpr_log(GPR_ERROR,
|
458
|
-
"Memory quota exhausted, rejecting connection, no handshaking.");
|
459
|
-
return nullptr;
|
460
|
-
}
|
461
|
-
auto handshake_mgr = MakeRefCounted<HandshakeManager>();
|
462
|
-
handshake_mgr->AddToPendingMgrList(&pending_handshake_mgrs_);
|
463
|
-
grpc_tcp_server_ref(tcp_server_); // Ref held by ConnectionState.
|
464
|
-
return handshake_mgr;
|
465
|
-
}
|
466
|
-
|
467
699
|
void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
|
468
700
|
grpc_pollset* accepting_pollset,
|
469
701
|
grpc_tcp_server_acceptor* acceptor) {
|
470
702
|
Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
703
|
+
grpc_channel_args* args = nullptr;
|
704
|
+
RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
|
705
|
+
connection_manager;
|
706
|
+
{
|
707
|
+
MutexLock lock(&self->channel_args_mu_);
|
708
|
+
args = grpc_channel_args_copy(self->args_);
|
709
|
+
connection_manager = self->connection_manager_;
|
710
|
+
}
|
711
|
+
auto endpoint_cleanup = [&](grpc_error_handle error) {
|
712
|
+
grpc_endpoint_shutdown(tcp, error);
|
475
713
|
grpc_endpoint_destroy(tcp);
|
476
714
|
gpr_free(acceptor);
|
477
|
-
|
715
|
+
};
|
716
|
+
if (self->server_->config_fetcher() != nullptr) {
|
717
|
+
if (connection_manager == nullptr) {
|
718
|
+
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
719
|
+
"No ConnectionManager configured. Closing connection.");
|
720
|
+
endpoint_cleanup(error);
|
721
|
+
grpc_channel_args_destroy(args);
|
722
|
+
return;
|
723
|
+
}
|
724
|
+
// TODO(yashykt): Maybe combine the following two arg modifiers into a
|
725
|
+
// single one.
|
726
|
+
absl::StatusOr<grpc_channel_args*> args_result =
|
727
|
+
connection_manager->UpdateChannelArgsForConnection(args, tcp);
|
728
|
+
if (!args_result.ok()) {
|
729
|
+
gpr_log(GPR_DEBUG, "Closing connection: %s",
|
730
|
+
args_result.status().ToString().c_str());
|
731
|
+
endpoint_cleanup(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
732
|
+
args_result.status().ToString().c_str()));
|
733
|
+
return;
|
734
|
+
}
|
735
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
736
|
+
args = self->args_modifier_(*args_result, &error);
|
737
|
+
if (error != GRPC_ERROR_NONE) {
|
738
|
+
gpr_log(GPR_DEBUG, "Closing connection: %s",
|
739
|
+
grpc_error_std_string(error).c_str());
|
740
|
+
endpoint_cleanup(error);
|
741
|
+
grpc_channel_args_destroy(args);
|
742
|
+
return;
|
743
|
+
}
|
478
744
|
}
|
479
|
-
|
745
|
+
auto connection =
|
746
|
+
MakeOrphanable<ActiveConnection>(accepting_pollset, acceptor, args);
|
747
|
+
// Hold a ref to connection to allow starting handshake outside the
|
748
|
+
// critical region
|
749
|
+
RefCountedPtr<ActiveConnection> connection_ref = connection->Ref();
|
750
|
+
RefCountedPtr<Chttp2ServerListener> listener_ref;
|
480
751
|
{
|
481
752
|
MutexLock lock(&self->mu_);
|
482
|
-
|
753
|
+
// Shutdown the the connection if listener's stopped serving.
|
754
|
+
if (!self->shutdown_ && self->is_serving_) {
|
755
|
+
grpc_resource_user* resource_user =
|
756
|
+
self->server_->default_resource_user();
|
757
|
+
if (resource_user != nullptr &&
|
758
|
+
!grpc_resource_user_safe_alloc(resource_user,
|
759
|
+
GRPC_RESOURCE_QUOTA_CHANNEL_SIZE)) {
|
760
|
+
gpr_log(
|
761
|
+
GPR_ERROR,
|
762
|
+
"Memory quota exhausted, rejecting connection, no handshaking.");
|
763
|
+
} else {
|
764
|
+
// This ref needs to be taken in the critical region after having made
|
765
|
+
// sure that the listener has not been Orphaned, so as to avoid
|
766
|
+
// heap-use-after-free issues where `Ref()` is invoked when the ref of
|
767
|
+
// tcp_server_ has already reached 0. (Ref() implementation of
|
768
|
+
// Chttp2ServerListener is grpc_tcp_server_ref().)
|
769
|
+
listener_ref = self->Ref();
|
770
|
+
self->connections_.emplace(connection.get(), std::move(connection));
|
771
|
+
}
|
772
|
+
}
|
773
|
+
}
|
774
|
+
if (connection != nullptr) {
|
775
|
+
endpoint_cleanup(GRPC_ERROR_NONE);
|
776
|
+
} else {
|
777
|
+
connection_ref->Start(std::move(listener_ref), tcp, args);
|
483
778
|
}
|
484
|
-
// Deletes itself when done.
|
485
|
-
new ConnectionState(self, accepting_pollset, acceptor,
|
486
|
-
std::move(handshake_mgr), args, tcp);
|
487
779
|
grpc_channel_args_destroy(args);
|
488
780
|
}
|
489
781
|
|
490
782
|
void Chttp2ServerListener::TcpServerShutdownComplete(void* arg,
|
491
|
-
|
783
|
+
grpc_error_handle error) {
|
492
784
|
Chttp2ServerListener* self = static_cast<Chttp2ServerListener*>(arg);
|
493
|
-
|
494
|
-
|
495
|
-
{
|
496
|
-
MutexLock lock(&self->mu_);
|
497
|
-
destroy_done = self->on_destroy_done_;
|
498
|
-
GPR_ASSERT(self->shutdown_);
|
499
|
-
if (self->pending_handshake_mgrs_ != nullptr) {
|
500
|
-
self->pending_handshake_mgrs_->ShutdownAllPending(GRPC_ERROR_REF(error));
|
501
|
-
}
|
502
|
-
self->channelz_listen_socket_.reset();
|
503
|
-
}
|
504
|
-
// Flush queued work before destroying handshaker factory, since that
|
505
|
-
// may do a synchronous unref.
|
506
|
-
ExecCtx::Get()->Flush();
|
507
|
-
if (destroy_done != nullptr) {
|
508
|
-
ExecCtx::Run(DEBUG_LOCATION, destroy_done, GRPC_ERROR_REF(error));
|
509
|
-
ExecCtx::Get()->Flush();
|
510
|
-
}
|
785
|
+
self->channelz_listen_socket_.reset();
|
786
|
+
GRPC_ERROR_UNREF(error);
|
511
787
|
delete self;
|
512
788
|
}
|
513
789
|
|
@@ -519,10 +795,20 @@ void Chttp2ServerListener::Orphan() {
|
|
519
795
|
if (config_fetcher_watcher_ != nullptr) {
|
520
796
|
server_->config_fetcher()->CancelWatch(config_fetcher_watcher_);
|
521
797
|
}
|
798
|
+
std::map<ActiveConnection*, OrphanablePtr<ActiveConnection>> connections;
|
522
799
|
grpc_tcp_server* tcp_server;
|
523
800
|
{
|
524
801
|
MutexLock lock(&mu_);
|
525
802
|
shutdown_ = true;
|
803
|
+
is_serving_ = false;
|
804
|
+
// Orphan the connections so that they can start cleaning up.
|
805
|
+
connections = std::move(connections_);
|
806
|
+
// If the listener is currently set to be serving but has not been started
|
807
|
+
// yet, it means that `grpc_tcp_server_start` is in progress. Wait for the
|
808
|
+
// operation to finish to avoid causing races.
|
809
|
+
while (is_serving_ && !started_) {
|
810
|
+
started_cv_.Wait(&mu_);
|
811
|
+
}
|
526
812
|
tcp_server = tcp_server_;
|
527
813
|
}
|
528
814
|
grpc_tcp_server_shutdown_listeners(tcp_server);
|
@@ -535,19 +821,19 @@ void Chttp2ServerListener::Orphan() {
|
|
535
821
|
// Chttp2ServerAddPort()
|
536
822
|
//
|
537
823
|
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
824
|
+
grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr,
|
825
|
+
grpc_channel_args* args,
|
826
|
+
Chttp2ServerArgsModifier args_modifier,
|
827
|
+
int* port_num) {
|
542
828
|
if (strncmp(addr, "external:", 9) == 0) {
|
543
829
|
return grpc_core::Chttp2ServerListener::CreateWithAcceptor(
|
544
830
|
server, addr, args, args_modifier);
|
545
831
|
}
|
546
832
|
*port_num = -1;
|
547
833
|
grpc_resolved_addresses* resolved = nullptr;
|
548
|
-
std::vector<
|
834
|
+
std::vector<grpc_error_handle> error_list;
|
549
835
|
// Using lambda to avoid use of goto.
|
550
|
-
|
836
|
+
grpc_error_handle error = [&]() {
|
551
837
|
if (absl::StartsWith(addr, kUnixUriPrefix)) {
|
552
838
|
error = grpc_resolve_unix_domain_address(
|
553
839
|
addr + sizeof(kUnixUriPrefix) - 1, &resolved);
|
@@ -592,13 +878,13 @@ grpc_error* Chttp2ServerAddPort(Server* server, const char* addr,
|
|
592
878
|
resolved->naddrs - error_list.size(), resolved->naddrs);
|
593
879
|
error = GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
|
594
880
|
msg.c_str(), error_list.data(), error_list.size());
|
595
|
-
gpr_log(GPR_INFO, "WARNING: %s",
|
881
|
+
gpr_log(GPR_INFO, "WARNING: %s", grpc_error_std_string(error).c_str());
|
596
882
|
GRPC_ERROR_UNREF(error);
|
597
883
|
// we managed to bind some addresses: continue without error
|
598
884
|
}
|
599
885
|
return GRPC_ERROR_NONE;
|
600
886
|
}(); // lambda end
|
601
|
-
for (
|
887
|
+
for (grpc_error_handle error : error_list) {
|
602
888
|
GRPC_ERROR_UNREF(error);
|
603
889
|
}
|
604
890
|
grpc_channel_args_destroy(args);
|