grpc 1.46.2 → 1.48.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +138 -128
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +62 -18
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +118 -0
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +106 -39
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +35 -35
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +20 -1
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +8 -6
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +43 -21
- data/src/core/ext/filters/client_channel/client_channel.cc +111 -82
- data/src/core/ext/filters/client_channel/client_channel.h +43 -8
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +8 -6
- data/src/core/ext/filters/client_channel/connector.h +9 -3
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +19 -6
- data/src/core/ext/filters/client_channel/dynamic_filters.h +12 -2
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +132 -62
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1036 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +149 -147
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +176 -85
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +303 -203
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +92 -54
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +240 -214
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +119 -111
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +86 -71
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +101 -25
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +35 -11
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +36 -20
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +78 -14
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -31
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +11 -6
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +26 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +139 -48
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +39 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -19
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +61 -16
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +14 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +17 -12
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +111 -46
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +12 -18
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +75 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +12 -13
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +24 -6
- data/src/core/ext/filters/client_channel/subchannel.cc +186 -187
- data/src/core/ext/filters/client_channel/subchannel.h +80 -36
- data/src/core/ext/filters/client_channel/subchannel_interface.h +51 -41
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +24 -95
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +17 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +18 -9
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +22 -6
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +30 -10
- data/src/core/ext/filters/http/client/http_client_filter.h +15 -2
- data/src/core/ext/filters/http/client_authority_filter.cc +16 -20
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +16 -9
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +65 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +45 -107
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +95 -255
- data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
- data/src/core/ext/filters/message_size/message_size_filter.cc +45 -41
- data/src/core/ext/filters/message_size/message_size_filter.h +15 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +104 -138
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +58 -29
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- 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_transport.cc +260 -491
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +6 -1
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +145 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +179 -288
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -211
- data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +10 -42
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -13
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +53 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -112
- data/src/core/ext/transport/chttp2/transport/parsing.cc +77 -43
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +54 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +93 -86
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +6 -2
- data/src/core/ext/xds/certificate_provider_store.h +10 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +39 -26
- data/src/core/ext/xds/xds_bootstrap.h +11 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +16 -4
- data/src/core/ext/xds/xds_certificate_provider.h +17 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +14 -5
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +121 -46
- data/src/core/ext/xds/xds_client.h +19 -4
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +126 -25
- data/src/core/ext/xds/xds_cluster.h +12 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +10 -8
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +70 -42
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +56 -7
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +60 -26
- data/src/core/lib/address_utils/sockaddr_utils.h +9 -4
- data/src/core/lib/avl/avl.h +6 -4
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +11 -5
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +34 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +45 -7
- data/src/core/lib/channel/channel_stack.h +45 -9
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +17 -32
- data/src/core/lib/channel/channel_stack_builder_impl.cc +38 -43
- data/src/core/lib/channel/channel_stack_builder_impl.h +4 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +10 -14
- data/src/core/lib/channel/channelz.h +15 -7
- data/src/core/lib/channel/channelz_registry.cc +11 -19
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +22 -31
- data/src/core/lib/channel/connected_channel.h +2 -0
- data/src/core/lib/channel/promise_based_filter.cc +451 -190
- data/src/core/lib/channel/promise_based_filter.h +162 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +48 -16
- data/src/core/lib/compression/compression_internal.h +4 -3
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- data/src/core/lib/debug/stats.cc +9 -9
- 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 +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +29 -14
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc +159 -0
- data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.h +122 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- data/src/core/lib/{iomgr/event_engine → event_engine}/promise.h +27 -9
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -68
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +50 -32
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +16 -0
- data/src/core/lib/gprpp/time.h +10 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +34 -4
- data/src/core/lib/http/format_request.h +3 -1
- data/src/core/lib/http/httpcli.cc +106 -93
- data/src/core/lib/http/httpcli.h +58 -10
- data/src/core/lib/http/httpcli_security_connector.cc +19 -8
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +7 -5
- data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -6
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +55 -96
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +7 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +9 -15
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -15
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +24 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +154 -29
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +27 -16
- data/src/core/lib/iomgr/tcp_posix.cc +96 -52
- data/src/core/lib/iomgr/tcp_server_posix.cc +33 -19
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +41 -38
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -6
- data/src/core/lib/iomgr/tcp_server_windows.cc +20 -12
- data/src/core/lib/iomgr/tcp_windows.cc +12 -9
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +1 -2
- data/src/core/lib/promise/activity.h +13 -19
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +2 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +38 -31
- data/src/core/lib/promise/sleep.h +32 -22
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +6 -4
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +17 -3
- data/src/core/lib/resolver/server_address.h +13 -6
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +62 -62
- data/src/core/lib/resource_quota/memory_quota.h +35 -30
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +15 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +12 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +7 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +11 -7
- data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -6
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +27 -18
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +108 -9
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +18 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +27 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +22 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +21 -9
- data/src/core/lib/security/credentials/fake/fake_credentials.h +15 -3
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +51 -24
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +12 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +13 -4
- data/src/core/lib/security/credentials/iam/iam_credentials.h +12 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +12 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +9 -4
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -7
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +16 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +12 -5
- data/src/core/lib/security/credentials/local/local_credentials.h +9 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +36 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +12 -8
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +17 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +39 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +14 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +35 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +34 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +17 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -3
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +20 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +18 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +19 -7
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +19 -7
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +24 -17
- data/src/core/lib/security/transport/secure_endpoint.cc +81 -20
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +49 -16
- data/src/core/lib/security/transport/security_handshaker.h +5 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +29 -6
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +6 -2
- data/src/core/lib/service_config/service_config_impl.cc +13 -6
- data/src/core/lib/service_config/service_config_impl.h +9 -4
- data/src/core/lib/service_config/service_config_parser.cc +8 -2
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +79 -23
- data/src/core/lib/slice/slice_buffer.h +137 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_string_helpers.cc +0 -16
- data/src/core/lib/slice/slice_string_helpers.h +1 -8
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +90 -137
- data/src/core/lib/surface/call.h +21 -3
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +97 -58
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +29 -20
- data/src/core/lib/surface/completion_queue.h +7 -2
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -46
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +63 -109
- data/src/core/lib/surface/lame_client.h +41 -3
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +83 -64
- data/src/core/lib/surface/server.h +42 -9
- data/src/core/lib/surface/validate_metadata.cc +3 -6
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +16 -8
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +12 -7
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +28 -14
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -20
- data/src/core/lib/transport/transport.h +48 -16
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +11 -0
- data/src/core/lib/transport/transport_op_string.cc +17 -18
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +50 -19
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +69 -38
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
- data/src/core/lib/slice/slice_split.cc +0 -100
- data/src/core/lib/slice/slice_split.h +0 -40
- data/src/core/lib/transport/byte_stream.cc +0 -164
- data/src/core/lib/transport/byte_stream.h +0 -166
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -23,15 +23,22 @@
|
|
23
23
|
|
24
24
|
#include <stdint.h>
|
25
25
|
|
26
|
-
#include
|
27
|
-
#include
|
28
|
-
|
26
|
+
#include <iosfwd>
|
27
|
+
#include <string>
|
28
|
+
|
29
|
+
#include "absl/functional/function_ref.h"
|
30
|
+
#include "absl/status/status.h"
|
31
|
+
#include "absl/types/optional.h"
|
32
|
+
#include "absl/utility/utility.h"
|
33
|
+
|
34
|
+
#include <grpc/support/log.h>
|
35
|
+
|
36
|
+
#include "src/core/lib/debug/trace.h"
|
37
|
+
#include "src/core/lib/gprpp/time.h"
|
38
|
+
#include "src/core/lib/resource_quota/memory_quota.h"
|
29
39
|
#include "src/core/lib/transport/bdp_estimator.h"
|
30
40
|
#include "src/core/lib/transport/pid_controller.h"
|
31
41
|
|
32
|
-
struct grpc_chttp2_transport;
|
33
|
-
struct grpc_chttp2_stream;
|
34
|
-
|
35
42
|
extern grpc_core::TraceFlag grpc_flowctl_trace;
|
36
43
|
|
37
44
|
namespace grpc {
|
@@ -44,18 +51,19 @@ namespace grpc_core {
|
|
44
51
|
namespace chttp2 {
|
45
52
|
|
46
53
|
static constexpr uint32_t kDefaultWindow = 65535;
|
54
|
+
static constexpr uint32_t kDefaultFrameSize = 16384;
|
47
55
|
static constexpr int64_t kMaxWindow = static_cast<int64_t>((1u << 31) - 1);
|
48
56
|
// TODO(ncteisen): Tune this
|
49
57
|
static constexpr uint32_t kFrameSize = 1024 * 1024;
|
50
58
|
static constexpr const uint32_t kMinInitialWindowSize = 128;
|
51
59
|
static constexpr const uint32_t kMaxInitialWindowSize = (1u << 30);
|
52
60
|
// The maximum per-stream flow control window delta to advertise.
|
53
|
-
static constexpr const
|
61
|
+
static constexpr const int64_t kMaxWindowDelta = (1u << 20);
|
54
62
|
|
55
63
|
class TransportFlowControl;
|
56
64
|
class StreamFlowControl;
|
57
65
|
|
58
|
-
|
66
|
+
enum class StallEdge { kNoChange, kStalled, kUnstalled };
|
59
67
|
|
60
68
|
// Encapsulates a collections of actions the transport needs to take with
|
61
69
|
// regard to flow control. Each action comes with urgencies that tell the
|
@@ -105,7 +113,20 @@ class FlowControlAction {
|
|
105
113
|
}
|
106
114
|
|
107
115
|
static const char* UrgencyString(Urgency u);
|
108
|
-
|
116
|
+
std::string DebugString() const;
|
117
|
+
|
118
|
+
void AssertEmpty() { GPR_ASSERT(*this == FlowControlAction()); }
|
119
|
+
|
120
|
+
bool operator==(const FlowControlAction& other) const {
|
121
|
+
return send_stream_update_ == other.send_stream_update_ &&
|
122
|
+
send_transport_update_ == other.send_transport_update_ &&
|
123
|
+
send_initial_window_update_ == other.send_initial_window_update_ &&
|
124
|
+
send_max_frame_size_update_ == other.send_max_frame_size_update_ &&
|
125
|
+
(send_initial_window_update_ == Urgency::NO_ACTION_NEEDED ||
|
126
|
+
initial_window_size_ == other.initial_window_size_) &&
|
127
|
+
(send_max_frame_size_update_ == Urgency::NO_ACTION_NEEDED ||
|
128
|
+
max_frame_size_ == other.max_frame_size_);
|
129
|
+
}
|
109
130
|
|
110
131
|
private:
|
111
132
|
Urgency send_stream_update_ = Urgency::NO_ACTION_NEEDED;
|
@@ -116,120 +137,16 @@ class FlowControlAction {
|
|
116
137
|
uint32_t max_frame_size_ = 0;
|
117
138
|
};
|
118
139
|
|
119
|
-
|
120
|
-
|
121
|
-
FlowControlTrace(const char* reason, TransportFlowControl* tfc,
|
122
|
-
StreamFlowControl* sfc) {
|
123
|
-
if (enabled_) Init(reason, tfc, sfc);
|
124
|
-
}
|
125
|
-
|
126
|
-
~FlowControlTrace() {
|
127
|
-
if (enabled_) Finish();
|
128
|
-
}
|
129
|
-
|
130
|
-
private:
|
131
|
-
void Init(const char* reason, TransportFlowControl* tfc,
|
132
|
-
StreamFlowControl* sfc);
|
133
|
-
void Finish();
|
134
|
-
|
135
|
-
const bool enabled_ = GRPC_TRACE_FLAG_ENABLED(grpc_flowctl_trace);
|
136
|
-
|
137
|
-
TransportFlowControl* tfc_;
|
138
|
-
StreamFlowControl* sfc_;
|
139
|
-
const char* reason_;
|
140
|
-
int64_t remote_window_;
|
141
|
-
int64_t target_window_;
|
142
|
-
int64_t announced_window_;
|
143
|
-
int64_t remote_window_delta_;
|
144
|
-
int64_t local_window_delta_;
|
145
|
-
int64_t announced_window_delta_;
|
146
|
-
};
|
147
|
-
|
148
|
-
// Fat interface with all methods a flow control implementation needs to
|
149
|
-
// support.
|
150
|
-
class TransportFlowControlBase {
|
151
|
-
public:
|
152
|
-
TransportFlowControlBase() {}
|
153
|
-
virtual ~TransportFlowControlBase() {}
|
154
|
-
|
155
|
-
// Is flow control enabled? This is needed in other codepaths like the checks
|
156
|
-
// in parsing and in writing.
|
157
|
-
virtual bool flow_control_enabled() const = 0;
|
158
|
-
|
159
|
-
// Called to check if the transport needs to send a WINDOW_UPDATE frame
|
160
|
-
virtual uint32_t MaybeSendUpdate(bool /* writing_anyway */) = 0;
|
161
|
-
|
162
|
-
// Using the protected members, returns and Action to be taken by the
|
163
|
-
// tranport.
|
164
|
-
virtual FlowControlAction MakeAction() = 0;
|
165
|
-
|
166
|
-
// Using the protected members, returns and Action to be taken by the
|
167
|
-
// tranport. Also checks for updates to our BDP estimate and acts
|
168
|
-
// accordingly.
|
169
|
-
virtual FlowControlAction PeriodicUpdate() = 0;
|
170
|
-
|
171
|
-
// Called to do bookkeeping when a stream owned by this transport sends
|
172
|
-
// data on the wire
|
173
|
-
virtual void StreamSentData(int64_t /* size */) = 0;
|
174
|
-
|
175
|
-
// Called to do bookkeeping when a stream owned by this transport receives
|
176
|
-
// data from the wire. Also does error checking for frame size.
|
177
|
-
virtual grpc_error_handle RecvData(int64_t /* incoming_frame_size */) = 0;
|
178
|
-
|
179
|
-
// Called to do bookkeeping when we receive a WINDOW_UPDATE frame.
|
180
|
-
virtual void RecvUpdate(uint32_t /* size */) = 0;
|
181
|
-
|
182
|
-
// Returns the BdpEstimator held by this object. Caller is responsible for
|
183
|
-
// checking for nullptr. TODO(ncteisen): consider fully encapsulating all
|
184
|
-
// bdp estimator actions inside TransportFlowControl
|
185
|
-
virtual BdpEstimator* bdp_estimator() { return nullptr; }
|
186
|
-
|
187
|
-
// Getters
|
188
|
-
int64_t remote_window() const { return remote_window_; }
|
189
|
-
virtual int64_t target_window() const { return target_initial_window_size_; }
|
190
|
-
int64_t announced_window() const { return announced_window_; }
|
191
|
-
|
192
|
-
// Used in certain benchmarks in which we don't want FlowControl to be a
|
193
|
-
// factor
|
194
|
-
virtual void TestOnlyForceHugeWindow() {}
|
195
|
-
|
196
|
-
protected:
|
197
|
-
friend class grpc::testing::TrickledCHTTP2;
|
198
|
-
int64_t remote_window_ = kDefaultWindow;
|
199
|
-
int64_t target_initial_window_size_ = kDefaultWindow;
|
200
|
-
int64_t announced_window_ = kDefaultWindow;
|
201
|
-
};
|
202
|
-
|
203
|
-
// Implementation of flow control that does NOTHING. Always returns maximum
|
204
|
-
// values, never initiates writes, and assumes that the remote peer is doing
|
205
|
-
// the same. To be used to narrow down on flow control as the cause of negative
|
206
|
-
// performance.
|
207
|
-
class TransportFlowControlDisabled final : public TransportFlowControlBase {
|
208
|
-
public:
|
209
|
-
// Maxes out all values
|
210
|
-
explicit TransportFlowControlDisabled(grpc_chttp2_transport* t);
|
211
|
-
|
212
|
-
bool flow_control_enabled() const override { return false; }
|
213
|
-
|
214
|
-
// Never do anything.
|
215
|
-
uint32_t MaybeSendUpdate(bool /* writing_anyway */) override { return 0; }
|
216
|
-
FlowControlAction MakeAction() override { return FlowControlAction(); }
|
217
|
-
FlowControlAction PeriodicUpdate() override { return FlowControlAction(); }
|
218
|
-
void StreamSentData(int64_t /* size */) override {}
|
219
|
-
grpc_error_handle RecvData(int64_t /* incoming_frame_size */) override {
|
220
|
-
return GRPC_ERROR_NONE;
|
221
|
-
}
|
222
|
-
void RecvUpdate(uint32_t /* size */) override {}
|
223
|
-
};
|
140
|
+
std::ostream& operator<<(std::ostream& out, FlowControlAction::Urgency urgency);
|
141
|
+
std::ostream& operator<<(std::ostream& out, const FlowControlAction& action);
|
224
142
|
|
225
143
|
// Implementation of flow control that abides to HTTP/2 spec and attempts
|
226
144
|
// to be as performant as possible.
|
227
|
-
class TransportFlowControl final
|
145
|
+
class TransportFlowControl final {
|
228
146
|
public:
|
229
|
-
TransportFlowControl(const
|
230
|
-
|
231
|
-
|
232
|
-
bool flow_control_enabled() const override { return true; }
|
147
|
+
explicit TransportFlowControl(const char* name, bool enable_bdp_probe,
|
148
|
+
MemoryOwner* memory_owner);
|
149
|
+
~TransportFlowControl() {}
|
233
150
|
|
234
151
|
bool bdp_probe() const { return enable_bdp_probe_; }
|
235
152
|
|
@@ -237,85 +154,112 @@ class TransportFlowControl final : public TransportFlowControlBase {
|
|
237
154
|
// else returns zero; writing_anyway indicates if a write would happen
|
238
155
|
// regardless of the send - if it is false and this function returns non-zero,
|
239
156
|
// this announce will cause a write to occur
|
240
|
-
uint32_t MaybeSendUpdate(bool writing_anyway)
|
157
|
+
uint32_t MaybeSendUpdate(bool writing_anyway);
|
158
|
+
|
159
|
+
// Track an update to the incoming flow control counters - that is how many
|
160
|
+
// tokens we report to our peer that we're willing to accept.
|
161
|
+
// Instantiators *must* call MakeAction before destruction of this value.
|
162
|
+
class IncomingUpdateContext {
|
163
|
+
public:
|
164
|
+
explicit IncomingUpdateContext(TransportFlowControl* tfc) : tfc_(tfc) {}
|
165
|
+
~IncomingUpdateContext() { GPR_ASSERT(tfc_ == nullptr); }
|
166
|
+
|
167
|
+
IncomingUpdateContext(const IncomingUpdateContext&) = delete;
|
168
|
+
IncomingUpdateContext& operator=(const IncomingUpdateContext&) = delete;
|
169
|
+
|
170
|
+
// Reads the flow control data and returns an actionable struct that will
|
171
|
+
// tell chttp2 exactly what it needs to do
|
172
|
+
FlowControlAction MakeAction() {
|
173
|
+
return absl::exchange(tfc_, nullptr)->UpdateAction(FlowControlAction());
|
174
|
+
}
|
241
175
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
176
|
+
// Notify of data receipt. Returns OkStatus if the data was accepted,
|
177
|
+
// else an error status if the connection should be closed.
|
178
|
+
absl::Status RecvData(
|
179
|
+
int64_t incoming_frame_size, absl::FunctionRef<absl::Status()> stream =
|
180
|
+
[]() { return absl::OkStatus(); });
|
181
|
+
|
182
|
+
// Update a stream announce window delta, keeping track of how much total
|
183
|
+
// positive delta is present on the transport.
|
184
|
+
void UpdateAnnouncedWindowDelta(int64_t* delta, int64_t change) {
|
185
|
+
if (change == 0) return;
|
186
|
+
if (*delta > 0) {
|
187
|
+
tfc_->announced_stream_total_over_incoming_window_ -= *delta;
|
188
|
+
}
|
189
|
+
*delta += change;
|
190
|
+
if (*delta > 0) {
|
191
|
+
tfc_->announced_stream_total_over_incoming_window_ += *delta;
|
192
|
+
}
|
193
|
+
}
|
194
|
+
|
195
|
+
private:
|
196
|
+
TransportFlowControl* tfc_;
|
197
|
+
};
|
198
|
+
|
199
|
+
// Track an update to the outgoing flow control counters - that is how many
|
200
|
+
// tokens our peer has said we can send.
|
201
|
+
class OutgoingUpdateContext {
|
202
|
+
public:
|
203
|
+
explicit OutgoingUpdateContext(TransportFlowControl* tfc) : tfc_(tfc) {}
|
204
|
+
void StreamSentData(int64_t size) { tfc_->remote_window_ -= size; }
|
205
|
+
|
206
|
+
// we have received a WINDOW_UPDATE frame for a transport
|
207
|
+
void RecvUpdate(uint32_t size) { tfc_->remote_window_ += size; }
|
208
|
+
|
209
|
+
// Finish the update and check whether we became stalled or unstalled.
|
210
|
+
StallEdge Finish() {
|
211
|
+
bool is_stalled = tfc_->remote_window_ <= 0;
|
212
|
+
if (is_stalled != was_stalled_) {
|
213
|
+
return is_stalled ? StallEdge::kStalled : StallEdge::kUnstalled;
|
214
|
+
} else {
|
215
|
+
return StallEdge::kNoChange;
|
216
|
+
}
|
217
|
+
}
|
218
|
+
|
219
|
+
private:
|
220
|
+
TransportFlowControl* tfc_;
|
221
|
+
const bool was_stalled_ = tfc_->remote_window_ <= 0;
|
222
|
+
};
|
247
223
|
|
248
224
|
// Call periodically (at a low-ish rate, 100ms - 10s makes sense)
|
249
225
|
// to perform more complex flow control calculations and return an action
|
250
226
|
// to let chttp2 change its parameters
|
251
|
-
FlowControlAction PeriodicUpdate()
|
227
|
+
FlowControlAction PeriodicUpdate();
|
252
228
|
|
253
|
-
|
229
|
+
int64_t target_window() const;
|
230
|
+
int64_t target_frame_size() const { return target_frame_size_; }
|
254
231
|
|
255
|
-
|
256
|
-
void CommitRecvData(int64_t incoming_frame_size) {
|
257
|
-
announced_window_ -= incoming_frame_size;
|
258
|
-
}
|
232
|
+
BdpEstimator* bdp_estimator() { return &bdp_estimator_; }
|
259
233
|
|
260
|
-
|
261
|
-
FlowControlTrace trace(" data recv", this, nullptr);
|
262
|
-
grpc_error_handle error = ValidateRecvData(incoming_frame_size);
|
263
|
-
if (error != GRPC_ERROR_NONE) return error;
|
264
|
-
CommitRecvData(incoming_frame_size);
|
265
|
-
return GRPC_ERROR_NONE;
|
266
|
-
}
|
234
|
+
uint32_t acked_init_window() const { return acked_init_window_; }
|
267
235
|
|
268
|
-
|
269
|
-
void RecvUpdate(uint32_t size) override {
|
270
|
-
FlowControlTrace trace("t updt recv", this, nullptr);
|
271
|
-
remote_window_ += size;
|
272
|
-
}
|
273
|
-
|
274
|
-
// See comment above announced_stream_total_over_incoming_window_ for the
|
275
|
-
// logic behind this decision.
|
276
|
-
int64_t target_window() const override {
|
277
|
-
return static_cast<uint32_t>(
|
278
|
-
std::min(static_cast<int64_t>((1u << 31) - 1),
|
279
|
-
announced_stream_total_over_incoming_window_ +
|
280
|
-
target_initial_window_size_));
|
281
|
-
}
|
236
|
+
void SetAckedInitialWindow(uint32_t value) { acked_init_window_ = value; }
|
282
237
|
|
283
|
-
|
238
|
+
// Getters
|
239
|
+
int64_t remote_window() const { return remote_window_; }
|
240
|
+
int64_t announced_window() const { return announced_window_; }
|
284
241
|
|
285
|
-
|
286
|
-
|
287
|
-
announced_stream_total_over_incoming_window_ -= delta;
|
288
|
-
}
|
242
|
+
int64_t announced_stream_total_over_incoming_window() const {
|
243
|
+
return announced_stream_total_over_incoming_window_;
|
289
244
|
}
|
290
245
|
|
291
|
-
void
|
246
|
+
void RemoveAnnouncedWindowDelta(int64_t delta) {
|
292
247
|
if (delta > 0) {
|
293
|
-
announced_stream_total_over_incoming_window_
|
248
|
+
announced_stream_total_over_incoming_window_ -= delta;
|
294
249
|
}
|
295
250
|
}
|
296
251
|
|
297
|
-
BdpEstimator* bdp_estimator() override { return &bdp_estimator_; }
|
298
|
-
|
299
|
-
void TestOnlyForceHugeWindow() override {
|
300
|
-
announced_window_ = 1024 * 1024 * 1024;
|
301
|
-
remote_window_ = 1024 * 1024 * 1024;
|
302
|
-
}
|
303
|
-
|
304
252
|
private:
|
305
253
|
double TargetLogBdp();
|
306
254
|
double SmoothLogBdp(double value);
|
307
|
-
|
308
|
-
|
255
|
+
static void UpdateSetting(int64_t* desired_value, int64_t new_desired_value,
|
256
|
+
FlowControlAction* action,
|
257
|
+
FlowControlAction& (FlowControlAction::*set)(
|
258
|
+
FlowControlAction::Urgency, uint32_t));
|
309
259
|
|
310
|
-
FlowControlAction UpdateAction(FlowControlAction action)
|
311
|
-
if (announced_window_ < target_window() / 2) {
|
312
|
-
action.set_send_transport_update(
|
313
|
-
FlowControlAction::Urgency::UPDATE_IMMEDIATELY);
|
314
|
-
}
|
315
|
-
return action;
|
316
|
-
}
|
260
|
+
FlowControlAction UpdateAction(FlowControlAction action);
|
317
261
|
|
318
|
-
|
262
|
+
MemoryOwner* const memory_owner_;
|
319
263
|
|
320
264
|
/** calculating what we should give for local window:
|
321
265
|
we track the total amount of flow control over initial window size
|
@@ -336,140 +280,87 @@ class TransportFlowControl final : public TransportFlowControlBase {
|
|
336
280
|
/* pid controller */
|
337
281
|
PidController pid_controller_;
|
338
282
|
Timestamp last_pid_update_;
|
283
|
+
|
284
|
+
int64_t remote_window_ = kDefaultWindow;
|
285
|
+
int64_t target_initial_window_size_ = kDefaultWindow;
|
286
|
+
int64_t target_frame_size_ = kDefaultFrameSize;
|
287
|
+
int64_t announced_window_ = kDefaultWindow;
|
288
|
+
uint32_t acked_init_window_ = kDefaultWindow;
|
339
289
|
};
|
340
290
|
|
341
|
-
//
|
342
|
-
// to
|
343
|
-
class
|
291
|
+
// Implementation of flow control that abides to HTTP/2 spec and attempts
|
292
|
+
// to be as performant as possible.
|
293
|
+
class StreamFlowControl final {
|
344
294
|
public:
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
// Updates an action using the protected members.
|
349
|
-
virtual FlowControlAction UpdateAction(FlowControlAction /* action */) {
|
350
|
-
abort();
|
295
|
+
explicit StreamFlowControl(TransportFlowControl* tfc);
|
296
|
+
~StreamFlowControl() {
|
297
|
+
tfc_->RemoveAnnouncedWindowDelta(announced_window_delta_);
|
351
298
|
}
|
352
299
|
|
353
|
-
//
|
354
|
-
//
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
// Bookkeeping and error checking for when data is received by this stream.
|
361
|
-
virtual grpc_error_handle RecvData(int64_t /* incoming_frame_size */) = 0;
|
300
|
+
// Track an update to the incoming flow control counters - that is how many
|
301
|
+
// tokens we report to our peer that we're willing to accept.
|
302
|
+
// Instantiators *must* call MakeAction before destruction of this value.
|
303
|
+
class IncomingUpdateContext {
|
304
|
+
public:
|
305
|
+
explicit IncomingUpdateContext(StreamFlowControl* sfc)
|
306
|
+
: tfc_upd_(sfc->tfc_), sfc_(sfc) {}
|
362
307
|
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
// Bookkeeping for receiving a WINDOW_UPDATE from for this stream.
|
367
|
-
virtual void RecvUpdate(uint32_t /* size */) = 0;
|
368
|
-
|
369
|
-
// Bookkeeping for when a call pulls bytes out of the transport. At this
|
370
|
-
// point we consider the data 'used' and can thus let out peer know we are
|
371
|
-
// ready for more data.
|
372
|
-
virtual void IncomingByteStreamUpdate(size_t /* max_size_hint */,
|
373
|
-
size_t /* have_already */) {
|
374
|
-
abort();
|
375
|
-
}
|
376
|
-
|
377
|
-
// Used in certain benchmarks in which we don't want FlowControl to be a
|
378
|
-
// factor
|
379
|
-
virtual void TestOnlyForceHugeWindow() {}
|
308
|
+
FlowControlAction MakeAction() {
|
309
|
+
return sfc_->UpdateAction(tfc_upd_.MakeAction());
|
310
|
+
}
|
380
311
|
|
381
|
-
|
382
|
-
|
383
|
-
int64_t local_window_delta() const { return local_window_delta_; }
|
384
|
-
int64_t announced_window_delta() const { return announced_window_delta_; }
|
312
|
+
// we have received data from the wire
|
313
|
+
absl::Status RecvData(int64_t incoming_frame_size);
|
385
314
|
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
int64_t announced_window_delta_ = 0;
|
391
|
-
};
|
392
|
-
|
393
|
-
// Implementation of flow control that does NOTHING. Always returns maximum
|
394
|
-
// values, never initiates writes, and assumes that the remote peer is doing
|
395
|
-
// the same. To be used to narrow down on flow control as the cause of negative
|
396
|
-
// performance.
|
397
|
-
class StreamFlowControlDisabled : public StreamFlowControlBase {
|
398
|
-
public:
|
399
|
-
FlowControlAction UpdateAction(FlowControlAction action) override {
|
400
|
-
return action;
|
401
|
-
}
|
402
|
-
FlowControlAction MakeAction() override { return FlowControlAction(); }
|
403
|
-
void SentData(int64_t /* outgoing_frame_size */) override {}
|
404
|
-
grpc_error_handle RecvData(int64_t /* incoming_frame_size */) override {
|
405
|
-
return GRPC_ERROR_NONE;
|
406
|
-
}
|
407
|
-
uint32_t MaybeSendUpdate() override { return 0; }
|
408
|
-
void RecvUpdate(uint32_t /* size */) override {}
|
409
|
-
void IncomingByteStreamUpdate(size_t /* max_size_hint */,
|
410
|
-
size_t /* have_already */) override {}
|
411
|
-
};
|
315
|
+
// the application is asking for a certain amount of bytes
|
316
|
+
void SetMinProgressSize(uint32_t min_progress_size) {
|
317
|
+
sfc_->min_progress_size_ = min_progress_size;
|
318
|
+
}
|
412
319
|
|
413
|
-
|
414
|
-
// to be as performant as possible.
|
415
|
-
class StreamFlowControl final : public StreamFlowControlBase {
|
416
|
-
public:
|
417
|
-
StreamFlowControl(TransportFlowControl* tfc, const grpc_chttp2_stream* s);
|
418
|
-
~StreamFlowControl() override {
|
419
|
-
tfc_->PreUpdateAnnouncedWindowOverIncomingWindow(announced_window_delta_);
|
420
|
-
}
|
320
|
+
void SetPendingSize(int64_t pending_size);
|
421
321
|
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
}
|
322
|
+
private:
|
323
|
+
TransportFlowControl::IncomingUpdateContext tfc_upd_;
|
324
|
+
StreamFlowControl* const sfc_;
|
325
|
+
};
|
426
326
|
|
427
|
-
//
|
428
|
-
//
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
327
|
+
// Track an update to the outgoing flow control counters - that is how many
|
328
|
+
// tokens our peer has said we can send.
|
329
|
+
class OutgoingUpdateContext {
|
330
|
+
public:
|
331
|
+
explicit OutgoingUpdateContext(StreamFlowControl* sfc)
|
332
|
+
: tfc_upd_(sfc->tfc_), sfc_(sfc) {}
|
333
|
+
// we have received a WINDOW_UPDATE frame for a stream
|
334
|
+
void RecvUpdate(uint32_t size) { sfc_->remote_window_delta_ += size; }
|
335
|
+
// we have sent data on the wire, we must track this in our bookkeeping for
|
336
|
+
// the remote peer's flow control.
|
337
|
+
void SentData(int64_t outgoing_frame_size) {
|
338
|
+
tfc_upd_.StreamSentData(outgoing_frame_size);
|
339
|
+
sfc_->remote_window_delta_ -= outgoing_frame_size;
|
340
|
+
}
|
434
341
|
|
435
|
-
|
436
|
-
|
342
|
+
private:
|
343
|
+
TransportFlowControl::OutgoingUpdateContext tfc_upd_;
|
344
|
+
StreamFlowControl* const sfc_;
|
345
|
+
};
|
437
346
|
|
438
347
|
// returns an announce if we should send a stream update to our peer, else
|
439
348
|
// returns zero
|
440
|
-
uint32_t MaybeSendUpdate()
|
441
|
-
|
442
|
-
// we have received a WINDOW_UPDATE frame for a stream
|
443
|
-
void RecvUpdate(uint32_t size) override {
|
444
|
-
FlowControlTrace trace("s updt recv", tfc_, this);
|
445
|
-
remote_window_delta_ += size;
|
446
|
-
}
|
447
|
-
|
448
|
-
// the application is asking for a certain amount of bytes
|
449
|
-
void IncomingByteStreamUpdate(size_t max_size_hint,
|
450
|
-
size_t have_already) override;
|
349
|
+
uint32_t MaybeSendUpdate();
|
451
350
|
|
452
351
|
int64_t remote_window_delta() const { return remote_window_delta_; }
|
453
|
-
int64_t local_window_delta() const { return local_window_delta_; }
|
454
352
|
int64_t announced_window_delta() const { return announced_window_delta_; }
|
455
|
-
|
456
|
-
const grpc_chttp2_stream* stream() const { return s_; }
|
457
|
-
|
458
|
-
void TestOnlyForceHugeWindow() override {
|
459
|
-
announced_window_delta_ = 1024 * 1024 * 1024;
|
460
|
-
local_window_delta_ = 1024 * 1024 * 1024;
|
461
|
-
remote_window_delta_ = 1024 * 1024 * 1024;
|
462
|
-
}
|
353
|
+
uint32_t min_progress_size() const { return min_progress_size_; }
|
463
354
|
|
464
355
|
private:
|
465
356
|
TransportFlowControl* const tfc_;
|
466
|
-
|
357
|
+
int64_t min_progress_size_ = 0;
|
358
|
+
int64_t remote_window_delta_ = 0;
|
359
|
+
int64_t announced_window_delta_ = 0;
|
360
|
+
absl::optional<int64_t> pending_size_;
|
467
361
|
|
468
|
-
|
469
|
-
|
470
|
-
announced_window_delta_ += change;
|
471
|
-
tfc->PostUpdateAnnouncedWindowOverIncomingWindow(announced_window_delta_);
|
472
|
-
}
|
362
|
+
FlowControlAction UpdateAction(FlowControlAction action);
|
363
|
+
uint32_t DesiredAnnounceSize() const;
|
473
364
|
};
|
474
365
|
|
475
366
|
class TestOnlyTransportTargetWindowEstimatesMocker {
|
@@ -21,10 +21,6 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include <grpc/slice.h>
|
25
|
-
|
26
|
-
#include "src/core/lib/iomgr/error.h"
|
27
|
-
|
28
24
|
/* defined in internal.h */
|
29
25
|
typedef struct grpc_chttp2_stream grpc_chttp2_stream;
|
30
26
|
typedef struct grpc_chttp2_transport grpc_chttp2_transport;
|