grpc 1.41.1 → 1.42.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +55 -43
- data/include/grpc/event_engine/event_engine.h +82 -42
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
- data/include/grpc/event_engine/memory_allocator.h +210 -0
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/grpc_security.h +18 -0
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
- data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
- data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
- data/src/core/ext/filters/client_channel/client_channel.h +74 -27
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -5
- data/src/core/ext/filters/client_channel/connector.h +18 -18
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
- data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
- data/src/core/ext/filters/client_channel/resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
- data/src/core/ext/filters/client_channel/server_address.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
- data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
- data/src/core/ext/filters/client_channel/subchannel.h +29 -49
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
- data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
- data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
- data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
- data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
- data/src/core/ext/service_config/service_config_call_data.h +72 -0
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
- data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
- data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/xds_api.cc +325 -362
- data/src/core/ext/xds/xds_api.h +134 -82
- data/src/core/ext/xds/xds_bootstrap.h +10 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +527 -314
- data/src/core/ext/xds/xds_client.h +42 -37
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
- data/src/core/lib/address_utils/parse_address.cc +2 -0
- data/src/core/lib/avl/avl.cc +5 -5
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/channel/channel_args.cc +24 -6
- data/src/core/lib/channel/channel_args.h +9 -0
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_trace.cc +1 -1
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +3 -3
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/channelz_registry.cc +1 -1
- data/src/core/lib/channel/channelz_registry.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +1 -3
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/compression/compression.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +6 -4
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +44 -2
- data/src/core/lib/config/core_configuration.h +39 -1
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats_data.cc +13 -13
- data/src/core/lib/gpr/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/string.cc +2 -2
- data/src/core/lib/gpr/tls.h +1 -1
- data/src/core/lib/gpr/useful.h +79 -32
- data/src/core/lib/gprpp/arena.h +10 -0
- data/src/core/lib/gprpp/bitset.h +38 -16
- data/src/core/lib/gprpp/chunked_vector.h +211 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -1
- data/src/core/lib/gprpp/match.h +1 -1
- data/src/core/lib/gprpp/memory.h +6 -0
- data/src/core/lib/gprpp/overload.h +1 -1
- data/src/core/lib/gprpp/status_helper.cc +23 -3
- data/src/core/lib/gprpp/status_helper.h +12 -1
- data/src/core/lib/gprpp/table.h +411 -0
- data/src/core/lib/http/httpcli.cc +200 -182
- data/src/core/lib/http/parser.cc +2 -2
- data/src/core/lib/iomgr/call_combiner.cc +28 -10
- data/src/core/lib/iomgr/combiner.cc +6 -21
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
- data/src/core/lib/iomgr/error.cc +113 -52
- data/src/core/lib/iomgr/error.h +50 -9
- data/src/core/lib/iomgr/error_cfstream.cc +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
- data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
- data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
- data/src/core/lib/iomgr/event_engine/closure.h +10 -1
- data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
- data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
- data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
- data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
- data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -9
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
- data/src/core/lib/iomgr/executor.cc +6 -20
- data/src/core/lib/iomgr/iomgr.cc +3 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
- data/src/core/lib/iomgr/iomgr_internal.h +3 -2
- data/src/core/lib/iomgr/load_file.cc +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +18 -0
- data/src/core/lib/iomgr/pollset_custom.cc +1 -1
- data/src/core/lib/iomgr/pollset_custom.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
- data/src/core/lib/iomgr/resource_quota.cc +13 -11
- data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_mutator.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
- data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_posix.cc +4 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_windows.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +13 -13
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/json/json_util.cc +68 -0
- data/src/core/lib/json/json_util.h +57 -99
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +4 -2
- data/src/core/lib/security/credentials/credentials.h +6 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +9 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.cc +73 -43
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
- data/src/core/lib/security/transport/tsi_error.cc +3 -5
- data/src/core/lib/slice/slice.cc +0 -16
- data/src/core/lib/slice/slice_api.cc +39 -0
- data/src/core/lib/slice/slice_buffer.cc +5 -5
- data/src/core/lib/slice/slice_intern.cc +8 -13
- data/src/core/lib/slice/slice_internal.h +1 -244
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +121 -0
- data/src/core/lib/slice/slice_refcount_base.h +173 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/slice/static_slice.cc +529 -0
- data/src/core/lib/slice/static_slice.h +331 -0
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
- data/src/core/lib/surface/call.cc +103 -120
- data/src/core/lib/surface/call.h +0 -6
- data/src/core/lib/surface/channel.cc +19 -32
- data/src/core/lib/surface/channel.h +0 -9
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/completion_queue.cc +6 -5
- data/src/core/lib/surface/init.cc +0 -39
- data/src/core/lib/surface/init_secure.cc +17 -14
- data/src/core/lib/surface/lame_client.cc +18 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +25 -17
- data/src/core/lib/surface/server.h +17 -10
- data/src/core/lib/surface/validate_metadata.cc +5 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +42 -17
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata.cc +31 -10
- data/src/core/lib/transport/metadata.h +2 -1
- data/src/core/lib/transport/metadata_batch.cc +35 -371
- data/src/core/lib/transport/metadata_batch.h +905 -71
- data/src/core/lib/transport/parsed_metadata.h +263 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +714 -846
- data/src/core/lib/transport/static_metadata.h +115 -379
- data/src/core/lib/transport/status_metadata.cc +1 -0
- data/src/core/lib/transport/transport.cc +4 -5
- data/src/core/lib/transport/transport_op_string.cc +40 -20
- data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
- data/src/core/tsi/fake_transport_security.cc +15 -7
- data/src/core/tsi/local_transport_security.cc +36 -73
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
- data/src/core/tsi/ssl_transport_security.cc +10 -2
- data/src/core/tsi/transport_security.cc +12 -0
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_interface.h +26 -0
- data/src/ruby/ext/grpc/extconf.rb +12 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
- data/third_party/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +72 -45
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +479 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- metadata +78 -66
- data/include/grpc/event_engine/slice_allocator.h +0 -71
- data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
- data/src/core/lib/iomgr/udp_server.cc +0 -747
- data/src/core/lib/iomgr/udp_server.h +0 -103
- data/src/core/lib/transport/authority_override.cc +0 -40
- data/src/core/lib/transport/authority_override.h +0 -37
@@ -25,6 +25,7 @@
|
|
25
25
|
#include <string>
|
26
26
|
|
27
27
|
#include "absl/strings/str_format.h"
|
28
|
+
#include "absl/strings/string_view.h"
|
28
29
|
|
29
30
|
#include <grpc/support/alloc.h>
|
30
31
|
#include <grpc/support/log.h>
|
@@ -41,187 +42,228 @@
|
|
41
42
|
#include "src/core/lib/iomgr/tcp_client.h"
|
42
43
|
#include "src/core/lib/slice/slice_internal.h"
|
43
44
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
45
|
+
namespace grpc_core {
|
46
|
+
namespace {
|
47
|
+
|
48
|
+
class InternalRequest {
|
49
|
+
public:
|
50
|
+
InternalRequest(const grpc_slice& request_text,
|
51
|
+
grpc_httpcli_response* response,
|
52
|
+
grpc_resource_quota* resource_quota, absl::string_view host,
|
53
|
+
absl::string_view ssl_host_override, grpc_millis deadline,
|
54
|
+
const grpc_httpcli_handshaker* handshaker,
|
55
|
+
grpc_closure* on_done, grpc_httpcli_context* context,
|
56
|
+
grpc_polling_entity* pollent, const char* name)
|
57
|
+
: request_text_(request_text),
|
58
|
+
resource_quota_(resource_quota),
|
59
|
+
host_(host),
|
60
|
+
ssl_host_override_(ssl_host_override),
|
61
|
+
deadline_(deadline),
|
62
|
+
handshaker_(handshaker),
|
63
|
+
on_done_(on_done),
|
64
|
+
context_(context),
|
65
|
+
pollent_(pollent) {
|
66
|
+
grpc_http_parser_init(&parser_, GRPC_HTTP_RESPONSE, response);
|
67
|
+
grpc_slice_buffer_init(&incoming_);
|
68
|
+
grpc_slice_buffer_init(&outgoing_);
|
69
|
+
grpc_iomgr_register_object(&iomgr_obj_, name);
|
70
|
+
|
71
|
+
GRPC_CLOSURE_INIT(&on_read_, OnRead, this, grpc_schedule_on_exec_ctx);
|
72
|
+
GRPC_CLOSURE_INIT(&done_write_, DoneWrite, this, grpc_schedule_on_exec_ctx);
|
73
|
+
GPR_ASSERT(pollent);
|
74
|
+
grpc_polling_entity_add_to_pollset_set(pollent_, context->pollset_set);
|
75
|
+
grpc_resolve_address(
|
76
|
+
host_.c_str(), handshaker_->default_port, context_->pollset_set,
|
77
|
+
GRPC_CLOSURE_CREATE(OnResolved, this, grpc_schedule_on_exec_ctx),
|
78
|
+
&addresses_);
|
79
|
+
}
|
79
80
|
|
80
|
-
|
81
|
-
|
82
|
-
|
81
|
+
~InternalRequest() {
|
82
|
+
grpc_http_parser_destroy(&parser_);
|
83
|
+
if (addresses_ != nullptr) {
|
84
|
+
grpc_resolved_addresses_destroy(addresses_);
|
85
|
+
}
|
86
|
+
if (ep_ != nullptr) {
|
87
|
+
grpc_endpoint_destroy(ep_);
|
88
|
+
}
|
89
|
+
grpc_slice_unref_internal(request_text_);
|
90
|
+
grpc_iomgr_unregister_object(&iomgr_obj_);
|
91
|
+
grpc_slice_buffer_destroy_internal(&incoming_);
|
92
|
+
grpc_slice_buffer_destroy_internal(&outgoing_);
|
93
|
+
GRPC_ERROR_UNREF(overall_error_);
|
94
|
+
grpc_resource_quota_unref_internal(resource_quota_);
|
95
|
+
}
|
83
96
|
|
84
|
-
|
85
|
-
|
86
|
-
|
97
|
+
private:
|
98
|
+
void Finish(grpc_error_handle error) {
|
99
|
+
grpc_polling_entity_del_from_pollset_set(pollent_, context_->pollset_set);
|
100
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done_, error);
|
101
|
+
delete this;
|
102
|
+
}
|
87
103
|
|
88
|
-
|
104
|
+
void AppendError(grpc_error_handle error) {
|
105
|
+
if (overall_error_ == GRPC_ERROR_NONE) {
|
106
|
+
overall_error_ =
|
107
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed HTTP/1 client request");
|
108
|
+
}
|
109
|
+
grpc_resolved_address* addr = &addresses_->addrs[next_address_ - 1];
|
110
|
+
std::string addr_text = grpc_sockaddr_to_uri(addr);
|
111
|
+
overall_error_ = grpc_error_add_child(
|
112
|
+
overall_error_,
|
113
|
+
grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, addr_text));
|
114
|
+
}
|
89
115
|
|
90
|
-
|
91
|
-
|
92
|
-
req->context->pollset_set);
|
93
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, req->on_done, error);
|
94
|
-
grpc_http_parser_destroy(&req->parser);
|
95
|
-
if (req->addresses != nullptr) {
|
96
|
-
grpc_resolved_addresses_destroy(req->addresses);
|
116
|
+
void DoRead() {
|
117
|
+
grpc_endpoint_read(ep_, &incoming_, &on_read_, /*urgent=*/true);
|
97
118
|
}
|
98
|
-
|
99
|
-
|
119
|
+
|
120
|
+
static void OnRead(void* user_data, grpc_error_handle error) {
|
121
|
+
InternalRequest* req = static_cast<InternalRequest*>(user_data);
|
122
|
+
req->OnReadInternal(error);
|
100
123
|
}
|
101
|
-
grpc_slice_unref_internal(req->request_text);
|
102
|
-
gpr_free(req->host);
|
103
|
-
gpr_free(req->ssl_host_override);
|
104
|
-
grpc_iomgr_unregister_object(&req->iomgr_obj);
|
105
|
-
grpc_slice_buffer_destroy_internal(&req->incoming);
|
106
|
-
grpc_slice_buffer_destroy_internal(&req->outgoing);
|
107
|
-
GRPC_ERROR_UNREF(req->overall_error);
|
108
|
-
grpc_resource_quota_unref_internal(req->resource_quota);
|
109
|
-
gpr_free(req);
|
110
|
-
}
|
111
124
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
125
|
+
void OnReadInternal(grpc_error_handle error) {
|
126
|
+
size_t i;
|
127
|
+
|
128
|
+
for (i = 0; i < incoming_.count; i++) {
|
129
|
+
if (GRPC_SLICE_LENGTH(incoming_.slices[i])) {
|
130
|
+
have_read_byte_ = 1;
|
131
|
+
grpc_error_handle err =
|
132
|
+
grpc_http_parser_parse(&parser_, incoming_.slices[i], nullptr);
|
133
|
+
if (err != GRPC_ERROR_NONE) {
|
134
|
+
Finish(err);
|
135
|
+
return;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
}
|
139
|
+
|
140
|
+
if (error == GRPC_ERROR_NONE) {
|
141
|
+
DoRead();
|
142
|
+
} else if (!have_read_byte_) {
|
143
|
+
NextAddress(GRPC_ERROR_REF(error));
|
144
|
+
} else {
|
145
|
+
Finish(grpc_http_parser_eof(&parser_));
|
146
|
+
}
|
116
147
|
}
|
117
|
-
grpc_resolved_address* addr = &req->addresses->addrs[req->next_address - 1];
|
118
|
-
std::string addr_text = grpc_sockaddr_to_uri(addr);
|
119
|
-
req->overall_error = grpc_error_add_child(
|
120
|
-
req->overall_error,
|
121
|
-
grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS,
|
122
|
-
grpc_slice_from_cpp_string(std::move(addr_text))));
|
123
|
-
}
|
124
148
|
|
125
|
-
|
126
|
-
grpc_endpoint_read(req->ep, &req->incoming, &req->on_read, /*urgent=*/true);
|
127
|
-
}
|
149
|
+
void OnWritten() { DoRead(); }
|
128
150
|
|
129
|
-
static void
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
req->have_read_byte = 1;
|
136
|
-
grpc_error_handle err = grpc_http_parser_parse(
|
137
|
-
&req->parser, req->incoming.slices[i], nullptr);
|
138
|
-
if (err != GRPC_ERROR_NONE) {
|
139
|
-
finish(req, err);
|
140
|
-
return;
|
141
|
-
}
|
151
|
+
static void DoneWrite(void* arg, grpc_error_handle error) {
|
152
|
+
InternalRequest* req = static_cast<InternalRequest*>(arg);
|
153
|
+
if (error == GRPC_ERROR_NONE) {
|
154
|
+
req->OnWritten();
|
155
|
+
} else {
|
156
|
+
req->NextAddress(GRPC_ERROR_REF(error));
|
142
157
|
}
|
143
158
|
}
|
144
159
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
} else {
|
150
|
-
finish(req, grpc_http_parser_eof(&req->parser));
|
160
|
+
void StartWrite() {
|
161
|
+
grpc_slice_ref_internal(request_text_);
|
162
|
+
grpc_slice_buffer_add(&outgoing_, request_text_);
|
163
|
+
grpc_endpoint_write(ep_, &outgoing_, &done_write_, nullptr);
|
151
164
|
}
|
152
|
-
}
|
153
165
|
|
154
|
-
static void
|
166
|
+
static void OnHandshakeDone(void* arg, grpc_endpoint* ep) {
|
167
|
+
InternalRequest* req = static_cast<InternalRequest*>(arg);
|
155
168
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
169
|
+
if (!ep) {
|
170
|
+
req->NextAddress(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
171
|
+
"Unexplained handshake failure"));
|
172
|
+
return;
|
173
|
+
}
|
174
|
+
|
175
|
+
req->ep_ = ep;
|
176
|
+
req->StartWrite();
|
162
177
|
}
|
163
|
-
}
|
164
178
|
|
165
|
-
static void
|
166
|
-
|
167
|
-
grpc_slice_buffer_add(&req->outgoing, req->request_text);
|
168
|
-
grpc_endpoint_write(req->ep, &req->outgoing, &req->done_write, nullptr);
|
169
|
-
}
|
179
|
+
static void OnConnected(void* arg, grpc_error_handle error) {
|
180
|
+
InternalRequest* req = static_cast<InternalRequest*>(arg);
|
170
181
|
|
171
|
-
|
172
|
-
|
182
|
+
if (!req->ep_) {
|
183
|
+
req->NextAddress(GRPC_ERROR_REF(error));
|
184
|
+
return;
|
185
|
+
}
|
186
|
+
req->handshaker_->handshake(req, req->ep_,
|
187
|
+
req->ssl_host_override_.empty()
|
188
|
+
? req->host_.c_str()
|
189
|
+
: req->ssl_host_override_.c_str(),
|
190
|
+
req->deadline_, OnHandshakeDone);
|
191
|
+
}
|
173
192
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
193
|
+
void NextAddress(grpc_error_handle error) {
|
194
|
+
grpc_resolved_address* addr;
|
195
|
+
if (error != GRPC_ERROR_NONE) {
|
196
|
+
AppendError(error);
|
197
|
+
}
|
198
|
+
if (next_address_ == addresses_->naddrs) {
|
199
|
+
Finish(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
200
|
+
"Failed HTTP requests to all targets", &overall_error_, 1));
|
201
|
+
return;
|
202
|
+
}
|
203
|
+
addr = &addresses_->addrs[next_address_++];
|
204
|
+
GRPC_CLOSURE_INIT(&connected_, OnConnected, this,
|
205
|
+
grpc_schedule_on_exec_ctx);
|
206
|
+
grpc_tcp_client_connect(&connected_, &ep_,
|
207
|
+
grpc_slice_allocator_create(
|
208
|
+
resource_quota_, grpc_sockaddr_to_uri(addr)),
|
209
|
+
context_->pollset_set, nullptr, addr, deadline_);
|
178
210
|
}
|
179
211
|
|
180
|
-
|
181
|
-
|
182
|
-
|
212
|
+
static void OnResolved(void* arg, grpc_error_handle error) {
|
213
|
+
InternalRequest* req = static_cast<InternalRequest*>(arg);
|
214
|
+
if (error != GRPC_ERROR_NONE) {
|
215
|
+
req->Finish(GRPC_ERROR_REF(error));
|
216
|
+
return;
|
217
|
+
}
|
218
|
+
req->next_address_ = 0;
|
219
|
+
req->NextAddress(GRPC_ERROR_NONE);
|
220
|
+
}
|
183
221
|
|
184
|
-
|
185
|
-
|
222
|
+
grpc_slice request_text_;
|
223
|
+
grpc_http_parser parser_;
|
224
|
+
grpc_resolved_addresses* addresses_ = nullptr;
|
225
|
+
size_t next_address_ = 0;
|
226
|
+
grpc_endpoint* ep_ = nullptr;
|
227
|
+
grpc_resource_quota* resource_quota_;
|
228
|
+
std::string host_;
|
229
|
+
std::string ssl_host_override_;
|
230
|
+
grpc_millis deadline_;
|
231
|
+
int have_read_byte_ = 0;
|
232
|
+
const grpc_httpcli_handshaker* handshaker_;
|
233
|
+
grpc_closure* on_done_;
|
234
|
+
grpc_httpcli_context* context_;
|
235
|
+
grpc_polling_entity* pollent_;
|
236
|
+
grpc_iomgr_object iomgr_obj_;
|
237
|
+
grpc_slice_buffer incoming_;
|
238
|
+
grpc_slice_buffer outgoing_;
|
239
|
+
grpc_closure on_read_;
|
240
|
+
grpc_closure done_write_;
|
241
|
+
grpc_closure connected_;
|
242
|
+
grpc_error_handle overall_error_ = GRPC_ERROR_NONE;
|
243
|
+
};
|
186
244
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
245
|
+
} // namespace
|
246
|
+
} // namespace grpc_core
|
247
|
+
|
248
|
+
static grpc_httpcli_get_override g_get_override = nullptr;
|
249
|
+
static grpc_httpcli_post_override g_post_override = nullptr;
|
250
|
+
|
251
|
+
static void plaintext_handshake(void* arg, grpc_endpoint* endpoint,
|
252
|
+
const char* /*host*/, grpc_millis /*deadline*/,
|
253
|
+
void (*on_done)(void* arg,
|
254
|
+
grpc_endpoint* endpoint)) {
|
255
|
+
on_done(arg, endpoint);
|
194
256
|
}
|
195
257
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
if (req->next_address == req->addresses->naddrs) {
|
202
|
-
finish(req,
|
203
|
-
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
204
|
-
"Failed HTTP requests to all targets", &req->overall_error, 1));
|
205
|
-
return;
|
206
|
-
}
|
207
|
-
addr = &req->addresses->addrs[req->next_address++];
|
208
|
-
GRPC_CLOSURE_INIT(&req->connected, on_connected, req,
|
209
|
-
grpc_schedule_on_exec_ctx);
|
210
|
-
grpc_tcp_client_connect(&req->connected, &req->ep,
|
211
|
-
grpc_slice_allocator_create(
|
212
|
-
req->resource_quota, grpc_sockaddr_to_uri(addr)),
|
213
|
-
req->context->pollset_set, nullptr, addr,
|
214
|
-
req->deadline);
|
258
|
+
const grpc_httpcli_handshaker grpc_httpcli_plaintext = {"http",
|
259
|
+
plaintext_handshake};
|
260
|
+
|
261
|
+
void grpc_httpcli_context_init(grpc_httpcli_context* context) {
|
262
|
+
context->pollset_set = grpc_pollset_set_create();
|
215
263
|
}
|
216
264
|
|
217
|
-
|
218
|
-
|
219
|
-
if (error != GRPC_ERROR_NONE) {
|
220
|
-
finish(req, GRPC_ERROR_REF(error));
|
221
|
-
return;
|
222
|
-
}
|
223
|
-
req->next_address = 0;
|
224
|
-
next_address(req, GRPC_ERROR_NONE);
|
265
|
+
void grpc_httpcli_context_destroy(grpc_httpcli_context* context) {
|
266
|
+
grpc_pollset_set_destroy(context->pollset_set);
|
225
267
|
}
|
226
268
|
|
227
269
|
static void internal_request_begin(grpc_httpcli_context* context,
|
@@ -232,35 +274,11 @@ static void internal_request_begin(grpc_httpcli_context* context,
|
|
232
274
|
grpc_httpcli_response* response,
|
233
275
|
const char* name,
|
234
276
|
const grpc_slice& request_text) {
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
req->on_done = on_done;
|
241
|
-
req->deadline = deadline;
|
242
|
-
req->handshaker =
|
243
|
-
request->handshaker ? request->handshaker : &grpc_httpcli_plaintext;
|
244
|
-
req->context = context;
|
245
|
-
req->pollent = pollent;
|
246
|
-
req->overall_error = GRPC_ERROR_NONE;
|
247
|
-
req->resource_quota = resource_quota;
|
248
|
-
GRPC_CLOSURE_INIT(&req->on_read, on_read, req, grpc_schedule_on_exec_ctx);
|
249
|
-
GRPC_CLOSURE_INIT(&req->done_write, done_write, req,
|
250
|
-
grpc_schedule_on_exec_ctx);
|
251
|
-
grpc_slice_buffer_init(&req->incoming);
|
252
|
-
grpc_slice_buffer_init(&req->outgoing);
|
253
|
-
grpc_iomgr_register_object(&req->iomgr_obj, name);
|
254
|
-
req->host = gpr_strdup(request->host);
|
255
|
-
req->ssl_host_override = gpr_strdup(request->ssl_host_override);
|
256
|
-
|
257
|
-
GPR_ASSERT(pollent);
|
258
|
-
grpc_polling_entity_add_to_pollset_set(req->pollent,
|
259
|
-
req->context->pollset_set);
|
260
|
-
grpc_resolve_address(
|
261
|
-
request->host, req->handshaker->default_port, req->context->pollset_set,
|
262
|
-
GRPC_CLOSURE_CREATE(on_resolved, req, grpc_schedule_on_exec_ctx),
|
263
|
-
&req->addresses);
|
277
|
+
new grpc_core::InternalRequest(
|
278
|
+
request_text, response, resource_quota, request->host,
|
279
|
+
request->ssl_host_override, deadline,
|
280
|
+
request->handshaker ? request->handshaker : &grpc_httpcli_plaintext,
|
281
|
+
on_done, context, pollent, name);
|
264
282
|
}
|
265
283
|
|
266
284
|
void grpc_httpcli_get(grpc_httpcli_context* context,
|
data/src/core/lib/http/parser.cc
CHANGED
@@ -221,7 +221,7 @@ static grpc_error_handle add_header(grpc_http_parser* parser) {
|
|
221
221
|
|
222
222
|
if (*hdr_count == parser->hdr_capacity) {
|
223
223
|
parser->hdr_capacity =
|
224
|
-
|
224
|
+
std::max(parser->hdr_capacity + 1, parser->hdr_capacity * 3 / 2);
|
225
225
|
*hdrs = static_cast<grpc_http_header*>(
|
226
226
|
gpr_realloc(*hdrs, parser->hdr_capacity * sizeof(**hdrs)));
|
227
227
|
}
|
@@ -280,7 +280,7 @@ static grpc_error_handle addbyte_body(grpc_http_parser* parser, uint8_t byte) {
|
|
280
280
|
}
|
281
281
|
|
282
282
|
if (*body_length == parser->body_capacity) {
|
283
|
-
parser->body_capacity =
|
283
|
+
parser->body_capacity = std::max(size_t(8), parser->body_capacity * 3 / 2);
|
284
284
|
*body = static_cast<char*>(gpr_realloc(*body, parser->body_capacity));
|
285
285
|
}
|
286
286
|
(*body)[*body_length] = static_cast<char>(byte);
|
@@ -33,18 +33,20 @@ DebugOnlyTraceFlag grpc_call_combiner_trace(false, "call_combiner");
|
|
33
33
|
|
34
34
|
namespace {
|
35
35
|
|
36
|
+
// grpc_error LSB can be used
|
37
|
+
constexpr static intptr_t kErrorBit = 1;
|
38
|
+
|
36
39
|
grpc_error_handle DecodeCancelStateError(gpr_atm cancel_state) {
|
37
|
-
if (cancel_state &
|
38
|
-
|
39
|
-
|
40
|
+
if (cancel_state & kErrorBit) {
|
41
|
+
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
42
|
+
return internal::StatusGetFromHeapPtr(cancel_state & ~kErrorBit);
|
43
|
+
#else
|
44
|
+
return reinterpret_cast<grpc_error_handle>(cancel_state & ~kErrorBit);
|
45
|
+
#endif
|
40
46
|
}
|
41
47
|
return GRPC_ERROR_NONE;
|
42
48
|
}
|
43
49
|
|
44
|
-
gpr_atm EncodeCancelStateError(grpc_error_handle error) {
|
45
|
-
return static_cast<gpr_atm>(1) | reinterpret_cast<gpr_atm>(error);
|
46
|
-
}
|
47
|
-
|
48
50
|
} // namespace
|
49
51
|
|
50
52
|
CallCombiner::CallCombiner() {
|
@@ -57,7 +59,14 @@ CallCombiner::CallCombiner() {
|
|
57
59
|
}
|
58
60
|
|
59
61
|
CallCombiner::~CallCombiner() {
|
60
|
-
|
62
|
+
if (cancel_state_ & kErrorBit) {
|
63
|
+
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
64
|
+
internal::StatusFreeHeapPtr(cancel_state_ & ~kErrorBit);
|
65
|
+
#else
|
66
|
+
GRPC_ERROR_UNREF(reinterpret_cast<grpc_error_handle>(
|
67
|
+
cancel_state_ & ~static_cast<gpr_atm>(kErrorBit)));
|
68
|
+
#endif
|
69
|
+
}
|
61
70
|
}
|
62
71
|
|
63
72
|
#ifdef GRPC_TSAN_ENABLED
|
@@ -235,15 +244,24 @@ void CallCombiner::SetNotifyOnCancel(grpc_closure* closure) {
|
|
235
244
|
|
236
245
|
void CallCombiner::Cancel(grpc_error_handle error) {
|
237
246
|
GRPC_STATS_INC_CALL_COMBINER_CANCELLED();
|
247
|
+
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
248
|
+
intptr_t status_ptr = internal::StatusAllocHeapPtr(error);
|
249
|
+
gpr_atm new_state = kErrorBit | status_ptr;
|
250
|
+
#else
|
251
|
+
gpr_atm new_state = kErrorBit | reinterpret_cast<gpr_atm>(error);
|
252
|
+
#endif
|
238
253
|
while (true) {
|
239
254
|
gpr_atm original_state = gpr_atm_acq_load(&cancel_state_);
|
240
255
|
grpc_error_handle original_error = DecodeCancelStateError(original_state);
|
241
256
|
if (original_error != GRPC_ERROR_NONE) {
|
257
|
+
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
258
|
+
internal::StatusFreeHeapPtr(status_ptr);
|
259
|
+
#else
|
242
260
|
GRPC_ERROR_UNREF(error);
|
261
|
+
#endif
|
243
262
|
break;
|
244
263
|
}
|
245
|
-
if (gpr_atm_full_cas(&cancel_state_, original_state,
|
246
|
-
EncodeCancelStateError(error))) {
|
264
|
+
if (gpr_atm_full_cas(&cancel_state_, original_state, new_state)) {
|
247
265
|
if (original_state != 0) {
|
248
266
|
grpc_closure* notify_on_cancel =
|
249
267
|
reinterpret_cast<grpc_closure*>(original_state);
|
@@ -27,11 +27,9 @@
|
|
27
27
|
#include <grpc/support/alloc.h>
|
28
28
|
#include <grpc/support/log.h>
|
29
29
|
|
30
|
-
#include "src/core/lib/debug/stats.h"
|
31
30
|
#include "src/core/lib/gprpp/mpscq.h"
|
32
31
|
#include "src/core/lib/iomgr/executor.h"
|
33
|
-
#include "src/core/lib/iomgr/
|
34
|
-
#include "src/core/lib/profiling/timers.h"
|
32
|
+
#include "src/core/lib/iomgr/iomgr_internal.h"
|
35
33
|
|
36
34
|
grpc_core::DebugOnlyTraceFlag grpc_combiner_trace(false, "combiner");
|
37
35
|
|
@@ -128,15 +126,11 @@ static void push_first_on_exec_ctx(grpc_core::Combiner* lock) {
|
|
128
126
|
|
129
127
|
static void combiner_exec(grpc_core::Combiner* lock, grpc_closure* cl,
|
130
128
|
grpc_error_handle error) {
|
131
|
-
GPR_TIMER_SCOPE("combiner.execute", 0);
|
132
|
-
GRPC_STATS_INC_COMBINER_LOCKS_SCHEDULED_ITEMS();
|
133
129
|
gpr_atm last = gpr_atm_full_fetch_add(&lock->state, STATE_ELEM_COUNT_LOW_BIT);
|
134
130
|
GRPC_COMBINER_TRACE(gpr_log(GPR_INFO,
|
135
131
|
"C:%p grpc_combiner_execute c=%p last=%" PRIdPTR,
|
136
132
|
lock, cl, last));
|
137
133
|
if (last == 1) {
|
138
|
-
GRPC_STATS_INC_COMBINER_LOCKS_INITIATED();
|
139
|
-
GPR_TIMER_MARK("combiner.initiated", 0);
|
140
134
|
gpr_atm_no_barrier_store(
|
141
135
|
&lock->initiating_exec_ctx_or_null,
|
142
136
|
reinterpret_cast<gpr_atm>(grpc_core::ExecCtx::Get()));
|
@@ -175,14 +169,12 @@ static void offload(void* arg, grpc_error_handle /*error*/) {
|
|
175
169
|
}
|
176
170
|
|
177
171
|
static void queue_offload(grpc_core::Combiner* lock) {
|
178
|
-
GRPC_STATS_INC_COMBINER_LOCKS_OFFLOADED();
|
179
172
|
move_next();
|
180
173
|
GRPC_COMBINER_TRACE(gpr_log(GPR_INFO, "C:%p queue_offload", lock));
|
181
174
|
grpc_core::Executor::Run(&lock->offload, GRPC_ERROR_NONE);
|
182
175
|
}
|
183
176
|
|
184
177
|
bool grpc_combiner_continue_exec_ctx() {
|
185
|
-
GPR_TIMER_SCOPE("combiner.continue_exec_ctx", 0);
|
186
178
|
grpc_core::Combiner* lock =
|
187
179
|
grpc_core::ExecCtx::Get()->combiner_data()->active_combiner;
|
188
180
|
if (lock == nullptr) {
|
@@ -207,9 +199,8 @@ bool grpc_combiner_continue_exec_ctx() {
|
|
207
199
|
// 3. the current thread is not a worker for any background poller
|
208
200
|
// 4. the DEFAULT executor is threaded
|
209
201
|
if (contended && grpc_core::ExecCtx::Get()->IsReadyToFinish() &&
|
210
|
-
!
|
202
|
+
!grpc_iomgr_platform_is_any_background_poller_thread() &&
|
211
203
|
grpc_core::Executor::IsThreadedDefault()) {
|
212
|
-
GPR_TIMER_MARK("offload_from_finished_exec_ctx", 0);
|
213
204
|
// this execution context wants to move on: schedule remaining work to be
|
214
205
|
// picked up on the executor
|
215
206
|
queue_offload(lock);
|
@@ -226,11 +217,9 @@ bool grpc_combiner_continue_exec_ctx() {
|
|
226
217
|
if (n == nullptr) {
|
227
218
|
// queue is in an inconsistent state: use this as a cue that we should
|
228
219
|
// go off and do something else for a while (and come back later)
|
229
|
-
GPR_TIMER_MARK("delay_busy", 0);
|
230
220
|
queue_offload(lock);
|
231
221
|
return true;
|
232
222
|
}
|
233
|
-
GPR_TIMER_SCOPE("combiner.exec1", 0);
|
234
223
|
grpc_closure* cl = reinterpret_cast<grpc_closure*>(n);
|
235
224
|
grpc_error_handle cl_err = cl->error_data.error;
|
236
225
|
#ifndef NDEBUG
|
@@ -244,7 +233,6 @@ bool grpc_combiner_continue_exec_ctx() {
|
|
244
233
|
grpc_closure_list_init(&lock->final_list);
|
245
234
|
int loops = 0;
|
246
235
|
while (c != nullptr) {
|
247
|
-
GPR_TIMER_SCOPE("combiner.exec_1final", 0);
|
248
236
|
GRPC_COMBINER_TRACE(
|
249
237
|
gpr_log(GPR_INFO, "C:%p execute_final[%d] c=%p", lock, loops, c));
|
250
238
|
grpc_closure* next = c->next_data.next;
|
@@ -258,7 +246,6 @@ bool grpc_combiner_continue_exec_ctx() {
|
|
258
246
|
}
|
259
247
|
}
|
260
248
|
|
261
|
-
GPR_TIMER_MARK("unref", 0);
|
262
249
|
move_next();
|
263
250
|
lock->time_to_execute_final_list = false;
|
264
251
|
gpr_atm old_state =
|
@@ -305,13 +292,10 @@ static void combiner_finally_exec(grpc_core::Combiner* lock,
|
|
305
292
|
grpc_closure* closure,
|
306
293
|
grpc_error_handle error) {
|
307
294
|
GPR_ASSERT(lock != nullptr);
|
308
|
-
GPR_TIMER_SCOPE("combiner.execute_finally", 0);
|
309
|
-
GRPC_STATS_INC_COMBINER_LOCKS_SCHEDULED_FINAL_ITEMS();
|
310
295
|
GRPC_COMBINER_TRACE(gpr_log(
|
311
296
|
GPR_INFO, "C:%p grpc_combiner_execute_finally c=%p; ac=%p", lock, closure,
|
312
297
|
grpc_core::ExecCtx::Get()->combiner_data()->active_combiner));
|
313
298
|
if (grpc_core::ExecCtx::Get()->combiner_data()->active_combiner != lock) {
|
314
|
-
GPR_TIMER_MARK("slowpath", 0);
|
315
299
|
// Using error_data.scratch to store the combiner so that it can be accessed
|
316
300
|
// in enqueue_finally.
|
317
301
|
closure->error_data.scratch = reinterpret_cast<uintptr_t>(lock);
|
@@ -327,9 +311,10 @@ static void combiner_finally_exec(grpc_core::Combiner* lock,
|
|
327
311
|
|
328
312
|
static void enqueue_finally(void* closure, grpc_error_handle error) {
|
329
313
|
grpc_closure* cl = static_cast<grpc_closure*>(closure);
|
330
|
-
|
331
|
-
reinterpret_cast<grpc_core::Combiner*>(cl->error_data.scratch)
|
332
|
-
|
314
|
+
grpc_core::Combiner* lock =
|
315
|
+
reinterpret_cast<grpc_core::Combiner*>(cl->error_data.scratch);
|
316
|
+
cl->error_data.scratch = 0;
|
317
|
+
combiner_finally_exec(lock, cl, GRPC_ERROR_REF(error));
|
333
318
|
}
|
334
319
|
|
335
320
|
namespace grpc_core {
|