grpc 1.39.0.pre1 → 1.41.0.pre2
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 +45 -38
- data/include/grpc/byte_buffer.h +1 -1
- data/include/grpc/byte_buffer_reader.h +1 -1
- data/include/grpc/event_engine/endpoint_config.h +6 -11
- data/include/grpc/event_engine/event_engine.h +73 -72
- data/include/grpc/event_engine/port.h +1 -3
- data/include/grpc/event_engine/slice_allocator.h +14 -34
- data/include/grpc/fork.h +1 -1
- data/include/grpc/grpc.h +10 -4
- data/include/grpc/grpc_posix.h +5 -2
- data/include/grpc/impl/codegen/atm.h +5 -3
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
- data/include/grpc/impl/codegen/atm_windows.h +2 -0
- data/include/grpc/impl/codegen/byte_buffer.h +2 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
- data/include/grpc/impl/codegen/compression_types.h +2 -0
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/fork.h +2 -0
- data/include/grpc/impl/codegen/gpr_slice.h +2 -0
- data/include/grpc/impl/codegen/gpr_types.h +2 -0
- data/include/grpc/impl/codegen/grpc_types.h +22 -13
- data/include/grpc/impl/codegen/log.h +2 -0
- data/include/grpc/impl/codegen/port_platform.h +50 -22
- data/include/grpc/impl/codegen/propagation_bits.h +2 -0
- data/include/grpc/impl/codegen/slice.h +2 -0
- data/include/grpc/impl/codegen/status.h +2 -0
- data/include/grpc/impl/codegen/sync.h +8 -5
- data/include/grpc/impl/codegen/sync_abseil.h +2 -0
- data/include/grpc/impl/codegen/sync_custom.h +2 -0
- data/include/grpc/impl/codegen/sync_generic.h +3 -0
- data/include/grpc/impl/codegen/sync_posix.h +4 -2
- data/include/grpc/impl/codegen/sync_windows.h +2 -0
- data/include/grpc/slice.h +1 -1
- data/include/grpc/status.h +1 -1
- data/include/grpc/support/atm.h +1 -1
- data/include/grpc/support/atm_gcc_atomic.h +1 -1
- data/include/grpc/support/atm_gcc_sync.h +1 -1
- data/include/grpc/support/atm_windows.h +1 -1
- data/include/grpc/support/log.h +1 -1
- data/include/grpc/support/port_platform.h +1 -1
- data/include/grpc/support/sync.h +1 -1
- data/include/grpc/support/sync_abseil.h +1 -1
- data/include/grpc/support/sync_custom.h +1 -1
- data/include/grpc/support/sync_generic.h +1 -1
- data/include/grpc/support/sync_posix.h +1 -1
- data/include/grpc/support/sync_windows.h +1 -1
- data/include/grpc/support/time.h +2 -2
- data/src/core/ext/filters/census/grpc_context.cc +1 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +437 -299
- data/src/core/ext/filters/client_channel/client_channel.h +45 -21
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -1
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +19 -6
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -6
- data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -3
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +8 -7
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +9 -16
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +12 -21
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +17 -28
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +18 -38
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +8 -15
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +5 -14
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +23 -30
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +24 -29
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +4 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -11
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -15
- data/src/core/ext/filters/client_channel/lb_policy.h +81 -90
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +14 -19
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +106 -81
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +2 -3
- data/src/core/ext/filters/client_channel/retry_filter.cc +408 -246
- data/src/core/ext/filters/client_channel/retry_service_config.cc +36 -26
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_call_data.h +45 -5
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +36 -30
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +8 -12
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -13
- data/src/core/ext/filters/http/client/http_client_filter.cc +8 -4
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +2 -1
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +7 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +5 -3
- data/src/core/ext/filters/message_size/message_size_filter.cc +9 -13
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +29 -12
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -0
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -3
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +10 -6
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +2 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +65 -38
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -6
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +67 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +26 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -1
- data/src/core/ext/transport/chttp2/transport/context_list.h +1 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +39 -23
- data/src/core/ext/transport/chttp2/transport/flow_control.h +10 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +11 -11
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +12 -11
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +41 -10
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +12 -7
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -0
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +272 -666
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +236 -70
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +107 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +69 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +821 -1195
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +76 -76
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +159 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +130 -0
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +46 -0
- data/src/core/ext/transport/chttp2/transport/hpack_utils.h +30 -0
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +3 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +89 -83
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +60 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
- data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
- data/src/core/ext/transport/chttp2/transport/writing.cc +32 -28
- data/src/core/ext/transport/inproc/inproc_transport.cc +6 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +96 -96
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +221 -89
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +48 -48
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +151 -61
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +117 -96
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +347 -141
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +15 -15
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +133 -126
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +326 -149
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +23 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +28 -28
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +71 -29
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +114 -78
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +268 -88
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +24 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +51 -21
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +21 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +62 -62
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +131 -53
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +51 -51
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +81 -33
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +110 -53
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +356 -45
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +133 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +9 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +96 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +57 -22
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +174 -17
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +51 -21
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +45 -37
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +177 -94
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +42 -40
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +86 -29
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +177 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +48 -28
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +30 -30
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +81 -33
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +41 -29
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +141 -43
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +47 -43
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +88 -29
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +34 -17
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +84 -9
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +293 -277
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +633 -240
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +10 -10
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +21 -9
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +51 -21
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +24 -23
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +35 -13
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +10 -9
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +26 -16
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +147 -106
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +457 -160
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +48 -31
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +135 -34
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +44 -42
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +108 -55
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +42 -42
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +61 -25
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +21 -9
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +48 -20
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +162 -17
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +205 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +9 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +10 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +10 -10
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +21 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +21 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +15 -15
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +71 -29
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +19 -19
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +51 -21
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +21 -9
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +10 -10
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +11 -5
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +58 -58
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +111 -45
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +68 -68
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +121 -49
- data/src/core/ext/upb-generated/google/api/http.upb.c +18 -18
- data/src/core/ext/upb-generated/google/api/http.upb.h +31 -13
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +11 -5
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +153 -153
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +271 -109
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +11 -5
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +11 -5
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +31 -13
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +11 -5
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +19 -19
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +91 -37
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +5 -5
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +11 -5
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -5
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +60 -60
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +101 -41
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -9
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +5 -5
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +21 -9
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +91 -37
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +8 -8
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +31 -13
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +4 -4
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +11 -5
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +4 -4
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +11 -5
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +11 -5
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +13 -13
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +11 -5
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +4 -4
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +11 -5
- data/src/core/ext/upb-generated/validate/validate.upb.c +240 -224
- data/src/core/ext/upb-generated/validate/validate.upb.h +451 -217
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +11 -5
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +21 -9
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +11 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +11 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +11 -11
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +21 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +53 -52
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +318 -277
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +438 -409
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +198 -170
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +219 -163
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +15 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +29 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +94 -63
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +135 -125
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +131 -123
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +32 -24
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +30 -19
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -55
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +796 -765
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +436 -374
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +140 -114
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +178 -173
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +112 -79
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +14 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +103 -103
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -160
- data/src/core/ext/xds/certificate_provider_registry.cc +2 -2
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_api.cc +1116 -1054
- data/src/core/ext/xds/xds_api.h +47 -35
- data/src/core/ext/xds/xds_bootstrap.cc +29 -51
- data/src/core/ext/xds/xds_client.cc +130 -68
- data/src/core/ext/xds/xds_client.h +0 -4
- data/src/core/ext/xds/xds_client_stats.cc +16 -15
- data/src/core/ext/xds/xds_client_stats.h +6 -6
- data/src/core/ext/xds/xds_http_fault_filter.cc +4 -3
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -2
- data/src/core/ext/xds/xds_http_filters.cc +4 -2
- data/src/core/ext/xds/xds_http_filters.h +3 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +10 -10
- data/src/core/lib/address_utils/parse_address.cc +4 -8
- data/src/core/lib/address_utils/sockaddr_utils.cc +2 -2
- data/src/core/lib/channel/call_tracer.h +85 -0
- data/src/core/lib/channel/channel_args.cc +2 -1
- data/src/core/lib/channel/channel_stack.cc +5 -3
- data/src/core/lib/channel/channel_stack.h +1 -1
- data/src/core/lib/channel/channel_stack_builder.cc +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +0 -8
- data/src/core/lib/channel/channel_trace.cc +4 -3
- data/src/core/lib/channel/channel_trace.h +1 -0
- data/src/core/lib/channel/channelz.cc +40 -36
- data/src/core/lib/channel/channelz.h +27 -27
- data/src/core/lib/channel/channelz_registry.cc +7 -6
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/context.h +3 -0
- data/src/core/lib/channel/handshaker.cc +2 -1
- data/src/core/lib/channel/handshaker.h +1 -2
- data/src/core/lib/channel/handshaker_factory.h +10 -2
- data/src/core/lib/channel/handshaker_registry.cc +15 -70
- data/src/core/lib/channel/handshaker_registry.h +29 -12
- data/src/core/lib/channel/status_util.h +6 -2
- data/src/core/lib/compression/algorithm_metadata.h +1 -0
- data/src/core/lib/compression/compression_args.cc +2 -1
- data/src/core/lib/compression/compression_internal.cc +2 -4
- data/src/core/lib/compression/message_compress.cc +2 -2
- data/src/core/lib/compression/stream_compression.cc +2 -1
- data/src/core/lib/compression/stream_compression.h +3 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +2 -1
- data/src/core/lib/compression/stream_compression_gzip.h +1 -1
- data/src/core/lib/compression/stream_compression_identity.cc +2 -1
- data/src/core/lib/compression/stream_compression_identity.h +1 -1
- data/src/core/lib/config/core_configuration.cc +54 -0
- data/src/core/lib/config/core_configuration.h +108 -0
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +1 -0
- data/src/core/lib/debug/trace.cc +1 -0
- data/src/core/lib/debug/trace.h +2 -1
- data/src/core/lib/event_engine/endpoint_config.cc +0 -1
- data/src/core/lib/event_engine/event_engine.cc +3 -3
- data/src/core/lib/event_engine/sockaddr.cc +3 -3
- data/src/core/lib/gpr/alloc.cc +4 -3
- data/src/core/lib/gpr/env_linux.cc +1 -2
- data/src/core/lib/gpr/env_posix.cc +2 -3
- data/src/core/lib/gpr/log.cc +3 -3
- data/src/core/lib/gpr/log_android.cc +3 -2
- data/src/core/lib/gpr/log_linux.cc +7 -4
- data/src/core/lib/gpr/log_posix.cc +6 -3
- data/src/core/lib/gpr/murmur_hash.cc +4 -2
- data/src/core/lib/gpr/string.h +2 -2
- data/src/core/lib/gpr/sync.cc +2 -2
- data/src/core/lib/gpr/sync_abseil.cc +7 -6
- data/src/core/lib/gpr/sync_posix.cc +3 -3
- data/src/core/lib/gpr/time.cc +3 -2
- data/src/core/lib/gpr/time_windows.cc +3 -2
- data/src/core/lib/gpr/tls.h +120 -41
- data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
- data/src/core/lib/gprpp/arena.cc +2 -1
- data/src/core/lib/gprpp/arena.h +5 -5
- data/src/core/lib/gprpp/atomic_utils.h +47 -0
- data/src/core/lib/gprpp/bitset.h +166 -0
- data/src/core/lib/gprpp/construct_destruct.h +39 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +25 -26
- data/src/core/lib/gprpp/fork.cc +14 -12
- data/src/core/lib/gprpp/fork.h +4 -4
- data/src/core/lib/gprpp/global_config.h +1 -2
- data/src/core/lib/gprpp/global_config_env.cc +7 -7
- data/src/core/lib/gprpp/global_config_generic.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +9 -6
- data/src/core/lib/gprpp/match.h +73 -0
- data/src/core/lib/gprpp/memory.h +3 -3
- data/src/core/lib/gprpp/mpscq.cc +7 -7
- data/src/core/lib/gprpp/mpscq.h +6 -5
- data/src/core/lib/gprpp/orphanable.h +6 -6
- data/src/core/lib/gprpp/overload.h +59 -0
- data/src/core/lib/gprpp/ref_counted.h +18 -18
- data/src/core/lib/gprpp/status_helper.cc +4 -4
- data/src/core/lib/gprpp/sync.h +5 -31
- data/src/core/lib/gprpp/thd_posix.cc +5 -5
- data/src/core/lib/gprpp/thd_windows.cc +4 -11
- data/src/core/lib/gprpp/time_util.cc +2 -2
- data/src/core/lib/gprpp/time_util.h +2 -2
- data/src/core/lib/http/format_request.cc +1 -0
- data/src/core/lib/http/format_request.h +1 -0
- data/src/core/lib/http/httpcli.cc +9 -9
- data/src/core/lib/http/httpcli.h +3 -0
- data/src/core/lib/http/httpcli_security_connector.cc +5 -8
- data/src/core/lib/http/parser.h +1 -0
- data/src/core/lib/iomgr/buffer_list.cc +3 -2
- data/src/core/lib/iomgr/buffer_list.h +1 -2
- data/src/core/lib/iomgr/call_combiner.cc +1 -0
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/combiner.cc +3 -2
- data/src/core/lib/iomgr/combiner.h +1 -0
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
- data/src/core/lib/iomgr/endpoint.cc +0 -4
- data/src/core/lib/iomgr/endpoint.h +1 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -20
- data/src/core/lib/iomgr/endpoint_cfstream.h +1 -1
- data/src/core/lib/iomgr/endpoint_pair.h +1 -0
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +1 -2
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +15 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +17 -9
- data/src/core/lib/iomgr/error.h +23 -9
- data/src/core/lib/iomgr/error_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error_internal.h +1 -0
- data/src/core/lib/iomgr/ev_apple.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +14 -22
- data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -22
- data/src/core/lib/iomgr/ev_poll_posix.cc +13 -25
- data/src/core/lib/iomgr/ev_posix.cc +1 -2
- data/src/core/lib/iomgr/event_engine/endpoint.cc +9 -30
- data/src/core/lib/iomgr/event_engine/endpoint.h +1 -2
- data/src/core/lib/iomgr/event_engine/iomgr.cc +17 -18
- data/src/core/lib/iomgr/event_engine/iomgr.h +20 -2
- data/src/core/lib/iomgr/event_engine/resolver.cc +2 -1
- data/src/core/lib/iomgr/event_engine/tcp.cc +68 -19
- data/src/core/lib/iomgr/exec_ctx.cc +3 -4
- data/src/core/lib/iomgr/exec_ctx.h +11 -19
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +10 -9
- data/src/core/lib/iomgr/executor/mpmcqueue.h +4 -3
- data/src/core/lib/iomgr/executor/threadpool.cc +2 -2
- data/src/core/lib/iomgr/executor/threadpool.h +2 -1
- data/src/core/lib/iomgr/executor.cc +5 -6
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
- data/src/core/lib/iomgr/iocp_windows.cc +1 -0
- data/src/core/lib/iomgr/iomgr.h +2 -2
- data/src/core/lib/iomgr/iomgr_custom.cc +2 -2
- data/src/core/lib/iomgr/iomgr_custom.h +2 -2
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -2
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +4 -4
- data/src/core/lib/iomgr/polling_entity.cc +2 -2
- data/src/core/lib/iomgr/pollset_custom.cc +3 -4
- data/src/core/lib/iomgr/pollset_custom.h +2 -2
- data/src/core/lib/iomgr/pollset_set_custom.cc +1 -2
- data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
- data/src/core/lib/iomgr/port.h +0 -5
- data/src/core/lib/iomgr/python_util.h +2 -1
- data/src/core/lib/iomgr/resolve_address.cc +2 -1
- data/src/core/lib/iomgr/resolve_address.h +0 -4
- data/src/core/lib/iomgr/resolve_address_custom.cc +4 -4
- data/src/core/lib/iomgr/resolve_address_custom.h +0 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +2 -4
- data/src/core/lib/iomgr/resolve_address_windows.cc +6 -8
- data/src/core/lib/iomgr/resource_quota.cc +127 -40
- data/src/core/lib/iomgr/resource_quota.h +66 -17
- data/src/core/lib/iomgr/sockaddr.h +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +3 -3
- data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.h +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -3
- data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
- data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client.cc +4 -2
- data/src/core/lib/iomgr/tcp_client.h +4 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -19
- data/src/core/lib/iomgr/tcp_client_custom.cc +9 -17
- data/src/core/lib/iomgr/tcp_client_posix.cc +24 -9
- data/src/core/lib/iomgr/tcp_client_posix.h +5 -2
- data/src/core/lib/iomgr/tcp_client_windows.cc +16 -6
- data/src/core/lib/iomgr/tcp_custom.cc +11 -23
- data/src/core/lib/iomgr/tcp_custom.h +2 -1
- data/src/core/lib/iomgr/tcp_posix.cc +29 -59
- data/src/core/lib/iomgr/tcp_posix.h +11 -12
- data/src/core/lib/iomgr/tcp_server.cc +6 -4
- data/src/core/lib/iomgr/tcp_server.h +12 -9
- data/src/core/lib/iomgr/tcp_server_custom.cc +15 -33
- data/src/core/lib/iomgr/tcp_server_posix.cc +21 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +3 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -9
- data/src/core/lib/iomgr/tcp_windows.cc +6 -25
- data/src/core/lib/iomgr/tcp_windows.h +2 -1
- data/src/core/lib/iomgr/timer.cc +1 -0
- data/src/core/lib/iomgr/timer.h +1 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +8 -38
- data/src/core/lib/iomgr/timer_generic.h +1 -0
- data/src/core/lib/iomgr/timer_heap.cc +1 -2
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/udp_server.cc +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -5
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -0
- data/src/core/lib/iomgr/work_serializer.cc +4 -4
- data/src/core/lib/iomgr/work_serializer.h +1 -1
- data/src/core/lib/json/json_reader.cc +10 -19
- data/src/core/lib/json/json_util.h +18 -26
- data/src/core/lib/matchers/matchers.cc +8 -20
- data/src/core/lib/matchers/matchers.h +2 -2
- data/src/core/lib/profiling/basic_timers.cc +8 -6
- data/src/core/lib/profiling/stap_timers.cc +2 -2
- data/src/core/lib/security/authorization/authorization_policy_provider.h +5 -4
- data/src/core/lib/security/authorization/evaluate_args.cc +2 -0
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +159 -0
- data/src/core/lib/security/authorization/sdk_server_authz_filter.h +67 -0
- data/src/core/lib/security/context/security_context.cc +7 -6
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -3
- data/src/core/lib/security/credentials/credentials.cc +6 -6
- data/src/core/lib/security/credentials/credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -3
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +13 -26
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -2
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +3 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +13 -22
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -4
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +55 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -1
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +31 -14
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +0 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +3 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -7
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +4 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +0 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +3 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +10 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +50 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +14 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +4 -6
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -7
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -3
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +15 -32
- data/src/core/lib/security/transport/auth_filters.h +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +4 -6
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -14
- data/src/core/lib/security/transport/secure_endpoint.h +1 -0
- data/src/core/lib/security/transport/security_handshaker.cc +17 -8
- data/src/core/lib/security/transport/security_handshaker.h +2 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +0 -7
- data/src/core/lib/security/util/json_util.cc +6 -8
- data/src/core/lib/slice/percent_encoding.cc +73 -30
- data/src/core/lib/slice/percent_encoding.h +29 -28
- data/src/core/lib/slice/slice.cc +14 -5
- data/src/core/lib/slice/slice_buffer.cc +1 -2
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +3 -2
- data/src/core/lib/surface/api_trace.cc +2 -1
- data/src/core/lib/surface/api_trace.h +1 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +1 -1
- data/src/core/lib/surface/call.cc +14 -14
- data/src/core/lib/surface/call.h +3 -3
- data/src/core/lib/surface/call_details.cc +2 -2
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/channel.cc +22 -9
- data/src/core/lib/surface/channel.h +14 -2
- data/src/core/lib/surface/channel_ping.cc +1 -2
- data/src/core/lib/surface/channel_stack_type.cc +2 -1
- data/src/core/lib/surface/completion_queue.cc +54 -64
- data/src/core/lib/surface/completion_queue_factory.cc +2 -1
- data/src/core/lib/surface/completion_queue_factory.h +1 -0
- data/src/core/lib/surface/event_string.cc +1 -0
- data/src/core/lib/surface/init.cc +4 -9
- data/src/core/lib/surface/init.h +0 -1
- data/src/core/lib/surface/init_secure.cc +23 -4
- data/src/core/lib/surface/lame_client.cc +6 -5
- data/src/core/lib/surface/metadata_array.cc +2 -2
- data/src/core/lib/surface/server.cc +20 -34
- data/src/core/lib/surface/server.h +14 -16
- data/src/core/lib/surface/validate_metadata.cc +44 -16
- data/src/core/lib/surface/version.cc +2 -4
- data/src/core/lib/transport/byte_stream.h +1 -0
- data/src/core/lib/transport/connectivity_state.cc +8 -5
- data/src/core/lib/transport/connectivity_state.h +2 -2
- data/src/core/lib/transport/error_utils.cc +1 -0
- data/src/core/lib/transport/metadata.cc +10 -10
- data/src/core/lib/transport/metadata.h +13 -11
- data/src/core/lib/transport/metadata_batch.cc +13 -2
- data/src/core/lib/transport/metadata_batch.h +15 -0
- data/src/core/lib/transport/transport_op_string.cc +2 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +14 -0
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -2
- data/src/core/tsi/alts/crypt/gsec.h +2 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
- data/src/core/tsi/ssl_transport_security.cc +11 -9
- data/src/core/tsi/ssl_transport_security.h +3 -1
- data/src/core/tsi/transport_security.cc +3 -3
- data/src/core/tsi/transport_security_grpc.h +1 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
- data/src/ruby/ext/grpc/rb_call.c +5 -5
- data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
- data/src/ruby/ext/grpc/rb_channel.c +10 -8
- data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
- data/src/ruby/ext/grpc/rb_channel_credentials.c +4 -4
- data/src/ruby/ext/grpc/rb_channel_credentials.h +1 -0
- data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
- data/src/ruby/ext/grpc/rb_compression_options.c +5 -4
- data/src/ruby/ext/grpc/rb_event_thread.c +4 -4
- data/src/ruby/ext/grpc/rb_grpc.c +5 -4
- data/src/ruby/ext/grpc/rb_grpc.h +1 -0
- data/src/ruby/ext/grpc/rb_server.c +6 -5
- data/src/ruby/ext/grpc/rb_server_credentials.c +3 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +1 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +8 -5
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +3 -1
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +6 -5
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +3 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/boringssl-with-bazel/err_data.c +294 -292
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +52 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_locl.h → internal.h} +20 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +5 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +34 -0
- data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
- data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +23 -2
- data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
- data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +45 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +6 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +9 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +160 -74
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +25 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +5 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +58 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +184 -55
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +0 -5
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +9 -16
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +44 -2
- data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +24 -11
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -68
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +17 -9
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +25 -6
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +1 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +11 -5
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +0 -49
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +121 -65
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -6
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +9 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +2 -2
- data/third_party/upb/upb/decode.c +129 -60
- data/third_party/upb/upb/decode.h +32 -4
- data/third_party/upb/upb/decode_fast.c +513 -500
- data/third_party/upb/upb/decode_fast.h +27 -0
- data/third_party/upb/upb/{decode.int.h → decode_internal.h} +38 -8
- data/third_party/upb/upb/def.c +171 -181
- data/third_party/upb/upb/def.h +41 -19
- data/third_party/upb/upb/def.hpp +29 -0
- data/third_party/upb/upb/encode.c +49 -16
- data/third_party/upb/upb/encode.h +29 -2
- data/third_party/upb/upb/msg.c +169 -28
- data/third_party/upb/upb/msg.h +75 -580
- data/third_party/upb/upb/msg_internal.h +687 -0
- data/third_party/upb/upb/port_def.inc +85 -24
- data/third_party/upb/upb/port_undef.inc +38 -1
- data/third_party/upb/upb/reflection.c +29 -37
- data/third_party/upb/upb/reflection.h +36 -8
- data/third_party/upb/upb/reflection.hpp +37 -0
- data/third_party/upb/upb/table.c +211 -86
- data/third_party/upb/upb/{table.int.h → table_internal.h} +56 -180
- data/third_party/upb/upb/text_encode.c +32 -4
- data/third_party/upb/upb/text_encode.h +26 -0
- data/third_party/upb/upb/upb.c +59 -8
- data/third_party/upb/upb/upb.h +36 -6
- data/third_party/upb/upb/upb.hpp +24 -0
- data/third_party/upb/upb/upb_internal.h +58 -0
- data/third_party/xxhash/xxhash.h +77 -195
- metadata +80 -61
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -243
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
- data/src/core/lib/event_engine/slice_allocator.cc +0 -89
- data/src/core/lib/gpr/arena.h +0 -47
- data/src/core/lib/gpr/tls_gcc.h +0 -52
- data/src/core/lib/gpr/tls_msvc.h +0 -54
- data/src/core/lib/gpr/tls_pthread.cc +0 -30
- data/src/core/lib/gpr/tls_pthread.h +0 -56
- data/src/core/lib/gpr/tls_stdcpp.h +0 -48
- data/src/core/lib/gprpp/atomic.h +0 -104
- data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
- data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
- data/src/core/lib/iomgr/pollset_uv.cc +0 -95
- data/src/core/lib/iomgr/pollset_uv.h +0 -36
- data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
- data/src/core/lib/iomgr/socket_utils_uv.cc +0 -49
- data/src/core/lib/iomgr/tcp_uv.cc +0 -421
- data/src/core/lib/iomgr/timer_uv.cc +0 -66
- data/third_party/upb/third_party/wyhash/wyhash.h +0 -145
- data/third_party/upb/upb/upb.int.h +0 -29
@@ -26,19 +26,18 @@
|
|
26
26
|
|
27
27
|
#include <set>
|
28
28
|
|
29
|
+
#include "absl/container/inlined_vector.h"
|
29
30
|
#include "absl/strings/numbers.h"
|
30
31
|
#include "absl/strings/str_cat.h"
|
31
32
|
#include "absl/strings/str_join.h"
|
32
33
|
#include "absl/strings/string_view.h"
|
34
|
+
#include "absl/types/optional.h"
|
33
35
|
|
34
36
|
#include <grpc/support/alloc.h>
|
35
37
|
#include <grpc/support/log.h>
|
36
38
|
#include <grpc/support/string_util.h>
|
37
39
|
#include <grpc/support/sync.h>
|
38
40
|
|
39
|
-
#include "absl/container/inlined_vector.h"
|
40
|
-
#include "absl/types/optional.h"
|
41
|
-
|
42
41
|
#include "src/core/ext/filters/client_channel/backend_metric.h"
|
43
42
|
#include "src/core/ext/filters/client_channel/backup_poller.h"
|
44
43
|
#include "src/core/ext/filters/client_channel/config_selector.h"
|
@@ -174,9 +173,9 @@ class ClientChannel::CallData {
|
|
174
173
|
void MaybeAddCallToResolverQueuedCallsLocked(grpc_call_element* elem)
|
175
174
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
|
176
175
|
|
177
|
-
static void
|
176
|
+
static void RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
178
177
|
void* arg, grpc_error_handle error);
|
179
|
-
void
|
178
|
+
void InjectRecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
180
179
|
grpc_transport_stream_op_batch* batch);
|
181
180
|
|
182
181
|
void CreateDynamicCall(grpc_call_element* elem);
|
@@ -199,7 +198,7 @@ class ClientChannel::CallData {
|
|
199
198
|
|
200
199
|
grpc_polling_entity* pollent_ = nullptr;
|
201
200
|
|
202
|
-
grpc_closure
|
201
|
+
grpc_closure resolution_done_closure_;
|
203
202
|
|
204
203
|
// Accessed while holding ClientChannel::resolution_mu_.
|
205
204
|
bool service_config_applied_ ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) =
|
@@ -211,10 +210,8 @@ class ClientChannel::CallData {
|
|
211
210
|
ResolverQueuedCallCanceller* resolver_call_canceller_
|
212
211
|
ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) = nullptr;
|
213
212
|
|
214
|
-
|
215
|
-
|
216
|
-
grpc_closure* original_recv_initial_metadata_ready_ = nullptr;
|
217
|
-
grpc_closure recv_initial_metadata_ready_;
|
213
|
+
grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
|
214
|
+
grpc_closure recv_trailing_metadata_ready_;
|
218
215
|
|
219
216
|
RefCountedPtr<DynamicFilters> dynamic_filters_;
|
220
217
|
RefCountedPtr<DynamicFilters::Call> dynamic_call_;
|
@@ -345,13 +342,16 @@ class DynamicTerminationFilter::CallData {
|
|
345
342
|
auto* calld = static_cast<CallData*>(elem->call_data);
|
346
343
|
auto* chand = static_cast<DynamicTerminationFilter*>(elem->channel_data);
|
347
344
|
ClientChannel* client_channel = chand->chand_;
|
348
|
-
grpc_call_element_args args = {
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
345
|
+
grpc_call_element_args args = {calld->owning_call_, nullptr,
|
346
|
+
calld->call_context_, calld->path_,
|
347
|
+
/*start_time=*/0, calld->deadline_,
|
348
|
+
calld->arena_, calld->call_combiner_};
|
349
|
+
auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
|
350
|
+
calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
351
|
+
calld->lb_call_ = client_channel->CreateLoadBalancedCall(
|
352
|
+
args, pollent, nullptr,
|
353
|
+
service_config_call_data->call_dispatch_controller(),
|
354
|
+
/*is_transparent_retry=*/false);
|
355
355
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
356
356
|
gpr_log(GPR_INFO,
|
357
357
|
"chand=%p dynamic_termination_calld=%p: create lb_call=%p", chand,
|
@@ -362,7 +362,6 @@ class DynamicTerminationFilter::CallData {
|
|
362
362
|
private:
|
363
363
|
explicit CallData(const grpc_call_element_args& args)
|
364
364
|
: path_(grpc_slice_ref_internal(args.path)),
|
365
|
-
call_start_time_(args.start_time),
|
366
365
|
deadline_(args.deadline),
|
367
366
|
arena_(args.arena),
|
368
367
|
owning_call_(args.call_stack),
|
@@ -372,14 +371,13 @@ class DynamicTerminationFilter::CallData {
|
|
372
371
|
~CallData() { grpc_slice_unref_internal(path_); }
|
373
372
|
|
374
373
|
grpc_slice path_; // Request path.
|
375
|
-
gpr_cycle_counter call_start_time_;
|
376
374
|
grpc_millis deadline_;
|
377
375
|
Arena* arena_;
|
378
376
|
grpc_call_stack* owning_call_;
|
379
377
|
CallCombiner* call_combiner_;
|
380
378
|
grpc_call_context_element* call_context_;
|
381
379
|
|
382
|
-
|
380
|
+
OrphanablePtr<ClientChannel::LoadBalancedCall> lb_call_;
|
383
381
|
};
|
384
382
|
|
385
383
|
const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
|
@@ -812,8 +810,8 @@ void ClientChannel::ExternalConnectivityWatcher::
|
|
812
810
|
void ClientChannel::ExternalConnectivityWatcher::Notify(
|
813
811
|
grpc_connectivity_state state, const absl::Status& /* status */) {
|
814
812
|
bool done = false;
|
815
|
-
if (!done_.
|
816
|
-
|
813
|
+
if (!done_.compare_exchange_strong(done, true, std::memory_order_relaxed,
|
814
|
+
std::memory_order_relaxed)) {
|
817
815
|
return; // Already done.
|
818
816
|
}
|
819
817
|
// Remove external watcher.
|
@@ -836,8 +834,8 @@ void ClientChannel::ExternalConnectivityWatcher::Notify(
|
|
836
834
|
|
837
835
|
void ClientChannel::ExternalConnectivityWatcher::Cancel() {
|
838
836
|
bool done = false;
|
839
|
-
if (!done_.
|
840
|
-
|
837
|
+
if (!done_.compare_exchange_strong(done, true, std::memory_order_relaxed,
|
838
|
+
std::memory_order_relaxed)) {
|
841
839
|
return; // Already done.
|
842
840
|
}
|
843
841
|
ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_CANCELLED);
|
@@ -1060,10 +1058,6 @@ void ClientChannel::Destroy(grpc_channel_element* elem) {
|
|
1060
1058
|
|
1061
1059
|
namespace {
|
1062
1060
|
|
1063
|
-
bool GetEnableRetries(const grpc_channel_args* args) {
|
1064
|
-
return grpc_channel_args_find_bool(args, GRPC_ARG_ENABLE_RETRIES, false);
|
1065
|
-
}
|
1066
|
-
|
1067
1061
|
RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
|
1068
1062
|
const grpc_channel_args* args) {
|
1069
1063
|
const bool use_local_subchannel_pool = grpc_channel_args_find_bool(
|
@@ -1085,7 +1079,6 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
|
|
1085
1079
|
grpc_error_handle* error)
|
1086
1080
|
: deadline_checking_enabled_(
|
1087
1081
|
grpc_deadline_checking_enabled(args->channel_args)),
|
1088
|
-
enable_retries_(GetEnableRetries(args->channel_args)),
|
1089
1082
|
owning_stack_(args->channel_stack),
|
1090
1083
|
client_channel_factory_(
|
1091
1084
|
ClientChannelFactory::GetFromChannelArgs(args->channel_args)),
|
@@ -1148,9 +1141,8 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
|
|
1148
1141
|
channel_args_, GRPC_ARG_KEEPALIVE_TIME_MS,
|
1149
1142
|
{-1 /* default value, unset */, 1, INT_MAX});
|
1150
1143
|
if (!ResolverRegistry::IsValidTarget(target_uri_.get())) {
|
1151
|
-
|
1152
|
-
absl::StrCat("the target uri is not valid: ", target_uri_.get());
|
1153
|
-
*error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_message.c_str());
|
1144
|
+
*error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1145
|
+
absl::StrCat("the target uri is not valid: ", target_uri_.get()));
|
1154
1146
|
return;
|
1155
1147
|
}
|
1156
1148
|
*error = GRPC_ERROR_NONE;
|
@@ -1166,15 +1158,18 @@ ClientChannel::~ClientChannel() {
|
|
1166
1158
|
// Stop backup polling.
|
1167
1159
|
grpc_client_channel_stop_backup_polling(interested_parties_);
|
1168
1160
|
grpc_pollset_set_destroy(interested_parties_);
|
1169
|
-
GRPC_ERROR_UNREF(disconnect_error_.
|
1161
|
+
GRPC_ERROR_UNREF(disconnect_error_.load(std::memory_order_relaxed));
|
1170
1162
|
}
|
1171
1163
|
|
1172
|
-
|
1164
|
+
OrphanablePtr<ClientChannel::LoadBalancedCall>
|
1173
1165
|
ClientChannel::CreateLoadBalancedCall(
|
1174
1166
|
const grpc_call_element_args& args, grpc_polling_entity* pollent,
|
1175
|
-
grpc_closure* on_call_destruction_complete
|
1176
|
-
|
1177
|
-
|
1167
|
+
grpc_closure* on_call_destruction_complete,
|
1168
|
+
ConfigSelector::CallDispatchController* call_dispatch_controller,
|
1169
|
+
bool is_transparent_retry) {
|
1170
|
+
return OrphanablePtr<LoadBalancedCall>(args.arena->New<LoadBalancedCall>(
|
1171
|
+
this, args, pollent, on_call_destruction_complete,
|
1172
|
+
call_dispatch_controller, is_transparent_retry));
|
1178
1173
|
}
|
1179
1174
|
|
1180
1175
|
namespace {
|
@@ -1359,11 +1354,12 @@ void ClientChannel::OnResolverErrorLocked(grpc_error_handle error) {
|
|
1359
1354
|
grpc_error_handle state_error =
|
1360
1355
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
1361
1356
|
"Resolver transient failure", &error, 1);
|
1357
|
+
absl::Status status = grpc_error_to_absl_status(state_error);
|
1362
1358
|
{
|
1363
1359
|
MutexLock lock(&resolution_mu_);
|
1364
1360
|
// Update resolver transient failure.
|
1365
1361
|
GRPC_ERROR_UNREF(resolver_transient_failure_error_);
|
1366
|
-
resolver_transient_failure_error_ =
|
1362
|
+
resolver_transient_failure_error_ = state_error;
|
1367
1363
|
// Process calls that were queued waiting for the resolver result.
|
1368
1364
|
for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
|
1369
1365
|
call = call->next) {
|
@@ -1377,10 +1373,8 @@ void ClientChannel::OnResolverErrorLocked(grpc_error_handle error) {
|
|
1377
1373
|
}
|
1378
1374
|
// Update connectivity state.
|
1379
1375
|
UpdateStateAndPickerLocked(
|
1380
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
1381
|
-
|
1382
|
-
absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(
|
1383
|
-
state_error));
|
1376
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, status, "resolver failure",
|
1377
|
+
absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(status));
|
1384
1378
|
}
|
1385
1379
|
GRPC_ERROR_UNREF(error);
|
1386
1380
|
}
|
@@ -1507,14 +1501,6 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1507
1501
|
config_selector =
|
1508
1502
|
MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
|
1509
1503
|
}
|
1510
|
-
// Construct dynamic filter stack.
|
1511
|
-
std::vector<const grpc_channel_filter*> filters =
|
1512
|
-
config_selector->GetFilters();
|
1513
|
-
if (enable_retries_) {
|
1514
|
-
filters.push_back(&kRetryFilterVtable);
|
1515
|
-
} else {
|
1516
|
-
filters.push_back(&DynamicTerminationFilter::kFilterVtable);
|
1517
|
-
}
|
1518
1504
|
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
1519
1505
|
grpc_channel_arg_pointer_create(
|
1520
1506
|
const_cast<char*>(GRPC_ARG_CLIENT_CHANNEL), this,
|
@@ -1526,6 +1512,16 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1526
1512
|
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
1527
1513
|
channel_args_, args_to_add.data(), args_to_add.size());
|
1528
1514
|
new_args = config_selector->ModifyChannelArgs(new_args);
|
1515
|
+
bool enable_retries =
|
1516
|
+
grpc_channel_args_find_bool(new_args, GRPC_ARG_ENABLE_RETRIES, true);
|
1517
|
+
// Construct dynamic filter stack.
|
1518
|
+
std::vector<const grpc_channel_filter*> filters =
|
1519
|
+
config_selector->GetFilters();
|
1520
|
+
if (enable_retries) {
|
1521
|
+
filters.push_back(&kRetryFilterVtable);
|
1522
|
+
} else {
|
1523
|
+
filters.push_back(&DynamicTerminationFilter::kFilterVtable);
|
1524
|
+
}
|
1529
1525
|
RefCountedPtr<DynamicFilters> dynamic_filters =
|
1530
1526
|
DynamicFilters::Create(new_args, std::move(filters));
|
1531
1527
|
GPR_ASSERT(dynamic_filters != nullptr);
|
@@ -1548,6 +1544,15 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1548
1544
|
// Process calls that were queued waiting for the resolver result.
|
1549
1545
|
for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
|
1550
1546
|
call = call->next) {
|
1547
|
+
// If there are a lot of queued calls here, resuming them all may cause us
|
1548
|
+
// to stay inside C-core for a long period of time. All of that work would
|
1549
|
+
// be done using the same ExecCtx instance and therefore the same cached
|
1550
|
+
// value of "now". The longer it takes to finish all of this work and exit
|
1551
|
+
// from C-core, the more stale the cached value of "now" may become. This
|
1552
|
+
// can cause problems whereby (e.g.) we calculate a timer deadline based
|
1553
|
+
// on the stale value, which results in the timer firing too early. To
|
1554
|
+
// avoid this, we invalidate the cached value for each call we process.
|
1555
|
+
ExecCtx::Get()->InvalidateNow();
|
1551
1556
|
grpc_call_element* elem = call->elem;
|
1552
1557
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
1553
1558
|
grpc_error_handle error = GRPC_ERROR_NONE;
|
@@ -1660,6 +1665,15 @@ void ClientChannel::UpdateStateAndPickerLocked(
|
|
1660
1665
|
// Re-process queued picks.
|
1661
1666
|
for (LbQueuedCall* call = lb_queued_calls_; call != nullptr;
|
1662
1667
|
call = call->next) {
|
1668
|
+
// If there are a lot of queued calls here, resuming them all may cause us
|
1669
|
+
// to stay inside C-core for a long period of time. All of that work would
|
1670
|
+
// be done using the same ExecCtx instance and therefore the same cached
|
1671
|
+
// value of "now". The longer it takes to finish all of this work and exit
|
1672
|
+
// from C-core, the more stale the cached value of "now" may become. This
|
1673
|
+
// can cause problems whereby (e.g.) we calculate a timer deadline based
|
1674
|
+
// on the stale value, which results in the timer firing too early. To
|
1675
|
+
// avoid this, we invalidate the cached value for each call we process.
|
1676
|
+
ExecCtx::Get()->InvalidateNow();
|
1663
1677
|
grpc_error_handle error = GRPC_ERROR_NONE;
|
1664
1678
|
if (call->lb_call->PickSubchannelLocked(&error)) {
|
1665
1679
|
call->lb_call->AsyncPickDone(error);
|
@@ -1671,6 +1685,40 @@ void ClientChannel::UpdateStateAndPickerLocked(
|
|
1671
1685
|
pending_subchannel_updates_.clear();
|
1672
1686
|
}
|
1673
1687
|
|
1688
|
+
namespace {
|
1689
|
+
|
1690
|
+
// TODO(roth): Remove this in favor of the gprpp Match() function once
|
1691
|
+
// we can do that without breaking lock annotations.
|
1692
|
+
template <typename T>
|
1693
|
+
T HandlePickResult(
|
1694
|
+
LoadBalancingPolicy::PickResult* result,
|
1695
|
+
std::function<T(LoadBalancingPolicy::PickResult::Complete*)> complete_func,
|
1696
|
+
std::function<T(LoadBalancingPolicy::PickResult::Queue*)> queue_func,
|
1697
|
+
std::function<T(LoadBalancingPolicy::PickResult::Fail*)> fail_func,
|
1698
|
+
std::function<T(LoadBalancingPolicy::PickResult::Drop*)> drop_func) {
|
1699
|
+
auto* complete_pick =
|
1700
|
+
absl::get_if<LoadBalancingPolicy::PickResult::Complete>(&result->result);
|
1701
|
+
if (complete_pick != nullptr) {
|
1702
|
+
return complete_func(complete_pick);
|
1703
|
+
}
|
1704
|
+
auto* queue_pick =
|
1705
|
+
absl::get_if<LoadBalancingPolicy::PickResult::Queue>(&result->result);
|
1706
|
+
if (queue_pick != nullptr) {
|
1707
|
+
return queue_func(queue_pick);
|
1708
|
+
}
|
1709
|
+
auto* fail_pick =
|
1710
|
+
absl::get_if<LoadBalancingPolicy::PickResult::Fail>(&result->result);
|
1711
|
+
if (fail_pick != nullptr) {
|
1712
|
+
return fail_func(fail_pick);
|
1713
|
+
}
|
1714
|
+
auto* drop_pick =
|
1715
|
+
absl::get_if<LoadBalancingPolicy::PickResult::Drop>(&result->result);
|
1716
|
+
GPR_ASSERT(drop_pick != nullptr);
|
1717
|
+
return drop_func(drop_pick);
|
1718
|
+
}
|
1719
|
+
|
1720
|
+
} // namespace
|
1721
|
+
|
1674
1722
|
grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
|
1675
1723
|
if (state_tracker_.state() != GRPC_CHANNEL_READY) {
|
1676
1724
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("channel not connected");
|
@@ -1680,21 +1728,31 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
|
|
1680
1728
|
MutexLock lock(&data_plane_mu_);
|
1681
1729
|
result = picker_->Pick(LoadBalancingPolicy::PickArgs());
|
1682
1730
|
}
|
1683
|
-
|
1684
|
-
|
1685
|
-
|
1686
|
-
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
1697
|
-
|
1731
|
+
return HandlePickResult<grpc_error_handle>(
|
1732
|
+
&result,
|
1733
|
+
// Complete pick.
|
1734
|
+
[op](LoadBalancingPolicy::PickResult::Complete* complete_pick)
|
1735
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::work_serializer_) {
|
1736
|
+
SubchannelWrapper* subchannel = static_cast<SubchannelWrapper*>(
|
1737
|
+
complete_pick->subchannel.get());
|
1738
|
+
ConnectedSubchannel* connected_subchannel =
|
1739
|
+
subchannel->connected_subchannel();
|
1740
|
+
connected_subchannel->Ping(op->send_ping.on_initiate,
|
1741
|
+
op->send_ping.on_ack);
|
1742
|
+
return GRPC_ERROR_NONE;
|
1743
|
+
},
|
1744
|
+
// Queue pick.
|
1745
|
+
[](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
|
1746
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("LB picker queued call");
|
1747
|
+
},
|
1748
|
+
// Fail pick.
|
1749
|
+
[](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
|
1750
|
+
return absl_status_to_grpc_error(fail_pick->status);
|
1751
|
+
},
|
1752
|
+
// Drop pick.
|
1753
|
+
[](LoadBalancingPolicy::PickResult::Drop* drop_pick) {
|
1754
|
+
return absl_status_to_grpc_error(drop_pick->status);
|
1755
|
+
});
|
1698
1756
|
}
|
1699
1757
|
|
1700
1758
|
void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
|
@@ -1743,13 +1801,14 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
|
|
1743
1801
|
GRPC_ERROR_UNREF(op->disconnect_with_error);
|
1744
1802
|
} else {
|
1745
1803
|
// Disconnect.
|
1746
|
-
GPR_ASSERT(disconnect_error_.
|
1804
|
+
GPR_ASSERT(disconnect_error_.load(std::memory_order_relaxed) ==
|
1747
1805
|
GRPC_ERROR_NONE);
|
1748
|
-
disconnect_error_.
|
1806
|
+
disconnect_error_.store(op->disconnect_with_error,
|
1807
|
+
std::memory_order_release);
|
1749
1808
|
UpdateStateAndPickerLocked(
|
1750
1809
|
GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
|
1751
1810
|
absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(
|
1752
|
-
|
1811
|
+
grpc_error_to_absl_status(op->disconnect_with_error)));
|
1753
1812
|
}
|
1754
1813
|
}
|
1755
1814
|
GRPC_CHANNEL_STACK_UNREF(owning_stack_, "start_transport_op");
|
@@ -1919,10 +1978,26 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
|
|
1919
1978
|
if (GPR_LIKELY(chand->deadline_checking_enabled_)) {
|
1920
1979
|
grpc_deadline_state_client_start_transport_stream_op_batch(elem, batch);
|
1921
1980
|
}
|
1922
|
-
// Intercept
|
1923
|
-
|
1924
|
-
|
1981
|
+
// Intercept recv_trailing_metadata to call CallDispatchController::Commit(),
|
1982
|
+
// in case we wind up failing the call before we get down to the retry
|
1983
|
+
// or LB call layer.
|
1984
|
+
if (batch->recv_trailing_metadata) {
|
1985
|
+
calld->InjectRecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
1986
|
+
batch);
|
1925
1987
|
}
|
1988
|
+
// If we already have a dynamic call, pass the batch down to it.
|
1989
|
+
// Note that once we have done so, we do not need to acquire the channel's
|
1990
|
+
// resolution mutex, which is more efficient (especially for streaming calls).
|
1991
|
+
if (calld->dynamic_call_ != nullptr) {
|
1992
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1993
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: starting batch on dynamic_call=%p",
|
1994
|
+
chand, calld, calld->dynamic_call_.get());
|
1995
|
+
}
|
1996
|
+
calld->dynamic_call_->StartTransportStreamOpBatch(batch);
|
1997
|
+
return;
|
1998
|
+
}
|
1999
|
+
// We do not yet have a dynamic call.
|
2000
|
+
//
|
1926
2001
|
// If we've previously been cancelled, immediately fail any new batches.
|
1927
2002
|
if (GPR_UNLIKELY(calld->cancel_error_ != GRPC_ERROR_NONE)) {
|
1928
2003
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
@@ -1949,35 +2024,16 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
|
|
1949
2024
|
gpr_log(GPR_INFO, "chand=%p calld=%p: recording cancel_error=%s", chand,
|
1950
2025
|
calld, grpc_error_std_string(calld->cancel_error_).c_str());
|
1951
2026
|
}
|
1952
|
-
//
|
1953
|
-
|
1954
|
-
|
1955
|
-
|
1956
|
-
|
1957
|
-
|
1958
|
-
// Note: This will release the call combiner.
|
1959
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
1960
|
-
batch, GRPC_ERROR_REF(calld->cancel_error_), calld->call_combiner_);
|
1961
|
-
} else {
|
1962
|
-
// Note: This will release the call combiner.
|
1963
|
-
calld->dynamic_call_->StartTransportStreamOpBatch(batch);
|
1964
|
-
}
|
2027
|
+
// Fail all pending batches.
|
2028
|
+
calld->PendingBatchesFail(elem, GRPC_ERROR_REF(calld->cancel_error_),
|
2029
|
+
NoYieldCallCombiner);
|
2030
|
+
// Note: This will release the call combiner.
|
2031
|
+
grpc_transport_stream_op_batch_finish_with_failure(
|
2032
|
+
batch, GRPC_ERROR_REF(calld->cancel_error_), calld->call_combiner_);
|
1965
2033
|
return;
|
1966
2034
|
}
|
1967
2035
|
// Add the batch to the pending list.
|
1968
2036
|
calld->PendingBatchesAdd(elem, batch);
|
1969
|
-
// Check if we've already created a dynamic call.
|
1970
|
-
// Note that once we have done so, we do not need to acquire the channel's
|
1971
|
-
// resolution mutex, which is more efficient (especially for streaming calls).
|
1972
|
-
if (calld->dynamic_call_ != nullptr) {
|
1973
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1974
|
-
gpr_log(GPR_INFO, "chand=%p calld=%p: starting batch on dynamic_call=%p",
|
1975
|
-
chand, calld, calld->dynamic_call_.get());
|
1976
|
-
}
|
1977
|
-
calld->PendingBatchesResume(elem);
|
1978
|
-
return;
|
1979
|
-
}
|
1980
|
-
// We do not yet have a dynamic call.
|
1981
2037
|
// For batches containing a send_initial_metadata op, acquire the
|
1982
2038
|
// channel's resolution mutex to apply the service config to the call,
|
1983
2039
|
// after which we will create a dynamic call.
|
@@ -2218,7 +2274,6 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
|
|
2218
2274
|
ConfigSelector::CallConfig call_config =
|
2219
2275
|
config_selector->GetCallConfig({&path_, initial_metadata, arena_});
|
2220
2276
|
if (call_config.error != GRPC_ERROR_NONE) return call_config.error;
|
2221
|
-
on_call_committed_ = std::move(call_config.on_call_committed);
|
2222
2277
|
// Create a ServiceConfigCallData for the call. This stores a ref to the
|
2223
2278
|
// ServiceConfig and caches the right set of parsed configs to use for
|
2224
2279
|
// the call. The MethodConfig will store itself in the call context,
|
@@ -2226,7 +2281,8 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
|
|
2226
2281
|
// will be cleaned up when the call ends.
|
2227
2282
|
auto* service_config_call_data = arena_->New<ServiceConfigCallData>(
|
2228
2283
|
std::move(call_config.service_config), call_config.method_configs,
|
2229
|
-
std::move(call_config.call_attributes),
|
2284
|
+
std::move(call_config.call_attributes),
|
2285
|
+
call_config.call_dispatch_controller, call_context_);
|
2230
2286
|
// Apply our own method params to the call.
|
2231
2287
|
auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
|
2232
2288
|
service_config_call_data->GetMethodParsedConfig(
|
@@ -2265,36 +2321,36 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
|
|
2265
2321
|
}
|
2266
2322
|
|
2267
2323
|
void ClientChannel::CallData::
|
2268
|
-
|
2324
|
+
RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
2269
2325
|
void* arg, grpc_error_handle error) {
|
2270
2326
|
auto* self = static_cast<CallData*>(arg);
|
2271
|
-
|
2272
|
-
|
2273
|
-
|
2327
|
+
auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
|
2328
|
+
self->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
2329
|
+
if (service_config_call_data != nullptr) {
|
2330
|
+
service_config_call_data->call_dispatch_controller()->Commit();
|
2274
2331
|
}
|
2275
2332
|
// Chain to original callback.
|
2276
|
-
Closure::Run(DEBUG_LOCATION, self->
|
2333
|
+
Closure::Run(DEBUG_LOCATION, self->original_recv_trailing_metadata_ready_,
|
2277
2334
|
GRPC_ERROR_REF(error));
|
2278
2335
|
}
|
2279
2336
|
|
2280
|
-
// TODO(roth): Consider not intercepting this callback unless we
|
2281
|
-
// actually need to, if this causes a performance problem.
|
2282
2337
|
void ClientChannel::CallData::
|
2283
|
-
|
2338
|
+
InjectRecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
2284
2339
|
grpc_transport_stream_op_batch* batch) {
|
2285
|
-
|
2286
|
-
batch->payload->
|
2287
|
-
GRPC_CLOSURE_INIT(&
|
2288
|
-
|
2340
|
+
original_recv_trailing_metadata_ready_ =
|
2341
|
+
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
|
2342
|
+
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
|
2343
|
+
RecvTrailingMetadataReadyForConfigSelectorCommitCallback,
|
2289
2344
|
this, nullptr);
|
2290
|
-
batch->payload->
|
2291
|
-
&
|
2345
|
+
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
2346
|
+
&recv_trailing_metadata_ready_;
|
2292
2347
|
}
|
2293
2348
|
|
2294
2349
|
void ClientChannel::CallData::AsyncResolutionDone(grpc_call_element* elem,
|
2295
2350
|
grpc_error_handle error) {
|
2296
|
-
|
2297
|
-
|
2351
|
+
// TODO(roth): Does this callback need to hold a ref to the call stack?
|
2352
|
+
GRPC_CLOSURE_INIT(&resolution_done_closure_, ResolutionDone, elem, nullptr);
|
2353
|
+
ExecCtx::Run(DEBUG_LOCATION, &resolution_done_closure_, error);
|
2298
2354
|
}
|
2299
2355
|
|
2300
2356
|
void ClientChannel::CallData::ResolutionDone(void* arg,
|
@@ -2443,48 +2499,21 @@ class ClientChannel::LoadBalancedCall::Metadata
|
|
2443
2499
|
GRPC_ERROR_NONE);
|
2444
2500
|
}
|
2445
2501
|
|
2446
|
-
|
2447
|
-
|
2448
|
-
|
2449
|
-
|
2450
|
-
|
2451
|
-
|
2452
|
-
|
2453
|
-
|
2454
|
-
|
2455
|
-
|
2456
|
-
}
|
2457
|
-
|
2458
|
-
iterator erase(iterator it) override {
|
2459
|
-
grpc_linked_mdelem* linked_mdelem =
|
2460
|
-
reinterpret_cast<grpc_linked_mdelem*>(GetIteratorHandle(it));
|
2461
|
-
intptr_t handle = reinterpret_cast<intptr_t>(linked_mdelem->next);
|
2462
|
-
grpc_metadata_batch_remove(batch_, linked_mdelem);
|
2463
|
-
return iterator(this, handle);
|
2464
|
-
}
|
2465
|
-
|
2466
|
-
private:
|
2467
|
-
grpc_linked_mdelem* MaybeSkipEntry(grpc_linked_mdelem* entry) const {
|
2468
|
-
if (entry != nullptr && batch_->idx.named.path == entry) {
|
2469
|
-
return entry->next;
|
2502
|
+
std::vector<std::pair<std::string, std::string>> TestOnlyCopyToVector()
|
2503
|
+
override {
|
2504
|
+
std::vector<std::pair<std::string, std::string>> result;
|
2505
|
+
for (grpc_linked_mdelem* entry = batch_->list.head; entry != nullptr;
|
2506
|
+
entry = entry->next) {
|
2507
|
+
if (batch_->idx.named.path != entry) {
|
2508
|
+
result.push_back(std::make_pair(
|
2509
|
+
std::string(StringViewFromSlice(GRPC_MDKEY(entry->md))),
|
2510
|
+
std::string(StringViewFromSlice(GRPC_MDVALUE(entry->md)))));
|
2511
|
+
}
|
2470
2512
|
}
|
2471
|
-
return
|
2472
|
-
}
|
2473
|
-
|
2474
|
-
intptr_t IteratorHandleNext(intptr_t handle) const override {
|
2475
|
-
grpc_linked_mdelem* linked_mdelem =
|
2476
|
-
reinterpret_cast<grpc_linked_mdelem*>(handle);
|
2477
|
-
return reinterpret_cast<intptr_t>(MaybeSkipEntry(linked_mdelem->next));
|
2478
|
-
}
|
2479
|
-
|
2480
|
-
std::pair<absl::string_view, absl::string_view> IteratorHandleGet(
|
2481
|
-
intptr_t handle) const override {
|
2482
|
-
grpc_linked_mdelem* linked_mdelem =
|
2483
|
-
reinterpret_cast<grpc_linked_mdelem*>(handle);
|
2484
|
-
return std::make_pair(StringViewFromSlice(GRPC_MDKEY(linked_mdelem->md)),
|
2485
|
-
StringViewFromSlice(GRPC_MDVALUE(linked_mdelem->md)));
|
2513
|
+
return result;
|
2486
2514
|
}
|
2487
2515
|
|
2516
|
+
private:
|
2488
2517
|
LoadBalancedCall* lb_call_;
|
2489
2518
|
grpc_metadata_batch* batch_;
|
2490
2519
|
};
|
@@ -2530,22 +2559,39 @@ class ClientChannel::LoadBalancedCall::LbCallState
|
|
2530
2559
|
// LoadBalancedCall
|
2531
2560
|
//
|
2532
2561
|
|
2562
|
+
namespace {
|
2563
|
+
|
2564
|
+
CallTracer::CallAttemptTracer* GetCallAttemptTracer(
|
2565
|
+
grpc_call_context_element* context, bool is_transparent_retry) {
|
2566
|
+
auto* call_tracer =
|
2567
|
+
static_cast<CallTracer*>(context[GRPC_CONTEXT_CALL_TRACER].value);
|
2568
|
+
if (call_tracer == nullptr) return nullptr;
|
2569
|
+
return call_tracer->StartNewAttempt(is_transparent_retry);
|
2570
|
+
}
|
2571
|
+
|
2572
|
+
} // namespace
|
2573
|
+
|
2533
2574
|
ClientChannel::LoadBalancedCall::LoadBalancedCall(
|
2534
2575
|
ClientChannel* chand, const grpc_call_element_args& args,
|
2535
|
-
grpc_polling_entity* pollent, grpc_closure* on_call_destruction_complete
|
2536
|
-
|
2537
|
-
|
2538
|
-
|
2576
|
+
grpc_polling_entity* pollent, grpc_closure* on_call_destruction_complete,
|
2577
|
+
ConfigSelector::CallDispatchController* call_dispatch_controller,
|
2578
|
+
bool is_transparent_retry)
|
2579
|
+
: InternallyRefCounted(
|
2580
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)
|
2581
|
+
? "LoadBalancedCall"
|
2582
|
+
: nullptr),
|
2539
2583
|
chand_(chand),
|
2540
2584
|
path_(grpc_slice_ref_internal(args.path)),
|
2541
|
-
call_start_time_(args.start_time),
|
2542
2585
|
deadline_(args.deadline),
|
2543
2586
|
arena_(args.arena),
|
2544
2587
|
owning_call_(args.call_stack),
|
2545
2588
|
call_combiner_(args.call_combiner),
|
2546
2589
|
call_context_(args.context),
|
2547
2590
|
pollent_(pollent),
|
2548
|
-
on_call_destruction_complete_(on_call_destruction_complete)
|
2591
|
+
on_call_destruction_complete_(on_call_destruction_complete),
|
2592
|
+
call_dispatch_controller_(call_dispatch_controller),
|
2593
|
+
call_attempt_tracer_(
|
2594
|
+
GetCallAttemptTracer(args.context, is_transparent_retry)) {}
|
2549
2595
|
|
2550
2596
|
ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
|
2551
2597
|
grpc_slice_unref_internal(path_);
|
@@ -2565,6 +2611,16 @@ ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
|
|
2565
2611
|
}
|
2566
2612
|
}
|
2567
2613
|
|
2614
|
+
void ClientChannel::LoadBalancedCall::Orphan() {
|
2615
|
+
// Compute latency and report it to the tracer.
|
2616
|
+
if (call_attempt_tracer_ != nullptr) {
|
2617
|
+
gpr_timespec latency =
|
2618
|
+
gpr_cycle_counter_sub(gpr_get_cycle_counter(), lb_call_start_time_);
|
2619
|
+
call_attempt_tracer_->RecordEnd(latency);
|
2620
|
+
}
|
2621
|
+
Unref();
|
2622
|
+
}
|
2623
|
+
|
2568
2624
|
size_t ClientChannel::LoadBalancedCall::GetBatchIndex(
|
2569
2625
|
grpc_transport_stream_op_batch* batch) {
|
2570
2626
|
// Note: It is important the send_initial_metadata be the first entry
|
@@ -2680,10 +2736,79 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
|
|
2680
2736
|
|
2681
2737
|
void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
2682
2738
|
grpc_transport_stream_op_batch* batch) {
|
2683
|
-
//
|
2739
|
+
// Handle call tracing.
|
2740
|
+
if (call_attempt_tracer_ != nullptr) {
|
2741
|
+
// Record send ops in tracer.
|
2742
|
+
if (batch->cancel_stream) {
|
2743
|
+
call_attempt_tracer_->RecordCancel(
|
2744
|
+
GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error));
|
2745
|
+
}
|
2746
|
+
if (batch->send_initial_metadata) {
|
2747
|
+
call_attempt_tracer_->RecordSendInitialMetadata(
|
2748
|
+
batch->payload->send_initial_metadata.send_initial_metadata,
|
2749
|
+
batch->payload->send_initial_metadata.send_initial_metadata_flags);
|
2750
|
+
peer_string_ = batch->payload->send_initial_metadata.peer_string;
|
2751
|
+
original_send_initial_metadata_on_complete_ = batch->on_complete;
|
2752
|
+
GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
|
2753
|
+
SendInitialMetadataOnComplete, this, nullptr);
|
2754
|
+
batch->on_complete = &send_initial_metadata_on_complete_;
|
2755
|
+
}
|
2756
|
+
if (batch->send_message) {
|
2757
|
+
call_attempt_tracer_->RecordSendMessage(
|
2758
|
+
*batch->payload->send_message.send_message);
|
2759
|
+
}
|
2760
|
+
if (batch->send_trailing_metadata) {
|
2761
|
+
call_attempt_tracer_->RecordSendTrailingMetadata(
|
2762
|
+
batch->payload->send_trailing_metadata.send_trailing_metadata);
|
2763
|
+
}
|
2764
|
+
// Intercept recv ops.
|
2765
|
+
if (batch->recv_initial_metadata) {
|
2766
|
+
recv_initial_metadata_ =
|
2767
|
+
batch->payload->recv_initial_metadata.recv_initial_metadata;
|
2768
|
+
original_recv_initial_metadata_ready_ =
|
2769
|
+
batch->payload->recv_initial_metadata.recv_initial_metadata_ready;
|
2770
|
+
GRPC_CLOSURE_INIT(&recv_initial_metadata_ready_, RecvInitialMetadataReady,
|
2771
|
+
this, nullptr);
|
2772
|
+
batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
|
2773
|
+
&recv_initial_metadata_ready_;
|
2774
|
+
}
|
2775
|
+
if (batch->recv_message) {
|
2776
|
+
recv_message_ = batch->payload->recv_message.recv_message;
|
2777
|
+
original_recv_message_ready_ =
|
2778
|
+
batch->payload->recv_message.recv_message_ready;
|
2779
|
+
GRPC_CLOSURE_INIT(&recv_message_ready_, RecvMessageReady, this, nullptr);
|
2780
|
+
batch->payload->recv_message.recv_message_ready = &recv_message_ready_;
|
2781
|
+
}
|
2782
|
+
}
|
2783
|
+
// Intercept recv_trailing_metadata even if there is no call tracer,
|
2784
|
+
// since we may need to notify the LB policy about trailing metadata.
|
2684
2785
|
if (batch->recv_trailing_metadata) {
|
2685
|
-
|
2786
|
+
recv_trailing_metadata_ =
|
2787
|
+
batch->payload->recv_trailing_metadata.recv_trailing_metadata;
|
2788
|
+
transport_stream_stats_ =
|
2789
|
+
batch->payload->recv_trailing_metadata.collect_stats;
|
2790
|
+
original_recv_trailing_metadata_ready_ =
|
2791
|
+
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
|
2792
|
+
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_, RecvTrailingMetadataReady,
|
2793
|
+
this, nullptr);
|
2794
|
+
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
2795
|
+
&recv_trailing_metadata_ready_;
|
2796
|
+
}
|
2797
|
+
// If we've already gotten a subchannel call, pass the batch down to it.
|
2798
|
+
// Note that once we have picked a subchannel, we do not need to acquire
|
2799
|
+
// the channel's data plane mutex, which is more efficient (especially for
|
2800
|
+
// streaming calls).
|
2801
|
+
if (subchannel_call_ != nullptr) {
|
2802
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2803
|
+
gpr_log(GPR_INFO,
|
2804
|
+
"chand=%p lb_call=%p: starting batch on subchannel_call=%p",
|
2805
|
+
chand_, this, subchannel_call_.get());
|
2806
|
+
}
|
2807
|
+
subchannel_call_->StartTransportStreamOpBatch(batch);
|
2808
|
+
return;
|
2686
2809
|
}
|
2810
|
+
// We do not yet have a subchannel call.
|
2811
|
+
//
|
2687
2812
|
// If we've previously been cancelled, immediately fail any new batches.
|
2688
2813
|
if (GPR_UNLIKELY(cancel_error_ != GRPC_ERROR_NONE)) {
|
2689
2814
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
@@ -2708,36 +2833,15 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2708
2833
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: recording cancel_error=%s",
|
2709
2834
|
chand_, this, grpc_error_std_string(cancel_error_).c_str());
|
2710
2835
|
}
|
2711
|
-
//
|
2712
|
-
|
2713
|
-
//
|
2714
|
-
|
2715
|
-
|
2716
|
-
// Note: This will release the call combiner.
|
2717
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
2718
|
-
batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
|
2719
|
-
} else {
|
2720
|
-
// Note: This will release the call combiner.
|
2721
|
-
subchannel_call_->StartTransportStreamOpBatch(batch);
|
2722
|
-
}
|
2836
|
+
// Fail all pending batches.
|
2837
|
+
PendingBatchesFail(GRPC_ERROR_REF(cancel_error_), NoYieldCallCombiner);
|
2838
|
+
// Note: This will release the call combiner.
|
2839
|
+
grpc_transport_stream_op_batch_finish_with_failure(
|
2840
|
+
batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
|
2723
2841
|
return;
|
2724
2842
|
}
|
2725
2843
|
// Add the batch to the pending list.
|
2726
2844
|
PendingBatchesAdd(batch);
|
2727
|
-
// Check if we've already gotten a subchannel call.
|
2728
|
-
// Note that once we have picked a subchannel, we do not need to acquire
|
2729
|
-
// the channel's data plane mutex, which is more efficient (especially for
|
2730
|
-
// streaming calls).
|
2731
|
-
if (subchannel_call_ != nullptr) {
|
2732
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2733
|
-
gpr_log(GPR_INFO,
|
2734
|
-
"chand=%p lb_call=%p: starting batch on subchannel_call=%p",
|
2735
|
-
chand_, this, subchannel_call_.get());
|
2736
|
-
}
|
2737
|
-
PendingBatchesResume();
|
2738
|
-
return;
|
2739
|
-
}
|
2740
|
-
// We do not yet have a subchannel call.
|
2741
2845
|
// For batches containing a send_initial_metadata op, acquire the
|
2742
2846
|
// channel's data plane mutex to pick a subchannel.
|
2743
2847
|
if (GPR_LIKELY(batch->send_initial_metadata)) {
|
@@ -2759,38 +2863,82 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2759
2863
|
}
|
2760
2864
|
}
|
2761
2865
|
|
2762
|
-
void ClientChannel::LoadBalancedCall::
|
2763
|
-
|
2764
|
-
grpc_error_handle error) {
|
2866
|
+
void ClientChannel::LoadBalancedCall::SendInitialMetadataOnComplete(
|
2867
|
+
void* arg, grpc_error_handle error) {
|
2765
2868
|
auto* self = static_cast<LoadBalancedCall*>(arg);
|
2766
|
-
|
2767
|
-
|
2768
|
-
|
2869
|
+
self->call_attempt_tracer_->RecordOnDoneSendInitialMetadata(
|
2870
|
+
self->peer_string_);
|
2871
|
+
Closure::Run(DEBUG_LOCATION,
|
2872
|
+
self->original_send_initial_metadata_on_complete_,
|
2873
|
+
GRPC_ERROR_REF(error));
|
2874
|
+
}
|
2875
|
+
|
2876
|
+
void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
|
2877
|
+
void* arg, grpc_error_handle error) {
|
2878
|
+
auto* self = static_cast<LoadBalancedCall*>(arg);
|
2879
|
+
if (error == GRPC_ERROR_NONE) {
|
2880
|
+
// recv_initial_metadata_flags is not populated for clients
|
2881
|
+
self->call_attempt_tracer_->RecordReceivedInitialMetadata(
|
2882
|
+
self->recv_initial_metadata_, 0 /* recv_initial_metadata_flags */);
|
2883
|
+
}
|
2884
|
+
Closure::Run(DEBUG_LOCATION, self->original_recv_initial_metadata_ready_,
|
2885
|
+
GRPC_ERROR_REF(error));
|
2886
|
+
}
|
2887
|
+
|
2888
|
+
void ClientChannel::LoadBalancedCall::RecvMessageReady(
|
2889
|
+
void* arg, grpc_error_handle error) {
|
2890
|
+
auto* self = static_cast<LoadBalancedCall*>(arg);
|
2891
|
+
if (*self->recv_message_ != nullptr) {
|
2892
|
+
self->call_attempt_tracer_->RecordReceivedMessage(**self->recv_message_);
|
2893
|
+
}
|
2894
|
+
Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_,
|
2895
|
+
GRPC_ERROR_REF(error));
|
2896
|
+
}
|
2897
|
+
|
2898
|
+
void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
|
2899
|
+
void* arg, grpc_error_handle error) {
|
2900
|
+
auto* self = static_cast<LoadBalancedCall*>(arg);
|
2901
|
+
// Check if we have a tracer or an LB callback to invoke.
|
2902
|
+
if (self->call_attempt_tracer_ != nullptr ||
|
2903
|
+
self->lb_recv_trailing_metadata_ready_ != nullptr) {
|
2904
|
+
// Get the call's status.
|
2905
|
+
absl::Status status;
|
2769
2906
|
if (error != GRPC_ERROR_NONE) {
|
2770
|
-
|
2907
|
+
// Get status from error.
|
2908
|
+
grpc_status_code code;
|
2909
|
+
grpc_slice message = grpc_empty_slice();
|
2910
|
+
grpc_error_get_status(error, self->deadline_, &code, &message,
|
2911
|
+
/*http_error=*/nullptr, /*error_string=*/nullptr);
|
2912
|
+
status = absl::Status(static_cast<absl::StatusCode>(code),
|
2913
|
+
StringViewFromSlice(message));
|
2771
2914
|
} else {
|
2915
|
+
// Get status from headers.
|
2772
2916
|
const auto& fields = self->recv_trailing_metadata_->idx.named;
|
2773
2917
|
GPR_ASSERT(fields.grpc_status != nullptr);
|
2774
|
-
grpc_status_code
|
2918
|
+
grpc_status_code code =
|
2775
2919
|
grpc_get_status_code_from_metadata(fields.grpc_status->md);
|
2776
|
-
|
2777
|
-
|
2778
|
-
error_for_lb = grpc_error_set_int(
|
2779
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("call failed"),
|
2780
|
-
GRPC_ERROR_INT_GRPC_STATUS, status);
|
2920
|
+
if (code != GRPC_STATUS_OK) {
|
2921
|
+
absl::string_view message;
|
2781
2922
|
if (fields.grpc_message != nullptr) {
|
2782
|
-
|
2783
|
-
error_for_lb, GRPC_ERROR_STR_GRPC_MESSAGE,
|
2784
|
-
grpc_slice_ref_internal(GRPC_MDVALUE(fields.grpc_message->md)));
|
2923
|
+
message = StringViewFromSlice(GRPC_MDVALUE(fields.grpc_message->md));
|
2785
2924
|
}
|
2925
|
+
status = absl::Status(static_cast<absl::StatusCode>(code), message);
|
2786
2926
|
}
|
2787
2927
|
}
|
2788
|
-
//
|
2789
|
-
|
2790
|
-
|
2791
|
-
|
2792
|
-
|
2793
|
-
|
2928
|
+
// If we have a tracer, notify it.
|
2929
|
+
if (self->call_attempt_tracer_ != nullptr) {
|
2930
|
+
self->call_attempt_tracer_->RecordReceivedTrailingMetadata(
|
2931
|
+
status, self->recv_trailing_metadata_,
|
2932
|
+
*self->transport_stream_stats_);
|
2933
|
+
}
|
2934
|
+
// If the LB policy requested a callback for trailing metadata, invoke
|
2935
|
+
// the callback.
|
2936
|
+
if (self->lb_recv_trailing_metadata_ready_ != nullptr) {
|
2937
|
+
Metadata trailing_metadata(self, self->recv_trailing_metadata_);
|
2938
|
+
LbCallState lb_call_state(self);
|
2939
|
+
self->lb_recv_trailing_metadata_ready_(status, &trailing_metadata,
|
2940
|
+
&lb_call_state);
|
2941
|
+
}
|
2794
2942
|
}
|
2795
2943
|
// Chain to original callback.
|
2796
2944
|
if (self->failure_error_ != GRPC_ERROR_NONE) {
|
@@ -2803,23 +2951,9 @@ void ClientChannel::LoadBalancedCall::
|
|
2803
2951
|
error);
|
2804
2952
|
}
|
2805
2953
|
|
2806
|
-
void ClientChannel::LoadBalancedCall::
|
2807
|
-
InjectRecvTrailingMetadataReadyForLoadBalancingPolicy(
|
2808
|
-
grpc_transport_stream_op_batch* batch) {
|
2809
|
-
recv_trailing_metadata_ =
|
2810
|
-
batch->payload->recv_trailing_metadata.recv_trailing_metadata;
|
2811
|
-
original_recv_trailing_metadata_ready_ =
|
2812
|
-
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
|
2813
|
-
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
|
2814
|
-
RecvTrailingMetadataReadyForLoadBalancingPolicy, this,
|
2815
|
-
grpc_schedule_on_exec_ctx);
|
2816
|
-
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
2817
|
-
&recv_trailing_metadata_ready_;
|
2818
|
-
}
|
2819
|
-
|
2820
2954
|
void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
|
2821
2955
|
SubchannelCall::Args call_args = {
|
2822
|
-
std::move(connected_subchannel_), pollent_, path_,
|
2956
|
+
std::move(connected_subchannel_), pollent_, path_, /*start_time=*/0,
|
2823
2957
|
deadline_, arena_,
|
2824
2958
|
// TODO(roth): When we implement hedging support, we will probably
|
2825
2959
|
// need to use a separate call context for each subchannel call.
|
@@ -2873,6 +3007,7 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
|
|
2873
3007
|
lb_call->lb_call_canceller_);
|
2874
3008
|
}
|
2875
3009
|
if (lb_call->lb_call_canceller_ == self && error != GRPC_ERROR_NONE) {
|
3010
|
+
lb_call->call_dispatch_controller_->Commit();
|
2876
3011
|
// Remove pick from list of queued picks.
|
2877
3012
|
lb_call->MaybeRemoveCallFromLbQueuedCallsLocked();
|
2878
3013
|
// Fail pending batches on the call.
|
@@ -2914,6 +3049,7 @@ void ClientChannel::LoadBalancedCall::MaybeAddCallToLbQueuedCallsLocked() {
|
|
2914
3049
|
}
|
2915
3050
|
|
2916
3051
|
void ClientChannel::LoadBalancedCall::AsyncPickDone(grpc_error_handle error) {
|
3052
|
+
// TODO(roth): Does this callback need to hold a ref to LoadBalancedCall?
|
2917
3053
|
GRPC_CLOSURE_INIT(&pick_closure_, PickDone, this, grpc_schedule_on_exec_ctx);
|
2918
3054
|
ExecCtx::Run(DEBUG_LOCATION, &pick_closure_, error);
|
2919
3055
|
}
|
@@ -2930,26 +3066,10 @@ void ClientChannel::LoadBalancedCall::PickDone(void* arg,
|
|
2930
3066
|
self->PendingBatchesFail(GRPC_ERROR_REF(error), YieldCallCombiner);
|
2931
3067
|
return;
|
2932
3068
|
}
|
3069
|
+
self->call_dispatch_controller_->Commit();
|
2933
3070
|
self->CreateSubchannelCall();
|
2934
3071
|
}
|
2935
3072
|
|
2936
|
-
namespace {
|
2937
|
-
|
2938
|
-
const char* PickResultTypeName(
|
2939
|
-
LoadBalancingPolicy::PickResult::ResultType type) {
|
2940
|
-
switch (type) {
|
2941
|
-
case LoadBalancingPolicy::PickResult::PICK_COMPLETE:
|
2942
|
-
return "COMPLETE";
|
2943
|
-
case LoadBalancingPolicy::PickResult::PICK_QUEUE:
|
2944
|
-
return "QUEUE";
|
2945
|
-
case LoadBalancingPolicy::PickResult::PICK_FAILED:
|
2946
|
-
return "FAILED";
|
2947
|
-
}
|
2948
|
-
GPR_UNREACHABLE_CODE(return "UNKNOWN");
|
2949
|
-
}
|
2950
|
-
|
2951
|
-
} // namespace
|
2952
|
-
|
2953
3073
|
void ClientChannel::LoadBalancedCall::PickSubchannel(void* arg,
|
2954
3074
|
grpc_error_handle error) {
|
2955
3075
|
auto* self = static_cast<LoadBalancedCall*>(arg);
|
@@ -2983,64 +3103,82 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
|
|
2983
3103
|
Metadata initial_metadata(this, initial_metadata_batch);
|
2984
3104
|
pick_args.initial_metadata = &initial_metadata;
|
2985
3105
|
auto result = chand_->picker_->Pick(pick_args);
|
2986
|
-
|
2987
|
-
|
2988
|
-
|
2989
|
-
|
2990
|
-
|
2991
|
-
|
2992
|
-
|
2993
|
-
|
2994
|
-
|
2995
|
-
|
2996
|
-
|
2997
|
-
|
2998
|
-
|
2999
|
-
|
3000
|
-
|
3001
|
-
|
3002
|
-
|
3003
|
-
|
3004
|
-
|
3005
|
-
|
3006
|
-
|
3007
|
-
|
3008
|
-
|
3009
|
-
|
3010
|
-
|
3011
|
-
|
3012
|
-
|
3013
|
-
|
3014
|
-
|
3015
|
-
|
3016
|
-
|
3017
|
-
|
3018
|
-
|
3019
|
-
|
3020
|
-
|
3021
|
-
|
3022
|
-
|
3023
|
-
|
3024
|
-
|
3025
|
-
|
3026
|
-
|
3027
|
-
|
3028
|
-
|
3029
|
-
|
3030
|
-
|
3031
|
-
|
3032
|
-
|
3033
|
-
|
3034
|
-
|
3035
|
-
|
3036
|
-
|
3037
|
-
|
3038
|
-
|
3039
|
-
|
3040
|
-
|
3041
|
-
|
3042
|
-
|
3043
|
-
|
3106
|
+
return HandlePickResult<bool>(
|
3107
|
+
&result,
|
3108
|
+
// CompletePick
|
3109
|
+
[this](LoadBalancingPolicy::PickResult::Complete* complete_pick)
|
3110
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3111
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
3112
|
+
gpr_log(GPR_INFO,
|
3113
|
+
"chand=%p lb_call=%p: LB pick succeeded: subchannel=%p",
|
3114
|
+
chand_, this, complete_pick->subchannel.get());
|
3115
|
+
}
|
3116
|
+
GPR_ASSERT(complete_pick->subchannel != nullptr);
|
3117
|
+
// Grab a ref to the connected subchannel while we're still
|
3118
|
+
// holding the data plane mutex.
|
3119
|
+
connected_subchannel_ = chand_->GetConnectedSubchannelInDataPlane(
|
3120
|
+
complete_pick->subchannel.get());
|
3121
|
+
GPR_ASSERT(connected_subchannel_ != nullptr);
|
3122
|
+
lb_recv_trailing_metadata_ready_ =
|
3123
|
+
std::move(complete_pick->recv_trailing_metadata_ready);
|
3124
|
+
MaybeRemoveCallFromLbQueuedCallsLocked();
|
3125
|
+
return true;
|
3126
|
+
},
|
3127
|
+
// QueuePick
|
3128
|
+
[this](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/)
|
3129
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3130
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
3131
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick queued", chand_,
|
3132
|
+
this);
|
3133
|
+
}
|
3134
|
+
MaybeAddCallToLbQueuedCallsLocked();
|
3135
|
+
return false;
|
3136
|
+
},
|
3137
|
+
// FailPick
|
3138
|
+
[this, send_initial_metadata_flags,
|
3139
|
+
&error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
|
3140
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3141
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
3142
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick failed: %s",
|
3143
|
+
chand_, this, fail_pick->status.ToString().c_str());
|
3144
|
+
}
|
3145
|
+
// If we're shutting down, fail all RPCs.
|
3146
|
+
grpc_error_handle disconnect_error = chand_->disconnect_error();
|
3147
|
+
if (disconnect_error != GRPC_ERROR_NONE) {
|
3148
|
+
MaybeRemoveCallFromLbQueuedCallsLocked();
|
3149
|
+
*error = GRPC_ERROR_REF(disconnect_error);
|
3150
|
+
return true;
|
3151
|
+
}
|
3152
|
+
// If wait_for_ready is false, then the error indicates the RPC
|
3153
|
+
// attempt's final status.
|
3154
|
+
if ((send_initial_metadata_flags &
|
3155
|
+
GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
|
3156
|
+
grpc_error_handle lb_error =
|
3157
|
+
absl_status_to_grpc_error(fail_pick->status);
|
3158
|
+
*error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
3159
|
+
"Failed to pick subchannel", &lb_error, 1);
|
3160
|
+
GRPC_ERROR_UNREF(lb_error);
|
3161
|
+
MaybeRemoveCallFromLbQueuedCallsLocked();
|
3162
|
+
return true;
|
3163
|
+
}
|
3164
|
+
// If wait_for_ready is true, then queue to retry when we get a new
|
3165
|
+
// picker.
|
3166
|
+
MaybeAddCallToLbQueuedCallsLocked();
|
3167
|
+
return false;
|
3168
|
+
},
|
3169
|
+
// DropPick
|
3170
|
+
[this, &error](LoadBalancingPolicy::PickResult::Drop* drop_pick)
|
3171
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3172
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
|
3173
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s",
|
3174
|
+
chand_, this, drop_pick->status.ToString().c_str());
|
3175
|
+
}
|
3176
|
+
*error =
|
3177
|
+
grpc_error_set_int(absl_status_to_grpc_error(drop_pick->status),
|
3178
|
+
GRPC_ERROR_INT_LB_POLICY_DROP, 1);
|
3179
|
+
MaybeRemoveCallFromLbQueuedCallsLocked();
|
3180
|
+
return true;
|
3181
|
+
});
|
3044
3182
|
}
|
3045
3183
|
|
3046
3184
|
} // namespace grpc_core
|