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
@@ -27,8 +27,8 @@
|
|
27
27
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
28
28
|
#include "src/core/ext/filters/client_channel/retry_service_config.h"
|
29
29
|
#include "src/core/ext/filters/client_channel/retry_throttle.h"
|
30
|
-
#include "src/core/ext/
|
31
|
-
#include "src/core/ext/
|
30
|
+
#include "src/core/ext/service_config/service_config.h"
|
31
|
+
#include "src/core/ext/service_config/service_config_call_data.h"
|
32
32
|
#include "src/core/lib/backoff/backoff.h"
|
33
33
|
#include "src/core/lib/channel/channel_args.h"
|
34
34
|
#include "src/core/lib/channel/channel_stack.h"
|
@@ -335,9 +335,10 @@ class RetryFilter::CallData {
|
|
335
335
|
call_attempt_->lb_call_committed_ = true;
|
336
336
|
auto* calld = call_attempt_->calld_;
|
337
337
|
if (calld->retry_committed_) {
|
338
|
-
auto* service_config_call_data =
|
339
|
-
|
340
|
-
|
338
|
+
auto* service_config_call_data =
|
339
|
+
static_cast<ClientChannelServiceConfigCallData*>(
|
340
|
+
calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA]
|
341
|
+
.value);
|
341
342
|
service_config_call_data->call_dispatch_controller()->Commit();
|
342
343
|
}
|
343
344
|
}
|
@@ -419,27 +420,22 @@ class RetryFilter::CallData {
|
|
419
420
|
// BatchData.batch.payload points to this.
|
420
421
|
grpc_transport_stream_op_batch_payload batch_payload_;
|
421
422
|
// For send_initial_metadata.
|
422
|
-
|
423
|
-
|
424
|
-
// because filters in the subchannel stack may modify the metadata,
|
425
|
-
// so we need to start in a pristine state for each attempt of the call.
|
426
|
-
grpc_linked_mdelem* send_initial_metadata_storage_;
|
427
|
-
grpc_metadata_batch send_initial_metadata_;
|
423
|
+
grpc_linked_mdelem retry_attempts_metadata_;
|
424
|
+
grpc_metadata_batch send_initial_metadata_{calld_->arena_};
|
428
425
|
// For send_message.
|
429
426
|
// TODO(roth): Restructure this to eliminate use of ManualConstructor.
|
430
427
|
ManualConstructor<ByteStreamCache::CachingByteStream> send_message_;
|
431
428
|
// For send_trailing_metadata.
|
432
|
-
|
433
|
-
grpc_metadata_batch send_trailing_metadata_;
|
429
|
+
grpc_metadata_batch send_trailing_metadata_{calld_->arena_};
|
434
430
|
// For intercepting recv_initial_metadata.
|
435
|
-
grpc_metadata_batch recv_initial_metadata_;
|
431
|
+
grpc_metadata_batch recv_initial_metadata_{calld_->arena_};
|
436
432
|
grpc_closure recv_initial_metadata_ready_;
|
437
433
|
bool trailing_metadata_available_ = false;
|
438
434
|
// For intercepting recv_message.
|
439
435
|
grpc_closure recv_message_ready_;
|
440
436
|
OrphanablePtr<ByteStream> recv_message_;
|
441
437
|
// For intercepting recv_trailing_metadata.
|
442
|
-
grpc_metadata_batch recv_trailing_metadata_;
|
438
|
+
grpc_metadata_batch recv_trailing_metadata_{calld_->arena_};
|
443
439
|
grpc_transport_stream_stats collect_stats_;
|
444
440
|
grpc_closure recv_trailing_metadata_ready_;
|
445
441
|
// These fields indicate which ops have been started and completed on
|
@@ -572,8 +568,7 @@ class RetryFilter::CallData {
|
|
572
568
|
// Cached data for retrying send ops.
|
573
569
|
// send_initial_metadata
|
574
570
|
bool seen_send_initial_metadata_ = false;
|
575
|
-
|
576
|
-
grpc_metadata_batch send_initial_metadata_;
|
571
|
+
grpc_metadata_batch send_initial_metadata_{arena_};
|
577
572
|
uint32_t send_initial_metadata_flags_;
|
578
573
|
// TODO(roth): As part of implementing hedging, we'll probably need to
|
579
574
|
// have the LB call set a value in CallAttempt and then propagate it
|
@@ -598,8 +593,7 @@ class RetryFilter::CallData {
|
|
598
593
|
absl::InlinedVector<ByteStreamCache*, 3> send_messages_;
|
599
594
|
// send_trailing_metadata
|
600
595
|
bool seen_send_trailing_metadata_ = false;
|
601
|
-
|
602
|
-
grpc_metadata_batch send_trailing_metadata_;
|
596
|
+
grpc_metadata_batch send_trailing_metadata_{arena_};
|
603
597
|
};
|
604
598
|
|
605
599
|
//
|
@@ -1159,8 +1153,9 @@ bool RetryFilter::CallData::CallAttempt::ShouldRetry(
|
|
1159
1153
|
}
|
1160
1154
|
}
|
1161
1155
|
// Check with call dispatch controller.
|
1162
|
-
auto* service_config_call_data =
|
1163
|
-
|
1156
|
+
auto* service_config_call_data =
|
1157
|
+
static_cast<ClientChannelServiceConfigCallData*>(
|
1158
|
+
calld_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
1164
1159
|
if (!service_config_call_data->call_dispatch_controller()->ShouldRetry()) {
|
1165
1160
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
1166
1161
|
gpr_log(
|
@@ -1308,18 +1303,6 @@ RetryFilter::CallData::CallAttempt::BatchData::~BatchData() {
|
|
1308
1303
|
call_attempt_->calld_->chand_, call_attempt_->calld_,
|
1309
1304
|
call_attempt_.get(), this);
|
1310
1305
|
}
|
1311
|
-
if (batch_.send_initial_metadata) {
|
1312
|
-
grpc_metadata_batch_destroy(&call_attempt_->send_initial_metadata_);
|
1313
|
-
}
|
1314
|
-
if (batch_.send_trailing_metadata) {
|
1315
|
-
grpc_metadata_batch_destroy(&call_attempt_->send_trailing_metadata_);
|
1316
|
-
}
|
1317
|
-
if (batch_.recv_initial_metadata) {
|
1318
|
-
grpc_metadata_batch_destroy(&call_attempt_->recv_initial_metadata_);
|
1319
|
-
}
|
1320
|
-
if (batch_.recv_trailing_metadata) {
|
1321
|
-
grpc_metadata_batch_destroy(&call_attempt_->recv_trailing_metadata_);
|
1322
|
-
}
|
1323
1306
|
GRPC_CALL_STACK_UNREF(call_attempt_->calld_->owning_call_, "Retry BatchData");
|
1324
1307
|
call_attempt_.reset(DEBUG_LOCATION, "~BatchData");
|
1325
1308
|
}
|
@@ -1363,9 +1346,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1363
1346
|
return;
|
1364
1347
|
}
|
1365
1348
|
// Return metadata.
|
1366
|
-
|
1367
|
-
|
1368
|
-
pending->batch->payload->recv_initial_metadata.recv_initial_metadata);
|
1349
|
+
*pending->batch->payload->recv_initial_metadata.recv_initial_metadata =
|
1350
|
+
std::move(call_attempt_->recv_initial_metadata_);
|
1369
1351
|
// Propagate trailing_metadata_available.
|
1370
1352
|
*pending->batch->payload->recv_initial_metadata.trailing_metadata_available =
|
1371
1353
|
call_attempt_->trailing_metadata_available_;
|
@@ -1565,11 +1547,12 @@ void GetCallStatus(grpc_millis deadline, grpc_metadata_batch* md_batch,
|
|
1565
1547
|
*is_lb_drop = true;
|
1566
1548
|
}
|
1567
1549
|
} else {
|
1568
|
-
GPR_ASSERT(md_batch->
|
1569
|
-
*status =
|
1570
|
-
|
1571
|
-
if (md_batch->
|
1572
|
-
*server_pushback_md =
|
1550
|
+
GPR_ASSERT(md_batch->legacy_index()->named.grpc_status != nullptr);
|
1551
|
+
*status = grpc_get_status_code_from_metadata(
|
1552
|
+
md_batch->legacy_index()->named.grpc_status->md);
|
1553
|
+
if (md_batch->legacy_index()->named.grpc_retry_pushback_ms != nullptr) {
|
1554
|
+
*server_pushback_md =
|
1555
|
+
&md_batch->legacy_index()->named.grpc_retry_pushback_ms->md;
|
1573
1556
|
}
|
1574
1557
|
}
|
1575
1558
|
GRPC_ERROR_UNREF(error);
|
@@ -1601,9 +1584,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1601
1584
|
&call_attempt_->collect_stats_,
|
1602
1585
|
pending->batch->payload->recv_trailing_metadata.collect_stats);
|
1603
1586
|
// Return metadata.
|
1604
|
-
|
1605
|
-
|
1606
|
-
pending->batch->payload->recv_trailing_metadata.recv_trailing_metadata);
|
1587
|
+
*pending->batch->payload->recv_trailing_metadata.recv_trailing_metadata =
|
1588
|
+
std::move(call_attempt_->recv_trailing_metadata_);
|
1607
1589
|
// Add closure.
|
1608
1590
|
closures->Add(pending->batch->payload->recv_trailing_metadata
|
1609
1591
|
.recv_trailing_metadata_ready,
|
@@ -1920,18 +1902,12 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1920
1902
|
//
|
1921
1903
|
// If we've already completed one or more attempts, add the
|
1922
1904
|
// grpc-retry-attempts header.
|
1923
|
-
call_attempt_->send_initial_metadata_storage_ =
|
1924
|
-
static_cast<grpc_linked_mdelem*>(
|
1925
|
-
calld->arena_->Alloc(sizeof(grpc_linked_mdelem) *
|
1926
|
-
(calld->send_initial_metadata_.list.count +
|
1927
|
-
(calld->num_attempts_completed_ > 0))));
|
1928
1905
|
grpc_metadata_batch_copy(&calld->send_initial_metadata_,
|
1929
|
-
&call_attempt_->send_initial_metadata_
|
1930
|
-
|
1931
|
-
|
1932
|
-
|
1933
|
-
|
1934
|
-
GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
|
1906
|
+
&call_attempt_->send_initial_metadata_);
|
1907
|
+
if (GPR_UNLIKELY(call_attempt_->send_initial_metadata_.legacy_index()
|
1908
|
+
->named.grpc_previous_rpc_attempts != nullptr)) {
|
1909
|
+
call_attempt_->send_initial_metadata_.Remove(
|
1910
|
+
GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
|
1935
1911
|
}
|
1936
1912
|
if (GPR_UNLIKELY(calld->num_attempts_completed_ > 0)) {
|
1937
1913
|
grpc_mdelem retry_md = grpc_mdelem_create(
|
@@ -1939,9 +1915,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1939
1915
|
*retry_count_strings[calld->num_attempts_completed_ - 1], nullptr);
|
1940
1916
|
grpc_error_handle error = grpc_metadata_batch_add_tail(
|
1941
1917
|
&call_attempt_->send_initial_metadata_,
|
1942
|
-
&call_attempt_->
|
1943
|
-
|
1944
|
-
retry_md, GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
|
1918
|
+
&call_attempt_->retry_attempts_metadata_, retry_md,
|
1919
|
+
GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
|
1945
1920
|
if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
|
1946
1921
|
gpr_log(GPR_ERROR, "error adding retry metadata: %s",
|
1947
1922
|
grpc_error_std_string(error).c_str());
|
@@ -1983,13 +1958,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1983
1958
|
// We need to make a copy of the metadata batch for each attempt, since
|
1984
1959
|
// the filters in the subchannel stack may modify this batch, and we don't
|
1985
1960
|
// want those modifications to be passed forward to subsequent attempts.
|
1986
|
-
call_attempt_->send_trailing_metadata_storage_ =
|
1987
|
-
static_cast<grpc_linked_mdelem*>(
|
1988
|
-
calld->arena_->Alloc(sizeof(grpc_linked_mdelem) *
|
1989
|
-
calld->send_trailing_metadata_.list.count));
|
1990
1961
|
grpc_metadata_batch_copy(&calld->send_trailing_metadata_,
|
1991
|
-
&call_attempt_->send_trailing_metadata_
|
1992
|
-
call_attempt_->send_trailing_metadata_storage_);
|
1962
|
+
&call_attempt_->send_trailing_metadata_);
|
1993
1963
|
call_attempt_->started_send_trailing_metadata_ = true;
|
1994
1964
|
batch_.send_trailing_metadata = true;
|
1995
1965
|
batch_.payload->send_trailing_metadata.send_trailing_metadata =
|
@@ -2000,7 +1970,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
2000
1970
|
AddRetriableRecvInitialMetadataOp() {
|
2001
1971
|
call_attempt_->started_recv_initial_metadata_ = true;
|
2002
1972
|
batch_.recv_initial_metadata = true;
|
2003
|
-
|
1973
|
+
call_attempt_->recv_initial_metadata_.Clear();
|
2004
1974
|
batch_.payload->recv_initial_metadata.recv_initial_metadata =
|
2005
1975
|
&call_attempt_->recv_initial_metadata_;
|
2006
1976
|
batch_.payload->recv_initial_metadata.trailing_metadata_available =
|
@@ -2027,7 +1997,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
2027
1997
|
AddRetriableRecvTrailingMetadataOp() {
|
2028
1998
|
call_attempt_->started_recv_trailing_metadata_ = true;
|
2029
1999
|
batch_.recv_trailing_metadata = true;
|
2030
|
-
|
2000
|
+
call_attempt_->recv_trailing_metadata_.Clear();
|
2031
2001
|
batch_.payload->recv_trailing_metadata.recv_trailing_metadata =
|
2032
2002
|
&call_attempt_->recv_trailing_metadata_;
|
2033
2003
|
batch_.payload->recv_trailing_metadata.collect_stats =
|
@@ -2244,8 +2214,9 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
|
|
2244
2214
|
chand_, this);
|
2245
2215
|
}
|
2246
2216
|
PendingBatchClear(pending);
|
2247
|
-
auto* service_config_call_data =
|
2248
|
-
|
2217
|
+
auto* service_config_call_data =
|
2218
|
+
static_cast<ClientChannelServiceConfigCallData*>(
|
2219
|
+
call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
2249
2220
|
committed_call_ = CreateLoadBalancedCall(
|
2250
2221
|
service_config_call_data->call_dispatch_controller());
|
2251
2222
|
committed_call_->StartTransportStreamOpBatch(batch);
|
@@ -2301,14 +2272,9 @@ void RetryFilter::CallData::MaybeCacheSendOpsForBatch(PendingBatch* pending) {
|
|
2301
2272
|
// Save a copy of metadata for send_initial_metadata ops.
|
2302
2273
|
if (batch->send_initial_metadata) {
|
2303
2274
|
seen_send_initial_metadata_ = true;
|
2304
|
-
GPR_ASSERT(send_initial_metadata_storage_ == nullptr);
|
2305
2275
|
grpc_metadata_batch* send_initial_metadata =
|
2306
2276
|
batch->payload->send_initial_metadata.send_initial_metadata;
|
2307
|
-
|
2308
|
-
static_cast<grpc_linked_mdelem*>(arena_->Alloc(
|
2309
|
-
sizeof(grpc_linked_mdelem) * send_initial_metadata->list.count));
|
2310
|
-
grpc_metadata_batch_copy(send_initial_metadata, &send_initial_metadata_,
|
2311
|
-
send_initial_metadata_storage_);
|
2277
|
+
grpc_metadata_batch_copy(send_initial_metadata, &send_initial_metadata_);
|
2312
2278
|
send_initial_metadata_flags_ =
|
2313
2279
|
batch->payload->send_initial_metadata.send_initial_metadata_flags;
|
2314
2280
|
peer_string_ = batch->payload->send_initial_metadata.peer_string;
|
@@ -2322,14 +2288,9 @@ void RetryFilter::CallData::MaybeCacheSendOpsForBatch(PendingBatch* pending) {
|
|
2322
2288
|
// Save metadata batch for send_trailing_metadata ops.
|
2323
2289
|
if (batch->send_trailing_metadata) {
|
2324
2290
|
seen_send_trailing_metadata_ = true;
|
2325
|
-
GPR_ASSERT(send_trailing_metadata_storage_ == nullptr);
|
2326
2291
|
grpc_metadata_batch* send_trailing_metadata =
|
2327
2292
|
batch->payload->send_trailing_metadata.send_trailing_metadata;
|
2328
|
-
|
2329
|
-
static_cast<grpc_linked_mdelem*>(arena_->Alloc(
|
2330
|
-
sizeof(grpc_linked_mdelem) * send_trailing_metadata->list.count));
|
2331
|
-
grpc_metadata_batch_copy(send_trailing_metadata, &send_trailing_metadata_,
|
2332
|
-
send_trailing_metadata_storage_);
|
2293
|
+
grpc_metadata_batch_copy(send_trailing_metadata, &send_trailing_metadata_);
|
2333
2294
|
}
|
2334
2295
|
}
|
2335
2296
|
|
@@ -2338,7 +2299,7 @@ void RetryFilter::CallData::FreeCachedSendInitialMetadata() {
|
|
2338
2299
|
gpr_log(GPR_INFO, "chand=%p calld=%p: destroying send_initial_metadata",
|
2339
2300
|
chand_, this);
|
2340
2301
|
}
|
2341
|
-
|
2302
|
+
send_initial_metadata_.Clear();
|
2342
2303
|
}
|
2343
2304
|
|
2344
2305
|
void RetryFilter::CallData::FreeCachedSendMessage(size_t idx) {
|
@@ -2355,7 +2316,7 @@ void RetryFilter::CallData::FreeCachedSendTrailingMetadata() {
|
|
2355
2316
|
gpr_log(GPR_INFO, "chand=%p calld=%p: destroying send_trailing_metadata",
|
2356
2317
|
chand_, this);
|
2357
2318
|
}
|
2358
|
-
|
2319
|
+
send_trailing_metadata_.Clear();
|
2359
2320
|
}
|
2360
2321
|
|
2361
2322
|
void RetryFilter::CallData::FreeAllCachedSendOpData() {
|
@@ -2404,8 +2365,8 @@ RetryFilter::CallData::PendingBatch* RetryFilter::CallData::PendingBatchesAdd(
|
|
2404
2365
|
// gRPC clients do not send trailing metadata.
|
2405
2366
|
if (batch->send_initial_metadata) {
|
2406
2367
|
pending_send_initial_metadata_ = true;
|
2407
|
-
bytes_buffered_for_retry_ +=
|
2408
|
-
|
2368
|
+
bytes_buffered_for_retry_ += batch->payload->send_initial_metadata
|
2369
|
+
.send_initial_metadata->TransportSize();
|
2409
2370
|
}
|
2410
2371
|
if (batch->send_message) {
|
2411
2372
|
pending_send_message_ = true;
|
@@ -2541,8 +2502,9 @@ void RetryFilter::CallData::RetryCommit(CallAttempt* call_attempt) {
|
|
2541
2502
|
// call dispatch controller down into the LB call, and it won't be
|
2542
2503
|
// our problem anymore.
|
2543
2504
|
if (call_attempt->lb_call_committed()) {
|
2544
|
-
auto* service_config_call_data =
|
2545
|
-
|
2505
|
+
auto* service_config_call_data =
|
2506
|
+
static_cast<ClientChannelServiceConfigCallData*>(
|
2507
|
+
call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
2546
2508
|
service_config_call_data->call_dispatch_controller()->Commit();
|
2547
2509
|
}
|
2548
2510
|
// Free cached send ops.
|
@@ -22,7 +22,7 @@
|
|
22
22
|
#include <memory>
|
23
23
|
|
24
24
|
#include "src/core/ext/filters/client_channel/retry_throttle.h"
|
25
|
-
#include "src/core/ext/
|
25
|
+
#include "src/core/ext/service_config/service_config_parser.h"
|
26
26
|
#include "src/core/lib/channel/status_util.h"
|
27
27
|
#include "src/core/lib/iomgr/exec_ctx.h" // for grpc_millis
|
28
28
|
|
@@ -23,6 +23,7 @@
|
|
23
23
|
#include <limits.h>
|
24
24
|
#include <string.h>
|
25
25
|
|
26
|
+
#include <map>
|
26
27
|
#include <string>
|
27
28
|
|
28
29
|
#include <grpc/support/alloc.h>
|
@@ -30,7 +31,7 @@
|
|
30
31
|
#include <grpc/support/string_util.h>
|
31
32
|
#include <grpc/support/sync.h>
|
32
33
|
|
33
|
-
#include "src/core/lib/
|
34
|
+
#include "src/core/lib/gprpp/manual_constructor.h"
|
34
35
|
|
35
36
|
namespace grpc_core {
|
36
37
|
namespace internal {
|
@@ -114,55 +115,24 @@ void ServerRetryThrottleData::RecordSuccess() {
|
|
114
115
|
static_cast<gpr_atm>(throttle_data->max_milli_tokens_));
|
115
116
|
}
|
116
117
|
|
117
|
-
//
|
118
|
-
// avl vtable for string -> server_retry_throttle_data map
|
119
|
-
//
|
120
|
-
|
121
|
-
namespace {
|
122
|
-
|
123
|
-
void* copy_server_name(void* key, void* /*unused*/) {
|
124
|
-
return gpr_strdup(static_cast<const char*>(key));
|
125
|
-
}
|
126
|
-
|
127
|
-
long compare_server_name(void* key1, void* key2, void* /*unused*/) {
|
128
|
-
return strcmp(static_cast<const char*>(key1), static_cast<const char*>(key2));
|
129
|
-
}
|
130
|
-
|
131
|
-
void destroy_server_retry_throttle_data(void* value, void* /*unused*/) {
|
132
|
-
ServerRetryThrottleData* throttle_data =
|
133
|
-
static_cast<ServerRetryThrottleData*>(value);
|
134
|
-
throttle_data->Unref();
|
135
|
-
}
|
136
|
-
|
137
|
-
void* copy_server_retry_throttle_data(void* value, void* /*unused*/) {
|
138
|
-
ServerRetryThrottleData* throttle_data =
|
139
|
-
static_cast<ServerRetryThrottleData*>(value);
|
140
|
-
return throttle_data->Ref().release();
|
141
|
-
}
|
142
|
-
|
143
|
-
void destroy_server_name(void* key, void* /*unused*/) { gpr_free(key); }
|
144
|
-
|
145
|
-
const grpc_avl_vtable avl_vtable = {
|
146
|
-
destroy_server_name, copy_server_name, compare_server_name,
|
147
|
-
destroy_server_retry_throttle_data, copy_server_retry_throttle_data};
|
148
|
-
|
149
|
-
} // namespace
|
150
|
-
|
151
118
|
//
|
152
119
|
// ServerRetryThrottleMap
|
153
120
|
//
|
154
121
|
|
122
|
+
using StringToDataMap =
|
123
|
+
std::map<std::string, RefCountedPtr<ServerRetryThrottleData>>;
|
155
124
|
static gpr_mu g_mu;
|
156
|
-
static
|
125
|
+
static StringToDataMap* g_map;
|
157
126
|
|
158
127
|
void ServerRetryThrottleMap::Init() {
|
159
128
|
gpr_mu_init(&g_mu);
|
160
|
-
|
129
|
+
g_map = new StringToDataMap();
|
161
130
|
}
|
162
131
|
|
163
132
|
void ServerRetryThrottleMap::Shutdown() {
|
164
133
|
gpr_mu_destroy(&g_mu);
|
165
|
-
|
134
|
+
delete g_map;
|
135
|
+
g_map = nullptr;
|
166
136
|
}
|
167
137
|
|
168
138
|
RefCountedPtr<ServerRetryThrottleData> ServerRetryThrottleMap::GetDataForServer(
|
@@ -170,23 +140,22 @@ RefCountedPtr<ServerRetryThrottleData> ServerRetryThrottleMap::GetDataForServer(
|
|
170
140
|
intptr_t milli_token_ratio) {
|
171
141
|
RefCountedPtr<ServerRetryThrottleData> result;
|
172
142
|
gpr_mu_lock(&g_mu);
|
143
|
+
auto it = g_map->find(server_name);
|
173
144
|
ServerRetryThrottleData* throttle_data =
|
174
|
-
|
175
|
-
grpc_avl_get(g_avl, const_cast<char*>(server_name.c_str()), nullptr));
|
145
|
+
it == g_map->end() ? nullptr : it->second.get();
|
176
146
|
if (throttle_data == nullptr ||
|
177
147
|
throttle_data->max_milli_tokens() != max_milli_tokens ||
|
178
148
|
throttle_data->milli_token_ratio() != milli_token_ratio) {
|
179
149
|
// Entry not found, or found with old parameters. Create a new one.
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
result = throttle_data->Ref();
|
150
|
+
it = g_map
|
151
|
+
->emplace(server_name,
|
152
|
+
MakeRefCounted<ServerRetryThrottleData>(
|
153
|
+
max_milli_tokens, milli_token_ratio, throttle_data))
|
154
|
+
.first;
|
155
|
+
throttle_data = it->second.get();
|
187
156
|
}
|
188
157
|
gpr_mu_unlock(&g_mu);
|
189
|
-
return
|
158
|
+
return throttle_data->Ref();
|
190
159
|
}
|
191
160
|
|
192
161
|
} // namespace internal
|
@@ -128,7 +128,7 @@ class ServerAddressWeightAttribute : public ServerAddress::AttributeInterface {
|
|
128
128
|
int Cmp(const AttributeInterface* other) const override {
|
129
129
|
const auto* other_locality_attr =
|
130
130
|
static_cast<const ServerAddressWeightAttribute*>(other);
|
131
|
-
return
|
131
|
+
return QsortCompare(weight_, other_locality_attr->weight_);
|
132
132
|
}
|
133
133
|
|
134
134
|
std::string ToString() const override {
|
@@ -19,11 +19,11 @@
|
|
19
19
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
22
|
-
#include "src/core/ext/
|
22
|
+
#include "src/core/ext/service_config/service_config_call_data.h"
|
23
23
|
#include "src/core/lib/channel/channel_args.h"
|
24
24
|
#include "src/core/lib/channel/channel_stack.h"
|
25
25
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
26
|
-
#include "src/core/lib/
|
26
|
+
#include "src/core/lib/config/core_configuration.h"
|
27
27
|
|
28
28
|
namespace grpc_core {
|
29
29
|
|
@@ -59,26 +59,43 @@ class ServiceConfigChannelArgChannelData {
|
|
59
59
|
|
60
60
|
class ServiceConfigChannelArgCallData {
|
61
61
|
public:
|
62
|
-
ServiceConfigChannelArgCallData(
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
62
|
+
ServiceConfigChannelArgCallData(
|
63
|
+
RefCountedPtr<ServiceConfig> service_config,
|
64
|
+
const ServiceConfigParser::ParsedConfigVector* method_config,
|
65
|
+
const grpc_call_element_args* args)
|
66
|
+
: call_context_(args->context),
|
67
|
+
service_config_call_data_(std::move(service_config), method_config,
|
68
|
+
/*call_attributes=*/{}) {
|
69
|
+
GPR_DEBUG_ASSERT(args->context != nullptr);
|
70
|
+
// No need to set the destroy function, since it will be cleaned up
|
71
|
+
// when this filter is destroyed in the filter stack.
|
72
|
+
args->context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value =
|
73
|
+
&service_config_call_data_;
|
74
|
+
}
|
75
|
+
|
76
|
+
~ServiceConfigChannelArgCallData() {
|
77
|
+
// Remove the entry from call context, just in case anyone above us
|
78
|
+
// tries to look at it during call stack destruction.
|
79
|
+
call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value = nullptr;
|
74
80
|
}
|
81
|
+
|
82
|
+
private:
|
83
|
+
grpc_call_context_element* call_context_;
|
84
|
+
ServiceConfigCallData service_config_call_data_;
|
75
85
|
};
|
76
86
|
|
77
87
|
grpc_error_handle ServiceConfigChannelArgInitCallElem(
|
78
88
|
grpc_call_element* elem, const grpc_call_element_args* args) {
|
79
|
-
|
80
|
-
static_cast<
|
81
|
-
|
89
|
+
auto* chand =
|
90
|
+
static_cast<ServiceConfigChannelArgChannelData*>(elem->channel_data);
|
91
|
+
auto* calld = static_cast<ServiceConfigChannelArgCallData*>(elem->call_data);
|
92
|
+
RefCountedPtr<ServiceConfig> service_config = chand->service_config();
|
93
|
+
const ServiceConfigParser::ParsedConfigVector* method_config = nullptr;
|
94
|
+
if (service_config != nullptr) {
|
95
|
+
method_config = service_config->GetMethodParsedConfigVector(args->path);
|
96
|
+
}
|
97
|
+
new (calld) ServiceConfigChannelArgCallData(std::move(service_config),
|
98
|
+
method_config, args);
|
82
99
|
return GRPC_ERROR_NONE;
|
83
100
|
}
|
84
101
|
|
@@ -117,27 +134,23 @@ const grpc_channel_filter ServiceConfigChannelArgFilter = {
|
|
117
134
|
grpc_channel_next_get_info,
|
118
135
|
"service_config_channel_arg"};
|
119
136
|
|
120
|
-
bool maybe_add_service_config_channel_arg_filter(
|
121
|
-
grpc_channel_stack_builder* builder, void* /* arg */) {
|
122
|
-
const grpc_channel_args* channel_args =
|
123
|
-
grpc_channel_stack_builder_get_channel_arguments(builder);
|
124
|
-
if (grpc_channel_args_want_minimal_stack(channel_args) ||
|
125
|
-
grpc_channel_args_find_string(channel_args, GRPC_ARG_SERVICE_CONFIG) ==
|
126
|
-
nullptr) {
|
127
|
-
return true;
|
128
|
-
}
|
129
|
-
return grpc_channel_stack_builder_prepend_filter(
|
130
|
-
builder, &ServiceConfigChannelArgFilter, nullptr, nullptr);
|
131
|
-
}
|
132
|
-
|
133
137
|
} // namespace
|
134
138
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
grpc_channel_init_register_stage(
|
139
|
+
void RegisterServiceConfigChannelArgFilter(
|
140
|
+
CoreConfiguration::Builder* builder) {
|
141
|
+
builder->channel_init()->RegisterStage(
|
139
142
|
GRPC_CLIENT_DIRECT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
140
|
-
|
143
|
+
[](grpc_channel_stack_builder* builder) {
|
144
|
+
const grpc_channel_args* channel_args =
|
145
|
+
grpc_channel_stack_builder_get_channel_arguments(builder);
|
146
|
+
if (grpc_channel_args_want_minimal_stack(channel_args) ||
|
147
|
+
grpc_channel_args_find_string(channel_args,
|
148
|
+
GRPC_ARG_SERVICE_CONFIG) == nullptr) {
|
149
|
+
return true;
|
150
|
+
}
|
151
|
+
return grpc_channel_stack_builder_prepend_filter(
|
152
|
+
builder, &ServiceConfigChannelArgFilter, nullptr, nullptr);
|
153
|
+
});
|
141
154
|
}
|
142
155
|
|
143
|
-
|
156
|
+
} // namespace grpc_core
|