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
@@ -0,0 +1,97 @@
|
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2018 gRPC authors.
|
4
|
+
//
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
// you may not use this file except in compliance with the License.
|
7
|
+
// You may obtain a copy of the License at
|
8
|
+
//
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
//
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
// See the License for the specific language governing permissions and
|
15
|
+
// limitations under the License.
|
16
|
+
//
|
17
|
+
//
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
|
22
|
+
|
23
|
+
#include "src/core/lib/gpr/useful.h"
|
24
|
+
|
25
|
+
// The subchannel pool to reuse subchannels.
|
26
|
+
#define GRPC_ARG_SUBCHANNEL_POOL "grpc.subchannel_pool"
|
27
|
+
// The subchannel key ID that is only used in test to make each key unique.
|
28
|
+
#define GRPC_ARG_SUBCHANNEL_KEY_TEST_ONLY_ID "grpc.subchannel_key_test_only_id"
|
29
|
+
|
30
|
+
namespace grpc_core {
|
31
|
+
|
32
|
+
TraceFlag grpc_subchannel_pool_trace(false, "subchannel_pool");
|
33
|
+
|
34
|
+
SubchannelKey::SubchannelKey(const grpc_channel_args* args) {
|
35
|
+
Init(args, grpc_channel_args_normalize);
|
36
|
+
}
|
37
|
+
|
38
|
+
SubchannelKey::~SubchannelKey() {
|
39
|
+
grpc_channel_args_destroy(const_cast<grpc_channel_args*>(args_));
|
40
|
+
}
|
41
|
+
|
42
|
+
SubchannelKey::SubchannelKey(const SubchannelKey& other) {
|
43
|
+
Init(other.args_, grpc_channel_args_copy);
|
44
|
+
}
|
45
|
+
|
46
|
+
SubchannelKey& SubchannelKey::operator=(const SubchannelKey& other) {
|
47
|
+
grpc_channel_args_destroy(const_cast<grpc_channel_args*>(args_));
|
48
|
+
Init(other.args_, grpc_channel_args_copy);
|
49
|
+
return *this;
|
50
|
+
}
|
51
|
+
|
52
|
+
int SubchannelKey::Cmp(const SubchannelKey& other) const {
|
53
|
+
return grpc_channel_args_compare(args_, other.args_);
|
54
|
+
}
|
55
|
+
|
56
|
+
void SubchannelKey::Init(
|
57
|
+
const grpc_channel_args* args,
|
58
|
+
grpc_channel_args* (*copy_channel_args)(const grpc_channel_args* args)) {
|
59
|
+
args_ = copy_channel_args(args);
|
60
|
+
}
|
61
|
+
|
62
|
+
namespace {
|
63
|
+
|
64
|
+
void* arg_copy(void* p) {
|
65
|
+
auto* subchannel_pool = static_cast<SubchannelPoolInterface*>(p);
|
66
|
+
subchannel_pool->Ref().release();
|
67
|
+
return p;
|
68
|
+
}
|
69
|
+
|
70
|
+
void arg_destroy(void* p) {
|
71
|
+
auto* subchannel_pool = static_cast<SubchannelPoolInterface*>(p);
|
72
|
+
subchannel_pool->Unref();
|
73
|
+
}
|
74
|
+
|
75
|
+
int arg_cmp(void* a, void* b) { return GPR_ICMP(a, b); }
|
76
|
+
|
77
|
+
const grpc_arg_pointer_vtable subchannel_pool_arg_vtable = {
|
78
|
+
arg_copy, arg_destroy, arg_cmp};
|
79
|
+
|
80
|
+
} // namespace
|
81
|
+
|
82
|
+
grpc_arg SubchannelPoolInterface::CreateChannelArg(
|
83
|
+
SubchannelPoolInterface* subchannel_pool) {
|
84
|
+
return grpc_channel_arg_pointer_create(
|
85
|
+
const_cast<char*>(GRPC_ARG_SUBCHANNEL_POOL), subchannel_pool,
|
86
|
+
&subchannel_pool_arg_vtable);
|
87
|
+
}
|
88
|
+
|
89
|
+
SubchannelPoolInterface*
|
90
|
+
SubchannelPoolInterface::GetSubchannelPoolFromChannelArgs(
|
91
|
+
const grpc_channel_args* args) {
|
92
|
+
const grpc_arg* arg = grpc_channel_args_find(args, GRPC_ARG_SUBCHANNEL_POOL);
|
93
|
+
if (arg == nullptr || arg->type != GRPC_ARG_POINTER) return nullptr;
|
94
|
+
return static_cast<SubchannelPoolInterface*>(arg->value.pointer.p);
|
95
|
+
}
|
96
|
+
|
97
|
+
} // namespace grpc_core
|
@@ -0,0 +1,94 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2018 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_POOL_INTERFACE_H
|
20
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_POOL_INTERFACE_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include "src/core/lib/avl/avl.h"
|
25
|
+
#include "src/core/lib/channel/channel_args.h"
|
26
|
+
#include "src/core/lib/gprpp/abstract.h"
|
27
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
28
|
+
|
29
|
+
namespace grpc_core {
|
30
|
+
|
31
|
+
class Subchannel;
|
32
|
+
|
33
|
+
extern TraceFlag grpc_subchannel_pool_trace;
|
34
|
+
|
35
|
+
// A key that can uniquely identify a subchannel.
|
36
|
+
class SubchannelKey {
|
37
|
+
public:
|
38
|
+
explicit SubchannelKey(const grpc_channel_args* args);
|
39
|
+
~SubchannelKey();
|
40
|
+
|
41
|
+
// Copyable.
|
42
|
+
SubchannelKey(const SubchannelKey& other);
|
43
|
+
SubchannelKey& operator=(const SubchannelKey& other);
|
44
|
+
// Not movable.
|
45
|
+
SubchannelKey(SubchannelKey&&) = delete;
|
46
|
+
SubchannelKey& operator=(SubchannelKey&&) = delete;
|
47
|
+
|
48
|
+
int Cmp(const SubchannelKey& other) const;
|
49
|
+
|
50
|
+
private:
|
51
|
+
// Initializes the subchannel key with the given \a args and the function to
|
52
|
+
// copy channel args.
|
53
|
+
void Init(
|
54
|
+
const grpc_channel_args* args,
|
55
|
+
grpc_channel_args* (*copy_channel_args)(const grpc_channel_args* args));
|
56
|
+
|
57
|
+
const grpc_channel_args* args_;
|
58
|
+
};
|
59
|
+
|
60
|
+
// Interface for subchannel pool.
|
61
|
+
// TODO(juanlishen): This refcounting mechanism may lead to memory leak.
|
62
|
+
// To solve that, we should force polling to flush any pending callbacks, then
|
63
|
+
// shut down safely. See https://github.com/grpc/grpc/issues/12560.
|
64
|
+
class SubchannelPoolInterface : public RefCounted<SubchannelPoolInterface> {
|
65
|
+
public:
|
66
|
+
SubchannelPoolInterface() : RefCounted(&grpc_subchannel_pool_trace) {}
|
67
|
+
virtual ~SubchannelPoolInterface() {}
|
68
|
+
|
69
|
+
// Registers a subchannel against a key. Returns the subchannel registered
|
70
|
+
// with \a key, which may be different from \a constructed because we reuse
|
71
|
+
// (instead of update) any existing subchannel already registered with \a key.
|
72
|
+
virtual Subchannel* RegisterSubchannel(SubchannelKey* key,
|
73
|
+
Subchannel* constructed) GRPC_ABSTRACT;
|
74
|
+
|
75
|
+
// Removes the registered subchannel found by \a key.
|
76
|
+
virtual void UnregisterSubchannel(SubchannelKey* key) GRPC_ABSTRACT;
|
77
|
+
|
78
|
+
// Finds the subchannel registered for the given subchannel key. Returns NULL
|
79
|
+
// if no such channel exists. Thread-safe.
|
80
|
+
virtual Subchannel* FindSubchannel(SubchannelKey* key) GRPC_ABSTRACT;
|
81
|
+
|
82
|
+
// Creates a channel arg from \a subchannel pool.
|
83
|
+
static grpc_arg CreateChannelArg(SubchannelPoolInterface* subchannel_pool);
|
84
|
+
|
85
|
+
// Gets the subchannel pool from the channel args.
|
86
|
+
static SubchannelPoolInterface* GetSubchannelPoolFromChannelArgs(
|
87
|
+
const grpc_channel_args* args);
|
88
|
+
|
89
|
+
GRPC_ABSTRACT_BASE_CLASS
|
90
|
+
};
|
91
|
+
|
92
|
+
} // namespace grpc_core
|
93
|
+
|
94
|
+
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_POOL_INTERFACE_H */
|
@@ -68,8 +68,7 @@ static void timer_callback(void* arg, grpc_error* error) {
|
|
68
68
|
error = grpc_error_set_int(
|
69
69
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Deadline Exceeded"),
|
70
70
|
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_DEADLINE_EXCEEDED);
|
71
|
-
|
72
|
-
GRPC_ERROR_REF(error));
|
71
|
+
deadline_state->call_combiner->Cancel(GRPC_ERROR_REF(error));
|
73
72
|
GRPC_CLOSURE_INIT(&deadline_state->timer_callback,
|
74
73
|
send_cancel_op_in_call_combiner, elem,
|
75
74
|
grpc_schedule_on_exec_ctx);
|
@@ -124,7 +123,7 @@ static void cancel_timer_if_needed(grpc_deadline_state* deadline_state) {
|
|
124
123
|
deadline_state->timer_state = GRPC_DEADLINE_STATE_FINISHED;
|
125
124
|
grpc_timer_cancel(&deadline_state->timer);
|
126
125
|
} else {
|
127
|
-
// timer was either in
|
126
|
+
// timer was either in STATE_INITIAL (nothing to cancel)
|
128
127
|
// OR in STATE_FINISHED (again nothing to cancel)
|
129
128
|
}
|
130
129
|
}
|
@@ -183,7 +182,7 @@ static void start_timer_after_init(void* arg, grpc_error* error) {
|
|
183
182
|
|
184
183
|
grpc_deadline_state::grpc_deadline_state(grpc_call_element* elem,
|
185
184
|
grpc_call_stack* call_stack,
|
186
|
-
|
185
|
+
grpc_core::CallCombiner* call_combiner,
|
187
186
|
grpc_millis deadline)
|
188
187
|
: call_stack(call_stack), call_combiner(call_combiner) {
|
189
188
|
// Deadline will always be infinite on servers, so the timer will only be
|
@@ -32,12 +32,13 @@ enum grpc_deadline_timer_state {
|
|
32
32
|
// Must be the first field in the filter's call_data.
|
33
33
|
struct grpc_deadline_state {
|
34
34
|
grpc_deadline_state(grpc_call_element* elem, grpc_call_stack* call_stack,
|
35
|
-
|
35
|
+
grpc_core::CallCombiner* call_combiner,
|
36
|
+
grpc_millis deadline);
|
36
37
|
~grpc_deadline_state();
|
37
38
|
|
38
39
|
// We take a reference to the call stack for the timer callback.
|
39
40
|
grpc_call_stack* call_stack;
|
40
|
-
|
41
|
+
grpc_core::CallCombiner* call_combiner;
|
41
42
|
grpc_deadline_timer_state timer_state = GRPC_DEADLINE_STATE_INITIAL;
|
42
43
|
grpc_timer timer;
|
43
44
|
grpc_closure timer_callback;
|
@@ -36,7 +36,7 @@
|
|
36
36
|
#define EXPECTED_CONTENT_TYPE "application/grpc"
|
37
37
|
#define EXPECTED_CONTENT_TYPE_LENGTH sizeof(EXPECTED_CONTENT_TYPE) - 1
|
38
38
|
|
39
|
-
/* default maximum size of payload
|
39
|
+
/* default maximum size of payload eligible for GET request */
|
40
40
|
static constexpr size_t kMaxPayloadSizeForGet = 2048;
|
41
41
|
|
42
42
|
static void recv_initial_metadata_ready(void* user_data, grpc_error* error);
|
@@ -62,7 +62,7 @@ struct call_data {
|
|
62
62
|
|
63
63
|
~call_data() { GRPC_ERROR_UNREF(recv_initial_metadata_error); }
|
64
64
|
|
65
|
-
|
65
|
+
grpc_core::CallCombiner* call_combiner;
|
66
66
|
// State for handling send_initial_metadata ops.
|
67
67
|
grpc_linked_mdelem method;
|
68
68
|
grpc_linked_mdelem scheme;
|
@@ -107,7 +107,8 @@ static grpc_error* client_filter_incoming_metadata(grpc_call_element* elem,
|
|
107
107
|
* https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md.
|
108
108
|
*/
|
109
109
|
if (b->idx.named.grpc_status != nullptr ||
|
110
|
-
|
110
|
+
grpc_mdelem_static_value_eq(b->idx.named.status->md,
|
111
|
+
GRPC_MDELEM_STATUS_200)) {
|
111
112
|
grpc_metadata_batch_remove(b, b->idx.named.status);
|
112
113
|
} else {
|
113
114
|
char* val = grpc_dump_slice(GRPC_MDVALUE(b->idx.named.status->md),
|
@@ -140,8 +141,9 @@ static grpc_error* client_filter_incoming_metadata(grpc_call_element* elem,
|
|
140
141
|
}
|
141
142
|
|
142
143
|
if (b->idx.named.content_type != nullptr) {
|
143
|
-
if (!
|
144
|
-
|
144
|
+
if (!grpc_mdelem_static_value_eq(
|
145
|
+
b->idx.named.content_type->md,
|
146
|
+
GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC)) {
|
145
147
|
if (grpc_slice_buf_start_eq(GRPC_MDVALUE(b->idx.named.content_type->md),
|
146
148
|
EXPECTED_CONTENT_TYPE,
|
147
149
|
EXPECTED_CONTENT_TYPE_LENGTH) &&
|
@@ -25,7 +25,7 @@
|
|
25
25
|
/* Processes metadata on the client side for HTTP2 transports */
|
26
26
|
extern const grpc_channel_filter grpc_http_client_filter;
|
27
27
|
|
28
|
-
/* Channel arg to determine maximum size of payload
|
28
|
+
/* Channel arg to determine maximum size of payload eligible for GET request */
|
29
29
|
#define GRPC_ARG_MAX_PAYLOAD_SIZE_FOR_GET "grpc.max_payload_size_for_get"
|
30
30
|
|
31
31
|
#endif /* GRPC_CORE_EXT_FILTERS_HTTP_CLIENT_HTTP_CLIENT_FILTER_H */
|
@@ -40,11 +40,12 @@ namespace {
|
|
40
40
|
|
41
41
|
struct call_data {
|
42
42
|
grpc_linked_mdelem authority_storage;
|
43
|
-
|
43
|
+
grpc_core::CallCombiner* call_combiner;
|
44
44
|
};
|
45
45
|
|
46
46
|
struct channel_data {
|
47
47
|
grpc_slice default_authority;
|
48
|
+
grpc_mdelem default_authority_mdelem;
|
48
49
|
};
|
49
50
|
|
50
51
|
void authority_start_transport_stream_op_batch(
|
@@ -59,8 +60,7 @@ void authority_start_transport_stream_op_batch(
|
|
59
60
|
initial_metadata->idx.named.authority == nullptr) {
|
60
61
|
grpc_error* error = grpc_metadata_batch_add_head(
|
61
62
|
initial_metadata, &calld->authority_storage,
|
62
|
-
|
63
|
-
nullptr));
|
63
|
+
GRPC_MDELEM_REF(chand->default_authority_mdelem));
|
64
64
|
if (error != GRPC_ERROR_NONE) {
|
65
65
|
grpc_transport_stream_op_batch_finish_with_failure(batch, error,
|
66
66
|
calld->call_combiner);
|
@@ -103,6 +103,8 @@ grpc_error* init_channel_elem(grpc_channel_element* elem,
|
|
103
103
|
}
|
104
104
|
chand->default_authority =
|
105
105
|
grpc_slice_intern(grpc_slice_from_static_string(default_authority_str));
|
106
|
+
chand->default_authority_mdelem = grpc_mdelem_create(
|
107
|
+
GRPC_MDSTR_AUTHORITY, chand->default_authority, nullptr);
|
106
108
|
GPR_ASSERT(!args->is_last);
|
107
109
|
return GRPC_ERROR_NONE;
|
108
110
|
}
|
@@ -111,6 +113,7 @@ grpc_error* init_channel_elem(grpc_channel_element* elem,
|
|
111
113
|
void destroy_channel_elem(grpc_channel_element* elem) {
|
112
114
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
113
115
|
grpc_slice_unref_internal(chand->default_authority);
|
116
|
+
GRPC_MDELEM_UNREF(chand->default_authority_mdelem);
|
114
117
|
}
|
115
118
|
} // namespace
|
116
119
|
|
@@ -29,6 +29,7 @@
|
|
29
29
|
#include "src/core/ext/filters/http/message_compress/message_compress_filter.h"
|
30
30
|
#include "src/core/lib/channel/channel_args.h"
|
31
31
|
#include "src/core/lib/compression/algorithm_metadata.h"
|
32
|
+
#include "src/core/lib/compression/compression_args.h"
|
32
33
|
#include "src/core/lib/compression/compression_internal.h"
|
33
34
|
#include "src/core/lib/compression/message_compress.h"
|
34
35
|
#include "src/core/lib/gpr/string.h"
|
@@ -71,7 +72,7 @@ struct call_data {
|
|
71
72
|
GRPC_ERROR_UNREF(cancel_error);
|
72
73
|
}
|
73
74
|
|
74
|
-
|
75
|
+
grpc_core::CallCombiner* call_combiner;
|
75
76
|
grpc_linked_mdelem compression_algorithm_storage;
|
76
77
|
grpc_linked_mdelem stream_compression_algorithm_storage;
|
77
78
|
grpc_linked_mdelem accept_encoding_storage;
|
@@ -248,7 +249,7 @@ static void finish_send_message(grpc_call_element* elem) {
|
|
248
249
|
bool did_compress = grpc_msg_compress(calld->message_compression_algorithm,
|
249
250
|
&calld->slices, &tmp);
|
250
251
|
if (did_compress) {
|
251
|
-
if (grpc_compression_trace
|
252
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
|
252
253
|
const char* algo_name;
|
253
254
|
const size_t before_size = calld->slices.length;
|
254
255
|
const size_t after_size = tmp.length;
|
@@ -264,7 +265,7 @@ static void finish_send_message(grpc_call_element* elem) {
|
|
264
265
|
grpc_slice_buffer_swap(&calld->slices, &tmp);
|
265
266
|
send_flags |= GRPC_WRITE_INTERNAL_COMPRESS;
|
266
267
|
} else {
|
267
|
-
if (grpc_compression_trace
|
268
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
|
268
269
|
const char* algo_name;
|
269
270
|
GPR_ASSERT(grpc_message_compression_algorithm_name(
|
270
271
|
calld->message_compression_algorithm, &algo_name));
|
@@ -61,7 +61,7 @@ struct call_data {
|
|
61
61
|
}
|
62
62
|
}
|
63
63
|
|
64
|
-
|
64
|
+
grpc_core::CallCombiner* call_combiner;
|
65
65
|
|
66
66
|
// Outgoing headers to add to send_initial_metadata.
|
67
67
|
grpc_linked_mdelem status;
|
@@ -131,18 +131,19 @@ static grpc_error* hs_filter_incoming_metadata(grpc_call_element* elem,
|
|
131
131
|
static const char* error_name = "Failed processing incoming headers";
|
132
132
|
|
133
133
|
if (b->idx.named.method != nullptr) {
|
134
|
-
if (
|
134
|
+
if (grpc_mdelem_static_value_eq(b->idx.named.method->md,
|
135
|
+
GRPC_MDELEM_METHOD_POST)) {
|
135
136
|
*calld->recv_initial_metadata_flags &=
|
136
137
|
~(GRPC_INITIAL_METADATA_CACHEABLE_REQUEST |
|
137
138
|
GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST);
|
138
|
-
} else if (
|
139
|
-
|
139
|
+
} else if (grpc_mdelem_static_value_eq(b->idx.named.method->md,
|
140
|
+
GRPC_MDELEM_METHOD_PUT)) {
|
140
141
|
*calld->recv_initial_metadata_flags &=
|
141
142
|
~GRPC_INITIAL_METADATA_CACHEABLE_REQUEST;
|
142
143
|
*calld->recv_initial_metadata_flags |=
|
143
144
|
GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST;
|
144
|
-
} else if (
|
145
|
-
|
145
|
+
} else if (grpc_mdelem_static_value_eq(b->idx.named.method->md,
|
146
|
+
GRPC_MDELEM_METHOD_GET)) {
|
146
147
|
*calld->recv_initial_metadata_flags |=
|
147
148
|
GRPC_INITIAL_METADATA_CACHEABLE_REQUEST;
|
148
149
|
*calld->recv_initial_metadata_flags &=
|
@@ -163,7 +164,8 @@ static grpc_error* hs_filter_incoming_metadata(grpc_call_element* elem,
|
|
163
164
|
}
|
164
165
|
|
165
166
|
if (b->idx.named.te != nullptr) {
|
166
|
-
if (!
|
167
|
+
if (!grpc_mdelem_static_value_eq(b->idx.named.te->md,
|
168
|
+
GRPC_MDELEM_TE_TRAILERS)) {
|
167
169
|
hs_add_error(error_name, &error,
|
168
170
|
grpc_attach_md_to_error(
|
169
171
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad header"),
|
@@ -178,9 +180,12 @@ static grpc_error* hs_filter_incoming_metadata(grpc_call_element* elem,
|
|
178
180
|
}
|
179
181
|
|
180
182
|
if (b->idx.named.scheme != nullptr) {
|
181
|
-
if (!
|
182
|
-
|
183
|
-
!
|
183
|
+
if (!grpc_mdelem_static_value_eq(b->idx.named.scheme->md,
|
184
|
+
GRPC_MDELEM_SCHEME_HTTP) &&
|
185
|
+
!grpc_mdelem_static_value_eq(b->idx.named.scheme->md,
|
186
|
+
GRPC_MDELEM_SCHEME_HTTPS) &&
|
187
|
+
!grpc_mdelem_static_value_eq(b->idx.named.scheme->md,
|
188
|
+
GRPC_MDELEM_SCHEME_GRPC)) {
|
184
189
|
hs_add_error(error_name, &error,
|
185
190
|
grpc_attach_md_to_error(
|
186
191
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad header"),
|
@@ -196,8 +201,9 @@ static grpc_error* hs_filter_incoming_metadata(grpc_call_element* elem,
|
|
196
201
|
}
|
197
202
|
|
198
203
|
if (b->idx.named.content_type != nullptr) {
|
199
|
-
if (!
|
200
|
-
|
204
|
+
if (!grpc_mdelem_static_value_eq(
|
205
|
+
b->idx.named.content_type->md,
|
206
|
+
GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC)) {
|
201
207
|
if (grpc_slice_buf_start_eq(GRPC_MDVALUE(b->idx.named.content_type->md),
|
202
208
|
EXPECTED_CONTENT_TYPE,
|
203
209
|
EXPECTED_CONTENT_TYPE_LENGTH) &&
|
@@ -106,7 +106,7 @@ struct channel_data {
|
|
106
106
|
+--------------------------------+----------------+---------+
|
107
107
|
|
108
108
|
MAX_IDLE_STATE_INIT: The initial and final state of 'idle_state'. The
|
109
|
-
channel has 1 or 1+ active calls, and the
|
109
|
+
channel has 1 or 1+ active calls, and the timer is not set. Note that
|
110
110
|
we may put a virtual call to hold this state at channel initialization or
|
111
111
|
shutdown, so that the channel won't enter other states.
|
112
112
|
|
@@ -499,7 +499,10 @@ static grpc_error* init_channel_elem(grpc_channel_element* elem,
|
|
499
499
|
}
|
500
500
|
|
501
501
|
/* Destructor for channel_data. */
|
502
|
-
static void destroy_channel_elem(grpc_channel_element* elem) {
|
502
|
+
static void destroy_channel_elem(grpc_channel_element* elem) {
|
503
|
+
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
504
|
+
gpr_mu_destroy(&chand->max_age_timer_mu);
|
505
|
+
}
|
503
506
|
|
504
507
|
const grpc_channel_filter grpc_max_age_filter = {
|
505
508
|
grpc_call_next_op,
|