grpc 1.18.0 → 1.22.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 +4731 -7404
- data/etc/roots.pem +146 -0
- data/include/grpc/grpc.h +11 -6
- data/include/grpc/grpc_security.h +297 -4
- data/include/grpc/grpc_security_constants.h +1 -1
- data/include/grpc/impl/codegen/byte_buffer.h +13 -0
- data/include/grpc/impl/codegen/gpr_types.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +30 -7
- data/include/grpc/impl/codegen/port_platform.h +88 -7
- data/include/grpc/impl/codegen/slice.h +2 -22
- data/include/grpc/impl/codegen/status.h +2 -1
- data/include/grpc/impl/codegen/sync_posix.h +18 -0
- data/include/grpc/slice.h +3 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
- data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
- data/src/core/ext/filters/client_channel/client_channel.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
- data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
- data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
- data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
- data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
- data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
- data/src/core/ext/filters/client_channel/resolver.cc +54 -1
- data/src/core/ext/filters/client_channel/resolver.h +52 -23
- data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
- data/src/core/ext/filters/client_channel/server_address.cc +4 -54
- data/src/core/ext/filters/client_channel/server_address.h +1 -13
- data/src/core/ext/filters/client_channel/service_config.cc +329 -0
- data/src/core/ext/filters/client_channel/service_config.h +205 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
- data/src/core/ext/filters/client_channel/subchannel.h +295 -128
- data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
- data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
- data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
- data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
- data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
- data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
- data/src/core/lib/channel/channel_args.cc +2 -101
- data/src/core/lib/channel/channel_args.h +3 -37
- data/src/core/lib/channel/channel_stack.h +10 -6
- data/src/core/lib/channel/channel_trace.cc +4 -4
- data/src/core/lib/channel/channel_trace.h +4 -4
- data/src/core/lib/channel/channelz.cc +168 -38
- data/src/core/lib/channel/channelz.h +40 -44
- data/src/core/lib/channel/channelz_registry.cc +75 -107
- data/src/core/lib/channel/channelz_registry.h +10 -28
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/handshaker.cc +151 -218
- data/src/core/lib/channel/handshaker.h +110 -101
- data/src/core/lib/channel/handshaker_factory.h +11 -19
- data/src/core/lib/channel/handshaker_registry.cc +67 -51
- data/src/core/lib/channel/handshaker_registry.h +21 -16
- data/src/core/lib/compression/algorithm_metadata.h +3 -3
- data/src/core/lib/compression/compression.cc +14 -9
- data/src/core/lib/compression/compression_args.cc +127 -0
- data/src/core/lib/compression/compression_args.h +55 -0
- data/src/core/lib/compression/compression_internal.cc +16 -12
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/stream_compression.cc +3 -2
- data/src/core/lib/compression/stream_compression.h +2 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
- data/src/core/lib/debug/trace.cc +13 -7
- data/src/core/lib/debug/trace.h +14 -1
- data/src/core/lib/gpr/arena.h +13 -9
- data/src/core/lib/gpr/cpu_posix.cc +5 -3
- data/src/core/lib/gpr/env.h +3 -6
- data/src/core/lib/gpr/env_linux.cc +6 -1
- data/src/core/lib/gpr/env_posix.cc +5 -0
- data/src/core/lib/gpr/env_windows.cc +7 -5
- data/src/core/lib/gpr/log.cc +9 -13
- data/src/core/lib/gpr/log_posix.cc +2 -1
- data/src/core/lib/gpr/string.cc +20 -7
- data/src/core/lib/gpr/string.h +10 -3
- data/src/core/lib/gpr/sync_posix.cc +65 -4
- data/src/core/lib/gpr/time.cc +8 -0
- data/src/core/lib/gpr/time_posix.cc +21 -2
- data/src/core/lib/gprpp/arena.cc +103 -0
- data/src/core/lib/gprpp/arena.h +121 -0
- data/src/core/lib/gprpp/atomic.h +75 -5
- data/src/core/lib/gprpp/fork.cc +13 -32
- data/src/core/lib/gprpp/fork.h +5 -1
- data/src/core/lib/gprpp/global_config.h +96 -0
- data/src/core/lib/gprpp/global_config_custom.h +29 -0
- data/src/core/lib/gprpp/global_config_env.cc +135 -0
- data/src/core/lib/gprpp/global_config_env.h +131 -0
- data/src/core/lib/gprpp/global_config_generic.h +44 -0
- data/src/core/lib/gprpp/inlined_vector.h +8 -0
- data/src/core/lib/gprpp/map.h +436 -0
- data/src/core/lib/gprpp/memory.h +2 -2
- data/src/core/lib/gprpp/optional.h +48 -0
- data/src/core/lib/gprpp/orphanable.h +6 -5
- data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
- data/src/core/lib/gprpp/ref_counted.h +36 -17
- data/src/core/lib/gprpp/sync.h +126 -0
- data/src/core/lib/gprpp/thd.h +42 -7
- data/src/core/lib/gprpp/thd_posix.cc +31 -13
- data/src/core/lib/gprpp/thd_windows.cc +47 -34
- data/src/core/lib/http/httpcli.cc +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +13 -15
- data/src/core/lib/http/parser.cc +3 -2
- data/src/core/lib/http/parser.h +2 -1
- data/src/core/lib/iomgr/buffer_list.cc +182 -24
- data/src/core/lib/iomgr/buffer_list.h +72 -10
- data/src/core/lib/iomgr/call_combiner.cc +84 -90
- data/src/core/lib/iomgr/call_combiner.h +75 -82
- data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
- data/src/core/lib/iomgr/cfstream_handle.h +86 -0
- data/src/core/lib/iomgr/combiner.cc +11 -3
- data/src/core/lib/iomgr/combiner.h +1 -1
- data/src/core/lib/iomgr/endpoint.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +3 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
- data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
- data/src/core/lib/iomgr/error.cc +21 -17
- data/src/core/lib/iomgr/error.h +36 -6
- data/src/core/lib/iomgr/error_cfstream.cc +52 -0
- data/src/core/lib/iomgr/error_cfstream.h +31 -0
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
- data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
- data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
- data/src/core/lib/iomgr/ev_posix.cc +29 -19
- data/src/core/lib/iomgr/ev_posix.h +19 -3
- data/src/core/lib/iomgr/ev_windows.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -0
- data/src/core/lib/iomgr/exec_ctx.h +137 -8
- data/src/core/lib/iomgr/executor.cc +147 -95
- data/src/core/lib/iomgr/executor.h +55 -49
- data/src/core/lib/iomgr/fork_posix.cc +6 -5
- data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
- data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.h +105 -3
- data/src/core/lib/iomgr/iomgr.cc +20 -13
- data/src/core/lib/iomgr/iomgr.h +15 -0
- data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
- data/src/core/lib/iomgr/iomgr_custom.h +2 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
- data/src/core/lib/iomgr/iomgr_internal.h +12 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
- data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
- data/src/core/lib/iomgr/lockfree_event.cc +4 -4
- data/src/core/lib/iomgr/port.h +35 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
- data/src/core/lib/iomgr/resource_quota.cc +40 -37
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
- data/src/core/lib/iomgr/socket_windows.cc +19 -0
- data/src/core/lib/iomgr/socket_windows.h +8 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
- data/src/core/lib/iomgr/tcp_custom.cc +10 -14
- data/src/core/lib/iomgr/tcp_posix.cc +256 -140
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +24 -0
- data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
- data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
- data/src/core/lib/iomgr/tcp_uv.cc +5 -7
- data/src/core/lib/iomgr/tcp_windows.cc +8 -14
- data/src/core/lib/iomgr/timer.h +2 -1
- data/src/core/lib/iomgr/timer_generic.cc +16 -16
- data/src/core/lib/iomgr/timer_manager.cc +20 -11
- data/src/core/lib/iomgr/udp_server.cc +8 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
- data/src/core/lib/json/json.cc +1 -4
- data/src/core/lib/profiling/basic_timers.cc +10 -4
- data/src/core/lib/security/context/security_context.cc +6 -7
- data/src/core/lib/security/context/security_context.h +3 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
- data/src/core/lib/security/credentials/credentials.h +9 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/security_connector.cc +0 -1
- data/src/core/lib/security/security_connector/security_connector.h +3 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
- data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
- data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
- data/src/core/lib/security/transport/auth_filters.h +5 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
- data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
- data/src/core/lib/security/transport/security_handshaker.cc +271 -303
- data/src/core/lib/security/transport/security_handshaker.h +11 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
- data/src/core/lib/slice/b64.h +2 -2
- data/src/core/lib/slice/percent_encoding.cc +3 -3
- data/src/core/lib/slice/percent_encoding.h +3 -3
- data/src/core/lib/slice/slice.cc +174 -122
- data/src/core/lib/slice/slice_buffer.cc +54 -21
- data/src/core/lib/slice/slice_hash_table.h +4 -4
- data/src/core/lib/slice/slice_intern.cc +49 -107
- data/src/core/lib/slice/slice_internal.h +264 -3
- data/src/core/lib/slice/slice_string_helpers.cc +10 -1
- data/src/core/lib/slice/slice_string_helpers.h +3 -1
- data/src/core/lib/slice/slice_utils.h +50 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
- data/src/core/lib/surface/api_trace.h +1 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
- data/src/core/lib/surface/call.cc +67 -46
- data/src/core/lib/surface/call.h +7 -2
- data/src/core/lib/surface/call_details.cc +0 -1
- data/src/core/lib/surface/channel.cc +89 -97
- data/src/core/lib/surface/channel.h +60 -6
- data/src/core/lib/surface/channel_init.h +5 -0
- data/src/core/lib/surface/completion_queue.cc +221 -216
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +82 -33
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.cc +1 -1
- data/src/core/lib/surface/lame_client.cc +5 -7
- data/src/core/lib/surface/server.cc +42 -47
- data/src/core/lib/surface/validate_metadata.cc +14 -8
- data/src/core/lib/surface/validate_metadata.h +13 -2
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.cc +3 -3
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/connectivity_state.cc +10 -40
- data/src/core/lib/transport/connectivity_state.h +0 -8
- data/src/core/lib/transport/error_utils.cc +12 -0
- data/src/core/lib/transport/metadata.cc +258 -267
- data/src/core/lib/transport/metadata.h +227 -16
- data/src/core/lib/transport/metadata_batch.cc +1 -1
- data/src/core/lib/transport/metadata_batch.h +1 -1
- data/src/core/lib/transport/static_metadata.cc +477 -399
- data/src/core/lib/transport/static_metadata.h +273 -182
- data/src/core/lib/transport/status_metadata.cc +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/timeout_encoding.h +1 -1
- data/src/core/lib/transport/transport.cc +39 -72
- data/src/core/lib/transport/transport.h +59 -24
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
- data/src/core/tsi/fake_transport_security.cc +4 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +12 -10
- data/src/core/tsi/ssl_transport_security.h +24 -4
- data/src/ruby/bin/math_pb.rb +18 -16
- data/src/ruby/ext/grpc/extconf.rb +12 -4
- data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
- data/src/ruby/ext/grpc/rb_channel.c +14 -10
- data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
- data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc.c +23 -24
- data/src/ruby/ext/grpc/rb_grpc.h +4 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
- data/src/ruby/ext/grpc/rb_server.c +8 -4
- data/src/ruby/lib/grpc/errors.rb +22 -3
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
- data/src/ruby/spec/errors_spec.rb +141 -0
- data/third_party/cares/cares/ares.h +12 -0
- data/third_party/cares/cares/ares_create_query.c +5 -1
- data/third_party/cares/cares/ares_data.c +74 -73
- data/third_party/cares/cares/ares_destroy.c +6 -1
- data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
- data/third_party/cares/cares/ares_gethostbyname.c +15 -4
- data/third_party/cares/cares/ares_getnameinfo.c +11 -0
- data/third_party/cares/cares/ares_init.c +274 -173
- data/third_party/cares/cares/ares_library_init.c +21 -3
- data/third_party/cares/cares/ares_options.c +6 -2
- data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
- data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
- data/third_party/cares/cares/ares_platform.c +7 -0
- data/third_party/cares/cares/ares_private.h +19 -11
- data/third_party/cares/cares/ares_process.c +27 -2
- data/third_party/cares/cares/ares_rules.h +1 -1
- data/third_party/cares/cares/ares_search.c +7 -0
- data/third_party/cares/cares/ares_send.c +6 -0
- data/third_party/cares/cares/ares_strsplit.c +174 -0
- data/third_party/cares/cares/ares_strsplit.h +43 -0
- data/third_party/cares/cares/ares_version.h +4 -4
- data/third_party/cares/cares/config-win32.h +1 -1
- data/third_party/cares/cares/inet_ntop.c +2 -3
- data/third_party/cares/config_darwin/ares_config.h +3 -0
- data/third_party/cares/config_freebsd/ares_config.h +3 -0
- data/third_party/cares/config_linux/ares_config.h +3 -0
- data/third_party/cares/config_openbsd/ares_config.h +3 -0
- metadata +83 -48
- data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
- data/src/core/ext/filters/client_channel/request_routing.h +0 -177
- data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
- data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
- data/src/core/lib/channel/handshaker_factory.cc +0 -42
- data/src/core/lib/gpr/arena.cc +0 -192
- data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
- data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
- data/src/core/lib/transport/service_config.cc +0 -106
- data/src/core/lib/transport/service_config.h +0 -249
@@ -26,81 +26,84 @@
|
|
26
26
|
#include <grpc/support/log.h>
|
27
27
|
#include <grpc/support/string_util.h>
|
28
28
|
|
29
|
+
#include "src/core/ext/filters/client_channel/service_config.h"
|
29
30
|
#include "src/core/lib/channel/channel_args.h"
|
30
31
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
31
32
|
#include "src/core/lib/gpr/string.h"
|
32
33
|
#include "src/core/lib/gprpp/ref_counted.h"
|
33
34
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
35
|
+
#include "src/core/lib/surface/call.h"
|
34
36
|
#include "src/core/lib/surface/channel_init.h"
|
35
|
-
#include "src/core/lib/transport/service_config.h"
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
int max_recv_size;
|
40
|
-
} message_size_limits;
|
38
|
+
static void recv_message_ready(void* user_data, grpc_error* error);
|
39
|
+
static void recv_trailing_metadata_ready(void* user_data, grpc_error* error);
|
41
40
|
|
42
41
|
namespace grpc_core {
|
43
|
-
namespace {
|
44
|
-
|
45
|
-
class MessageSizeLimits : public RefCounted<MessageSizeLimits> {
|
46
|
-
public:
|
47
|
-
static RefCountedPtr<MessageSizeLimits> CreateFromJson(const grpc_json* json);
|
48
|
-
|
49
|
-
const message_size_limits& limits() const { return limits_; }
|
50
42
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
friend T* grpc_core::New(Args&&... args);
|
55
|
-
|
56
|
-
MessageSizeLimits(int max_send_size, int max_recv_size) {
|
57
|
-
limits_.max_send_size = max_send_size;
|
58
|
-
limits_.max_recv_size = max_recv_size;
|
59
|
-
}
|
60
|
-
|
61
|
-
message_size_limits limits_;
|
62
|
-
};
|
43
|
+
namespace {
|
44
|
+
size_t g_message_size_parser_index;
|
45
|
+
} // namespace
|
63
46
|
|
64
|
-
|
65
|
-
const grpc_json* json) {
|
47
|
+
UniquePtr<ServiceConfig::ParsedConfig> MessageSizeParser::ParsePerMethodParams(
|
48
|
+
const grpc_json* json, grpc_error** error) {
|
49
|
+
GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
|
66
50
|
int max_request_message_bytes = -1;
|
67
51
|
int max_response_message_bytes = -1;
|
52
|
+
InlinedVector<grpc_error*, 4> error_list;
|
68
53
|
for (grpc_json* field = json->child; field != nullptr; field = field->next) {
|
69
54
|
if (field->key == nullptr) continue;
|
70
55
|
if (strcmp(field->key, "maxRequestMessageBytes") == 0) {
|
71
|
-
if (max_request_message_bytes >= 0)
|
56
|
+
if (max_request_message_bytes >= 0) {
|
57
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
58
|
+
"field:maxRequestMessageBytes error:Duplicate entry"));
|
59
|
+
} // Duplicate, continue parsing.
|
72
60
|
if (field->type != GRPC_JSON_STRING && field->type != GRPC_JSON_NUMBER) {
|
73
|
-
|
61
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
62
|
+
"field:maxRequestMessageBytes error:should be of type number"));
|
63
|
+
} else {
|
64
|
+
max_request_message_bytes = gpr_parse_nonnegative_int(field->value);
|
65
|
+
if (max_request_message_bytes == -1) {
|
66
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
67
|
+
"field:maxRequestMessageBytes error:should be non-negative"));
|
68
|
+
}
|
74
69
|
}
|
75
|
-
max_request_message_bytes = gpr_parse_nonnegative_int(field->value);
|
76
|
-
if (max_request_message_bytes == -1) return nullptr;
|
77
70
|
} else if (strcmp(field->key, "maxResponseMessageBytes") == 0) {
|
78
|
-
if (max_response_message_bytes >= 0)
|
71
|
+
if (max_response_message_bytes >= 0) {
|
72
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
73
|
+
"field:maxResponseMessageBytes error:Duplicate entry"));
|
74
|
+
} // Duplicate, continue parsing
|
79
75
|
if (field->type != GRPC_JSON_STRING && field->type != GRPC_JSON_NUMBER) {
|
80
|
-
|
76
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
77
|
+
"field:maxResponseMessageBytes error:should be of type number"));
|
78
|
+
} else {
|
79
|
+
max_response_message_bytes = gpr_parse_nonnegative_int(field->value);
|
80
|
+
if (max_response_message_bytes == -1) {
|
81
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
82
|
+
"field:maxResponseMessageBytes error:should be non-negative"));
|
83
|
+
}
|
81
84
|
}
|
82
|
-
max_response_message_bytes = gpr_parse_nonnegative_int(field->value);
|
83
|
-
if (max_response_message_bytes == -1) return nullptr;
|
84
85
|
}
|
85
86
|
}
|
86
|
-
|
87
|
-
|
87
|
+
if (!error_list.empty()) {
|
88
|
+
*error = GRPC_ERROR_CREATE_FROM_VECTOR("Message size parser", &error_list);
|
89
|
+
return nullptr;
|
90
|
+
}
|
91
|
+
return UniquePtr<ServiceConfig::ParsedConfig>(New<MessageSizeParsedConfig>(
|
92
|
+
max_request_message_bytes, max_response_message_bytes));
|
88
93
|
}
|
89
94
|
|
90
|
-
|
91
|
-
|
95
|
+
void MessageSizeParser::Register() {
|
96
|
+
g_message_size_parser_index = ServiceConfig::RegisterParser(
|
97
|
+
UniquePtr<ServiceConfig::Parser>(New<MessageSizeParser>()));
|
98
|
+
}
|
92
99
|
|
93
|
-
|
94
|
-
|
100
|
+
size_t MessageSizeParser::ParserIndex() { return g_message_size_parser_index; }
|
101
|
+
} // namespace grpc_core
|
95
102
|
|
96
103
|
namespace {
|
97
|
-
|
98
104
|
struct channel_data {
|
99
|
-
message_size_limits limits;
|
100
|
-
|
101
|
-
grpc_core::RefCountedPtr<grpc_core::SliceHashTable<
|
102
|
-
grpc_core::RefCountedPtr<grpc_core::MessageSizeLimits>>>
|
103
|
-
method_limit_table;
|
105
|
+
grpc_core::MessageSizeParsedConfig::message_size_limits limits;
|
106
|
+
grpc_core::RefCountedPtr<grpc_core::ServiceConfig> svc_cfg;
|
104
107
|
};
|
105
108
|
|
106
109
|
struct call_data {
|
@@ -116,29 +119,42 @@ struct call_data {
|
|
116
119
|
// Note: Per-method config is only available on the client, so we
|
117
120
|
// apply the max request size to the send limit and the max response
|
118
121
|
// size to the receive limit.
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
122
|
+
const grpc_core::MessageSizeParsedConfig* limits = nullptr;
|
123
|
+
grpc_core::ServiceConfig::CallData* svc_cfg_call_data = nullptr;
|
124
|
+
if (args.context != nullptr) {
|
125
|
+
svc_cfg_call_data = static_cast<grpc_core::ServiceConfig::CallData*>(
|
126
|
+
args.context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
127
|
+
}
|
128
|
+
if (svc_cfg_call_data != nullptr) {
|
129
|
+
limits = static_cast<const grpc_core::MessageSizeParsedConfig*>(
|
130
|
+
svc_cfg_call_data->GetMethodParsedConfig(
|
131
|
+
grpc_core::MessageSizeParser::ParserIndex()));
|
132
|
+
} else if (chand.svc_cfg != nullptr) {
|
133
|
+
const auto* objs_vector =
|
134
|
+
chand.svc_cfg->GetMethodParsedConfigVector(args.path);
|
135
|
+
if (objs_vector != nullptr) {
|
136
|
+
limits = static_cast<const grpc_core::MessageSizeParsedConfig*>(
|
137
|
+
(*objs_vector)[grpc_core::MessageSizeParser::ParserIndex()].get());
|
138
|
+
}
|
139
|
+
}
|
140
|
+
if (limits != nullptr) {
|
141
|
+
if (limits->limits().max_send_size >= 0 &&
|
142
|
+
(limits->limits().max_send_size < this->limits.max_send_size ||
|
143
|
+
this->limits.max_send_size < 0)) {
|
144
|
+
this->limits.max_send_size = limits->limits().max_send_size;
|
145
|
+
}
|
146
|
+
if (limits->limits().max_recv_size >= 0 &&
|
147
|
+
(limits->limits().max_recv_size < this->limits.max_recv_size ||
|
148
|
+
this->limits.max_recv_size < 0)) {
|
149
|
+
this->limits.max_recv_size = limits->limits().max_recv_size;
|
134
150
|
}
|
135
151
|
}
|
136
152
|
}
|
137
153
|
|
138
154
|
~call_data() { GRPC_ERROR_UNREF(error); }
|
139
155
|
|
140
|
-
|
141
|
-
message_size_limits limits;
|
156
|
+
grpc_core::CallCombiner* call_combiner;
|
157
|
+
grpc_core::MessageSizeParsedConfig::message_size_limits limits;
|
142
158
|
// Receive closures are chained: we inject this closure as the
|
143
159
|
// recv_message_ready up-call on transport_stream_op, and remember to
|
144
160
|
// call our next_recv_message_ready member after handling it.
|
@@ -284,9 +300,9 @@ static int default_size(const grpc_channel_args* args,
|
|
284
300
|
return without_minimal_stack;
|
285
301
|
}
|
286
302
|
|
287
|
-
message_size_limits get_message_size_limits(
|
303
|
+
grpc_core::MessageSizeParsedConfig::message_size_limits get_message_size_limits(
|
288
304
|
const grpc_channel_args* channel_args) {
|
289
|
-
message_size_limits lim;
|
305
|
+
grpc_core::MessageSizeParsedConfig::message_size_limits lim;
|
290
306
|
lim.max_send_size =
|
291
307
|
default_size(channel_args, GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH);
|
292
308
|
lim.max_recv_size =
|
@@ -313,18 +329,27 @@ static grpc_error* init_channel_elem(grpc_channel_element* elem,
|
|
313
329
|
grpc_channel_element_args* args) {
|
314
330
|
GPR_ASSERT(!args->is_last);
|
315
331
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
332
|
+
new (chand) channel_data();
|
316
333
|
chand->limits = get_message_size_limits(args->channel_args);
|
317
|
-
//
|
334
|
+
// TODO(yashykt): We only need to read GRPC_ARG_SERVICE_CONFIG in the case of
|
335
|
+
// direct channels. (Service config is otherwise stored in the call_context by
|
336
|
+
// client_channel filter.) If we ever need a second filter that also needs to
|
337
|
+
// parse GRPC_ARG_SERVICE_CONFIG, we should refactor this code and add a
|
338
|
+
// separate filter that reads GRPC_ARG_SERVICE_CONFIG and saves the parsed
|
339
|
+
// config in the call_context.
|
318
340
|
const grpc_arg* channel_arg =
|
319
341
|
grpc_channel_args_find(args->channel_args, GRPC_ARG_SERVICE_CONFIG);
|
320
342
|
const char* service_config_str = grpc_channel_arg_get_string(channel_arg);
|
321
343
|
if (service_config_str != nullptr) {
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
344
|
+
grpc_error* service_config_error = GRPC_ERROR_NONE;
|
345
|
+
auto svc_cfg = grpc_core::ServiceConfig::Create(service_config_str,
|
346
|
+
&service_config_error);
|
347
|
+
if (service_config_error == GRPC_ERROR_NONE) {
|
348
|
+
chand->svc_cfg = std::move(svc_cfg);
|
349
|
+
} else {
|
350
|
+
gpr_log(GPR_ERROR, "%s", grpc_error_string(service_config_error));
|
327
351
|
}
|
352
|
+
GRPC_ERROR_UNREF(service_config_error);
|
328
353
|
}
|
329
354
|
return GRPC_ERROR_NONE;
|
330
355
|
}
|
@@ -332,7 +357,7 @@ static grpc_error* init_channel_elem(grpc_channel_element* elem,
|
|
332
357
|
// Destructor for channel_data.
|
333
358
|
static void destroy_channel_elem(grpc_channel_element* elem) {
|
334
359
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
335
|
-
chand
|
360
|
+
chand->~channel_data();
|
336
361
|
}
|
337
362
|
|
338
363
|
const grpc_channel_filter grpc_message_size_filter = {
|
@@ -348,18 +373,34 @@ const grpc_channel_filter grpc_message_size_filter = {
|
|
348
373
|
grpc_channel_next_get_info,
|
349
374
|
"message_size"};
|
350
375
|
|
376
|
+
// Used for GRPC_CLIENT_SUBCHANNEL
|
377
|
+
static bool maybe_add_message_size_filter_subchannel(
|
378
|
+
grpc_channel_stack_builder* builder, void* arg) {
|
379
|
+
const grpc_channel_args* channel_args =
|
380
|
+
grpc_channel_stack_builder_get_channel_arguments(builder);
|
381
|
+
if (grpc_channel_args_want_minimal_stack(channel_args)) {
|
382
|
+
return true;
|
383
|
+
}
|
384
|
+
return grpc_channel_stack_builder_prepend_filter(
|
385
|
+
builder, &grpc_message_size_filter, nullptr, nullptr);
|
386
|
+
}
|
387
|
+
|
388
|
+
// Used for GRPC_CLIENT_DIRECT_CHANNEL and GRPC_SERVER_CHANNEL. Adds the filter
|
389
|
+
// only if message size limits or service config is specified.
|
351
390
|
static bool maybe_add_message_size_filter(grpc_channel_stack_builder* builder,
|
352
391
|
void* arg) {
|
353
392
|
const grpc_channel_args* channel_args =
|
354
393
|
grpc_channel_stack_builder_get_channel_arguments(builder);
|
355
394
|
bool enable = false;
|
356
|
-
message_size_limits lim =
|
395
|
+
grpc_core::MessageSizeParsedConfig::message_size_limits lim =
|
396
|
+
get_message_size_limits(channel_args);
|
357
397
|
if (lim.max_send_size != -1 || lim.max_recv_size != -1) {
|
358
398
|
enable = true;
|
359
399
|
}
|
360
400
|
const grpc_arg* a =
|
361
401
|
grpc_channel_args_find(channel_args, GRPC_ARG_SERVICE_CONFIG);
|
362
|
-
|
402
|
+
const char* svc_cfg_str = grpc_channel_arg_get_string(a);
|
403
|
+
if (svc_cfg_str != nullptr) {
|
363
404
|
enable = true;
|
364
405
|
}
|
365
406
|
if (enable) {
|
@@ -371,15 +412,16 @@ static bool maybe_add_message_size_filter(grpc_channel_stack_builder* builder,
|
|
371
412
|
}
|
372
413
|
|
373
414
|
void grpc_message_size_filter_init(void) {
|
374
|
-
grpc_channel_init_register_stage(
|
375
|
-
|
376
|
-
|
415
|
+
grpc_channel_init_register_stage(
|
416
|
+
GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
417
|
+
maybe_add_message_size_filter_subchannel, nullptr);
|
377
418
|
grpc_channel_init_register_stage(GRPC_CLIENT_DIRECT_CHANNEL,
|
378
419
|
GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
379
420
|
maybe_add_message_size_filter, nullptr);
|
380
421
|
grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL,
|
381
422
|
GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
382
423
|
maybe_add_message_size_filter, nullptr);
|
424
|
+
grpc_core::MessageSizeParser::Register();
|
383
425
|
}
|
384
426
|
|
385
427
|
void grpc_message_size_filter_shutdown(void) {}
|
@@ -19,8 +19,41 @@
|
|
19
19
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
22
|
+
#include "src/core/ext/filters/client_channel/service_config.h"
|
22
23
|
#include "src/core/lib/channel/channel_stack.h"
|
23
24
|
|
24
25
|
extern const grpc_channel_filter grpc_message_size_filter;
|
25
26
|
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
class MessageSizeParsedConfig : public ServiceConfig::ParsedConfig {
|
30
|
+
public:
|
31
|
+
struct message_size_limits {
|
32
|
+
int max_send_size;
|
33
|
+
int max_recv_size;
|
34
|
+
};
|
35
|
+
|
36
|
+
MessageSizeParsedConfig(int max_send_size, int max_recv_size) {
|
37
|
+
limits_.max_send_size = max_send_size;
|
38
|
+
limits_.max_recv_size = max_recv_size;
|
39
|
+
}
|
40
|
+
|
41
|
+
const message_size_limits& limits() const { return limits_; }
|
42
|
+
|
43
|
+
private:
|
44
|
+
message_size_limits limits_;
|
45
|
+
};
|
46
|
+
|
47
|
+
class MessageSizeParser : public ServiceConfig::Parser {
|
48
|
+
public:
|
49
|
+
UniquePtr<ServiceConfig::ParsedConfig> ParsePerMethodParams(
|
50
|
+
const grpc_json* json, grpc_error** error) override;
|
51
|
+
|
52
|
+
static void Register();
|
53
|
+
|
54
|
+
static size_t ParserIndex();
|
55
|
+
};
|
56
|
+
|
57
|
+
} // namespace grpc_core
|
58
|
+
|
26
59
|
#endif /* GRPC_CORE_EXT_FILTERS_MESSAGE_SIZE_MESSAGE_SIZE_FILTER_H */
|
@@ -23,7 +23,7 @@
|
|
23
23
|
|
24
24
|
#include <string.h>
|
25
25
|
|
26
|
-
/*
|
26
|
+
/* Returns 1 if the version is supported, 0 otherwise. */
|
27
27
|
int grpc_chttp2_is_alpn_version_supported(const char* version, size_t size);
|
28
28
|
|
29
29
|
/* Returns the number of protocol versions to advertise */
|
@@ -55,7 +55,7 @@ typedef struct {
|
|
55
55
|
|
56
56
|
grpc_closure connected;
|
57
57
|
|
58
|
-
|
58
|
+
grpc_core::RefCountedPtr<grpc_core::HandshakeManager> handshake_mgr;
|
59
59
|
} chttp2_connector;
|
60
60
|
|
61
61
|
static void chttp2_connector_ref(grpc_connector* con) {
|
@@ -79,7 +79,7 @@ static void chttp2_connector_shutdown(grpc_connector* con, grpc_error* why) {
|
|
79
79
|
gpr_mu_lock(&c->mu);
|
80
80
|
c->shutdown = true;
|
81
81
|
if (c->handshake_mgr != nullptr) {
|
82
|
-
|
82
|
+
c->handshake_mgr->Shutdown(GRPC_ERROR_REF(why));
|
83
83
|
}
|
84
84
|
// If handshaking is not yet in progress, shutdown the endpoint.
|
85
85
|
// Otherwise, the handshaker will do this for us.
|
@@ -91,7 +91,7 @@ static void chttp2_connector_shutdown(grpc_connector* con, grpc_error* why) {
|
|
91
91
|
}
|
92
92
|
|
93
93
|
static void on_handshake_done(void* arg, grpc_error* error) {
|
94
|
-
|
94
|
+
auto* args = static_cast<grpc_core::HandshakerArgs*>(arg);
|
95
95
|
chttp2_connector* c = static_cast<chttp2_connector*>(args->user_data);
|
96
96
|
gpr_mu_lock(&c->mu);
|
97
97
|
if (error != GRPC_ERROR_NONE || c->shutdown) {
|
@@ -152,20 +152,20 @@ static void on_handshake_done(void* arg, grpc_error* error) {
|
|
152
152
|
grpc_closure* notify = c->notify;
|
153
153
|
c->notify = nullptr;
|
154
154
|
GRPC_CLOSURE_SCHED(notify, error);
|
155
|
-
|
156
|
-
c->handshake_mgr = nullptr;
|
155
|
+
c->handshake_mgr.reset();
|
157
156
|
gpr_mu_unlock(&c->mu);
|
158
157
|
chttp2_connector_unref(reinterpret_cast<grpc_connector*>(c));
|
159
158
|
}
|
160
159
|
|
161
160
|
static void start_handshake_locked(chttp2_connector* c) {
|
162
|
-
c->handshake_mgr =
|
163
|
-
|
164
|
-
|
161
|
+
c->handshake_mgr = grpc_core::MakeRefCounted<grpc_core::HandshakeManager>();
|
162
|
+
grpc_core::HandshakerRegistry::AddHandshakers(
|
163
|
+
grpc_core::HANDSHAKER_CLIENT, c->args.channel_args,
|
164
|
+
c->args.interested_parties, c->handshake_mgr.get());
|
165
165
|
grpc_endpoint_add_to_pollset_set(c->endpoint, c->args.interested_parties);
|
166
|
-
|
167
|
-
|
168
|
-
|
166
|
+
c->handshake_mgr->DoHandshake(c->endpoint, c->args.channel_args,
|
167
|
+
c->args.deadline, nullptr /* acceptor */,
|
168
|
+
on_handshake_done, c);
|
169
169
|
c->endpoint = nullptr; // Endpoint handed off to handshake manager.
|
170
170
|
}
|
171
171
|
|
@@ -202,7 +202,8 @@ static void chttp2_connector_connect(grpc_connector* con,
|
|
202
202
|
grpc_closure* notify) {
|
203
203
|
chttp2_connector* c = reinterpret_cast<chttp2_connector*>(con);
|
204
204
|
grpc_resolved_address addr;
|
205
|
-
|
205
|
+
grpc_core::Subchannel::GetAddressFromSubchannelAddressArg(args->channel_args,
|
206
|
+
&addr);
|
206
207
|
gpr_mu_lock(&c->mu);
|
207
208
|
GPR_ASSERT(c->notify == nullptr);
|
208
209
|
c->notify = notify;
|
@@ -33,52 +33,53 @@
|
|
33
33
|
#include "src/core/lib/surface/api_trace.h"
|
34
34
|
#include "src/core/lib/surface/channel.h"
|
35
35
|
|
36
|
-
|
37
|
-
grpc_client_channel_factory* cc_factory) {}
|
36
|
+
namespace grpc_core {
|
38
37
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
grpc_channel_args_destroy(const_cast<grpc_channel_args*>(final_sc_args.args));
|
51
|
-
return s;
|
52
|
-
}
|
38
|
+
class Chttp2InsecureClientChannelFactory : public ClientChannelFactory {
|
39
|
+
public:
|
40
|
+
Subchannel* CreateSubchannel(const grpc_channel_args* args) override {
|
41
|
+
grpc_channel_args* new_args =
|
42
|
+
grpc_default_authority_add_if_not_present(args);
|
43
|
+
grpc_connector* connector = grpc_chttp2_connector_create();
|
44
|
+
Subchannel* s = Subchannel::Create(connector, new_args);
|
45
|
+
grpc_connector_unref(connector);
|
46
|
+
grpc_channel_args_destroy(new_args);
|
47
|
+
return s;
|
48
|
+
}
|
53
49
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
50
|
+
grpc_channel* CreateChannel(const char* target,
|
51
|
+
const grpc_channel_args* args) override {
|
52
|
+
if (target == nullptr) {
|
53
|
+
gpr_log(GPR_ERROR, "cannot create channel with NULL target name");
|
54
|
+
return nullptr;
|
55
|
+
}
|
56
|
+
// Add channel arg containing the server URI.
|
57
|
+
UniquePtr<char> canonical_target =
|
58
|
+
ResolverRegistry::AddDefaultPrefixIfNeeded(target);
|
59
|
+
grpc_arg arg = grpc_channel_arg_string_create(
|
60
|
+
const_cast<char*>(GRPC_ARG_SERVER_URI), canonical_target.get());
|
61
|
+
const char* to_remove[] = {GRPC_ARG_SERVER_URI};
|
62
|
+
grpc_channel_args* new_args =
|
63
|
+
grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
|
64
|
+
grpc_channel* channel =
|
65
|
+
grpc_channel_create(target, new_args, GRPC_CLIENT_CHANNEL, nullptr);
|
66
|
+
grpc_channel_args_destroy(new_args);
|
67
|
+
return channel;
|
60
68
|
}
|
61
|
-
|
62
|
-
grpc_core::UniquePtr<char> canonical_target =
|
63
|
-
grpc_core::ResolverRegistry::AddDefaultPrefixIfNeeded(target);
|
64
|
-
grpc_arg arg = grpc_channel_arg_string_create(
|
65
|
-
const_cast<char*>(GRPC_ARG_SERVER_URI), canonical_target.get());
|
66
|
-
const char* to_remove[] = {GRPC_ARG_SERVER_URI};
|
67
|
-
grpc_channel_args* new_args =
|
68
|
-
grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
|
69
|
-
grpc_channel* channel =
|
70
|
-
grpc_channel_create(target, new_args, GRPC_CLIENT_CHANNEL, nullptr);
|
71
|
-
grpc_channel_args_destroy(new_args);
|
72
|
-
return channel;
|
73
|
-
}
|
69
|
+
};
|
74
70
|
|
75
|
-
|
76
|
-
{client_channel_factory_ref, client_channel_factory_unref,
|
77
|
-
client_channel_factory_create_subchannel,
|
78
|
-
client_channel_factory_create_channel};
|
71
|
+
} // namespace grpc_core
|
79
72
|
|
80
|
-
|
81
|
-
|
73
|
+
namespace {
|
74
|
+
|
75
|
+
grpc_core::Chttp2InsecureClientChannelFactory* g_factory;
|
76
|
+
gpr_once g_factory_once = GPR_ONCE_INIT;
|
77
|
+
|
78
|
+
void FactoryInit() {
|
79
|
+
g_factory = grpc_core::New<grpc_core::Chttp2InsecureClientChannelFactory>();
|
80
|
+
}
|
81
|
+
|
82
|
+
} // namespace
|
82
83
|
|
83
84
|
/* Create a client channel:
|
84
85
|
Asynchronously: - resolve target
|
@@ -93,16 +94,13 @@ grpc_channel* grpc_insecure_channel_create(const char* target,
|
|
93
94
|
(target, args, reserved));
|
94
95
|
GPR_ASSERT(reserved == nullptr);
|
95
96
|
// Add channel arg containing the client channel factory.
|
96
|
-
|
97
|
-
|
97
|
+
gpr_once_init(&g_factory_once, FactoryInit);
|
98
|
+
grpc_arg arg = grpc_core::ClientChannelFactory::CreateChannelArg(g_factory);
|
98
99
|
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(args, &arg, 1);
|
99
100
|
// Create channel.
|
100
|
-
grpc_channel* channel =
|
101
|
-
&client_channel_factory, target, GRPC_CLIENT_CHANNEL_TYPE_REGULAR,
|
102
|
-
new_args);
|
101
|
+
grpc_channel* channel = g_factory->CreateChannel(target, new_args);
|
103
102
|
// Clean up.
|
104
103
|
grpc_channel_args_destroy(new_args);
|
105
|
-
|
106
104
|
return channel != nullptr ? channel
|
107
105
|
: grpc_lame_client_channel_create(
|
108
106
|
target, GRPC_STATUS_INTERNAL,
|