grpc 1.45.0 → 1.53.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +437 -254
- data/include/grpc/byte_buffer.h +76 -1
- data/include/grpc/byte_buffer_reader.h +19 -1
- data/include/grpc/compression.h +2 -2
- data/include/grpc/event_engine/endpoint_config.h +11 -5
- data/include/grpc/event_engine/event_engine.h +129 -39
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
- data/include/grpc/event_engine/internal/slice_cast.h +67 -0
- data/include/grpc/event_engine/memory_allocator.h +1 -16
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +306 -0
- data/include/grpc/event_engine/slice_buffer.h +159 -0
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +4 -14
- data/include/grpc/grpc_posix.h +1 -1
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/atm.h +3 -71
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
- data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
- data/include/grpc/impl/codegen/atm_windows.h +3 -108
- data/include/grpc/impl/codegen/byte_buffer.h +4 -78
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
- data/include/grpc/impl/codegen/compression_types.h +5 -83
- data/include/grpc/impl/codegen/connectivity_state.h +5 -21
- data/include/grpc/impl/codegen/fork.h +4 -25
- data/include/grpc/impl/codegen/gpr_types.h +4 -35
- data/include/grpc/impl/codegen/grpc_types.h +5 -797
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -699
- data/include/grpc/impl/codegen/propagation_bits.h +3 -28
- data/include/grpc/impl/codegen/slice.h +4 -107
- data/include/grpc/impl/codegen/status.h +4 -131
- data/include/grpc/impl/codegen/sync.h +3 -42
- data/include/grpc/impl/codegen/sync_abseil.h +3 -12
- data/include/grpc/impl/codegen/sync_custom.h +3 -14
- data/include/grpc/impl/codegen/sync_generic.h +3 -25
- data/include/grpc/impl/codegen/sync_posix.h +3 -28
- data/include/grpc/impl/codegen/sync_windows.h +3 -16
- data/include/grpc/impl/compression_types.h +109 -0
- data/include/grpc/impl/connectivity_state.h +47 -0
- data/include/grpc/impl/grpc_types.h +827 -0
- data/include/grpc/impl/propagation_bits.h +54 -0
- data/include/grpc/impl/slice_type.h +112 -0
- data/include/grpc/load_reporting.h +1 -1
- data/include/grpc/module.modulemap +5 -1
- data/include/grpc/slice.h +1 -1
- data/include/grpc/status.h +131 -1
- data/include/grpc/support/atm.h +70 -1
- data/include/grpc/support/atm_gcc_atomic.h +59 -1
- data/include/grpc/support/atm_gcc_sync.h +58 -1
- data/include/grpc/support/atm_windows.h +105 -1
- data/include/grpc/support/log.h +87 -1
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/port_platform.h +767 -1
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +35 -2
- data/include/grpc/support/sync_abseil.h +11 -1
- data/include/grpc/support/sync_custom.h +13 -1
- data/include/grpc/support/sync_generic.h +24 -1
- data/include/grpc/support/sync_posix.h +27 -1
- data/include/grpc/support/sync_windows.h +15 -1
- data/include/grpc/support/time.h +31 -6
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
- data/src/core/ext/filters/census/grpc_context.cc +19 -17
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +6 -4
- data/src/core/ext/filters/client_channel/backend_metric.cc +19 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
- data/src/core/ext/filters/client_channel/backup_poller.cc +34 -34
- data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +89 -44
- data/src/core/ext/filters/client_channel/client_channel.cc +557 -540
- data/src/core/ext/filters/client_channel/client_channel.h +70 -26
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -23
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -23
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -43
- data/src/core/ext/filters/client_channel/client_channel_factory.h +11 -11
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +22 -47
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +33 -27
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +29 -23
- data/src/core/ext/filters/client_channel/connector.h +19 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -54
- data/src/core/ext/filters/client_channel/dynamic_filters.h +20 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +24 -21
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +137 -582
- data/src/core/ext/filters/client_channel/health/health_check_client.h +29 -163
- data/src/core/ext/filters/client_channel/http_proxy.cc +130 -164
- data/src/core/ext/filters/client_channel/http_proxy.h +46 -22
- data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +4 -3
- 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 +37 -16
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +18 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +71 -131
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +410 -375
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +27 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +28 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +26 -25
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +338 -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/oob_backend_metric_internal.h +117 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +174 -180
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +478 -479
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +491 -409
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -9
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +618 -642
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +261 -234
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +165 -143
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +280 -248
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +251 -187
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +19 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +178 -256
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +212 -216
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +543 -584
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +22 -21
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +34 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +579 -376
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +50 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +89 -84
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +300 -209
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +82 -61
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +20 -19
- 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 +22 -22
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +86 -224
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -34
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +19 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +135 -63
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +269 -0
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +121 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -27
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +413 -303
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
- data/src/core/ext/filters/client_channel/retry_filter.cc +184 -166
- data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
- data/src/core/ext/filters/client_channel/retry_service_config.cc +197 -229
- data/src/core/ext/filters/client_channel/retry_service_config.h +29 -26
- data/src/core/ext/filters/client_channel/retry_throttle.cc +28 -37
- data/src/core/ext/filters/client_channel/retry_throttle.h +36 -29
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +34 -17
- data/src/core/ext/filters/client_channel/subchannel.cc +336 -388
- data/src/core/ext/filters/client_channel/subchannel.h +112 -82
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +41 -47
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +94 -76
- data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +154 -372
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +41 -9
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
- data/src/core/ext/filters/http/client/http_client_filter.cc +119 -477
- data/src/core/ext/filters/http/client/http_client_filter.h +55 -25
- data/src/core/ext/filters/http/client_authority_filter.cc +48 -58
- data/src/core/ext/filters/http/client_authority_filter.h +32 -28
- data/src/core/ext/filters/http/http_filters_plugin.cc +46 -52
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +111 -385
- data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
- data/src/core/ext/filters/message_size/message_size_filter.cc +117 -137
- data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
- data/src/core/ext/filters/rbac/rbac_filter.cc +29 -16
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +90 -202
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
- data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +186 -241
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +209 -215
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +26 -26
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +24 -24
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +35 -34
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +31 -30
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +29 -29
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +893 -1079
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +28 -23
- data/src/core/ext/transport/chttp2/transport/context_list.cc +23 -19
- data/src/core/ext/transport/chttp2/transport/context_list.h +32 -29
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +350 -300
- data/src/core/ext/transport/chttp2/transport/flow_control.h +248 -325
- data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -234
- data/src/core/ext/transport/chttp2/transport/frame_data.h +38 -61
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +41 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +24 -22
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +31 -25
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +35 -26
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +46 -77
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +27 -23
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +34 -33
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +24 -21
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +169 -220
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +59 -61
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +14 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +114 -542
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +31 -24
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +75 -67
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +70 -48
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -38
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
- data/src/core/ext/transport/chttp2/transport/internal.h +250 -298
- data/src/core/ext/transport/chttp2/transport/parsing.cc +365 -132
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +30 -30
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
- data/src/core/ext/transport/chttp2/transport/stream_map.h +34 -33
- data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
- data/src/core/ext/transport/chttp2/transport/varint.h +39 -34
- data/src/core/ext/transport/chttp2/transport/writing.cc +144 -106
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
- data/src/core/ext/transport/inproc/inproc_transport.cc +227 -274
- data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +173 -73
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +39 -36
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +210 -85
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +29 -344
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +189 -1489
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +38 -17
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +9 -7
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +56 -13
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +24 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +19 -6
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +229 -82
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +16 -4
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +26 -4
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +379 -140
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +140 -126
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +824 -301
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +114 -29
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +195 -191
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1042 -412
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +16 -4
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +171 -42
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +517 -202
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +61 -36
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +333 -66
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +20 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +93 -91
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +615 -213
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +417 -79
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +20 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +16 -93
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +38 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +447 -157
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +98 -66
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +545 -191
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +33 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +108 -87
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +502 -149
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +9 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +42 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +24 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +110 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +64 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +20 -6
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +118 -49
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +39 -32
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +242 -87
- 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 +226 -105
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +13 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +86 -53
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +475 -141
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +379 -160
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +16 -12
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +77 -16
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +9 -6
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +50 -8
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +26 -6
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +253 -102
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +229 -92
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +74 -55
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +494 -160
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +38 -30
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +232 -124
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +458 -351
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2879 -947
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +67 -22
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +79 -54
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +454 -133
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +21 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +16 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +38 -14
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +33 -14
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +89 -38
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +13 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +58 -21
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +50 -16
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +9 -8
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +43 -10
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +16 -8
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +101 -38
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +167 -71
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +16 -8
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +88 -16
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +14 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +71 -17
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +184 -144
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1091 -361
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -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 +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +56 -48
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +327 -130
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +88 -31
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +83 -56
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +472 -136
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +35 -13
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +171 -54
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +917 -134
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +59 -25
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -33
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +205 -76
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +23 -8
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +62 -25
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +36 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +55 -22
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +26 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +30 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +20 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +58 -22
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +82 -29
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +49 -22
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +99 -36
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +118 -44
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +120 -40
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +46 -16
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +9 -2
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +25 -8
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +36 -6
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +23 -6
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +477 -185
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +512 -182
- data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
- data/src/core/ext/upb-generated/google/api/http.upb.h +134 -49
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +25 -9
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +12 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +183 -181
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1332 -488
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +16 -6
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +126 -46
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +16 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +81 -18
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +25 -9
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +89 -30
- 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 +55 -14
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +424 -169
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +32 -8
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +18 -4
- 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 +204 -76
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +63 -22
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +115 -16
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +29 -4
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +33 -8
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +26 -4
- data/src/core/ext/upb-generated/validate/validate.upb.c +264 -253
- data/src/core/ext/upb-generated/validate/validate.upb.h +1974 -709
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +115 -16
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +29 -4
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +94 -18
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +26 -4
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +9 -2
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
- 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 +50 -16
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +33 -12
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +16 -4
- 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 +27 -10
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +83 -34
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +22 -4
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +14 -13
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +84 -28
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +309 -121
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +31 -12
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +82 -29
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -4
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +16 -4
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +149 -129
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +168 -154
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
- 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 +141 -138
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -68
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +828 -747
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +483 -445
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +211 -193
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
- data/src/core/ext/xds/certificate_provider_store.cc +75 -3
- data/src/core/ext/xds/certificate_provider_store.h +30 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
- data/src/core/ext/xds/upb_utils.h +3 -25
- data/src/core/ext/xds/xds_api.cc +106 -192
- data/src/core/ext/xds/xds_api.h +41 -39
- data/src/core/ext/xds/xds_bootstrap.cc +5 -537
- data/src/core/ext/xds/xds_bootstrap.h +42 -95
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +36 -25
- data/src/core/ext/xds/xds_certificate_provider.h +36 -4
- data/src/core/ext/xds/xds_channel_args.h +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +17 -7
- data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
- data/src/core/ext/xds/xds_client.cc +885 -1360
- data/src/core/ext/xds/xds_client.h +69 -65
- data/src/core/ext/xds/xds_client_grpc.cc +235 -0
- data/src/core/ext/xds/xds_client_grpc.h +79 -0
- data/src/core/ext/xds/xds_client_stats.cc +24 -25
- data/src/core/ext/xds/xds_client_stats.h +26 -24
- data/src/core/ext/xds/xds_cluster.cc +505 -247
- data/src/core/ext/xds/xds_cluster.h +69 -40
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +132 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +97 -0
- data/src/core/ext/xds/xds_common_types.cc +238 -123
- data/src/core/ext/xds/xds_common_types.h +29 -16
- data/src/core/ext/xds/xds_endpoint.cc +266 -156
- data/src/core/ext/xds/xds_endpoint.h +19 -15
- data/src/core/ext/xds/xds_health_status.cc +80 -0
- data/src/core/ext/xds/xds_health_status.h +109 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +68 -59
- data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
- data/src/core/ext/xds/xds_http_filters.cc +70 -71
- data/src/core/ext/xds/xds_http_filters.h +73 -25
- data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
- data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
- data/src/core/ext/xds/xds_listener.cc +573 -481
- data/src/core/ext/xds/xds_listener.h +57 -51
- data/src/core/ext/xds/xds_resource_type.h +28 -22
- data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
- data/src/core/ext/xds/xds_route_config.cc +638 -479
- data/src/core/ext/xds/xds_route_config.h +79 -42
- data/src/core/ext/xds/xds_routing.cc +21 -7
- data/src/core/ext/xds/xds_routing.h +17 -12
- data/src/core/ext/xds/xds_server_config_fetcher.cc +244 -200
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +52 -52
- data/src/core/lib/address_utils/parse_address.h +46 -42
- data/src/core/lib/address_utils/sockaddr_utils.cc +90 -54
- data/src/core/lib/address_utils/sockaddr_utils.h +45 -40
- data/src/core/lib/avl/avl.h +100 -13
- data/src/core/lib/backoff/backoff.cc +19 -21
- data/src/core/lib/backoff/backoff.h +21 -21
- data/src/core/lib/channel/call_finalization.h +6 -4
- data/src/core/lib/channel/call_tracer.h +27 -9
- data/src/core/lib/channel/channel_args.cc +268 -101
- data/src/core/lib/channel/channel_args.h +461 -56
- data/src/core/lib/channel/channel_args_preconditioning.cc +6 -11
- data/src/core/lib/channel/channel_args_preconditioning.h +7 -7
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +92 -52
- data/src/core/lib/channel/channel_stack.h +186 -140
- data/src/core/lib/channel/channel_stack_builder.cc +26 -104
- data/src/core/lib/channel/channel_stack_builder.h +45 -31
- data/src/core/lib/channel/channel_stack_builder_impl.cc +126 -0
- data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
- data/src/core/lib/channel/channel_trace.cc +29 -36
- data/src/core/lib/channel/channel_trace.h +27 -24
- data/src/core/lib/channel/channelz.cc +50 -65
- data/src/core/lib/channel/channelz.h +50 -33
- data/src/core/lib/channel/channelz_registry.cc +28 -36
- data/src/core/lib/channel/channelz_registry.h +31 -30
- data/src/core/lib/channel/connected_channel.cc +1267 -78
- data/src/core/lib/channel/connected_channel.h +22 -23
- data/src/core/lib/channel/context.h +25 -21
- data/src/core/lib/channel/promise_based_filter.cc +2155 -303
- data/src/core/lib/channel/promise_based_filter.h +636 -122
- data/src/core/lib/channel/status_util.cc +64 -17
- data/src/core/lib/channel/status_util.h +38 -24
- data/src/core/lib/compression/compression.cc +24 -19
- data/src/core/lib/compression/compression_internal.cc +89 -70
- data/src/core/lib/compression/compression_internal.h +28 -27
- data/src/core/lib/compression/message_compress.cc +28 -26
- data/src/core/lib/compression/message_compress.h +28 -29
- data/src/core/lib/config/core_configuration.cc +8 -1
- data/src/core/lib/config/core_configuration.h +86 -39
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/debug/histogram_view.h +37 -0
- data/src/core/lib/debug/stats.cc +48 -152
- data/src/core/lib/debug/stats.h +50 -57
- data/src/core/lib/debug/stats_data.cc +302 -649
- data/src/core/lib/debug/stats_data.h +293 -548
- data/src/core/lib/debug/trace.cc +18 -20
- data/src/core/lib/debug/trace.h +27 -48
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +16 -17
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -9
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +99 -0
- data/src/core/lib/event_engine/default_event_engine.h +73 -0
- data/src/core/lib/event_engine/default_event_engine_factory.cc +24 -3
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +6 -9
- data/src/core/lib/event_engine/event_engine.cc +3 -30
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/forkable.cc +106 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/handle_containers.h +74 -0
- data/src/core/lib/event_engine/memory_allocator.cc +11 -3
- data/src/core/lib/event_engine/poller.h +62 -0
- data/src/core/lib/event_engine/posix.h +158 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
- data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
- data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/posix_engine/wakeup_fd_pipe.h} +19 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/resolved_address.cc +23 -2
- data/src/core/lib/{iomgr/event_engine → event_engine}/resolved_address_internal.h +5 -8
- data/src/core/lib/event_engine/shim.cc +56 -0
- data/src/core/lib/event_engine/shim.h +33 -0
- data/src/core/lib/event_engine/slice.cc +103 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
- data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
- data/src/core/lib/event_engine/thread_local.cc +29 -0
- data/src/core/lib/event_engine/thread_local.h +32 -0
- data/src/core/lib/event_engine/thread_pool.cc +253 -0
- data/src/core/lib/event_engine/thread_pool.h +141 -0
- data/src/core/lib/event_engine/time_util.cc +30 -0
- data/src/core/lib/event_engine/time_util.h +32 -0
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/event_engine/trace.cc} +9 -13
- data/src/core/lib/event_engine/trace.h +43 -0
- data/src/core/lib/event_engine/utils.cc +44 -0
- data/src/core/lib/event_engine/utils.h +44 -0
- data/src/core/lib/event_engine/windows/iocp.cc +140 -0
- data/src/core/lib/event_engine/windows/iocp.h +69 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
- data/src/core/lib/event_engine/windows/win_socket.h +129 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
- data/src/core/lib/experiments/config.cc +161 -0
- data/src/core/lib/experiments/config.h +53 -0
- data/src/core/lib/experiments/experiments.cc +81 -0
- data/src/core/lib/experiments/experiments.h +117 -0
- data/src/core/lib/gpr/alloc.cc +19 -25
- data/src/core/lib/gpr/alloc.h +20 -20
- data/src/core/lib/gpr/atm.cc +17 -17
- data/src/core/lib/gpr/cpu_iphone.cc +24 -24
- data/src/core/lib/gpr/cpu_linux.cc +28 -23
- data/src/core/lib/gpr/cpu_posix.cc +23 -22
- data/src/core/lib/gpr/cpu_windows.cc +20 -18
- data/src/core/lib/gpr/log.cc +30 -17
- data/src/core/lib/gpr/log_android.cc +22 -20
- data/src/core/lib/gpr/log_linux.cc +24 -24
- data/src/core/lib/gpr/log_posix.cc +20 -19
- data/src/core/lib/gpr/log_windows.cc +25 -25
- data/src/core/lib/gpr/spinlock.h +20 -20
- data/src/core/lib/gpr/string.cc +25 -24
- data/src/core/lib/gpr/string.h +61 -61
- data/src/core/lib/gpr/string_posix.cc +24 -24
- data/src/core/lib/gpr/string_util_windows.cc +25 -52
- data/src/core/lib/gpr/string_windows.cc +24 -24
- data/src/core/lib/gpr/sync.cc +25 -25
- data/src/core/lib/gpr/sync_abseil.cc +36 -40
- data/src/core/lib/gpr/sync_posix.cc +22 -34
- data/src/core/lib/gpr/sync_windows.cc +29 -27
- data/src/core/lib/gpr/time.cc +34 -30
- data/src/core/lib/gpr/time_posix.cc +41 -45
- data/src/core/lib/gpr/time_precise.cc +22 -22
- data/src/core/lib/gpr/time_precise.h +21 -22
- data/src/core/lib/gpr/time_windows.cc +35 -29
- data/src/core/lib/gpr/tmpfile.h +24 -24
- data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
- data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
- data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
- data/src/core/lib/gpr/useful.h +83 -30
- data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
- data/src/core/lib/gprpp/atomic_utils.h +20 -20
- data/src/core/lib/gprpp/bitset.h +47 -17
- data/src/core/lib/gprpp/chunked_vector.h +7 -3
- data/src/core/lib/gprpp/construct_destruct.h +4 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +7 -3
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
- data/src/core/lib/gprpp/crash.h +34 -0
- data/src/core/lib/gprpp/debug_location.h +60 -31
- data/src/core/lib/gprpp/dual_ref_counted.h +4 -7
- data/src/core/lib/gprpp/env.h +53 -0
- data/src/core/lib/gprpp/env_linux.cc +80 -0
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/gprpp/env_posix.cc} +25 -9
- data/src/core/lib/gprpp/env_windows.cc +56 -0
- data/src/core/lib/gprpp/examine_stack.cc +17 -17
- data/src/core/lib/gprpp/examine_stack.h +21 -22
- data/src/core/lib/gprpp/fork.cc +58 -53
- data/src/core/lib/gprpp/fork.h +29 -35
- data/src/core/lib/gprpp/global_config.h +22 -24
- data/src/core/lib/gprpp/global_config_custom.h +20 -20
- data/src/core/lib/gprpp/global_config_env.cc +28 -25
- data/src/core/lib/gprpp/global_config_env.h +29 -27
- data/src/core/lib/gprpp/global_config_generic.h +21 -25
- data/src/core/lib/gprpp/host_port.cc +30 -26
- data/src/core/lib/gprpp/host_port.h +32 -31
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/manual_constructor.h +21 -89
- data/src/core/lib/gprpp/match.h +75 -0
- data/src/core/lib/gprpp/memory.h +22 -26
- data/src/core/lib/gprpp/mpscq.cc +17 -17
- data/src/core/lib/gprpp/mpscq.h +21 -21
- data/src/core/lib/gprpp/no_destruct.h +95 -0
- data/src/core/lib/gprpp/notification.h +67 -0
- data/src/core/lib/gprpp/orphanable.h +22 -25
- data/src/core/lib/gprpp/overload.h +59 -0
- data/src/core/lib/gprpp/packed_table.h +40 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/ref_counted.h +24 -24
- data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
- data/src/core/lib/gprpp/single_set_ptr.h +87 -0
- data/src/core/lib/gprpp/sorted_pack.h +98 -0
- data/src/core/lib/gprpp/stat.h +3 -5
- data/src/core/lib/gprpp/stat_posix.cc +10 -4
- data/src/core/lib/gprpp/stat_windows.cc +4 -2
- data/src/core/lib/gprpp/status_helper.cc +56 -20
- data/src/core/lib/gprpp/status_helper.h +13 -5
- data/src/core/lib/gprpp/strerror.cc +43 -0
- data/src/core/lib/gprpp/strerror.h +29 -0
- data/src/core/lib/gprpp/sync.h +26 -24
- data/src/core/lib/gprpp/table.h +22 -4
- data/src/core/lib/gprpp/tchar.cc +49 -0
- data/src/core/lib/gprpp/tchar.h +33 -0
- data/src/core/lib/gprpp/thd.h +25 -28
- data/src/core/lib/gprpp/thd_posix.cc +33 -32
- data/src/core/lib/gprpp/thd_windows.cc +28 -26
- data/src/core/lib/gprpp/time.cc +64 -9
- data/src/core/lib/gprpp/time.h +79 -5
- data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
- data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +3 -3
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/gprpp/validation_errors.cc +61 -0
- data/src/core/lib/gprpp/validation_errors.h +127 -0
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
- data/src/core/lib/handshaker/proxy_mapper.h +53 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
- data/src/core/lib/http/format_request.cc +54 -24
- data/src/core/lib/http/format_request.h +23 -21
- data/src/core/lib/http/httpcli.cc +139 -141
- data/src/core/lib/http/httpcli.h +86 -38
- data/src/core/lib/http/httpcli_security_connector.cc +53 -45
- data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
- data/src/core/lib/http/parser.cc +144 -85
- data/src/core/lib/http/parser.h +51 -35
- data/src/core/lib/iomgr/block_annotate.h +23 -23
- data/src/core/lib/iomgr/buffer_list.cc +156 -136
- data/src/core/lib/iomgr/buffer_list.h +123 -101
- data/src/core/lib/iomgr/call_combiner.cc +32 -64
- data/src/core/lib/iomgr/call_combiner.h +24 -25
- data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
- data/src/core/lib/iomgr/cfstream_handle.h +25 -25
- data/src/core/lib/iomgr/{event_engine/pollset.h → closure.cc} +9 -7
- data/src/core/lib/iomgr/closure.h +95 -58
- data/src/core/lib/iomgr/combiner.cc +20 -39
- data/src/core/lib/iomgr/combiner.h +20 -20
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
- data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
- data/src/core/lib/iomgr/endpoint.cc +21 -21
- data/src/core/lib/iomgr/endpoint.h +53 -51
- data/src/core/lib/iomgr/endpoint_cfstream.cc +51 -47
- data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
- data/src/core/lib/iomgr/endpoint_pair.h +20 -20
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +34 -27
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +30 -21
- data/src/core/lib/iomgr/error.cc +51 -834
- data/src/core/lib/iomgr/error.h +45 -317
- data/src/core/lib/iomgr/error_cfstream.cc +18 -23
- data/src/core/lib/iomgr/error_cfstream.h +21 -21
- data/src/core/lib/iomgr/ev_apple.cc +21 -21
- data/src/core/lib/iomgr/ev_apple.h +21 -21
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
- data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
- data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
- data/src/core/lib/iomgr/ev_posix.cc +88 -122
- data/src/core/lib/iomgr/ev_posix.h +93 -87
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.cc +15 -30
- data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.h +10 -13
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
- data/src/core/lib/iomgr/exec_ctx.cc +34 -56
- data/src/core/lib/iomgr/exec_ctx.h +152 -177
- data/src/core/lib/iomgr/executor.cc +21 -31
- data/src/core/lib/iomgr/executor.h +27 -30
- data/src/core/lib/iomgr/fork_posix.cc +31 -28
- data/src/core/lib/iomgr/fork_windows.cc +21 -21
- data/src/core/lib/iomgr/gethostname.h +20 -20
- data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
- data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
- data/src/core/lib/iomgr/internal_errqueue.cc +41 -48
- data/src/core/lib/iomgr/internal_errqueue.h +84 -89
- data/src/core/lib/iomgr/iocp_windows.cc +23 -23
- data/src/core/lib/iomgr/iocp_windows.h +21 -21
- data/src/core/lib/iomgr/iomgr.cc +25 -20
- data/src/core/lib/iomgr/iomgr.h +35 -35
- data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
- data/src/core/lib/iomgr/iomgr_internal.h +28 -28
- data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
- data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
- data/src/core/lib/iomgr/load_file.cc +24 -27
- data/src/core/lib/iomgr/load_file.h +22 -22
- data/src/core/lib/iomgr/lockfree_event.cc +114 -131
- data/src/core/lib/iomgr/lockfree_event.h +23 -23
- data/src/core/lib/iomgr/nameser.h +86 -86
- data/src/core/lib/iomgr/polling_entity.cc +25 -21
- data/src/core/lib/iomgr/polling_entity.h +29 -29
- data/src/core/lib/iomgr/pollset.cc +17 -17
- data/src/core/lib/iomgr/pollset.h +55 -55
- data/src/core/lib/iomgr/pollset_set.cc +17 -17
- data/src/core/lib/iomgr/pollset_set.h +26 -28
- data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
- data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
- data/src/core/lib/iomgr/pollset_windows.cc +32 -31
- data/src/core/lib/iomgr/pollset_windows.h +24 -24
- data/src/core/lib/iomgr/port.h +59 -39
- data/src/core/lib/iomgr/python_util.h +24 -24
- data/src/core/lib/iomgr/resolve_address.cc +34 -20
- data/src/core/lib/iomgr/resolve_address.h +73 -43
- data/src/core/lib/iomgr/resolve_address_impl.h +7 -7
- data/src/core/lib/iomgr/resolve_address_posix.cc +81 -62
- data/src/core/lib/iomgr/resolve_address_posix.h +26 -10
- data/src/core/lib/iomgr/resolve_address_windows.cc +64 -38
- data/src/core/lib/iomgr/resolve_address_windows.h +26 -10
- data/src/core/lib/iomgr/resolved_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr.h +25 -26
- data/src/core/lib/iomgr/sockaddr_posix.h +23 -21
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
- data/src/core/lib/iomgr/sockaddr_windows.h +23 -21
- data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
- data/src/core/lib/iomgr/socket_mutator.cc +19 -18
- data/src/core/lib/iomgr/socket_mutator.h +39 -39
- data/src/core/lib/iomgr/socket_utils.h +27 -27
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +82 -101
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
- data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
- data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
- data/src/core/lib/iomgr/socket_windows.cc +37 -36
- data/src/core/lib/iomgr/socket_windows.h +59 -61
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/iomgr/systemd_utils.h +33 -0
- data/src/core/lib/iomgr/tcp_client.cc +28 -24
- data/src/core/lib/iomgr/tcp_client.h +49 -38
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
- data/src/core/lib/iomgr/tcp_client_posix.cc +244 -106
- data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
- data/src/core/lib/iomgr/tcp_client_windows.cc +73 -53
- data/src/core/lib/iomgr/tcp_posix.cc +562 -361
- data/src/core/lib/iomgr/tcp_posix.h +32 -30
- data/src/core/lib/iomgr/tcp_server.cc +33 -24
- data/src/core/lib/iomgr/tcp_server.h +78 -69
- data/src/core/lib/iomgr/tcp_server_posix.cc +402 -145
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +120 -82
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +46 -43
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
- data/src/core/lib/iomgr/tcp_server_windows.cc +116 -118
- data/src/core/lib/iomgr/tcp_windows.cc +116 -98
- data/src/core/lib/iomgr/tcp_windows.h +34 -35
- data/src/core/lib/iomgr/timer.cc +17 -17
- data/src/core/lib/iomgr/timer.h +68 -68
- data/src/core/lib/iomgr/timer_generic.cc +125 -134
- data/src/core/lib/iomgr/timer_generic.h +21 -21
- data/src/core/lib/iomgr/timer_heap.cc +25 -25
- data/src/core/lib/iomgr/timer_heap.h +22 -22
- data/src/core/lib/iomgr/timer_manager.cc +31 -31
- data/src/core/lib/iomgr/timer_manager.h +27 -27
- data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
- data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
- data/src/core/lib/json/json.h +23 -27
- data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +217 -0
- data/src/core/lib/json/json_object_loader.h +634 -0
- data/src/core/lib/json/json_reader.cc +123 -90
- data/src/core/lib/json/json_util.cc +14 -34
- data/src/core/lib/json/json_util.h +19 -10
- data/src/core/lib/json/json_writer.cc +62 -57
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +30 -60
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +47 -62
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
- data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -52
- data/src/core/lib/matchers/matchers.cc +12 -7
- data/src/core/lib/matchers/matchers.h +5 -3
- data/src/core/lib/promise/activity.cc +23 -8
- data/src/core/lib/promise/activity.h +116 -58
- data/src/core/lib/promise/arena_promise.h +115 -72
- data/src/core/lib/promise/context.h +18 -11
- data/src/core/lib/promise/detail/basic_join.h +197 -0
- data/src/core/lib/promise/detail/basic_seq.h +28 -33
- data/src/core/lib/promise/detail/promise_factory.h +61 -14
- data/src/core/lib/promise/detail/promise_like.h +3 -3
- data/src/core/lib/promise/detail/status.h +33 -4
- data/src/core/lib/promise/detail/switch.h +21 -21
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
- data/src/core/lib/promise/if.h +195 -0
- data/src/core/lib/promise/interceptor_list.h +308 -0
- data/src/core/lib/promise/intra_activity_waiter.h +55 -0
- data/src/core/lib/promise/latch.h +191 -0
- data/src/core/lib/promise/loop.h +13 -9
- data/src/core/lib/promise/map.h +4 -6
- data/src/core/lib/promise/pipe.h +608 -0
- data/src/core/lib/promise/poll.h +129 -11
- data/src/core/lib/promise/promise.h +5 -5
- data/src/core/lib/promise/race.h +6 -10
- data/src/core/lib/promise/seq.h +32 -14
- data/src/core/lib/promise/sleep.cc +58 -42
- data/src/core/lib/promise/sleep.h +44 -26
- data/src/core/lib/promise/trace.cc +20 -0
- data/src/core/{ext/filters/max_age/max_age_filter.h → lib/promise/trace.h} +6 -8
- data/src/core/lib/promise/try_join.h +82 -0
- data/src/core/lib/promise/try_seq.h +41 -23
- data/src/core/lib/resolver/resolver.cc +17 -59
- data/src/core/lib/resolver/resolver.h +21 -18
- data/src/core/lib/resolver/resolver_factory.h +11 -10
- data/src/core/lib/resolver/resolver_registry.cc +17 -9
- data/src/core/lib/resolver/resolver_registry.h +15 -5
- data/src/core/lib/resolver/server_address.cc +46 -34
- data/src/core/lib/resolver/server_address.h +36 -35
- data/src/core/lib/resource_quota/api.cc +25 -29
- data/src/core/lib/resource_quota/api.h +14 -5
- data/src/core/lib/resource_quota/arena.cc +85 -27
- data/src/core/lib/resource_quota/arena.h +197 -25
- data/src/core/lib/resource_quota/memory_quota.cc +322 -101
- data/src/core/lib/resource_quota/memory_quota.h +191 -56
- data/src/core/lib/resource_quota/periodic_update.cc +78 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/resource_quota/resource_quota.h +20 -4
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +7 -3
- data/src/core/lib/resource_quota/trace.h +3 -3
- data/src/core/lib/security/authorization/authorization_engine.h +3 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +17 -3
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
- data/src/core/lib/security/authorization/evaluate_args.h +9 -6
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +26 -13
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +20 -10
- data/src/core/lib/security/authorization/matchers.cc +44 -30
- data/src/core/lib/security/authorization/matchers.h +10 -3
- data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
- data/src/core/lib/security/authorization/rbac_policy.h +10 -3
- data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
- data/src/core/lib/security/context/security_context.cc +27 -25
- data/src/core/lib/security/context/security_context.h +64 -35
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +35 -27
- data/src/core/lib/security/credentials/alts/alts_credentials.h +65 -57
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
- data/src/core/lib/security/credentials/call_creds_util.cc +13 -3
- data/src/core/lib/security/credentials/call_creds_util.h +6 -5
- data/src/core/lib/security/credentials/channel_creds_registry.h +10 -4
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +46 -41
- data/src/core/lib/security/credentials/composite/composite_credentials.h +51 -38
- data/src/core/lib/security/credentials/credentials.cc +23 -26
- data/src/core/lib/security/credentials/credentials.h +91 -94
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +202 -74
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +21 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +86 -68
- data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +44 -31
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +48 -48
- data/src/core/lib/security/credentials/fake/fake_credentials.h +57 -47
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +148 -112
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +35 -29
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +35 -24
- data/src/core/lib/security/credentials/iam/iam_credentials.h +37 -23
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +32 -29
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
- data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +37 -30
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +41 -23
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
- data/src/core/lib/security/credentials/local/local_credentials.cc +36 -30
- data/src/core/lib/security/credentials/local/local_credentials.h +36 -26
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +107 -91
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +56 -27
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +42 -36
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +55 -29
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +48 -44
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +43 -23
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +65 -48
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +69 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +44 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +75 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +69 -98
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +55 -50
- data/src/core/lib/security/credentials/tls/tls_credentials.h +33 -30
- data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +77 -81
- data/src/core/lib/security/credentials/xds/xds_credentials.h +50 -10
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +75 -79
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
- data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +66 -49
- data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
- data/src/core/lib/security/security_connector/security_connector.cc +37 -35
- data/src/core/lib/security/security_connector/security_connector.h +67 -45
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +59 -48
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
- data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
- data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
- data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +62 -58
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
- data/src/core/lib/security/transport/auth_filters.h +59 -30
- data/src/core/lib/security/transport/client_auth_filter.cc +73 -48
- data/src/core/lib/security/transport/secure_endpoint.cc +305 -181
- data/src/core/lib/security/transport/secure_endpoint.h +29 -28
- data/src/core/lib/security/transport/security_handshaker.cc +142 -110
- data/src/core/lib/security/transport/security_handshaker.h +28 -23
- data/src/core/lib/security/transport/server_auth_filter.cc +157 -266
- data/src/core/lib/security/transport/tsi_error.cc +23 -20
- data/src/core/lib/security/transport/tsi_error.h +20 -20
- data/src/core/lib/security/util/json_util.cc +24 -24
- data/src/core/lib/security/util/json_util.h +21 -23
- data/src/core/lib/service_config/service_config.h +19 -12
- data/src/core/lib/service_config/service_config_call_data.h +15 -5
- data/src/core/lib/service_config/service_config_impl.cc +111 -150
- data/src/core/lib/service_config/service_config_impl.h +27 -27
- data/src/core/lib/service_config/service_config_parser.cc +16 -28
- data/src/core/lib/service_config/service_config_parser.h +18 -19
- data/src/core/lib/slice/b64.cc +26 -26
- data/src/core/lib/slice/b64.h +34 -32
- data/src/core/lib/slice/percent_encoding.cc +24 -30
- data/src/core/lib/slice/percent_encoding.h +28 -34
- data/src/core/lib/slice/slice.cc +59 -46
- data/src/core/lib/slice/slice.h +64 -20
- data/src/core/lib/slice/slice_buffer.cc +136 -76
- data/src/core/lib/slice/slice_buffer.h +168 -0
- data/src/core/lib/slice/slice_internal.h +38 -45
- data/src/core/lib/slice/slice_refcount.cc +3 -18
- data/src/core/lib/slice/slice_refcount.h +53 -19
- data/src/core/lib/slice/slice_string_helpers.cc +17 -33
- data/src/core/lib/slice/slice_string_helpers.h +23 -30
- data/src/core/lib/surface/api_trace.cc +17 -17
- data/src/core/lib/surface/api_trace.h +25 -25
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/builtins.h +3 -3
- data/src/core/lib/surface/byte_buffer.cc +26 -21
- data/src/core/lib/surface/byte_buffer_reader.cc +24 -24
- data/src/core/lib/surface/call.cc +3000 -1131
- data/src/core/lib/surface/call.h +135 -56
- data/src/core/lib/surface/call_details.cc +22 -23
- data/src/core/lib/surface/call_log_batch.cc +25 -18
- data/src/core/lib/surface/call_test_only.h +34 -31
- data/src/core/lib/surface/call_trace.cc +123 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +218 -284
- data/src/core/lib/surface/channel.h +137 -90
- data/src/core/lib/surface/channel_init.cc +19 -20
- data/src/core/lib/surface/channel_init.h +24 -26
- data/src/core/lib/surface/channel_ping.cc +26 -20
- data/src/core/lib/surface/channel_stack_type.cc +21 -19
- data/src/core/lib/surface/channel_stack_type.h +22 -22
- data/src/core/lib/surface/completion_queue.cc +200 -222
- data/src/core/lib/surface/completion_queue.h +42 -40
- data/src/core/lib/surface/completion_queue_factory.cc +34 -28
- data/src/core/lib/surface/completion_queue_factory.h +21 -23
- data/src/core/lib/surface/event_string.cc +19 -24
- data/src/core/lib/surface/event_string.h +21 -21
- data/src/core/lib/surface/init.cc +57 -114
- data/src/core/lib/surface/init.h +20 -28
- data/src/core/lib/surface/init_internally.cc +25 -0
- data/src/core/lib/surface/init_internally.h +37 -0
- data/src/core/lib/surface/lame_client.cc +87 -130
- data/src/core/lib/surface/lame_client.h +62 -24
- data/src/core/lib/surface/metadata_array.cc +18 -17
- data/src/core/lib/surface/server.cc +409 -188
- data/src/core/lib/surface/server.h +57 -26
- data/src/core/lib/surface/validate_metadata.cc +34 -48
- data/src/core/lib/surface/validate_metadata.h +24 -21
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/bdp_estimator.cc +19 -19
- data/src/core/lib/transport/bdp_estimator.h +22 -24
- data/src/core/lib/transport/connectivity_state.cc +24 -23
- data/src/core/lib/transport/connectivity_state.h +24 -25
- data/src/core/lib/transport/error_utils.cc +57 -79
- data/src/core/lib/transport/error_utils.h +29 -25
- data/src/core/lib/{channel → transport}/handshaker.cc +75 -58
- data/src/core/lib/{channel → transport}/handshaker.h +59 -48
- data/src/core/lib/transport/handshaker_factory.h +74 -0
- data/src/core/lib/transport/handshaker_registry.cc +61 -0
- data/src/core/lib/transport/handshaker_registry.h +69 -0
- data/src/core/lib/transport/http2_errors.h +22 -22
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +78 -65
- data/src/core/lib/transport/http_connect_handshaker.h +42 -0
- data/src/core/lib/transport/metadata_batch.cc +305 -0
- data/src/core/lib/transport/metadata_batch.h +269 -302
- data/src/core/lib/transport/parsed_metadata.cc +2 -4
- data/src/core/lib/transport/parsed_metadata.h +17 -8
- data/src/core/lib/transport/pid_controller.cc +20 -20
- data/src/core/lib/transport/pid_controller.h +27 -27
- data/src/core/lib/transport/status_conversion.cc +23 -23
- data/src/core/lib/transport/status_conversion.h +24 -24
- data/src/core/lib/transport/tcp_connect_handshaker.cc +245 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +24 -28
- data/src/core/lib/transport/timeout_encoding.h +25 -21
- data/src/core/lib/transport/transport.cc +97 -57
- data/src/core/lib/transport/transport.h +252 -207
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +59 -48
- data/src/core/lib/transport/transport_op_string.cc +40 -39
- data/src/core/lib/uri/uri_parser.cc +12 -4
- data/src/core/lib/uri/uri_parser.h +3 -5
- data/src/core/plugin_registry/grpc_plugin_registry.cc +62 -73
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
- data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
- data/src/core/tsi/alts/crypt/gsec.cc +26 -26
- data/src/core/tsi/alts/crypt/gsec.h +336 -336
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
- data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
- data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +53 -45
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
- data/src/core/tsi/fake_transport_security.cc +146 -110
- data/src/core/tsi/fake_transport_security.h +36 -30
- data/src/core/tsi/local_transport_security.cc +43 -38
- data/src/core/tsi/local_transport_security.h +33 -33
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session.h +23 -21
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +21 -19
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
- data/src/core/tsi/ssl_transport_security.cc +356 -390
- data/src/core/tsi/ssl_transport_security.h +210 -201
- data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
- data/src/core/tsi/ssl_transport_security_utils.h +147 -0
- data/src/core/tsi/ssl_types.h +27 -27
- data/src/core/tsi/transport_security.cc +44 -32
- data/src/core/tsi/transport_security.h +49 -48
- data/src/core/tsi/transport_security_grpc.cc +23 -22
- data/src/core/tsi/transport_security_grpc.h +44 -41
- data/src/core/tsi/transport_security_interface.h +346 -332
- data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -1
- data/src/ruby/ext/grpc/extconf.rb +98 -20
- data/src/ruby/ext/grpc/rb_call.c +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -6
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/pb/test/client.rb +769 -0
- data/src/ruby/pb/test/server.rb +252 -0
- data/src/ruby/pb/test/xds_client.rb +415 -0
- data/src/ruby/spec/channel_spec.rb +5 -43
- data/src/ruby/spec/client_server_spec.rb +20 -8
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
- data/src/ruby/spec/user_agent_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
- data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +221 -39
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
- 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/inline_variable.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
- 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 +14 -11
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
- 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/macros.h +4 -21
- data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
- data/third_party/abseil-cpp/absl/base/options.h +1 -7
- data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
- data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
- 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 +19 -12
- 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_generic-inl.inc +1 -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 +59 -102
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
- 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/functional/internal/any_invocable.h +878 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
- data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
- data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
- data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
- 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 +4 -2
- 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 +3 -24
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
- 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/seed_material.cc +2 -2
- 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/random.h +6 -6
- 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 +18 -0
- data/third_party/abseil-cpp/absl/status/status.cc +193 -14
- data/third_party/abseil-cpp/absl/status/status.h +24 -14
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
- data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
- data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
- 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 +575 -0
- data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
- data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- 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 +441 -150
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
- 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 +56 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -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_functions.h +7 -15
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
- data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
- 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.cc +10 -209
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
- data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
- 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 +8 -19
- data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
- 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/futex.h +20 -17
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
- 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 +172 -88
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
- data/third_party/abseil-cpp/absl/time/format.cc +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
- data/third_party/abseil-cpp/absl/time/time.cc +2 -2
- data/third_party/abseil-cpp/absl/time/time.h +268 -169
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
- data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +31 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
- data/third_party/re2/re2/bitstate.cc +3 -3
- data/third_party/re2/re2/dfa.cc +13 -13
- data/third_party/re2/re2/nfa.cc +4 -4
- data/third_party/re2/re2/onepass.cc +2 -2
- data/third_party/re2/re2/prefilter_tree.cc +27 -59
- data/third_party/re2/re2/prefilter_tree.h +3 -2
- data/third_party/re2/re2/prog.cc +11 -2
- data/third_party/re2/re2/prog.h +17 -5
- data/third_party/re2/re2/re2.cc +6 -11
- data/third_party/re2/re2/re2.h +1 -1
- data/third_party/re2/re2/regexp.cc +1 -2
- data/third_party/re2/re2/stringpiece.h +10 -7
- data/third_party/re2/re2/unicode_casefold.cc +25 -11
- data/third_party/re2/re2/unicode_groups.cc +319 -151
- data/third_party/re2/re2/walker-inl.h +3 -2
- data/third_party/re2/util/mutex.h +4 -4
- data/third_party/upb/upb/arena.c +277 -0
- data/third_party/upb/upb/arena.h +225 -0
- data/third_party/upb/upb/array.c +114 -0
- data/third_party/upb/upb/array.h +83 -0
- data/third_party/upb/upb/collections.h +36 -0
- data/third_party/upb/upb/decode.c +188 -76
- data/third_party/upb/upb/decode.h +1 -0
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/def.c +128 -57
- data/third_party/upb/upb/def.h +20 -4
- data/third_party/upb/upb/def.hpp +7 -4
- data/third_party/upb/upb/encode.c +43 -28
- data/third_party/upb/upb/encode.h +16 -6
- data/third_party/upb/upb/extension_registry.c +93 -0
- data/third_party/upb/upb/extension_registry.h +84 -0
- data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
- data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
- data/third_party/upb/upb/json_decode.c +1512 -0
- data/third_party/upb/upb/json_decode.h +47 -0
- data/third_party/upb/upb/json_encode.c +780 -0
- data/third_party/upb/upb/json_encode.h +65 -0
- data/third_party/upb/upb/map.c +108 -0
- data/third_party/upb/upb/map.h +117 -0
- data/third_party/upb/upb/message_value.h +66 -0
- data/third_party/upb/upb/mini_table.c +1147 -0
- data/third_party/upb/upb/mini_table.h +189 -0
- data/third_party/upb/upb/mini_table.hpp +112 -0
- data/third_party/upb/upb/msg.c +6 -68
- data/third_party/upb/upb/msg.h +2 -46
- data/third_party/upb/upb/msg_internal.h +77 -58
- data/third_party/upb/upb/port_def.inc +10 -1
- data/third_party/upb/upb/port_undef.inc +2 -0
- data/third_party/upb/upb/reflection.c +2 -159
- data/third_party/upb/upb/reflection.h +2 -112
- data/third_party/upb/upb/status.c +86 -0
- data/third_party/upb/upb/status.h +66 -0
- data/third_party/upb/upb/table.c +12 -8
- data/third_party/upb/upb/table_internal.h +3 -350
- data/third_party/upb/upb/text_encode.c +3 -2
- data/third_party/upb/upb/upb.c +4 -290
- data/third_party/upb/upb/upb.h +8 -167
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +975 -292
- data/third_party/zlib/crc32.h +9441 -436
- data/third_party/zlib/deflate.c +183 -129
- data/third_party/zlib/deflate.h +12 -15
- data/third_party/zlib/gzguts.h +3 -2
- data/third_party/zlib/gzlib.c +6 -4
- data/third_party/zlib/gzread.c +8 -12
- data/third_party/zlib/gzwrite.c +26 -14
- data/third_party/zlib/infback.c +12 -8
- data/third_party/zlib/inffast.c +14 -14
- data/third_party/zlib/inflate.c +44 -10
- data/third_party/zlib/inflate.h +3 -2
- data/third_party/zlib/inftrees.c +3 -3
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +85 -107
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +129 -106
- data/third_party/zlib/zutil.c +11 -9
- data/third_party/zlib/zutil.h +13 -9
- metadata +424 -135
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
- data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -186
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -456
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -386
- data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -67
- data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
- data/src/core/ext/xds/certificate_provider_registry.h +0 -57
- data/src/core/lib/channel/handshaker_factory.h +0 -50
- data/src/core/lib/channel/handshaker_registry.cc +0 -50
- data/src/core/lib/channel/handshaker_registry.h +0 -71
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gpr/env.h +0 -40
- data/src/core/lib/gpr/env_linux.cc +0 -75
- data/src/core/lib/gpr/env_posix.cc +0 -46
- data/src/core/lib/gpr/env_windows.cc +0 -74
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/string_windows.h +0 -32
- data/src/core/lib/gpr/tls.h +0 -157
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
- 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/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/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
- data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
- data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
- data/src/core/lib/profiling/basic_timers.cc +0 -295
- data/src/core/lib/profiling/stap_timers.cc +0 -50
- data/src/core/lib/profiling/timers.h +0 -94
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_refcount_base.h +0 -61
- 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 -162
- data/src/core/lib/transport/byte_stream.h +0 -166
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -20,49 +20,78 @@
|
|
20
20
|
|
21
21
|
#include <inttypes.h>
|
22
22
|
#include <limits.h>
|
23
|
-
#include <math.h>
|
24
23
|
#include <stdio.h>
|
25
24
|
#include <string.h>
|
26
25
|
|
26
|
+
#include <algorithm>
|
27
|
+
#include <initializer_list>
|
28
|
+
#include <memory>
|
29
|
+
#include <new>
|
30
|
+
#include <string>
|
31
|
+
#include <utility>
|
32
|
+
|
33
|
+
#include "absl/base/attributes.h"
|
34
|
+
#include "absl/status/status.h"
|
35
|
+
#include "absl/strings/cord.h"
|
36
|
+
#include "absl/strings/str_cat.h"
|
27
37
|
#include "absl/strings/str_format.h"
|
38
|
+
#include "absl/strings/string_view.h"
|
39
|
+
#include "absl/types/optional.h"
|
28
40
|
|
41
|
+
#include <grpc/event_engine/event_engine.h>
|
42
|
+
#include <grpc/grpc.h>
|
43
|
+
#include <grpc/impl/connectivity_state.h>
|
29
44
|
#include <grpc/slice_buffer.h>
|
30
45
|
#include <grpc/status.h>
|
31
46
|
#include <grpc/support/alloc.h>
|
47
|
+
#include <grpc/support/atm.h>
|
32
48
|
#include <grpc/support/log.h>
|
33
|
-
#include <grpc/support/
|
49
|
+
#include <grpc/support/time.h>
|
34
50
|
|
35
51
|
#include "src/core/ext/transport/chttp2/transport/context_list.h"
|
52
|
+
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
53
|
+
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
36
54
|
#include "src/core/ext/transport/chttp2/transport/frame_data.h"
|
55
|
+
#include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
|
56
|
+
#include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
|
57
|
+
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
58
|
+
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
59
|
+
#include "src/core/ext/transport/chttp2/transport/http_trace.h"
|
37
60
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
61
|
+
#include "src/core/ext/transport/chttp2/transport/stream_map.h"
|
38
62
|
#include "src/core/ext/transport/chttp2/transport/varint.h"
|
39
63
|
#include "src/core/lib/channel/channel_args.h"
|
40
64
|
#include "src/core/lib/debug/stats.h"
|
41
|
-
#include "src/core/lib/
|
42
|
-
#include "src/core/lib/gpr/
|
43
|
-
#include "src/core/lib/gprpp/
|
65
|
+
#include "src/core/lib/debug/stats_data.h"
|
66
|
+
#include "src/core/lib/gpr/useful.h"
|
67
|
+
#include "src/core/lib/gprpp/bitset.h"
|
68
|
+
#include "src/core/lib/gprpp/crash.h"
|
69
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
70
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
71
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
72
|
+
#include "src/core/lib/gprpp/time.h"
|
44
73
|
#include "src/core/lib/http/parser.h"
|
45
|
-
#include "src/core/lib/iomgr/
|
46
|
-
#include "src/core/lib/iomgr/
|
74
|
+
#include "src/core/lib/iomgr/combiner.h"
|
75
|
+
#include "src/core/lib/iomgr/error.h"
|
76
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
77
|
+
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
47
78
|
#include "src/core/lib/iomgr/timer.h"
|
48
|
-
#include "src/core/lib/
|
49
|
-
#include "src/core/lib/resource_quota/
|
79
|
+
#include "src/core/lib/promise/poll.h"
|
80
|
+
#include "src/core/lib/resource_quota/arena.h"
|
81
|
+
#include "src/core/lib/resource_quota/memory_quota.h"
|
82
|
+
#include "src/core/lib/resource_quota/resource_quota.h"
|
50
83
|
#include "src/core/lib/resource_quota/trace.h"
|
84
|
+
#include "src/core/lib/slice/slice.h"
|
85
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
51
86
|
#include "src/core/lib/slice/slice_internal.h"
|
52
|
-
#include "src/core/lib/
|
87
|
+
#include "src/core/lib/transport/bdp_estimator.h"
|
88
|
+
#include "src/core/lib/transport/connectivity_state.h"
|
53
89
|
#include "src/core/lib/transport/error_utils.h"
|
54
90
|
#include "src/core/lib/transport/http2_errors.h"
|
91
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
55
92
|
#include "src/core/lib/transport/status_conversion.h"
|
56
|
-
#include "src/core/lib/transport/timeout_encoding.h"
|
57
93
|
#include "src/core/lib/transport/transport.h"
|
58
94
|
#include "src/core/lib/transport/transport_impl.h"
|
59
|
-
#include "src/core/lib/uri/uri_parser.h"
|
60
|
-
|
61
|
-
GPR_GLOBAL_CONFIG_DEFINE_BOOL(
|
62
|
-
grpc_experimental_disable_flow_control, false,
|
63
|
-
"If set, flow control will be effectively disabled. Max out all values and "
|
64
|
-
"assume the remote peer does the same. Thus we can ignore any flow control "
|
65
|
-
"bookkeeping, error checking, and decision making");
|
66
95
|
|
67
96
|
#define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
|
68
97
|
#define MAX_WINDOW 0x7fffffffu
|
@@ -70,13 +99,13 @@ GPR_GLOBAL_CONFIG_DEFINE_BOOL(
|
|
70
99
|
#define DEFAULT_MAX_HEADER_LIST_SIZE (8 * 1024)
|
71
100
|
|
72
101
|
#define DEFAULT_CLIENT_KEEPALIVE_TIME_MS INT_MAX
|
73
|
-
#define DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS 20000
|
74
|
-
#define DEFAULT_SERVER_KEEPALIVE_TIME_MS 7200000
|
75
|
-
#define DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS 20000
|
102
|
+
#define DEFAULT_CLIENT_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
|
103
|
+
#define DEFAULT_SERVER_KEEPALIVE_TIME_MS 7200000 // 2 hours
|
104
|
+
#define DEFAULT_SERVER_KEEPALIVE_TIMEOUT_MS 20000 // 20 seconds
|
76
105
|
#define DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS false
|
77
106
|
#define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
|
78
107
|
|
79
|
-
#define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000
|
108
|
+
#define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000 // 5 minutes
|
80
109
|
#define DEFAULT_MAX_PINGS_BETWEEN_DATA 2
|
81
110
|
#define DEFAULT_MAX_PING_STRIKES 2
|
82
111
|
|
@@ -101,7 +130,6 @@ static int g_default_max_pings_without_data = DEFAULT_MAX_PINGS_BETWEEN_DATA;
|
|
101
130
|
static int g_default_max_ping_strikes = DEFAULT_MAX_PING_STRIKES;
|
102
131
|
|
103
132
|
#define MAX_CLIENT_STREAM_ID 0x7fffffffu
|
104
|
-
grpc_core::TraceFlag grpc_http_trace(false, "http");
|
105
133
|
grpc_core::TraceFlag grpc_keepalive_trace(false, "http_keepalive");
|
106
134
|
grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount(false,
|
107
135
|
"chttp2_refcount");
|
@@ -116,8 +144,6 @@ static void read_action(void* t, grpc_error_handle error);
|
|
116
144
|
static void read_action_locked(void* t, grpc_error_handle error);
|
117
145
|
static void continue_read_action_locked(grpc_chttp2_transport* t);
|
118
146
|
|
119
|
-
static void complete_fetch(void* gs, grpc_error_handle error);
|
120
|
-
static void complete_fetch_locked(void* gs, grpc_error_handle error);
|
121
147
|
// Set a transport level setting, and push it to our peer
|
122
148
|
static void queue_setting_update(grpc_chttp2_transport* t,
|
123
149
|
grpc_chttp2_setting_id id, uint32_t value);
|
@@ -148,26 +174,28 @@ static void start_bdp_ping(void* tp, grpc_error_handle error);
|
|
148
174
|
static void finish_bdp_ping(void* tp, grpc_error_handle error);
|
149
175
|
static void start_bdp_ping_locked(void* tp, grpc_error_handle error);
|
150
176
|
static void finish_bdp_ping_locked(void* tp, grpc_error_handle error);
|
151
|
-
static void next_bdp_ping_timer_expired(
|
152
|
-
static void next_bdp_ping_timer_expired_locked(
|
153
|
-
|
177
|
+
static void next_bdp_ping_timer_expired(grpc_chttp2_transport* t);
|
178
|
+
static void next_bdp_ping_timer_expired_locked(
|
179
|
+
void* tp, GRPC_UNUSED grpc_error_handle error);
|
154
180
|
|
155
181
|
static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error);
|
156
182
|
static void send_ping_locked(grpc_chttp2_transport* t,
|
157
183
|
grpc_closure* on_initiate, grpc_closure* on_ack);
|
158
|
-
static void retry_initiate_ping_locked(void* tp,
|
184
|
+
static void retry_initiate_ping_locked(void* tp,
|
185
|
+
GRPC_UNUSED grpc_error_handle error);
|
159
186
|
|
160
187
|
// keepalive-relevant functions
|
161
|
-
static void init_keepalive_ping(
|
162
|
-
static void init_keepalive_ping_locked(void* arg,
|
188
|
+
static void init_keepalive_ping(grpc_chttp2_transport* t);
|
189
|
+
static void init_keepalive_ping_locked(void* arg,
|
190
|
+
GRPC_UNUSED grpc_error_handle error);
|
163
191
|
static void start_keepalive_ping(void* arg, grpc_error_handle error);
|
164
192
|
static void finish_keepalive_ping(void* arg, grpc_error_handle error);
|
165
193
|
static void start_keepalive_ping_locked(void* arg, grpc_error_handle error);
|
166
194
|
static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error);
|
167
|
-
static void keepalive_watchdog_fired(
|
168
|
-
static void keepalive_watchdog_fired_locked(
|
169
|
-
|
170
|
-
static void
|
195
|
+
static void keepalive_watchdog_fired(grpc_chttp2_transport* t);
|
196
|
+
static void keepalive_watchdog_fired_locked(
|
197
|
+
void* arg, GRPC_UNUSED grpc_error_handle error);
|
198
|
+
static void maybe_reset_keepalive_ping_timer_locked(grpc_chttp2_transport* t);
|
171
199
|
|
172
200
|
namespace grpc_core {
|
173
201
|
|
@@ -202,25 +230,25 @@ void TestOnlyGlobalHttp2TransportDisableTransientFailureStateNotification(
|
|
202
230
|
grpc_chttp2_transport::~grpc_chttp2_transport() {
|
203
231
|
size_t i;
|
204
232
|
|
233
|
+
event_engine.reset();
|
234
|
+
|
205
235
|
if (channelz_socket != nullptr) {
|
206
236
|
channelz_socket.reset();
|
207
237
|
}
|
208
238
|
|
209
239
|
grpc_endpoint_destroy(ep);
|
210
240
|
|
211
|
-
|
241
|
+
grpc_slice_buffer_destroy(&qbuf);
|
212
242
|
|
213
|
-
|
243
|
+
grpc_slice_buffer_destroy(&outbuf);
|
214
244
|
|
215
|
-
grpc_error_handle error =
|
216
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed");
|
245
|
+
grpc_error_handle error = GRPC_ERROR_CREATE("Transport destroyed");
|
217
246
|
// ContextList::Execute follows semantics of a callback function and does not
|
218
247
|
// take a ref on error
|
219
248
|
grpc_core::ContextList::Execute(cl, nullptr, error);
|
220
|
-
GRPC_ERROR_UNREF(error);
|
221
249
|
cl = nullptr;
|
222
250
|
|
223
|
-
|
251
|
+
grpc_slice_buffer_destroy(&read_buffer);
|
224
252
|
grpc_chttp2_goaway_parser_destroy(&goaway_parser);
|
225
253
|
|
226
254
|
for (i = 0; i < STREAM_LIST_COUNT; i++) {
|
@@ -228,16 +256,13 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
228
256
|
GPR_ASSERT(lists[i].tail == nullptr);
|
229
257
|
}
|
230
258
|
|
231
|
-
GRPC_ERROR_UNREF(goaway_error);
|
232
|
-
|
233
259
|
GPR_ASSERT(grpc_chttp2_stream_map_size(&stream_map) == 0);
|
234
260
|
|
235
261
|
grpc_chttp2_stream_map_destroy(&stream_map);
|
236
262
|
|
237
263
|
GRPC_COMBINER_UNREF(combiner, "chttp2_transport");
|
238
264
|
|
239
|
-
cancel_pings(this,
|
240
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed"));
|
265
|
+
cancel_pings(this, GRPC_ERROR_CREATE("Transport destroyed"));
|
241
266
|
|
242
267
|
while (write_cb_pool) {
|
243
268
|
grpc_chttp2_write_cb* next = write_cb_pool->next;
|
@@ -245,9 +270,6 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
245
270
|
write_cb_pool = next;
|
246
271
|
}
|
247
272
|
|
248
|
-
flow_control.Destroy();
|
249
|
-
|
250
|
-
GRPC_ERROR_UNREF(closed_with_error);
|
251
273
|
gpr_free(ping_acks);
|
252
274
|
if (grpc_core::test_only_destruct_callback != nullptr) {
|
253
275
|
grpc_core::test_only_destruct_callback();
|
@@ -256,155 +278,145 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
|
|
256
278
|
|
257
279
|
static const grpc_transport_vtable* get_vtable(void);
|
258
280
|
|
259
|
-
|
260
|
-
|
261
|
-
const grpc_channel_args* channel_args,
|
281
|
+
static void read_channel_args(grpc_chttp2_transport* t,
|
282
|
+
const grpc_core::ChannelArgs& channel_args,
|
262
283
|
bool is_client) {
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
|
271
|
-
const grpc_integer_options options = {-1, 0, INT_MAX};
|
272
|
-
const int value =
|
273
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
274
|
-
if (value >= 0) {
|
275
|
-
if ((t->next_stream_id & 1) != (value & 1)) {
|
276
|
-
gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
|
277
|
-
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
|
278
|
-
is_client ? "client" : "server");
|
279
|
-
} else {
|
280
|
-
t->next_stream_id = static_cast<uint32_t>(value);
|
281
|
-
}
|
282
|
-
}
|
283
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
284
|
-
GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER)) {
|
285
|
-
const grpc_integer_options options = {-1, 0, INT_MAX};
|
286
|
-
const int value =
|
287
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
288
|
-
if (value >= 0) {
|
289
|
-
t->hpack_compressor.SetMaxUsableSize(value);
|
290
|
-
}
|
291
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
292
|
-
GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
|
293
|
-
t->ping_policy.max_pings_without_data = grpc_channel_arg_get_integer(
|
294
|
-
&channel_args->args[i],
|
295
|
-
{g_default_max_pings_without_data, 0, INT_MAX});
|
296
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
297
|
-
GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
|
298
|
-
t->ping_policy.max_ping_strikes = grpc_channel_arg_get_integer(
|
299
|
-
&channel_args->args[i], {g_default_max_ping_strikes, 0, INT_MAX});
|
300
|
-
} else if (0 ==
|
301
|
-
strcmp(channel_args->args[i].key,
|
302
|
-
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
|
303
|
-
t->ping_policy.min_recv_ping_interval_without_data =
|
304
|
-
grpc_core::Duration::Milliseconds(grpc_channel_arg_get_integer(
|
305
|
-
&channel_args->args[i],
|
306
|
-
grpc_integer_options{
|
307
|
-
g_default_min_recv_ping_interval_without_data_ms, 0,
|
308
|
-
INT_MAX}));
|
309
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
310
|
-
GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)) {
|
311
|
-
t->write_buffer_size = static_cast<uint32_t>(grpc_channel_arg_get_integer(
|
312
|
-
&channel_args->args[i], {0, 0, MAX_WRITE_BUFFER_SIZE}));
|
313
|
-
} else if (0 ==
|
314
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_HTTP2_BDP_PROBE)) {
|
315
|
-
enable_bdp = grpc_channel_arg_get_bool(&channel_args->args[i], true);
|
316
|
-
} else if (0 ==
|
317
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_KEEPALIVE_TIME_MS)) {
|
318
|
-
const int value = grpc_channel_arg_get_integer(
|
319
|
-
&channel_args->args[i],
|
320
|
-
grpc_integer_options{t->is_client
|
321
|
-
? g_default_client_keepalive_time_ms
|
322
|
-
: g_default_server_keepalive_time_ms,
|
323
|
-
1, INT_MAX});
|
324
|
-
t->keepalive_time = value == INT_MAX
|
325
|
-
? grpc_core::Duration::Infinity()
|
326
|
-
: grpc_core::Duration::Milliseconds(value);
|
327
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
328
|
-
GRPC_ARG_KEEPALIVE_TIMEOUT_MS)) {
|
329
|
-
const int value = grpc_channel_arg_get_integer(
|
330
|
-
&channel_args->args[i],
|
331
|
-
grpc_integer_options{t->is_client
|
332
|
-
? g_default_client_keepalive_timeout_ms
|
333
|
-
: g_default_server_keepalive_timeout_ms,
|
334
|
-
0, INT_MAX});
|
335
|
-
t->keepalive_timeout = value == INT_MAX
|
336
|
-
? grpc_core::Duration::Infinity()
|
337
|
-
: grpc_core::Duration::Milliseconds(value);
|
338
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
339
|
-
GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)) {
|
340
|
-
t->keepalive_permit_without_calls = static_cast<uint32_t>(
|
341
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], {0, 0, 1}));
|
342
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
343
|
-
GRPC_ARG_OPTIMIZATION_TARGET)) {
|
344
|
-
gpr_log(GPR_INFO, "GRPC_ARG_OPTIMIZATION_TARGET is deprecated");
|
345
|
-
} else if (0 ==
|
346
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_ENABLE_CHANNELZ)) {
|
347
|
-
channelz_enabled = grpc_channel_arg_get_bool(
|
348
|
-
&channel_args->args[i], GRPC_ENABLE_CHANNELZ_DEFAULT);
|
284
|
+
const int initial_sequence_number =
|
285
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER).value_or(-1);
|
286
|
+
if (initial_sequence_number > 0) {
|
287
|
+
if ((t->next_stream_id & 1) != (initial_sequence_number & 1)) {
|
288
|
+
gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
|
289
|
+
GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
|
290
|
+
is_client ? "client" : "server");
|
349
291
|
} else {
|
350
|
-
|
351
|
-
const char* channel_arg_name;
|
352
|
-
grpc_chttp2_setting_id setting_id;
|
353
|
-
grpc_integer_options integer_options;
|
354
|
-
bool availability[2] /* server, client */;
|
355
|
-
} settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
|
356
|
-
GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
|
357
|
-
{-1, 0, INT32_MAX},
|
358
|
-
{true, false}},
|
359
|
-
{GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
|
360
|
-
GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
|
361
|
-
{-1, 0, INT32_MAX},
|
362
|
-
{true, true}},
|
363
|
-
{GRPC_ARG_MAX_METADATA_SIZE,
|
364
|
-
GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
|
365
|
-
{-1, 0, INT32_MAX},
|
366
|
-
{true, true}},
|
367
|
-
{GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
|
368
|
-
GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
369
|
-
{-1, 16384, 16777215},
|
370
|
-
{true, true}},
|
371
|
-
{GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
|
372
|
-
GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
|
373
|
-
{1, 0, 1},
|
374
|
-
{true, true}},
|
375
|
-
{GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
|
376
|
-
GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
|
377
|
-
{-1, 5, INT32_MAX},
|
378
|
-
{true, true}}};
|
379
|
-
for (j = 0; j < static_cast<int> GPR_ARRAY_SIZE(settings_map); j++) {
|
380
|
-
if (0 == strcmp(channel_args->args[i].key,
|
381
|
-
settings_map[j].channel_arg_name)) {
|
382
|
-
if (!settings_map[j].availability[is_client]) {
|
383
|
-
gpr_log(GPR_DEBUG, "%s is not available on %s",
|
384
|
-
settings_map[j].channel_arg_name,
|
385
|
-
is_client ? "clients" : "servers");
|
386
|
-
} else {
|
387
|
-
int value = grpc_channel_arg_get_integer(
|
388
|
-
&channel_args->args[i], settings_map[j].integer_options);
|
389
|
-
if (value >= 0) {
|
390
|
-
queue_setting_update(t, settings_map[j].setting_id,
|
391
|
-
static_cast<uint32_t>(value));
|
392
|
-
}
|
393
|
-
}
|
394
|
-
break;
|
395
|
-
}
|
396
|
-
}
|
292
|
+
t->next_stream_id = static_cast<uint32_t>(initial_sequence_number);
|
397
293
|
}
|
398
294
|
}
|
399
|
-
|
295
|
+
|
296
|
+
const int max_hpack_table_size =
|
297
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER).value_or(-1);
|
298
|
+
if (max_hpack_table_size >= 0) {
|
299
|
+
t->hpack_compressor.SetMaxUsableSize(max_hpack_table_size);
|
300
|
+
}
|
301
|
+
|
302
|
+
t->ping_policy.max_pings_without_data =
|
303
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)
|
304
|
+
.value_or(g_default_max_pings_without_data));
|
305
|
+
t->ping_policy.max_ping_strikes =
|
306
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_MAX_PING_STRIKES)
|
307
|
+
.value_or(g_default_max_ping_strikes));
|
308
|
+
t->ping_policy.min_recv_ping_interval_without_data =
|
309
|
+
std::max(grpc_core::Duration::Zero(),
|
310
|
+
channel_args
|
311
|
+
.GetDurationFromIntMillis(
|
312
|
+
GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)
|
313
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
314
|
+
g_default_min_recv_ping_interval_without_data_ms)));
|
315
|
+
t->write_buffer_size =
|
316
|
+
std::max(0, channel_args.GetInt(GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE)
|
317
|
+
.value_or(grpc_core::chttp2::kDefaultWindow));
|
318
|
+
t->keepalive_time =
|
319
|
+
std::max(grpc_core::Duration::Milliseconds(1),
|
320
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIME_MS)
|
321
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
322
|
+
t->is_client ? g_default_client_keepalive_time_ms
|
323
|
+
: g_default_server_keepalive_time_ms)));
|
324
|
+
t->keepalive_timeout = std::max(
|
325
|
+
grpc_core::Duration::Zero(),
|
326
|
+
channel_args.GetDurationFromIntMillis(GRPC_ARG_KEEPALIVE_TIMEOUT_MS)
|
327
|
+
.value_or(grpc_core::Duration::Milliseconds(
|
328
|
+
t->is_client ? g_default_client_keepalive_timeout_ms
|
329
|
+
: g_default_server_keepalive_timeout_ms)));
|
330
|
+
t->keepalive_permit_without_calls =
|
331
|
+
channel_args.GetBool(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS)
|
332
|
+
.value_or(false);
|
333
|
+
// Only send the prefered rx frame size http2 setting if we are instructed
|
334
|
+
// to auto size the buffers allocated at tcp level and we also can adjust
|
335
|
+
// sending frame size.
|
336
|
+
t->enable_preferred_rx_crypto_frame_advertisement =
|
337
|
+
channel_args
|
338
|
+
.GetBool(GRPC_ARG_EXPERIMENTAL_HTTP2_PREFERRED_CRYPTO_FRAME_SIZE)
|
339
|
+
.value_or(false);
|
340
|
+
|
341
|
+
if (channel_args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
|
342
|
+
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
400
343
|
t->channelz_socket =
|
401
344
|
grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
|
402
345
|
std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
|
403
346
|
absl::StrFormat("%s %s", get_vtable()->name, t->peer_string),
|
404
|
-
|
405
|
-
|
347
|
+
channel_args
|
348
|
+
.GetObjectRef<grpc_core::channelz::SocketNode::Security>());
|
349
|
+
}
|
350
|
+
|
351
|
+
static const struct {
|
352
|
+
absl::string_view channel_arg_name;
|
353
|
+
grpc_chttp2_setting_id setting_id;
|
354
|
+
int default_value;
|
355
|
+
int min;
|
356
|
+
int max;
|
357
|
+
bool availability[2] /* server, client */;
|
358
|
+
} settings_map[] = {{GRPC_ARG_MAX_CONCURRENT_STREAMS,
|
359
|
+
GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
|
360
|
+
-1,
|
361
|
+
0,
|
362
|
+
INT32_MAX,
|
363
|
+
{true, false}},
|
364
|
+
{GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER,
|
365
|
+
GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
|
366
|
+
-1,
|
367
|
+
0,
|
368
|
+
INT32_MAX,
|
369
|
+
{true, true}},
|
370
|
+
{GRPC_ARG_MAX_METADATA_SIZE,
|
371
|
+
GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE,
|
372
|
+
-1,
|
373
|
+
0,
|
374
|
+
INT32_MAX,
|
375
|
+
{true, true}},
|
376
|
+
{GRPC_ARG_HTTP2_MAX_FRAME_SIZE,
|
377
|
+
GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
378
|
+
-1,
|
379
|
+
16384,
|
380
|
+
16777215,
|
381
|
+
{true, true}},
|
382
|
+
{GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
|
383
|
+
GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
|
384
|
+
1,
|
385
|
+
0,
|
386
|
+
1,
|
387
|
+
{true, true}},
|
388
|
+
{GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
|
389
|
+
GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
|
390
|
+
-1,
|
391
|
+
5,
|
392
|
+
INT32_MAX,
|
393
|
+
{true, true}}};
|
394
|
+
|
395
|
+
for (size_t i = 0; i < GPR_ARRAY_SIZE(settings_map); i++) {
|
396
|
+
const auto& setting = settings_map[i];
|
397
|
+
if (setting.availability[is_client]) {
|
398
|
+
const int value = channel_args.GetInt(setting.channel_arg_name)
|
399
|
+
.value_or(setting.default_value);
|
400
|
+
if (value >= 0) {
|
401
|
+
queue_setting_update(t, setting.setting_id,
|
402
|
+
grpc_core::Clamp(value, setting.min, setting.max));
|
403
|
+
}
|
404
|
+
} else if (channel_args.Contains(setting.channel_arg_name)) {
|
405
|
+
gpr_log(GPR_DEBUG, "%s is not available on %s",
|
406
|
+
std::string(setting.channel_arg_name).c_str(),
|
407
|
+
is_client ? "clients" : "servers");
|
408
|
+
}
|
409
|
+
}
|
410
|
+
|
411
|
+
if (t->enable_preferred_rx_crypto_frame_advertisement) {
|
412
|
+
const grpc_chttp2_setting_parameters* sp =
|
413
|
+
&grpc_chttp2_settings_parameters
|
414
|
+
[GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
|
415
|
+
queue_setting_update(
|
416
|
+
t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
|
417
|
+
grpc_core::Clamp(INT_MAX, static_cast<int>(sp->min_value),
|
418
|
+
static_cast<int>(sp->max_value)));
|
406
419
|
}
|
407
|
-
return enable_bdp;
|
408
420
|
}
|
409
421
|
|
410
422
|
static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
|
@@ -441,30 +453,35 @@ static void configure_transport_ping_policy(grpc_chttp2_transport* t) {
|
|
441
453
|
g_default_min_recv_ping_interval_without_data_ms);
|
442
454
|
}
|
443
455
|
|
444
|
-
static void
|
456
|
+
static void init_keepalive_pings_if_enabled_locked(
|
457
|
+
void* arg, GRPC_UNUSED grpc_error_handle error) {
|
458
|
+
GPR_DEBUG_ASSERT(error.ok());
|
459
|
+
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
445
460
|
if (t->keepalive_time != grpc_core::Duration::Infinity()) {
|
446
461
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
|
447
462
|
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
463
|
+
t->keepalive_ping_timer_handle =
|
464
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
465
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
466
|
+
grpc_core::ExecCtx exec_ctx;
|
467
|
+
init_keepalive_ping(t);
|
468
|
+
});
|
453
469
|
} else {
|
454
470
|
// Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
|
455
|
-
//
|
471
|
+
// inflight keepalive timers
|
456
472
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED;
|
457
473
|
}
|
458
474
|
}
|
459
475
|
|
460
476
|
grpc_chttp2_transport::grpc_chttp2_transport(
|
461
|
-
const
|
477
|
+
const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
|
478
|
+
bool is_client)
|
462
479
|
: refs(1, GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
|
463
480
|
? "chttp2_refcount"
|
464
481
|
: nullptr),
|
465
482
|
ep(ep),
|
466
483
|
peer_string(grpc_endpoint_get_peer(ep)),
|
467
|
-
memory_owner(grpc_core::
|
484
|
+
memory_owner(channel_args.GetObject<grpc_core::ResourceQuota>()
|
468
485
|
->memory_quota()
|
469
486
|
->CreateMemoryOwner(absl::StrCat(
|
470
487
|
grpc_endpoint_get_peer(ep), ":client_transport"))),
|
@@ -475,7 +492,14 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
475
492
|
GRPC_CHANNEL_READY),
|
476
493
|
is_client(is_client),
|
477
494
|
next_stream_id(is_client ? 1 : 2),
|
478
|
-
|
495
|
+
flow_control(
|
496
|
+
peer_string.c_str(),
|
497
|
+
channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
|
498
|
+
&memory_owner),
|
499
|
+
deframe_state(is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0),
|
500
|
+
event_engine(
|
501
|
+
channel_args
|
502
|
+
.GetObjectRef<grpc_event_engine::experimental::EventEngine>()) {
|
479
503
|
GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
|
480
504
|
GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
|
481
505
|
base.vtable = get_vtable();
|
@@ -516,34 +540,24 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
516
540
|
configure_transport_ping_policy(this);
|
517
541
|
init_transport_keepalive_settings(this);
|
518
542
|
|
519
|
-
|
520
|
-
if (channel_args) {
|
521
|
-
enable_bdp = read_channel_args(this, channel_args, is_client);
|
522
|
-
}
|
523
|
-
|
524
|
-
static const bool kEnableFlowControl =
|
525
|
-
!GPR_GLOBAL_CONFIG_GET(grpc_experimental_disable_flow_control);
|
526
|
-
if (kEnableFlowControl) {
|
527
|
-
flow_control.Init<grpc_core::chttp2::TransportFlowControl>(this,
|
528
|
-
enable_bdp);
|
529
|
-
} else {
|
530
|
-
flow_control.Init<grpc_core::chttp2::TransportFlowControlDisabled>(this);
|
531
|
-
enable_bdp = false;
|
532
|
-
}
|
543
|
+
read_channel_args(this, channel_args, is_client);
|
533
544
|
|
534
545
|
// No pings allowed before receiving a header or data frame.
|
535
546
|
ping_state.pings_before_data_required = 0;
|
536
|
-
ping_state.is_delayed_ping_timer_set = false;
|
537
547
|
ping_state.last_ping_sent_time = grpc_core::Timestamp::InfPast();
|
538
548
|
|
539
549
|
ping_recv_state.last_ping_recv_time = grpc_core::Timestamp::InfPast();
|
540
550
|
ping_recv_state.ping_strikes = 0;
|
541
551
|
|
542
|
-
|
552
|
+
grpc_core::ExecCtx exec_ctx;
|
553
|
+
combiner->Run(
|
554
|
+
GRPC_CLOSURE_INIT(&init_keepalive_ping_locked,
|
555
|
+
init_keepalive_pings_if_enabled_locked, this, nullptr),
|
556
|
+
absl::OkStatus());
|
543
557
|
|
544
|
-
if (
|
558
|
+
if (flow_control.bdp_probe()) {
|
545
559
|
bdp_ping_blocked = true;
|
546
|
-
grpc_chttp2_act_on_flowctl_action(flow_control
|
560
|
+
grpc_chttp2_act_on_flowctl_action(flow_control.PeriodicUpdate(), this,
|
547
561
|
nullptr);
|
548
562
|
}
|
549
563
|
|
@@ -558,9 +572,9 @@ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
|
|
558
572
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
559
573
|
t->destroying = 1;
|
560
574
|
close_transport_locked(
|
561
|
-
t, grpc_error_set_int(
|
562
|
-
|
563
|
-
|
575
|
+
t, grpc_error_set_int(GRPC_ERROR_CREATE("Transport destroyed"),
|
576
|
+
grpc_core::StatusIntProperty::kOccurredDuringWrite,
|
577
|
+
t->write_state));
|
564
578
|
t->memory_owner.Reset();
|
565
579
|
// Must be the last line.
|
566
580
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "destroy");
|
@@ -569,45 +583,66 @@ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
|
|
569
583
|
static void destroy_transport(grpc_transport* gt) {
|
570
584
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
571
585
|
t->combiner->Run(GRPC_CLOSURE_CREATE(destroy_transport_locked, t, nullptr),
|
572
|
-
|
586
|
+
absl::OkStatus());
|
573
587
|
}
|
574
588
|
|
575
589
|
static void close_transport_locked(grpc_chttp2_transport* t,
|
576
590
|
grpc_error_handle error) {
|
577
|
-
end_all_the_calls(t,
|
578
|
-
cancel_pings(t,
|
579
|
-
if (t->closed_with_error
|
591
|
+
end_all_the_calls(t, error);
|
592
|
+
cancel_pings(t, error);
|
593
|
+
if (t->closed_with_error.ok()) {
|
580
594
|
if (!grpc_error_has_clear_grpc_status(error)) {
|
581
|
-
error =
|
582
|
-
|
595
|
+
error =
|
596
|
+
grpc_error_set_int(error, grpc_core::StatusIntProperty::kRpcStatus,
|
597
|
+
GRPC_STATUS_UNAVAILABLE);
|
583
598
|
}
|
584
599
|
if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
|
585
|
-
if (t->close_transport_on_writes_finished
|
600
|
+
if (t->close_transport_on_writes_finished.ok()) {
|
586
601
|
t->close_transport_on_writes_finished =
|
587
|
-
|
588
|
-
"Delayed close due to in-progress write");
|
602
|
+
GRPC_ERROR_CREATE("Delayed close due to in-progress write");
|
589
603
|
}
|
590
604
|
t->close_transport_on_writes_finished =
|
591
605
|
grpc_error_add_child(t->close_transport_on_writes_finished, error);
|
592
606
|
return;
|
593
607
|
}
|
594
|
-
GPR_ASSERT(error
|
595
|
-
t->closed_with_error =
|
608
|
+
GPR_ASSERT(!error.ok());
|
609
|
+
t->closed_with_error = error;
|
596
610
|
connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
|
597
611
|
"close_transport");
|
598
|
-
if (t->ping_state.
|
599
|
-
|
612
|
+
if (t->ping_state.delayed_ping_timer_handle.has_value()) {
|
613
|
+
if (t->event_engine->Cancel(*t->ping_state.delayed_ping_timer_handle)) {
|
614
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
|
615
|
+
t->ping_state.delayed_ping_timer_handle.reset();
|
616
|
+
}
|
600
617
|
}
|
601
|
-
if (t->
|
602
|
-
|
618
|
+
if (t->next_bdp_ping_timer_handle.has_value()) {
|
619
|
+
if (t->event_engine->Cancel(*t->next_bdp_ping_timer_handle)) {
|
620
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
621
|
+
t->next_bdp_ping_timer_handle.reset();
|
622
|
+
}
|
603
623
|
}
|
604
624
|
switch (t->keepalive_state) {
|
605
625
|
case GRPC_CHTTP2_KEEPALIVE_STATE_WAITING:
|
606
|
-
|
626
|
+
if (t->keepalive_ping_timer_handle.has_value()) {
|
627
|
+
if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
|
628
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
|
629
|
+
t->keepalive_ping_timer_handle.reset();
|
630
|
+
}
|
631
|
+
}
|
607
632
|
break;
|
608
633
|
case GRPC_CHTTP2_KEEPALIVE_STATE_PINGING:
|
609
|
-
|
610
|
-
|
634
|
+
if (t->keepalive_ping_timer_handle.has_value()) {
|
635
|
+
if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
|
636
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
|
637
|
+
t->keepalive_ping_timer_handle.reset();
|
638
|
+
}
|
639
|
+
}
|
640
|
+
if (t->keepalive_watchdog_timer_handle.has_value()) {
|
641
|
+
if (t->event_engine->Cancel(*t->keepalive_watchdog_timer_handle)) {
|
642
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
|
643
|
+
t->keepalive_watchdog_timer_handle.reset();
|
644
|
+
}
|
645
|
+
}
|
611
646
|
break;
|
612
647
|
case GRPC_CHTTP2_KEEPALIVE_STATE_DYING:
|
613
648
|
case GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED:
|
@@ -621,19 +656,17 @@ static void close_transport_locked(grpc_chttp2_transport* t,
|
|
621
656
|
GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:close");
|
622
657
|
}
|
623
658
|
GPR_ASSERT(t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE);
|
624
|
-
grpc_endpoint_shutdown(t->ep,
|
659
|
+
grpc_endpoint_shutdown(t->ep, error);
|
625
660
|
}
|
626
661
|
if (t->notify_on_receive_settings != nullptr) {
|
627
662
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_receive_settings,
|
628
|
-
|
663
|
+
error);
|
629
664
|
t->notify_on_receive_settings = nullptr;
|
630
665
|
}
|
631
666
|
if (t->notify_on_close != nullptr) {
|
632
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_close,
|
633
|
-
GRPC_ERROR_REF(error));
|
667
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_close, error);
|
634
668
|
t->notify_on_close = nullptr;
|
635
669
|
}
|
636
|
-
GRPC_ERROR_UNREF(error);
|
637
670
|
}
|
638
671
|
|
639
672
|
#ifndef NDEBUG
|
@@ -668,29 +701,27 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
|
|
668
701
|
refcount(refcount),
|
669
702
|
reffer(this),
|
670
703
|
initial_metadata_buffer(arena),
|
671
|
-
trailing_metadata_buffer(arena)
|
704
|
+
trailing_metadata_buffer(arena),
|
705
|
+
flow_control(&t->flow_control) {
|
672
706
|
if (server_data) {
|
673
707
|
id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
|
708
|
+
if (grpc_http_trace.enabled()) {
|
709
|
+
gpr_log(GPR_DEBUG, "HTTP:%p/%p creating accept stream %d [from %p]", t,
|
710
|
+
this, id, server_data);
|
711
|
+
}
|
674
712
|
*t->accepting_stream = this;
|
675
713
|
grpc_chttp2_stream_map_add(&t->stream_map, id, this);
|
676
714
|
post_destructive_reclaimer(t);
|
677
715
|
}
|
678
|
-
if (t->flow_control->flow_control_enabled()) {
|
679
|
-
flow_control.Init<grpc_core::chttp2::StreamFlowControl>(
|
680
|
-
static_cast<grpc_core::chttp2::TransportFlowControl*>(
|
681
|
-
t->flow_control.get()),
|
682
|
-
this);
|
683
|
-
} else {
|
684
|
-
flow_control.Init<grpc_core::chttp2::StreamFlowControlDisabled>();
|
685
|
-
}
|
686
716
|
|
687
717
|
grpc_slice_buffer_init(&frame_storage);
|
688
|
-
grpc_slice_buffer_init(&unprocessed_incoming_frames_buffer);
|
689
718
|
grpc_slice_buffer_init(&flow_controlled_buffer);
|
690
|
-
GRPC_CLOSURE_INIT(&reset_byte_stream, ::reset_byte_stream, this, nullptr);
|
691
719
|
}
|
692
720
|
|
693
721
|
grpc_chttp2_stream::~grpc_chttp2_stream() {
|
722
|
+
grpc_chttp2_list_remove_stalled_by_stream(t, this);
|
723
|
+
grpc_chttp2_list_remove_stalled_by_transport(t, this);
|
724
|
+
|
694
725
|
if (t->channelz_socket != nullptr) {
|
695
726
|
if ((t->is_client && eos_received) || (!t->is_client && eos_sent)) {
|
696
727
|
t->channelz_socket->RecordStreamSucceeded();
|
@@ -704,57 +735,48 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
|
|
704
735
|
GPR_ASSERT(grpc_chttp2_stream_map_find(&t->stream_map, id) == nullptr);
|
705
736
|
}
|
706
737
|
|
707
|
-
|
708
|
-
grpc_slice_buffer_destroy_internal(&frame_storage);
|
738
|
+
grpc_slice_buffer_destroy(&frame_storage);
|
709
739
|
|
710
740
|
for (int i = 0; i < STREAM_LIST_COUNT; i++) {
|
711
|
-
if (GPR_UNLIKELY(included
|
712
|
-
|
713
|
-
|
714
|
-
|
741
|
+
if (GPR_UNLIKELY(included.is_set(i))) {
|
742
|
+
grpc_core::Crash(absl::StrFormat("%s stream %d still included in list %d",
|
743
|
+
t->is_client ? "client" : "server", id,
|
744
|
+
i));
|
715
745
|
}
|
716
746
|
}
|
717
747
|
|
718
748
|
GPR_ASSERT(send_initial_metadata_finished == nullptr);
|
719
|
-
GPR_ASSERT(fetching_send_message == nullptr);
|
720
749
|
GPR_ASSERT(send_trailing_metadata_finished == nullptr);
|
721
750
|
GPR_ASSERT(recv_initial_metadata_ready == nullptr);
|
722
751
|
GPR_ASSERT(recv_message_ready == nullptr);
|
723
752
|
GPR_ASSERT(recv_trailing_metadata_finished == nullptr);
|
724
|
-
|
725
|
-
GRPC_ERROR_UNREF(read_closed_error);
|
726
|
-
GRPC_ERROR_UNREF(write_closed_error);
|
727
|
-
GRPC_ERROR_UNREF(byte_stream_error);
|
728
|
-
flow_control.Destroy();
|
753
|
+
grpc_slice_buffer_destroy(&flow_controlled_buffer);
|
729
754
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "stream");
|
730
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg,
|
755
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg, absl::OkStatus());
|
731
756
|
}
|
732
757
|
|
733
758
|
static int init_stream(grpc_transport* gt, grpc_stream* gs,
|
734
759
|
grpc_stream_refcount* refcount, const void* server_data,
|
735
760
|
grpc_core::Arena* arena) {
|
736
|
-
GPR_TIMER_SCOPE("init_stream", 0);
|
737
761
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
738
762
|
new (gs) grpc_chttp2_stream(t, refcount, server_data, arena);
|
739
763
|
return 0;
|
740
764
|
}
|
741
765
|
|
742
766
|
static void destroy_stream_locked(void* sp, grpc_error_handle /*error*/) {
|
743
|
-
GPR_TIMER_SCOPE("destroy_stream", 0);
|
744
767
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
|
745
768
|
s->~grpc_chttp2_stream();
|
746
769
|
}
|
747
770
|
|
748
771
|
static void destroy_stream(grpc_transport* gt, grpc_stream* gs,
|
749
772
|
grpc_closure* then_schedule_closure) {
|
750
|
-
GPR_TIMER_SCOPE("destroy_stream", 0);
|
751
773
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
752
774
|
grpc_chttp2_stream* s = reinterpret_cast<grpc_chttp2_stream*>(gs);
|
753
775
|
|
754
776
|
s->destroy_stream_arg = then_schedule_closure;
|
755
777
|
t->combiner->Run(
|
756
778
|
GRPC_CLOSURE_INIT(&s->destroy_stream, destroy_stream_locked, s, nullptr),
|
757
|
-
|
779
|
+
absl::OkStatus());
|
758
780
|
}
|
759
781
|
|
760
782
|
grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
|
@@ -802,90 +824,18 @@ static void set_write_state(grpc_chttp2_transport* t,
|
|
802
824
|
// from peer while we had some pending writes)
|
803
825
|
if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
|
804
826
|
grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
|
805
|
-
if (t->close_transport_on_writes_finished
|
827
|
+
if (!t->close_transport_on_writes_finished.ok()) {
|
806
828
|
grpc_error_handle err = t->close_transport_on_writes_finished;
|
807
|
-
t->close_transport_on_writes_finished =
|
829
|
+
t->close_transport_on_writes_finished = absl::OkStatus();
|
808
830
|
close_transport_locked(t, err);
|
809
831
|
}
|
810
832
|
}
|
811
833
|
}
|
812
834
|
|
813
|
-
static void inc_initiate_write_reason(
|
814
|
-
grpc_chttp2_initiate_write_reason reason) {
|
815
|
-
switch (reason) {
|
816
|
-
case GRPC_CHTTP2_INITIATE_WRITE_INITIAL_WRITE:
|
817
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_INITIAL_WRITE();
|
818
|
-
break;
|
819
|
-
case GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM:
|
820
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_START_NEW_STREAM();
|
821
|
-
break;
|
822
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE:
|
823
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_MESSAGE();
|
824
|
-
break;
|
825
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA:
|
826
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_INITIAL_METADATA();
|
827
|
-
break;
|
828
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA:
|
829
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_TRAILING_METADATA();
|
830
|
-
break;
|
831
|
-
case GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING:
|
832
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_RETRY_SEND_PING();
|
833
|
-
break;
|
834
|
-
case GRPC_CHTTP2_INITIATE_WRITE_CONTINUE_PINGS:
|
835
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_CONTINUE_PINGS();
|
836
|
-
break;
|
837
|
-
case GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT:
|
838
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_GOAWAY_SENT();
|
839
|
-
break;
|
840
|
-
case GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM:
|
841
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_RST_STREAM();
|
842
|
-
break;
|
843
|
-
case GRPC_CHTTP2_INITIATE_WRITE_CLOSE_FROM_API:
|
844
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_CLOSE_FROM_API();
|
845
|
-
break;
|
846
|
-
case GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL:
|
847
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_STREAM_FLOW_CONTROL();
|
848
|
-
break;
|
849
|
-
case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL:
|
850
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_TRANSPORT_FLOW_CONTROL();
|
851
|
-
break;
|
852
|
-
case GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS:
|
853
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_SEND_SETTINGS();
|
854
|
-
break;
|
855
|
-
case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_SETTING:
|
856
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_SETTING();
|
857
|
-
break;
|
858
|
-
case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_UPDATE:
|
859
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FLOW_CONTROL_UNSTALLED_BY_UPDATE();
|
860
|
-
break;
|
861
|
-
case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
|
862
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_APPLICATION_PING();
|
863
|
-
break;
|
864
|
-
case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
|
865
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING();
|
866
|
-
break;
|
867
|
-
case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
|
868
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_KEEPALIVE_PING();
|
869
|
-
break;
|
870
|
-
case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED:
|
871
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_TRANSPORT_FLOW_CONTROL_UNSTALLED();
|
872
|
-
break;
|
873
|
-
case GRPC_CHTTP2_INITIATE_WRITE_PING_RESPONSE:
|
874
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_PING_RESPONSE();
|
875
|
-
break;
|
876
|
-
case GRPC_CHTTP2_INITIATE_WRITE_FORCE_RST_STREAM:
|
877
|
-
GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_FORCE_RST_STREAM();
|
878
|
-
break;
|
879
|
-
}
|
880
|
-
}
|
881
|
-
|
882
835
|
void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
883
836
|
grpc_chttp2_initiate_write_reason reason) {
|
884
|
-
GPR_TIMER_SCOPE("grpc_chttp2_initiate_write", 0);
|
885
|
-
|
886
837
|
switch (t->write_state) {
|
887
838
|
case GRPC_CHTTP2_WRITE_STATE_IDLE:
|
888
|
-
inc_initiate_write_reason(reason);
|
889
839
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING,
|
890
840
|
grpc_chttp2_initiate_write_reason_string(reason));
|
891
841
|
GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
|
@@ -908,7 +858,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
|
908
858
|
t->combiner->FinallyRun(
|
909
859
|
GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
|
910
860
|
write_action_begin_locked, t, nullptr),
|
911
|
-
|
861
|
+
absl::OkStatus());
|
912
862
|
break;
|
913
863
|
case GRPC_CHTTP2_WRITE_STATE_WRITING:
|
914
864
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE,
|
@@ -921,8 +871,7 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
|
|
921
871
|
|
922
872
|
void grpc_chttp2_mark_stream_writable(grpc_chttp2_transport* t,
|
923
873
|
grpc_chttp2_stream* s) {
|
924
|
-
if (t->closed_with_error
|
925
|
-
grpc_chttp2_list_add_writable_stream(t, s)) {
|
874
|
+
if (t->closed_with_error.ok() && grpc_chttp2_list_add_writable_stream(t, s)) {
|
926
875
|
GRPC_CHTTP2_STREAM_REF(s, "chttp2_writing:become");
|
927
876
|
}
|
928
877
|
}
|
@@ -937,24 +886,20 @@ static const char* begin_writing_desc(bool partial) {
|
|
937
886
|
|
938
887
|
static void write_action_begin_locked(void* gt,
|
939
888
|
grpc_error_handle /*error_ignored*/) {
|
940
|
-
GPR_TIMER_SCOPE("write_action_begin_locked", 0);
|
941
889
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
|
942
890
|
GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
|
943
891
|
grpc_chttp2_begin_write_result r;
|
944
|
-
if (t->closed_with_error
|
892
|
+
if (!t->closed_with_error.ok()) {
|
945
893
|
r.writing = false;
|
946
894
|
} else {
|
947
895
|
r = grpc_chttp2_begin_write(t);
|
948
896
|
}
|
949
897
|
if (r.writing) {
|
950
|
-
if (r.partial) {
|
951
|
-
GRPC_STATS_INC_HTTP2_PARTIAL_WRITES();
|
952
|
-
}
|
953
898
|
set_write_state(t,
|
954
899
|
r.partial ? GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE
|
955
900
|
: GRPC_CHTTP2_WRITE_STATE_WRITING,
|
956
901
|
begin_writing_desc(r.partial));
|
957
|
-
write_action(t,
|
902
|
+
write_action(t, absl::OkStatus());
|
958
903
|
if (t->reading_paused_on_pending_induced_frames) {
|
959
904
|
GPR_ASSERT(t->num_pending_induced_frames == 0);
|
960
905
|
// We had paused reading, because we had many induced frames (SETTINGS
|
@@ -969,49 +914,56 @@ static void write_action_begin_locked(void* gt,
|
|
969
914
|
continue_read_action_locked(t);
|
970
915
|
}
|
971
916
|
} else {
|
972
|
-
GRPC_STATS_INC_HTTP2_SPURIOUS_WRITES_BEGUN();
|
973
917
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_IDLE, "begin writing nothing");
|
974
918
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "writing");
|
975
919
|
}
|
976
920
|
}
|
977
921
|
|
978
922
|
static void write_action(void* gt, grpc_error_handle /*error*/) {
|
979
|
-
GPR_TIMER_SCOPE("write_action", 0);
|
980
923
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
|
981
924
|
void* cl = t->cl;
|
982
925
|
t->cl = nullptr;
|
926
|
+
// Choose max_frame_size as the prefered rx crypto frame size indicated by the
|
927
|
+
// peer.
|
928
|
+
int max_frame_size =
|
929
|
+
t->settings
|
930
|
+
[GRPC_PEER_SETTINGS]
|
931
|
+
[GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
|
932
|
+
// Note: max frame size is 0 if the remote peer does not support adjusting the
|
933
|
+
// sending frame size.
|
934
|
+
if (max_frame_size == 0) {
|
935
|
+
max_frame_size = INT_MAX;
|
936
|
+
}
|
983
937
|
grpc_endpoint_write(
|
984
938
|
t->ep, &t->outbuf,
|
985
939
|
GRPC_CLOSURE_INIT(&t->write_action_end_locked, write_action_end, t,
|
986
940
|
grpc_schedule_on_exec_ctx),
|
987
|
-
cl);
|
941
|
+
cl, max_frame_size);
|
988
942
|
}
|
989
943
|
|
990
944
|
static void write_action_end(void* tp, grpc_error_handle error) {
|
991
945
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
992
946
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->write_action_end_locked,
|
993
947
|
write_action_end_locked, t, nullptr),
|
994
|
-
|
948
|
+
error);
|
995
949
|
}
|
996
950
|
|
997
951
|
// Callback from the grpc_endpoint after bytes have been written by calling
|
998
952
|
// sendmsg
|
999
953
|
static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
1000
|
-
GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
|
1001
954
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1002
955
|
|
1003
956
|
bool closed = false;
|
1004
|
-
if (error
|
1005
|
-
close_transport_locked(t,
|
957
|
+
if (!error.ok()) {
|
958
|
+
close_transport_locked(t, error);
|
1006
959
|
closed = true;
|
1007
960
|
}
|
1008
961
|
|
1009
|
-
if (t->sent_goaway_state ==
|
1010
|
-
t->sent_goaway_state =
|
962
|
+
if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED) {
|
963
|
+
t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SENT;
|
1011
964
|
closed = true;
|
1012
965
|
if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
1013
|
-
close_transport_locked(
|
1014
|
-
t, GRPC_ERROR_CREATE_FROM_STATIC_STRING("goaway sent"));
|
966
|
+
close_transport_locked(t, GRPC_ERROR_CREATE("goaway sent"));
|
1015
967
|
}
|
1016
968
|
}
|
1017
969
|
|
@@ -1019,11 +971,9 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
|
1019
971
|
case GRPC_CHTTP2_WRITE_STATE_IDLE:
|
1020
972
|
GPR_UNREACHABLE_CODE(break);
|
1021
973
|
case GRPC_CHTTP2_WRITE_STATE_WRITING:
|
1022
|
-
GPR_TIMER_MARK("state=writing", 0);
|
1023
974
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_IDLE, "finish writing");
|
1024
975
|
break;
|
1025
976
|
case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE:
|
1026
|
-
GPR_TIMER_MARK("state=writing_stale_no_poller", 0);
|
1027
977
|
set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING, "continue writing");
|
1028
978
|
GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
|
1029
979
|
// If the transport is closed, we will retry writing on the endpoint
|
@@ -1037,11 +987,11 @@ static void write_action_end_locked(void* tp, grpc_error_handle error) {
|
|
1037
987
|
t->combiner->FinallyRun(
|
1038
988
|
GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
|
1039
989
|
write_action_begin_locked, t, nullptr),
|
1040
|
-
|
990
|
+
absl::OkStatus());
|
1041
991
|
break;
|
1042
992
|
}
|
1043
993
|
|
1044
|
-
grpc_chttp2_end_write(t,
|
994
|
+
grpc_chttp2_end_write(t, error);
|
1045
995
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "writing");
|
1046
996
|
}
|
1047
997
|
|
@@ -1070,26 +1020,27 @@ static void cancel_unstarted_streams(grpc_chttp2_transport* t,
|
|
1070
1020
|
s->trailing_metadata_buffer.Set(
|
1071
1021
|
grpc_core::GrpcStreamNetworkState(),
|
1072
1022
|
grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
|
1073
|
-
grpc_chttp2_cancel_stream(t, s,
|
1023
|
+
grpc_chttp2_cancel_stream(t, s, error);
|
1074
1024
|
}
|
1075
|
-
GRPC_ERROR_UNREF(error);
|
1076
1025
|
}
|
1077
1026
|
|
1078
1027
|
void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
1079
1028
|
uint32_t goaway_error,
|
1080
1029
|
uint32_t last_stream_id,
|
1081
1030
|
absl::string_view goaway_text) {
|
1082
|
-
// Discard the error from a previous goaway frame (if any)
|
1083
|
-
if (t->goaway_error != GRPC_ERROR_NONE) {
|
1084
|
-
GRPC_ERROR_UNREF(t->goaway_error);
|
1085
|
-
}
|
1086
1031
|
t->goaway_error = grpc_error_set_str(
|
1087
1032
|
grpc_error_set_int(
|
1088
1033
|
grpc_error_set_int(
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1034
|
+
grpc_core::StatusCreate(
|
1035
|
+
absl::StatusCode::kUnavailable,
|
1036
|
+
absl::StrFormat(
|
1037
|
+
"GOAWAY received; Error code: %u; Debug Text: %s",
|
1038
|
+
goaway_error, goaway_text),
|
1039
|
+
DEBUG_LOCATION, {}),
|
1040
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
1041
|
+
static_cast<intptr_t>(goaway_error)),
|
1042
|
+
grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE),
|
1043
|
+
grpc_core::StatusStrProperty::kRawBytes, goaway_text);
|
1093
1044
|
|
1094
1045
|
GRPC_CHTTP2_IF_TRACING(
|
1095
1046
|
gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
|
@@ -1098,24 +1049,25 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1098
1049
|
// received a GOAWAY with a non NO_ERROR code.
|
1099
1050
|
if (goaway_error != GRPC_HTTP2_NO_ERROR) {
|
1100
1051
|
gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
|
1101
|
-
goaway_error,
|
1102
|
-
}
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
uint32_t
|
1109
|
-
|
1110
|
-
|
1111
|
-
s->
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1052
|
+
goaway_error, grpc_core::StatusToString(t->goaway_error).c_str());
|
1053
|
+
}
|
1054
|
+
if (t->is_client) {
|
1055
|
+
cancel_unstarted_streams(t, t->goaway_error);
|
1056
|
+
// Cancel all unseen streams
|
1057
|
+
grpc_chttp2_stream_map_for_each(
|
1058
|
+
&t->stream_map,
|
1059
|
+
[](void* user_data, uint32_t /* key */, void* stream) {
|
1060
|
+
uint32_t last_stream_id = *(static_cast<uint32_t*>(user_data));
|
1061
|
+
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(stream);
|
1062
|
+
if (s->id > last_stream_id) {
|
1063
|
+
s->trailing_metadata_buffer.Set(
|
1064
|
+
grpc_core::GrpcStreamNetworkState(),
|
1065
|
+
grpc_core::GrpcStreamNetworkState::kNotSeenByServer);
|
1066
|
+
grpc_chttp2_cancel_stream(s->t, s, s->t->goaway_error);
|
1067
|
+
}
|
1068
|
+
},
|
1069
|
+
&last_stream_id);
|
1070
|
+
}
|
1119
1071
|
absl::Status status = grpc_error_to_absl_status(t->goaway_error);
|
1120
1072
|
// When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
|
1121
1073
|
// data equal to "too_many_pings", it should log the occurrence at a log level
|
@@ -1125,16 +1077,18 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
|
|
1125
1077
|
goaway_error == GRPC_HTTP2_ENHANCE_YOUR_CALM &&
|
1126
1078
|
goaway_text == "too_many_pings")) {
|
1127
1079
|
gpr_log(GPR_ERROR,
|
1128
|
-
"Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
|
1129
|
-
"data equal to \"too_many_pings\""
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1080
|
+
"%s: Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
|
1081
|
+
"data equal to \"too_many_pings\". Current keepalive time (before "
|
1082
|
+
"throttling): %s",
|
1083
|
+
t->peer_string.c_str(), t->keepalive_time.ToString().c_str());
|
1084
|
+
constexpr int max_keepalive_time_millis =
|
1085
|
+
INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
1086
|
+
int64_t throttled_keepalive_time =
|
1087
|
+
t->keepalive_time.millis() > max_keepalive_time_millis
|
1088
|
+
? INT_MAX
|
1089
|
+
: t->keepalive_time.millis() * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
|
1136
1090
|
status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
|
1137
|
-
absl::Cord(std::to_string(
|
1091
|
+
absl::Cord(std::to_string(throttled_keepalive_time)));
|
1138
1092
|
}
|
1139
1093
|
// lie: use transient failure from the transport to indicate goaway has been
|
1140
1094
|
// received.
|
@@ -1148,8 +1102,8 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1148
1102
|
grpc_chttp2_stream* s;
|
1149
1103
|
// maybe cancel out streams that haven't yet started if we have received a
|
1150
1104
|
// GOAWAY
|
1151
|
-
if (t->goaway_error
|
1152
|
-
cancel_unstarted_streams(t,
|
1105
|
+
if (!t->goaway_error.ok()) {
|
1106
|
+
cancel_unstarted_streams(t, t->goaway_error);
|
1153
1107
|
return;
|
1154
1108
|
}
|
1155
1109
|
// start streams where we have free grpc_chttp2_stream ids and free
|
@@ -1189,9 +1143,9 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1189
1143
|
grpc_core::GrpcStreamNetworkState::kNotSentOnWire);
|
1190
1144
|
grpc_chttp2_cancel_stream(
|
1191
1145
|
t, s,
|
1192
|
-
grpc_error_set_int(
|
1193
|
-
|
1194
|
-
|
1146
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("Stream IDs exhausted"),
|
1147
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
1148
|
+
GRPC_STATUS_UNAVAILABLE));
|
1195
1149
|
}
|
1196
1150
|
}
|
1197
1151
|
}
|
@@ -1212,7 +1166,13 @@ static grpc_closure* add_closure_barrier(grpc_closure* closure) {
|
|
1212
1166
|
static void null_then_sched_closure(grpc_closure** closure) {
|
1213
1167
|
grpc_closure* c = *closure;
|
1214
1168
|
*closure = nullptr;
|
1215
|
-
|
1169
|
+
// null_then_schedule_closure might be run during a start_batch which might
|
1170
|
+
// subsequently examine the batch for more operations contained within.
|
1171
|
+
// However, the closure run might make it back to the call object, push a
|
1172
|
+
// completion, have the application see it, and make a new operation on the
|
1173
|
+
// call which recycles the batch BEFORE the call to start_batch completes,
|
1174
|
+
// forcing a race.
|
1175
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, c, absl::OkStatus());
|
1216
1176
|
}
|
1217
1177
|
|
1218
1178
|
void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
@@ -1223,7 +1183,6 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
|
1223
1183
|
grpc_closure* closure = *pclosure;
|
1224
1184
|
*pclosure = nullptr;
|
1225
1185
|
if (closure == nullptr) {
|
1226
|
-
GRPC_ERROR_UNREF(error);
|
1227
1186
|
return;
|
1228
1187
|
}
|
1229
1188
|
closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT;
|
@@ -1237,42 +1196,31 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
|
|
1237
1196
|
CLOSURE_BARRIER_FIRST_REF_BIT),
|
1238
1197
|
static_cast<int>(closure->next_data.scratch %
|
1239
1198
|
CLOSURE_BARRIER_FIRST_REF_BIT),
|
1240
|
-
desc,
|
1199
|
+
desc, grpc_core::StatusToString(error).c_str(),
|
1241
1200
|
write_state_name(t->write_state));
|
1242
1201
|
}
|
1243
|
-
if (error
|
1244
|
-
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
1202
|
+
if (!error.ok()) {
|
1245
1203
|
grpc_error_handle cl_err =
|
1246
1204
|
grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
|
1247
|
-
|
1248
|
-
|
1249
|
-
|
1250
|
-
|
1251
|
-
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
t->peer_string);
|
1205
|
+
if (cl_err.ok()) {
|
1206
|
+
cl_err = GRPC_ERROR_CREATE(absl::StrCat(
|
1207
|
+
"Error in HTTP transport completing operation: ", desc,
|
1208
|
+
" write_state=", write_state_name(t->write_state), " refs=",
|
1209
|
+
closure->next_data.scratch / CLOSURE_BARRIER_FIRST_REF_BIT, " flags=",
|
1210
|
+
closure->next_data.scratch % CLOSURE_BARRIER_FIRST_REF_BIT));
|
1211
|
+
cl_err = grpc_error_set_str(
|
1212
|
+
cl_err, grpc_core::StatusStrProperty::kTargetAddress, t->peer_string);
|
1256
1213
|
}
|
1257
1214
|
cl_err = grpc_error_add_child(cl_err, error);
|
1258
|
-
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
1259
1215
|
closure->error_data.error = grpc_core::internal::StatusAllocHeapPtr(cl_err);
|
1260
|
-
#else
|
1261
|
-
closure->error_data.error = reinterpret_cast<intptr_t>(cl_err);
|
1262
|
-
#endif
|
1263
1216
|
}
|
1264
1217
|
if (closure->next_data.scratch < CLOSURE_BARRIER_FIRST_REF_BIT) {
|
1265
1218
|
if ((t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE) ||
|
1266
1219
|
!(closure->next_data.scratch & CLOSURE_BARRIER_MAY_COVER_WRITE)) {
|
1267
1220
|
// Using GRPC_CLOSURE_SCHED instead of GRPC_CLOSURE_RUN to avoid running
|
1268
1221
|
// closures earlier than when it is safe to do so.
|
1269
|
-
#ifdef GRPC_ERROR_IS_ABSEIL_STATUS
|
1270
1222
|
grpc_error_handle run_error =
|
1271
1223
|
grpc_core::internal::StatusMoveFromHeapPtr(closure->error_data.error);
|
1272
|
-
#else
|
1273
|
-
grpc_error_handle run_error =
|
1274
|
-
reinterpret_cast<grpc_error_handle>(closure->error_data.error);
|
1275
|
-
#endif
|
1276
1224
|
closure->error_data.error = 0;
|
1277
1225
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, run_error);
|
1278
1226
|
} else {
|
@@ -1286,96 +1234,9 @@ static bool contains_non_ok_status(grpc_metadata_batch* batch) {
|
|
1286
1234
|
GRPC_STATUS_OK;
|
1287
1235
|
}
|
1288
1236
|
|
1289
|
-
static void maybe_become_writable_due_to_send_msg(grpc_chttp2_transport* t,
|
1290
|
-
grpc_chttp2_stream* s) {
|
1291
|
-
if (s->id != 0 && (!s->write_buffering ||
|
1292
|
-
s->flow_controlled_buffer.length > t->write_buffer_size)) {
|
1293
|
-
grpc_chttp2_mark_stream_writable(t, s);
|
1294
|
-
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
|
1295
|
-
}
|
1296
|
-
}
|
1297
|
-
|
1298
|
-
static void add_fetched_slice_locked(grpc_chttp2_transport* t,
|
1299
|
-
grpc_chttp2_stream* s) {
|
1300
|
-
s->fetched_send_message_length +=
|
1301
|
-
static_cast<uint32_t> GRPC_SLICE_LENGTH(s->fetching_slice);
|
1302
|
-
grpc_slice_buffer_add(&s->flow_controlled_buffer, s->fetching_slice);
|
1303
|
-
maybe_become_writable_due_to_send_msg(t, s);
|
1304
|
-
}
|
1305
|
-
|
1306
|
-
static void continue_fetching_send_locked(grpc_chttp2_transport* t,
|
1307
|
-
grpc_chttp2_stream* s) {
|
1308
|
-
for (;;) {
|
1309
|
-
if (s->fetching_send_message == nullptr) {
|
1310
|
-
// Stream was cancelled before message fetch completed
|
1311
|
-
abort(); /* TODO(ctiller): what cleanup here? */
|
1312
|
-
}
|
1313
|
-
if (s->fetched_send_message_length == s->fetching_send_message->length()) {
|
1314
|
-
int64_t notify_offset = s->next_message_end_offset;
|
1315
|
-
if (notify_offset <= s->flow_controlled_bytes_written) {
|
1316
|
-
grpc_chttp2_complete_closure_step(
|
1317
|
-
t, s, &s->fetching_send_message_finished, GRPC_ERROR_NONE,
|
1318
|
-
"fetching_send_message_finished");
|
1319
|
-
} else {
|
1320
|
-
grpc_chttp2_write_cb* cb = t->write_cb_pool;
|
1321
|
-
if (cb == nullptr) {
|
1322
|
-
cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
|
1323
|
-
} else {
|
1324
|
-
t->write_cb_pool = cb->next;
|
1325
|
-
}
|
1326
|
-
cb->call_at_byte = notify_offset;
|
1327
|
-
cb->closure = s->fetching_send_message_finished;
|
1328
|
-
s->fetching_send_message_finished = nullptr;
|
1329
|
-
grpc_chttp2_write_cb** list =
|
1330
|
-
s->fetching_send_message->flags() & GRPC_WRITE_THROUGH
|
1331
|
-
? &s->on_write_finished_cbs
|
1332
|
-
: &s->on_flow_controlled_cbs;
|
1333
|
-
cb->next = *list;
|
1334
|
-
*list = cb;
|
1335
|
-
}
|
1336
|
-
s->fetching_send_message.reset();
|
1337
|
-
return; /* early out */
|
1338
|
-
} else if (s->fetching_send_message->Next(
|
1339
|
-
UINT32_MAX, GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
|
1340
|
-
::complete_fetch, s,
|
1341
|
-
grpc_schedule_on_exec_ctx))) {
|
1342
|
-
grpc_error_handle error =
|
1343
|
-
s->fetching_send_message->Pull(&s->fetching_slice);
|
1344
|
-
if (error != GRPC_ERROR_NONE) {
|
1345
|
-
s->fetching_send_message.reset();
|
1346
|
-
grpc_chttp2_cancel_stream(t, s, error);
|
1347
|
-
} else {
|
1348
|
-
add_fetched_slice_locked(t, s);
|
1349
|
-
}
|
1350
|
-
}
|
1351
|
-
}
|
1352
|
-
}
|
1353
|
-
|
1354
|
-
static void complete_fetch(void* gs, grpc_error_handle error) {
|
1355
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
|
1356
|
-
s->t->combiner->Run(GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
|
1357
|
-
::complete_fetch_locked, s, nullptr),
|
1358
|
-
GRPC_ERROR_REF(error));
|
1359
|
-
}
|
1360
|
-
|
1361
|
-
static void complete_fetch_locked(void* gs, grpc_error_handle error) {
|
1362
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
|
1363
|
-
grpc_chttp2_transport* t = s->t;
|
1364
|
-
if (error == GRPC_ERROR_NONE) {
|
1365
|
-
error = s->fetching_send_message->Pull(&s->fetching_slice);
|
1366
|
-
if (error == GRPC_ERROR_NONE) {
|
1367
|
-
add_fetched_slice_locked(t, s);
|
1368
|
-
continue_fetching_send_locked(t, s);
|
1369
|
-
}
|
1370
|
-
}
|
1371
|
-
if (error != GRPC_ERROR_NONE) {
|
1372
|
-
s->fetching_send_message.reset();
|
1373
|
-
grpc_chttp2_cancel_stream(t, s, error);
|
1374
|
-
}
|
1375
|
-
}
|
1376
|
-
|
1377
1237
|
static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
|
1378
1238
|
bool is_client, bool is_initial) {
|
1239
|
+
gpr_log(GPR_INFO, "--metadata--");
|
1379
1240
|
const std::string prefix = absl::StrCat(
|
1380
1241
|
"HTTP:", id, is_initial ? ":HDR" : ":TRL", is_client ? ":CLI:" : ":SVR:");
|
1381
1242
|
md_batch->Log([&prefix](absl::string_view key, absl::string_view value) {
|
@@ -1385,8 +1246,6 @@ static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
|
|
1385
1246
|
|
1386
1247
|
static void perform_stream_op_locked(void* stream_op,
|
1387
1248
|
grpc_error_handle /*error_ignored*/) {
|
1388
|
-
GPR_TIMER_SCOPE("perform_stream_op_locked", 0);
|
1389
|
-
|
1390
1249
|
grpc_transport_stream_op_batch* op =
|
1391
1250
|
static_cast<grpc_transport_stream_op_batch*>(stream_op);
|
1392
1251
|
grpc_chttp2_stream* s =
|
@@ -1394,8 +1253,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1394
1253
|
grpc_transport_stream_op_batch_payload* op_payload = op->payload;
|
1395
1254
|
grpc_chttp2_transport* t = s->t;
|
1396
1255
|
|
1397
|
-
GRPC_STATS_INC_HTTP2_OP_BATCHES();
|
1398
|
-
|
1399
1256
|
s->context = op->payload->context;
|
1400
1257
|
s->traced = op->is_traced;
|
1401
1258
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
@@ -1423,7 +1280,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1423
1280
|
}
|
1424
1281
|
|
1425
1282
|
if (op->cancel_stream) {
|
1426
|
-
GRPC_STATS_INC_HTTP2_OP_CANCEL();
|
1427
1283
|
grpc_chttp2_cancel_stream(t, s, op_payload->cancel_stream.cancel_error);
|
1428
1284
|
}
|
1429
1285
|
|
@@ -1431,7 +1287,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1431
1287
|
if (t->is_client && t->channelz_socket != nullptr) {
|
1432
1288
|
t->channelz_socket->RecordStreamStartedFromLocal();
|
1433
1289
|
}
|
1434
|
-
GRPC_STATS_INC_HTTP2_OP_SEND_INITIAL_METADATA();
|
1435
1290
|
GPR_ASSERT(s->send_initial_metadata_finished == nullptr);
|
1436
1291
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1437
1292
|
|
@@ -1449,7 +1304,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1449
1304
|
}
|
1450
1305
|
if (!s->write_closed) {
|
1451
1306
|
if (t->is_client) {
|
1452
|
-
if (t->closed_with_error
|
1307
|
+
if (t->closed_with_error.ok()) {
|
1453
1308
|
GPR_ASSERT(s->id == 0);
|
1454
1309
|
grpc_chttp2_list_add_waiting_for_concurrency(t, s);
|
1455
1310
|
maybe_start_some_streams(t);
|
@@ -1460,16 +1315,16 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1460
1315
|
grpc_chttp2_cancel_stream(
|
1461
1316
|
t, s,
|
1462
1317
|
grpc_error_set_int(
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1318
|
+
GRPC_ERROR_CREATE_REFERENCING("Transport closed",
|
1319
|
+
&t->closed_with_error, 1),
|
1320
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
1321
|
+
GRPC_STATUS_UNAVAILABLE));
|
1466
1322
|
}
|
1467
1323
|
} else {
|
1468
1324
|
GPR_ASSERT(s->id != 0);
|
1469
1325
|
grpc_chttp2_mark_stream_writable(t, s);
|
1470
1326
|
if (!(op->send_message &&
|
1471
|
-
(op->payload->send_message.
|
1472
|
-
GRPC_WRITE_BUFFER_HINT))) {
|
1327
|
+
(op->payload->send_message.flags & GRPC_WRITE_BUFFER_HINT))) {
|
1473
1328
|
grpc_chttp2_initiate_write(
|
1474
1329
|
t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
|
1475
1330
|
}
|
@@ -1478,7 +1333,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1478
1333
|
s->send_initial_metadata = nullptr;
|
1479
1334
|
grpc_chttp2_complete_closure_step(
|
1480
1335
|
t, s, &s->send_initial_metadata_finished,
|
1481
|
-
|
1336
|
+
GRPC_ERROR_CREATE_REFERENCING(
|
1482
1337
|
"Attempt to send initial metadata after stream was closed",
|
1483
1338
|
&s->write_closed_error, 1),
|
1484
1339
|
"send_initial_metadata_finished");
|
@@ -1490,35 +1345,30 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1490
1345
|
}
|
1491
1346
|
|
1492
1347
|
if (op->send_message) {
|
1493
|
-
GRPC_STATS_INC_HTTP2_OP_SEND_MESSAGE();
|
1494
1348
|
t->num_messages_in_next_write++;
|
1495
|
-
|
1496
|
-
op->payload->send_message.send_message->
|
1349
|
+
grpc_core::global_stats().IncrementHttp2SendMessageSize(
|
1350
|
+
op->payload->send_message.send_message->Length());
|
1497
1351
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1498
|
-
s->
|
1352
|
+
s->send_message_finished = add_closure_barrier(op->on_complete);
|
1353
|
+
const uint32_t flags = op_payload->send_message.flags;
|
1499
1354
|
if (s->write_closed) {
|
1500
1355
|
op->payload->send_message.stream_write_closed = true;
|
1501
1356
|
// We should NOT return an error here, so as to avoid a cancel OP being
|
1502
1357
|
// started. The surface layer will notice that the stream has been closed
|
1503
1358
|
// for writes and fail the send message op.
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
"fetching_send_message_finished");
|
1359
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
|
1360
|
+
absl::OkStatus(),
|
1361
|
+
"fetching_send_message_finished");
|
1508
1362
|
} else {
|
1509
|
-
GPR_ASSERT(s->fetching_send_message == nullptr);
|
1510
1363
|
uint8_t* frame_hdr = grpc_slice_buffer_tiny_add(
|
1511
1364
|
&s->flow_controlled_buffer, GRPC_HEADER_SIZE_IN_BYTES);
|
1512
|
-
uint32_t flags = op_payload->send_message.send_message->flags();
|
1513
1365
|
frame_hdr[0] = (flags & GRPC_WRITE_INTERNAL_COMPRESS) != 0;
|
1514
|
-
size_t len = op_payload->send_message.send_message->
|
1366
|
+
size_t len = op_payload->send_message.send_message->Length();
|
1515
1367
|
frame_hdr[1] = static_cast<uint8_t>(len >> 24);
|
1516
1368
|
frame_hdr[2] = static_cast<uint8_t>(len >> 16);
|
1517
1369
|
frame_hdr[3] = static_cast<uint8_t>(len >> 8);
|
1518
1370
|
frame_hdr[4] = static_cast<uint8_t>(len);
|
1519
|
-
|
1520
|
-
std::move(op_payload->send_message.send_message);
|
1521
|
-
s->fetched_send_message_length = 0;
|
1371
|
+
|
1522
1372
|
s->next_message_end_offset =
|
1523
1373
|
s->flow_controlled_bytes_written +
|
1524
1374
|
static_cast<int64_t>(s->flow_controlled_buffer.length) +
|
@@ -1529,13 +1379,48 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1529
1379
|
} else {
|
1530
1380
|
s->write_buffering = false;
|
1531
1381
|
}
|
1532
|
-
|
1533
|
-
|
1382
|
+
|
1383
|
+
grpc_slice* const slices =
|
1384
|
+
op_payload->send_message.send_message->c_slice_buffer()->slices;
|
1385
|
+
grpc_slice* const end =
|
1386
|
+
slices + op_payload->send_message.send_message->Count();
|
1387
|
+
for (grpc_slice* slice = slices; slice != end; slice++) {
|
1388
|
+
grpc_slice_buffer_add(&s->flow_controlled_buffer,
|
1389
|
+
grpc_core::CSliceRef(*slice));
|
1390
|
+
}
|
1391
|
+
|
1392
|
+
int64_t notify_offset = s->next_message_end_offset;
|
1393
|
+
if (notify_offset <= s->flow_controlled_bytes_written) {
|
1394
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished,
|
1395
|
+
absl::OkStatus(),
|
1396
|
+
"fetching_send_message_finished");
|
1397
|
+
} else {
|
1398
|
+
grpc_chttp2_write_cb* cb = t->write_cb_pool;
|
1399
|
+
if (cb == nullptr) {
|
1400
|
+
cb = static_cast<grpc_chttp2_write_cb*>(gpr_malloc(sizeof(*cb)));
|
1401
|
+
} else {
|
1402
|
+
t->write_cb_pool = cb->next;
|
1403
|
+
}
|
1404
|
+
cb->call_at_byte = notify_offset;
|
1405
|
+
cb->closure = s->send_message_finished;
|
1406
|
+
s->send_message_finished = nullptr;
|
1407
|
+
grpc_chttp2_write_cb** list = flags & GRPC_WRITE_THROUGH
|
1408
|
+
? &s->on_write_finished_cbs
|
1409
|
+
: &s->on_flow_controlled_cbs;
|
1410
|
+
cb->next = *list;
|
1411
|
+
*list = cb;
|
1412
|
+
}
|
1413
|
+
|
1414
|
+
if (s->id != 0 &&
|
1415
|
+
(!s->write_buffering ||
|
1416
|
+
s->flow_controlled_buffer.length > t->write_buffer_size)) {
|
1417
|
+
grpc_chttp2_mark_stream_writable(t, s);
|
1418
|
+
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE);
|
1419
|
+
}
|
1534
1420
|
}
|
1535
1421
|
}
|
1536
1422
|
|
1537
1423
|
if (op->send_trailing_metadata) {
|
1538
|
-
GRPC_STATS_INC_HTTP2_OP_SEND_TRAILING_METADATA();
|
1539
1424
|
GPR_ASSERT(s->send_trailing_metadata_finished == nullptr);
|
1540
1425
|
on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
|
1541
1426
|
s->send_trailing_metadata_finished = add_closure_barrier(on_complete);
|
@@ -1552,10 +1437,9 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1552
1437
|
grpc_chttp2_complete_closure_step(
|
1553
1438
|
t, s, &s->send_trailing_metadata_finished,
|
1554
1439
|
op->payload->send_trailing_metadata.send_trailing_metadata->empty()
|
1555
|
-
?
|
1556
|
-
:
|
1557
|
-
|
1558
|
-
"stream was closed"),
|
1440
|
+
? absl::OkStatus()
|
1441
|
+
: GRPC_ERROR_CREATE("Attempt to send trailing metadata after "
|
1442
|
+
"stream was closed"),
|
1559
1443
|
"send_trailing_metadata_finished");
|
1560
1444
|
} else if (s->id != 0) {
|
1561
1445
|
// TODO(ctiller): check if there's flow control for any outstanding
|
@@ -1567,7 +1451,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1567
1451
|
}
|
1568
1452
|
|
1569
1453
|
if (op->recv_initial_metadata) {
|
1570
|
-
GRPC_STATS_INC_HTTP2_OP_RECV_INITIAL_METADATA();
|
1571
1454
|
GPR_ASSERT(s->recv_initial_metadata_ready == nullptr);
|
1572
1455
|
s->recv_initial_metadata_ready =
|
1573
1456
|
op_payload->recv_initial_metadata.recv_initial_metadata_ready;
|
@@ -1575,6 +1458,9 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1575
1458
|
op_payload->recv_initial_metadata.recv_initial_metadata;
|
1576
1459
|
s->trailing_metadata_available =
|
1577
1460
|
op_payload->recv_initial_metadata.trailing_metadata_available;
|
1461
|
+
if (s->parsed_trailers_only && s->trailing_metadata_available != nullptr) {
|
1462
|
+
*s->trailing_metadata_available = true;
|
1463
|
+
}
|
1578
1464
|
if (op_payload->recv_initial_metadata.peer_string != nullptr) {
|
1579
1465
|
gpr_atm_rel_store(op_payload->recv_initial_metadata.peer_string,
|
1580
1466
|
(gpr_atm)t->peer_string.c_str());
|
@@ -1583,33 +1469,17 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1583
1469
|
}
|
1584
1470
|
|
1585
1471
|
if (op->recv_message) {
|
1586
|
-
GRPC_STATS_INC_HTTP2_OP_RECV_MESSAGE();
|
1587
|
-
size_t before = 0;
|
1588
1472
|
GPR_ASSERT(s->recv_message_ready == nullptr);
|
1589
|
-
GPR_ASSERT(!s->pending_byte_stream);
|
1590
1473
|
s->recv_message_ready = op_payload->recv_message.recv_message_ready;
|
1591
1474
|
s->recv_message = op_payload->recv_message.recv_message;
|
1475
|
+
s->recv_message->emplace();
|
1476
|
+
s->recv_message_flags = op_payload->recv_message.flags;
|
1592
1477
|
s->call_failed_before_recv_message =
|
1593
1478
|
op_payload->recv_message.call_failed_before_recv_message;
|
1594
|
-
|
1595
|
-
if (!s->read_closed) {
|
1596
|
-
before = s->frame_storage.length +
|
1597
|
-
s->unprocessed_incoming_frames_buffer.length;
|
1598
|
-
}
|
1599
|
-
}
|
1600
|
-
grpc_chttp2_maybe_complete_recv_message(t, s);
|
1601
|
-
if (s->id != 0) {
|
1602
|
-
if (!s->read_closed && s->frame_storage.length == 0) {
|
1603
|
-
size_t after = s->unprocessed_incoming_frames_buffer_cached_length;
|
1604
|
-
s->flow_control->IncomingByteStreamUpdate(GRPC_HEADER_SIZE_IN_BYTES,
|
1605
|
-
before - after);
|
1606
|
-
grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
|
1607
|
-
}
|
1608
|
-
}
|
1479
|
+
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
1609
1480
|
}
|
1610
1481
|
|
1611
1482
|
if (op->recv_trailing_metadata) {
|
1612
|
-
GRPC_STATS_INC_HTTP2_OP_RECV_TRAILING_METADATA();
|
1613
1483
|
GPR_ASSERT(s->collecting_stats == nullptr);
|
1614
1484
|
s->collecting_stats = op_payload->recv_trailing_metadata.collect_stats;
|
1615
1485
|
GPR_ASSERT(s->recv_trailing_metadata_finished == nullptr);
|
@@ -1622,7 +1492,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1622
1492
|
}
|
1623
1493
|
|
1624
1494
|
if (on_complete != nullptr) {
|
1625
|
-
grpc_chttp2_complete_closure_step(t, s, &on_complete,
|
1495
|
+
grpc_chttp2_complete_closure_step(t, s, &on_complete, absl::OkStatus(),
|
1626
1496
|
"op->on_complete");
|
1627
1497
|
}
|
1628
1498
|
|
@@ -1631,7 +1501,6 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1631
1501
|
|
1632
1502
|
static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
|
1633
1503
|
grpc_transport_stream_op_batch* op) {
|
1634
|
-
GPR_TIMER_SCOPE("perform_stream_op", 0);
|
1635
1504
|
grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
|
1636
1505
|
grpc_chttp2_stream* s = reinterpret_cast<grpc_chttp2_stream*>(gs);
|
1637
1506
|
|
@@ -1657,49 +1526,46 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
|
|
1657
1526
|
op->handler_private.extra_arg = gs;
|
1658
1527
|
t->combiner->Run(GRPC_CLOSURE_INIT(&op->handler_private.closure,
|
1659
1528
|
perform_stream_op_locked, op, nullptr),
|
1660
|
-
|
1529
|
+
absl::OkStatus());
|
1661
1530
|
}
|
1662
1531
|
|
1663
1532
|
static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
|
1664
1533
|
// callback remaining pings: they're not allowed to call into the transport,
|
1665
1534
|
// and maybe they hold resources that need to be freed
|
1666
1535
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
1667
|
-
GPR_ASSERT(error
|
1536
|
+
GPR_ASSERT(!error.ok());
|
1668
1537
|
for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
|
1669
|
-
grpc_closure_list_fail_all(&pq->lists[j],
|
1538
|
+
grpc_closure_list_fail_all(&pq->lists[j], error);
|
1670
1539
|
grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &pq->lists[j]);
|
1671
1540
|
}
|
1672
|
-
GRPC_ERROR_UNREF(error);
|
1673
1541
|
}
|
1674
1542
|
|
1675
1543
|
static void send_ping_locked(grpc_chttp2_transport* t,
|
1676
1544
|
grpc_closure* on_initiate, grpc_closure* on_ack) {
|
1677
|
-
if (t->closed_with_error
|
1678
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate,
|
1679
|
-
|
1680
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack,
|
1681
|
-
GRPC_ERROR_REF(t->closed_with_error));
|
1545
|
+
if (!t->closed_with_error.ok()) {
|
1546
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_initiate, t->closed_with_error);
|
1547
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_ack, t->closed_with_error);
|
1682
1548
|
return;
|
1683
1549
|
}
|
1684
1550
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
1685
1551
|
grpc_closure_list_append(&pq->lists[GRPC_CHTTP2_PCL_INITIATE], on_initiate,
|
1686
|
-
|
1552
|
+
absl::OkStatus());
|
1687
1553
|
grpc_closure_list_append(&pq->lists[GRPC_CHTTP2_PCL_NEXT], on_ack,
|
1688
|
-
|
1554
|
+
absl::OkStatus());
|
1689
1555
|
}
|
1690
1556
|
|
1691
1557
|
// Specialized form of send_ping_locked for keepalive ping. If there is already
|
1692
1558
|
// a ping in progress, the keepalive ping would piggyback onto that ping,
|
1693
1559
|
// instead of waiting for that ping to complete and then starting a new ping.
|
1694
1560
|
static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
|
1695
|
-
if (t->closed_with_error
|
1561
|
+
if (!t->closed_with_error.ok()) {
|
1696
1562
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
1697
1563
|
start_keepalive_ping_locked, t, nullptr),
|
1698
|
-
|
1564
|
+
t->closed_with_error);
|
1699
1565
|
t->combiner->Run(
|
1700
1566
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
1701
1567
|
finish_keepalive_ping_locked, t, nullptr),
|
1702
|
-
|
1568
|
+
t->closed_with_error);
|
1703
1569
|
return;
|
1704
1570
|
}
|
1705
1571
|
grpc_chttp2_ping_queue* pq = &t->ping_queue;
|
@@ -1707,39 +1573,39 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
|
|
1707
1573
|
// There is a ping in flight. Add yourself to the inflight closure list.
|
1708
1574
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
1709
1575
|
start_keepalive_ping_locked, t, nullptr),
|
1710
|
-
|
1576
|
+
t->closed_with_error);
|
1711
1577
|
grpc_closure_list_append(
|
1712
1578
|
&pq->lists[GRPC_CHTTP2_PCL_INFLIGHT],
|
1713
1579
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
1714
1580
|
finish_keepalive_ping, t, grpc_schedule_on_exec_ctx),
|
1715
|
-
|
1581
|
+
absl::OkStatus());
|
1716
1582
|
return;
|
1717
1583
|
}
|
1718
1584
|
grpc_closure_list_append(
|
1719
1585
|
&pq->lists[GRPC_CHTTP2_PCL_INITIATE],
|
1720
1586
|
GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked, start_keepalive_ping,
|
1721
1587
|
t, grpc_schedule_on_exec_ctx),
|
1722
|
-
|
1588
|
+
absl::OkStatus());
|
1723
1589
|
grpc_closure_list_append(
|
1724
1590
|
&pq->lists[GRPC_CHTTP2_PCL_NEXT],
|
1725
1591
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked, finish_keepalive_ping,
|
1726
1592
|
t, grpc_schedule_on_exec_ctx),
|
1727
|
-
|
1593
|
+
absl::OkStatus());
|
1728
1594
|
}
|
1729
1595
|
|
1730
|
-
void grpc_chttp2_retry_initiate_ping(
|
1731
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1596
|
+
void grpc_chttp2_retry_initiate_ping(grpc_chttp2_transport* t) {
|
1732
1597
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->retry_initiate_ping_locked,
|
1733
1598
|
retry_initiate_ping_locked, t, nullptr),
|
1734
|
-
|
1599
|
+
absl::OkStatus());
|
1735
1600
|
}
|
1736
1601
|
|
1737
|
-
static void retry_initiate_ping_locked(void* tp,
|
1602
|
+
static void retry_initiate_ping_locked(void* tp,
|
1603
|
+
GRPC_UNUSED grpc_error_handle error) {
|
1604
|
+
GPR_DEBUG_ASSERT(error.ok());
|
1738
1605
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
1739
|
-
t->ping_state.
|
1740
|
-
|
1741
|
-
|
1742
|
-
}
|
1606
|
+
GPR_ASSERT(t->ping_state.delayed_ping_timer_handle.has_value());
|
1607
|
+
t->ping_state.delayed_ping_timer_handle.reset();
|
1608
|
+
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING);
|
1743
1609
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "retry_initiate_ping_locked");
|
1744
1610
|
}
|
1745
1611
|
|
@@ -1757,34 +1623,144 @@ void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
|
|
1757
1623
|
}
|
1758
1624
|
}
|
1759
1625
|
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1764
|
-
|
1626
|
+
namespace {
|
1627
|
+
|
1628
|
+
// Fire and forget (deletes itself on completion). Does a graceful shutdown by
|
1629
|
+
// sending a GOAWAY frame with the last stream id set to 2^31-1, sending a ping
|
1630
|
+
// and waiting for an ack (effective waiting for an RTT) and then sending a
|
1631
|
+
// final GOAWAY freame with an updated last stream identifier. This helps ensure
|
1632
|
+
// that a connection can be cleanly shut down without losing requests.
|
1633
|
+
// In the event, that the client does not respond to the ping for some reason,
|
1634
|
+
// we add a 20 second deadline, after which we send the second goaway.
|
1635
|
+
class GracefulGoaway : public grpc_core::RefCounted<GracefulGoaway> {
|
1636
|
+
public:
|
1637
|
+
static void Start(grpc_chttp2_transport* t) { new GracefulGoaway(t); }
|
1638
|
+
|
1639
|
+
~GracefulGoaway() override {
|
1640
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t_, "graceful goaway");
|
1641
|
+
}
|
1642
|
+
|
1643
|
+
private:
|
1644
|
+
explicit GracefulGoaway(grpc_chttp2_transport* t) : t_(t) {
|
1645
|
+
t->sent_goaway_state = GRPC_CHTTP2_GRACEFUL_GOAWAY;
|
1646
|
+
GRPC_CHTTP2_REF_TRANSPORT(t_, "graceful goaway");
|
1647
|
+
grpc_chttp2_goaway_append((1u << 31) - 1, 0, grpc_empty_slice(), &t->qbuf);
|
1648
|
+
send_ping_locked(
|
1649
|
+
t, nullptr, GRPC_CLOSURE_INIT(&on_ping_ack_, OnPingAck, this, nullptr));
|
1650
|
+
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
|
1651
|
+
Ref().release(); // Ref for the timer
|
1652
|
+
grpc_timer_init(
|
1653
|
+
&timer_, grpc_core::Timestamp::Now() + grpc_core::Duration::Seconds(20),
|
1654
|
+
GRPC_CLOSURE_INIT(&on_timer_, OnTimer, this, nullptr));
|
1655
|
+
}
|
1656
|
+
|
1657
|
+
void MaybeSendFinalGoawayLocked() {
|
1658
|
+
if (t_->sent_goaway_state != GRPC_CHTTP2_GRACEFUL_GOAWAY) {
|
1659
|
+
// We already sent the final GOAWAY.
|
1660
|
+
return;
|
1661
|
+
}
|
1662
|
+
if (t_->destroying || !t_->closed_with_error.ok()) {
|
1663
|
+
GRPC_CHTTP2_IF_TRACING(gpr_log(
|
1664
|
+
GPR_INFO,
|
1665
|
+
"transport:%p %s peer:%s Transport already shutting down. "
|
1666
|
+
"Graceful GOAWAY abandoned.",
|
1667
|
+
t_, t_->is_client ? "CLIENT" : "SERVER", t_->peer_string.c_str()));
|
1668
|
+
return;
|
1669
|
+
}
|
1670
|
+
// Ping completed. Send final goaway.
|
1671
|
+
GRPC_CHTTP2_IF_TRACING(
|
1672
|
+
gpr_log(GPR_INFO,
|
1673
|
+
"transport:%p %s peer:%s Graceful shutdown: Ping received. "
|
1674
|
+
"Sending final GOAWAY with stream_id:%d",
|
1675
|
+
t_, t_->is_client ? "CLIENT" : "SERVER",
|
1676
|
+
t_->peer_string.c_str(), t_->last_new_stream_id));
|
1677
|
+
t_->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED;
|
1678
|
+
grpc_chttp2_goaway_append(t_->last_new_stream_id, 0, grpc_empty_slice(),
|
1679
|
+
&t_->qbuf);
|
1680
|
+
grpc_chttp2_initiate_write(t_, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
|
1681
|
+
}
|
1682
|
+
|
1683
|
+
static void OnPingAck(void* arg, grpc_error_handle /* error */) {
|
1684
|
+
auto* self = static_cast<GracefulGoaway*>(arg);
|
1685
|
+
self->t_->combiner->Run(
|
1686
|
+
GRPC_CLOSURE_INIT(&self->on_ping_ack_, OnPingAckLocked, self, nullptr),
|
1687
|
+
absl::OkStatus());
|
1688
|
+
}
|
1689
|
+
|
1690
|
+
static void OnPingAckLocked(void* arg, grpc_error_handle /* error */) {
|
1691
|
+
auto* self = static_cast<GracefulGoaway*>(arg);
|
1692
|
+
grpc_timer_cancel(&self->timer_);
|
1693
|
+
self->MaybeSendFinalGoawayLocked();
|
1694
|
+
self->Unref();
|
1695
|
+
}
|
1696
|
+
|
1697
|
+
static void OnTimer(void* arg, grpc_error_handle error) {
|
1698
|
+
auto* self = static_cast<GracefulGoaway*>(arg);
|
1699
|
+
if (!error.ok()) {
|
1700
|
+
self->Unref();
|
1701
|
+
return;
|
1702
|
+
}
|
1703
|
+
self->t_->combiner->Run(
|
1704
|
+
GRPC_CLOSURE_INIT(&self->on_timer_, OnTimerLocked, self, nullptr),
|
1705
|
+
absl::OkStatus());
|
1706
|
+
}
|
1707
|
+
|
1708
|
+
static void OnTimerLocked(void* arg, grpc_error_handle /* error */) {
|
1709
|
+
auto* self = static_cast<GracefulGoaway*>(arg);
|
1710
|
+
self->MaybeSendFinalGoawayLocked();
|
1711
|
+
self->Unref();
|
1712
|
+
}
|
1713
|
+
|
1714
|
+
grpc_chttp2_transport* t_;
|
1715
|
+
grpc_closure on_ping_ack_;
|
1716
|
+
grpc_timer timer_;
|
1717
|
+
grpc_closure on_timer_;
|
1718
|
+
};
|
1719
|
+
|
1720
|
+
} // namespace
|
1721
|
+
|
1722
|
+
static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error,
|
1723
|
+
bool immediate_disconnect_hint) {
|
1765
1724
|
grpc_http2_error_code http_error;
|
1766
1725
|
std::string message;
|
1767
1726
|
grpc_error_get_status(error, grpc_core::Timestamp::InfFuture(), nullptr,
|
1768
1727
|
&message, &http_error, nullptr);
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1728
|
+
if (!t->is_client && http_error == GRPC_HTTP2_NO_ERROR &&
|
1729
|
+
!immediate_disconnect_hint) {
|
1730
|
+
// Do a graceful shutdown.
|
1731
|
+
if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND) {
|
1732
|
+
GracefulGoaway::Start(t);
|
1733
|
+
} else {
|
1734
|
+
// Graceful GOAWAY is already in progress.
|
1735
|
+
}
|
1736
|
+
} else if (t->sent_goaway_state == GRPC_CHTTP2_NO_GOAWAY_SEND ||
|
1737
|
+
t->sent_goaway_state == GRPC_CHTTP2_GRACEFUL_GOAWAY) {
|
1738
|
+
// We want to log this irrespective of whether http tracing is enabled
|
1739
|
+
gpr_log(GPR_DEBUG, "%s: Sending goaway err=%s", t->peer_string.c_str(),
|
1740
|
+
grpc_core::StatusToString(error).c_str());
|
1741
|
+
t->sent_goaway_state = GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED;
|
1742
|
+
grpc_chttp2_goaway_append(
|
1743
|
+
t->last_new_stream_id, static_cast<uint32_t>(http_error),
|
1744
|
+
grpc_slice_from_cpp_string(std::move(message)), &t->qbuf);
|
1745
|
+
} else {
|
1746
|
+
// Final GOAWAY has already been sent.
|
1747
|
+
}
|
1772
1748
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
|
1773
|
-
GRPC_ERROR_UNREF(error);
|
1774
1749
|
}
|
1775
1750
|
|
1776
1751
|
void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
|
1777
1752
|
if (++t->ping_recv_state.ping_strikes > t->ping_policy.max_ping_strikes &&
|
1778
1753
|
t->ping_policy.max_ping_strikes != 0) {
|
1779
1754
|
send_goaway(t,
|
1780
|
-
grpc_error_set_int(
|
1781
|
-
|
1782
|
-
|
1755
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("too_many_pings"),
|
1756
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
1757
|
+
GRPC_HTTP2_ENHANCE_YOUR_CALM),
|
1758
|
+
/*immediate_disconnect_hint=*/true);
|
1783
1759
|
// The transport will be closed after the write is done
|
1784
1760
|
close_transport_locked(
|
1785
|
-
t, grpc_error_set_int(
|
1786
|
-
|
1787
|
-
|
1761
|
+
t, grpc_error_set_int(GRPC_ERROR_CREATE("Too many pings"),
|
1762
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
1763
|
+
GRPC_STATUS_UNAVAILABLE));
|
1788
1764
|
}
|
1789
1765
|
}
|
1790
1766
|
|
@@ -1803,8 +1779,8 @@ static void perform_transport_op_locked(void* stream_op,
|
|
1803
1779
|
grpc_chttp2_transport* t =
|
1804
1780
|
static_cast<grpc_chttp2_transport*>(op->handler_private.extra_arg);
|
1805
1781
|
|
1806
|
-
if (op->goaway_error
|
1807
|
-
send_goaway(t, op->goaway_error);
|
1782
|
+
if (!op->goaway_error.ok()) {
|
1783
|
+
send_goaway(t, op->goaway_error, /*immediate_disconnect_hint=*/false);
|
1808
1784
|
}
|
1809
1785
|
|
1810
1786
|
if (op->set_accept_stream) {
|
@@ -1833,11 +1809,13 @@ static void perform_transport_op_locked(void* stream_op,
|
|
1833
1809
|
t->state_tracker.RemoveWatcher(op->stop_connectivity_watch);
|
1834
1810
|
}
|
1835
1811
|
|
1836
|
-
if (op->disconnect_with_error
|
1812
|
+
if (!op->disconnect_with_error.ok()) {
|
1813
|
+
send_goaway(t, op->disconnect_with_error,
|
1814
|
+
/*immediate_disconnect_hint=*/true);
|
1837
1815
|
close_transport_locked(t, op->disconnect_with_error);
|
1838
1816
|
}
|
1839
1817
|
|
1840
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, op->on_consumed,
|
1818
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
|
1841
1819
|
|
1842
1820
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "transport_op");
|
1843
1821
|
}
|
@@ -1852,25 +1830,22 @@ static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
|
|
1852
1830
|
GRPC_CHTTP2_REF_TRANSPORT(t, "transport_op");
|
1853
1831
|
t->combiner->Run(GRPC_CLOSURE_INIT(&op->handler_private.closure,
|
1854
1832
|
perform_transport_op_locked, op, nullptr),
|
1855
|
-
|
1833
|
+
absl::OkStatus());
|
1856
1834
|
}
|
1857
1835
|
|
1858
1836
|
//
|
1859
1837
|
// INPUT PROCESSING - GENERAL
|
1860
1838
|
//
|
1861
1839
|
|
1862
|
-
void grpc_chttp2_maybe_complete_recv_initial_metadata(
|
1863
|
-
|
1840
|
+
void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_chttp2_transport* t,
|
1841
|
+
grpc_chttp2_stream* s) {
|
1864
1842
|
if (s->recv_initial_metadata_ready != nullptr &&
|
1865
1843
|
s->published_metadata[0] != GRPC_METADATA_NOT_PUBLISHED) {
|
1866
1844
|
if (s->seen_error) {
|
1867
|
-
|
1868
|
-
if (!s->pending_byte_stream) {
|
1869
|
-
grpc_slice_buffer_reset_and_unref_internal(
|
1870
|
-
&s->unprocessed_incoming_frames_buffer);
|
1871
|
-
}
|
1845
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1872
1846
|
}
|
1873
1847
|
*s->recv_initial_metadata = std::move(s->initial_metadata_buffer);
|
1848
|
+
s->recv_initial_metadata->Set(grpc_core::PeerString(), t->peer_string);
|
1874
1849
|
// If we didn't receive initial metadata from the wire and instead faked a
|
1875
1850
|
// status (due to stream cancellations for example), let upper layers know
|
1876
1851
|
// that trailing metadata is immediately available.
|
@@ -1884,88 +1859,108 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(
|
|
1884
1859
|
}
|
1885
1860
|
}
|
1886
1861
|
|
1887
|
-
void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport*
|
1862
|
+
void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
|
1888
1863
|
grpc_chttp2_stream* s) {
|
1889
|
-
|
1890
|
-
|
1891
|
-
|
1892
|
-
|
1893
|
-
|
1894
|
-
|
1895
|
-
|
1896
|
-
|
1897
|
-
|
1864
|
+
if (s->recv_message_ready == nullptr) return;
|
1865
|
+
|
1866
|
+
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext upd(
|
1867
|
+
&s->flow_control);
|
1868
|
+
grpc_error_handle error;
|
1869
|
+
|
1870
|
+
// Lambda is immediately invoked as a big scoped section that can be
|
1871
|
+
// exited out of at any point by returning.
|
1872
|
+
[&]() {
|
1873
|
+
if (grpc_http_trace.enabled()) {
|
1874
|
+
gpr_log(GPR_DEBUG,
|
1875
|
+
"maybe_complete_recv_message %p final_metadata_requested=%d "
|
1876
|
+
"seen_error=%d",
|
1877
|
+
s, s->final_metadata_requested, s->seen_error);
|
1898
1878
|
}
|
1899
|
-
if (
|
1900
|
-
|
1901
|
-
|
1902
|
-
|
1903
|
-
|
1904
|
-
|
1905
|
-
|
1906
|
-
|
1907
|
-
|
1908
|
-
|
1909
|
-
|
1910
|
-
|
1911
|
-
|
1912
|
-
|
1913
|
-
|
1914
|
-
|
1915
|
-
|
1916
|
-
|
1879
|
+
if (s->final_metadata_requested && s->seen_error) {
|
1880
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1881
|
+
s->recv_message->reset();
|
1882
|
+
} else {
|
1883
|
+
if (s->frame_storage.length != 0) {
|
1884
|
+
while (true) {
|
1885
|
+
GPR_ASSERT(s->frame_storage.length > 0);
|
1886
|
+
int64_t min_progress_size;
|
1887
|
+
auto r = grpc_deframe_unprocessed_incoming_frames(
|
1888
|
+
s, &min_progress_size, &**s->recv_message, s->recv_message_flags);
|
1889
|
+
if (grpc_http_trace.enabled()) {
|
1890
|
+
gpr_log(GPR_DEBUG, "Deframe data frame: %s",
|
1891
|
+
grpc_core::PollToString(r, [](absl::Status r) {
|
1892
|
+
return r.ToString();
|
1893
|
+
}).c_str());
|
1894
|
+
}
|
1895
|
+
if (r.pending()) {
|
1896
|
+
if (s->read_closed) {
|
1897
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1898
|
+
s->recv_message->reset();
|
1899
|
+
break;
|
1900
|
+
} else {
|
1901
|
+
upd.SetMinProgressSize(min_progress_size);
|
1902
|
+
return; // Out of lambda to enclosing function
|
1903
|
+
}
|
1904
|
+
} else {
|
1905
|
+
error = std::move(r.value());
|
1906
|
+
if (!error.ok()) {
|
1907
|
+
s->seen_error = true;
|
1908
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1909
|
+
break;
|
1910
|
+
} else {
|
1911
|
+
if (t->channelz_socket != nullptr) {
|
1912
|
+
t->channelz_socket->RecordMessageReceived();
|
1913
|
+
}
|
1914
|
+
break;
|
1915
|
+
}
|
1916
|
+
}
|
1917
1917
|
}
|
1918
|
+
} else if (s->read_closed) {
|
1919
|
+
s->recv_message->reset();
|
1920
|
+
} else {
|
1921
|
+
upd.SetMinProgressSize(GRPC_HEADER_SIZE_IN_BYTES);
|
1922
|
+
return; // Out of lambda to enclosing function
|
1918
1923
|
}
|
1919
1924
|
}
|
1920
1925
|
// save the length of the buffer before handing control back to application
|
1921
1926
|
// threads. Needed to support correct flow control bookkeeping
|
1922
|
-
s->
|
1923
|
-
s->unprocessed_incoming_frames_buffer.length;
|
1924
|
-
if (error == GRPC_ERROR_NONE && *s->recv_message != nullptr) {
|
1927
|
+
if (error.ok() && s->recv_message->has_value()) {
|
1925
1928
|
null_then_sched_closure(&s->recv_message_ready);
|
1926
1929
|
} else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
|
1927
|
-
*s->recv_message = nullptr;
|
1928
1930
|
if (s->call_failed_before_recv_message != nullptr) {
|
1929
1931
|
*s->call_failed_before_recv_message =
|
1930
1932
|
(s->published_metadata[1] != GRPC_METADATA_PUBLISHED_AT_CLOSE);
|
1931
1933
|
}
|
1932
1934
|
null_then_sched_closure(&s->recv_message_ready);
|
1933
1935
|
}
|
1934
|
-
|
1935
|
-
|
1936
|
+
}();
|
1937
|
+
|
1938
|
+
upd.SetPendingSize(s->frame_storage.length);
|
1939
|
+
grpc_chttp2_act_on_flowctl_action(upd.MakeAction(), t, s);
|
1936
1940
|
}
|
1937
1941
|
|
1938
1942
|
void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
|
1939
1943
|
grpc_chttp2_stream* s) {
|
1940
1944
|
grpc_chttp2_maybe_complete_recv_message(t, s);
|
1945
|
+
if (grpc_http_trace.enabled()) {
|
1946
|
+
gpr_log(GPR_DEBUG,
|
1947
|
+
"maybe_complete_recv_trailing_metadata cli=%d s=%p closure=%p "
|
1948
|
+
"read_closed=%d "
|
1949
|
+
"write_closed=%d %" PRIdPTR,
|
1950
|
+
t->is_client, s, s->recv_trailing_metadata_finished, s->read_closed,
|
1951
|
+
s->write_closed, s->frame_storage.length);
|
1952
|
+
}
|
1941
1953
|
if (s->recv_trailing_metadata_finished != nullptr && s->read_closed &&
|
1942
1954
|
s->write_closed) {
|
1943
1955
|
if (s->seen_error || !t->is_client) {
|
1944
|
-
|
1945
|
-
if (!s->pending_byte_stream) {
|
1946
|
-
grpc_slice_buffer_reset_and_unref_internal(
|
1947
|
-
&s->unprocessed_incoming_frames_buffer);
|
1948
|
-
}
|
1949
|
-
}
|
1950
|
-
bool pending_data = s->pending_byte_stream ||
|
1951
|
-
s->unprocessed_incoming_frames_buffer.length > 0;
|
1952
|
-
if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
|
1953
|
-
!s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
|
1954
|
-
// Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
|
1955
|
-
// maybe decompress the next 5 bytes in the stream.
|
1956
|
-
grpc_slice_buffer_move_first(
|
1957
|
-
&s->frame_storage,
|
1958
|
-
std::min(s->frame_storage.length, size_t(GRPC_HEADER_SIZE_IN_BYTES)),
|
1959
|
-
&s->unprocessed_incoming_frames_buffer);
|
1960
|
-
if (s->unprocessed_incoming_frames_buffer.length > 0) {
|
1961
|
-
pending_data = true;
|
1962
|
-
}
|
1956
|
+
grpc_slice_buffer_reset_and_unref(&s->frame_storage);
|
1963
1957
|
}
|
1964
|
-
if (s->read_closed && s->frame_storage.length == 0 &&
|
1958
|
+
if (s->read_closed && s->frame_storage.length == 0 &&
|
1965
1959
|
s->recv_trailing_metadata_finished != nullptr) {
|
1966
1960
|
grpc_transport_move_stats(&s->stats, s->collecting_stats);
|
1967
1961
|
s->collecting_stats = nullptr;
|
1968
1962
|
*s->recv_trailing_metadata = std::move(s->trailing_metadata_buffer);
|
1963
|
+
s->recv_trailing_metadata->Set(grpc_core::PeerString(), t->peer_string);
|
1969
1964
|
null_then_sched_closure(&s->recv_trailing_metadata_finished);
|
1970
1965
|
}
|
1971
1966
|
}
|
@@ -1980,26 +1975,12 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
|
|
1980
1975
|
t->incoming_stream = nullptr;
|
1981
1976
|
grpc_chttp2_parsing_become_skip_parser(t);
|
1982
1977
|
}
|
1983
|
-
if (s->pending_byte_stream) {
|
1984
|
-
if (s->on_next != nullptr) {
|
1985
|
-
grpc_core::Chttp2IncomingByteStream* bs = s->data_parser.parsing_frame;
|
1986
|
-
if (error == GRPC_ERROR_NONE) {
|
1987
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
1988
|
-
}
|
1989
|
-
bs->PublishError(error);
|
1990
|
-
bs->Unref();
|
1991
|
-
s->data_parser.parsing_frame = nullptr;
|
1992
|
-
} else {
|
1993
|
-
GRPC_ERROR_UNREF(s->byte_stream_error);
|
1994
|
-
s->byte_stream_error = GRPC_ERROR_REF(error);
|
1995
|
-
}
|
1996
|
-
}
|
1997
1978
|
|
1998
1979
|
if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
1999
1980
|
post_benign_reclaimer(t);
|
2000
|
-
if (t->sent_goaway_state ==
|
1981
|
+
if (t->sent_goaway_state == GRPC_CHTTP2_FINAL_GOAWAY_SENT) {
|
2001
1982
|
close_transport_locked(
|
2002
|
-
t,
|
1983
|
+
t, GRPC_ERROR_CREATE_REFERENCING(
|
2003
1984
|
"Last stream closed after sending GOAWAY", &error, 1));
|
2004
1985
|
}
|
2005
1986
|
}
|
@@ -2009,8 +1990,6 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
|
|
2009
1990
|
grpc_chttp2_list_remove_stalled_by_stream(t, s);
|
2010
1991
|
grpc_chttp2_list_remove_stalled_by_transport(t, s);
|
2011
1992
|
|
2012
|
-
GRPC_ERROR_UNREF(error);
|
2013
|
-
|
2014
1993
|
maybe_start_some_streams(t);
|
2015
1994
|
}
|
2016
1995
|
|
@@ -2032,7 +2011,7 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2032
2011
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
|
2033
2012
|
}
|
2034
2013
|
}
|
2035
|
-
if (due_to_error
|
2014
|
+
if (!due_to_error.ok() && !s->seen_error) {
|
2036
2015
|
s->seen_error = true;
|
2037
2016
|
}
|
2038
2017
|
grpc_chttp2_mark_stream_closed(t, s, 1, 1, due_to_error);
|
@@ -2054,7 +2033,8 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2054
2033
|
// what we want - which is safe because we haven't told anyone
|
2055
2034
|
// about the metadata yet
|
2056
2035
|
if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
|
2057
|
-
s->recv_trailing_metadata_finished != nullptr
|
2036
|
+
s->recv_trailing_metadata_finished != nullptr ||
|
2037
|
+
!s->final_metadata_requested) {
|
2058
2038
|
s->trailing_metadata_buffer.Set(grpc_core::GrpcStatusMetadata(), status);
|
2059
2039
|
if (!message.empty()) {
|
2060
2040
|
s->trailing_metadata_buffer.Set(
|
@@ -2064,13 +2044,11 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2064
2044
|
s->published_metadata[1] = GRPC_METADATA_SYNTHESIZED_FROM_FAKE;
|
2065
2045
|
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
2066
2046
|
}
|
2067
|
-
|
2068
|
-
GRPC_ERROR_UNREF(error);
|
2069
2047
|
}
|
2070
2048
|
|
2071
2049
|
static void add_error(grpc_error_handle error, grpc_error_handle* refs,
|
2072
2050
|
size_t* nrefs) {
|
2073
|
-
if (error
|
2051
|
+
if (error.ok()) return;
|
2074
2052
|
for (size_t i = 0; i < *nrefs; i++) {
|
2075
2053
|
if (error == refs[i]) {
|
2076
2054
|
return;
|
@@ -2088,12 +2066,10 @@ static grpc_error_handle removal_error(grpc_error_handle extra_error,
|
|
2088
2066
|
add_error(s->read_closed_error, refs, &nrefs);
|
2089
2067
|
add_error(s->write_closed_error, refs, &nrefs);
|
2090
2068
|
add_error(extra_error, refs, &nrefs);
|
2091
|
-
grpc_error_handle error
|
2069
|
+
grpc_error_handle error;
|
2092
2070
|
if (nrefs > 0) {
|
2093
|
-
error =
|
2094
|
-
refs, nrefs);
|
2071
|
+
error = GRPC_ERROR_CREATE_REFERENCING(main_error_msg, refs, nrefs);
|
2095
2072
|
}
|
2096
|
-
GRPC_ERROR_UNREF(extra_error);
|
2097
2073
|
return error;
|
2098
2074
|
}
|
2099
2075
|
|
@@ -2103,12 +2079,11 @@ static void flush_write_list(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2103
2079
|
while (*list) {
|
2104
2080
|
grpc_chttp2_write_cb* cb = *list;
|
2105
2081
|
*list = cb->next;
|
2106
|
-
grpc_chttp2_complete_closure_step(t, s, &cb->closure,
|
2082
|
+
grpc_chttp2_complete_closure_step(t, s, &cb->closure, error,
|
2107
2083
|
"on_write_finished_cb");
|
2108
2084
|
cb->next = t->write_cb_pool;
|
2109
2085
|
t->write_cb_pool = cb;
|
2110
2086
|
}
|
2111
|
-
GRPC_ERROR_UNREF(error);
|
2112
2087
|
}
|
2113
2088
|
|
2114
2089
|
void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
|
@@ -2118,30 +2093,34 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
|
|
2118
2093
|
removal_error(error, s, "Pending writes failed due to stream closure");
|
2119
2094
|
s->send_initial_metadata = nullptr;
|
2120
2095
|
grpc_chttp2_complete_closure_step(t, s, &s->send_initial_metadata_finished,
|
2121
|
-
|
2122
|
-
"send_initial_metadata_finished");
|
2096
|
+
error, "send_initial_metadata_finished");
|
2123
2097
|
|
2124
2098
|
s->send_trailing_metadata = nullptr;
|
2125
2099
|
s->sent_trailing_metadata_op = nullptr;
|
2126
2100
|
grpc_chttp2_complete_closure_step(t, s, &s->send_trailing_metadata_finished,
|
2127
|
-
|
2128
|
-
"send_trailing_metadata_finished");
|
2101
|
+
error, "send_trailing_metadata_finished");
|
2129
2102
|
|
2130
|
-
s->
|
2131
|
-
grpc_chttp2_complete_closure_step(t, s, &s->fetching_send_message_finished,
|
2132
|
-
GRPC_ERROR_REF(error),
|
2103
|
+
grpc_chttp2_complete_closure_step(t, s, &s->send_message_finished, error,
|
2133
2104
|
"fetching_send_message_finished");
|
2134
|
-
flush_write_list(t, s, &s->on_write_finished_cbs,
|
2105
|
+
flush_write_list(t, s, &s->on_write_finished_cbs, error);
|
2135
2106
|
flush_write_list(t, s, &s->on_flow_controlled_cbs, error);
|
2136
2107
|
}
|
2137
2108
|
|
2138
2109
|
void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
2139
2110
|
grpc_chttp2_stream* s, int close_reads,
|
2140
2111
|
int close_writes, grpc_error_handle error) {
|
2112
|
+
if (grpc_http_trace.enabled()) {
|
2113
|
+
gpr_log(
|
2114
|
+
GPR_DEBUG, "MARK_STREAM_CLOSED: t=%p s=%p(id=%d) %s [%s]", t, s, s->id,
|
2115
|
+
(close_reads && close_writes)
|
2116
|
+
? "read+write"
|
2117
|
+
: (close_reads ? "read" : (close_writes ? "write" : "nothing??")),
|
2118
|
+
error.ToString().c_str());
|
2119
|
+
}
|
2141
2120
|
if (s->read_closed && s->write_closed) {
|
2142
2121
|
// already closed, but we should still fake the status if needed.
|
2143
2122
|
grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
|
2144
|
-
if (overall_error
|
2123
|
+
if (!overall_error.ok()) {
|
2145
2124
|
grpc_chttp2_fake_status(t, s, overall_error);
|
2146
2125
|
}
|
2147
2126
|
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
@@ -2150,26 +2129,25 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2150
2129
|
bool closed_read = false;
|
2151
2130
|
bool became_closed = false;
|
2152
2131
|
if (close_reads && !s->read_closed) {
|
2153
|
-
s->read_closed_error =
|
2132
|
+
s->read_closed_error = error;
|
2154
2133
|
s->read_closed = true;
|
2155
2134
|
closed_read = true;
|
2156
2135
|
}
|
2157
2136
|
if (close_writes && !s->write_closed) {
|
2158
|
-
s->write_closed_error =
|
2137
|
+
s->write_closed_error = error;
|
2159
2138
|
s->write_closed = true;
|
2160
|
-
grpc_chttp2_fail_pending_writes(t, s,
|
2139
|
+
grpc_chttp2_fail_pending_writes(t, s, error);
|
2161
2140
|
}
|
2162
2141
|
if (s->read_closed && s->write_closed) {
|
2163
2142
|
became_closed = true;
|
2164
|
-
grpc_error_handle overall_error =
|
2165
|
-
removal_error(GRPC_ERROR_REF(error), s, "Stream removed");
|
2143
|
+
grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
|
2166
2144
|
if (s->id != 0) {
|
2167
|
-
remove_stream(t, s->id,
|
2145
|
+
remove_stream(t, s->id, overall_error);
|
2168
2146
|
} else {
|
2169
2147
|
// Purge streams waiting on concurrency still waiting for id assignment
|
2170
2148
|
grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
|
2171
2149
|
}
|
2172
|
-
if (overall_error
|
2150
|
+
if (!overall_error.ok()) {
|
2173
2151
|
grpc_chttp2_fake_status(t, s, overall_error);
|
2174
2152
|
}
|
2175
2153
|
}
|
@@ -2183,10 +2161,11 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
|
|
2183
2161
|
grpc_chttp2_maybe_complete_recv_message(t, s);
|
2184
2162
|
}
|
2185
2163
|
if (became_closed) {
|
2164
|
+
s->stats.latency =
|
2165
|
+
gpr_time_sub(gpr_now(GPR_CLOCK_MONOTONIC), s->creation_time);
|
2186
2166
|
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
2187
2167
|
GRPC_CHTTP2_STREAM_UNREF(s, "chttp2");
|
2188
2168
|
}
|
2189
|
-
GRPC_ERROR_UNREF(error);
|
2190
2169
|
}
|
2191
2170
|
|
2192
2171
|
static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
@@ -2269,8 +2248,8 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2269
2248
|
|
2270
2249
|
status_hdr = GRPC_SLICE_MALLOC(15 + (grpc_status >= 10));
|
2271
2250
|
p = GRPC_SLICE_START_PTR(status_hdr);
|
2272
|
-
*p++ = 0x00;
|
2273
|
-
*p++ = 11;
|
2251
|
+
*p++ = 0x00; // literal header, not indexed
|
2252
|
+
*p++ = 11; // len(grpc-status)
|
2274
2253
|
*p++ = 'g';
|
2275
2254
|
*p++ = 'r';
|
2276
2255
|
*p++ = 'p';
|
@@ -2295,11 +2274,11 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
2295
2274
|
|
2296
2275
|
size_t msg_len = message.length();
|
2297
2276
|
GPR_ASSERT(msg_len <= UINT32_MAX);
|
2298
|
-
grpc_core::VarintWriter<1> msg_len_writer(msg_len);
|
2277
|
+
grpc_core::VarintWriter<1> msg_len_writer(static_cast<uint32_t>(msg_len));
|
2299
2278
|
message_pfx = GRPC_SLICE_MALLOC(14 + msg_len_writer.length());
|
2300
2279
|
p = GRPC_SLICE_START_PTR(message_pfx);
|
2301
|
-
*p++ = 0x00;
|
2302
|
-
*p++ = 12;
|
2280
|
+
*p++ = 0x00; // literal header, not indexed
|
2281
|
+
*p++ = 12; // len(grpc-message)
|
2303
2282
|
*p++ = 'g';
|
2304
2283
|
*p++ = 'r';
|
2305
2284
|
*p++ = 'p';
|
@@ -2356,7 +2335,7 @@ struct cancel_stream_cb_args {
|
|
2356
2335
|
static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
|
2357
2336
|
cancel_stream_cb_args* args = static_cast<cancel_stream_cb_args*>(user_data);
|
2358
2337
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(stream);
|
2359
|
-
grpc_chttp2_cancel_stream(args->t, s,
|
2338
|
+
grpc_chttp2_cancel_stream(args->t, s, args->error);
|
2360
2339
|
}
|
2361
2340
|
|
2362
2341
|
static void end_all_the_calls(grpc_chttp2_transport* t,
|
@@ -2364,14 +2343,14 @@ static void end_all_the_calls(grpc_chttp2_transport* t,
|
|
2364
2343
|
intptr_t http2_error;
|
2365
2344
|
// If there is no explicit grpc or HTTP/2 error, set to UNAVAILABLE on server.
|
2366
2345
|
if (!t->is_client && !grpc_error_has_clear_grpc_status(error) &&
|
2367
|
-
!grpc_error_get_int(error,
|
2368
|
-
|
2346
|
+
!grpc_error_get_int(error, grpc_core::StatusIntProperty::kHttp2Error,
|
2347
|
+
&http2_error)) {
|
2348
|
+
error = grpc_error_set_int(error, grpc_core::StatusIntProperty::kRpcStatus,
|
2369
2349
|
GRPC_STATUS_UNAVAILABLE);
|
2370
2350
|
}
|
2371
|
-
cancel_unstarted_streams(t,
|
2351
|
+
cancel_unstarted_streams(t, error);
|
2372
2352
|
cancel_stream_cb_args args = {error, t};
|
2373
2353
|
grpc_chttp2_stream_map_for_each(&t->stream_map, cancel_stream_cb, &args);
|
2374
|
-
GRPC_ERROR_UNREF(error);
|
2375
2354
|
}
|
2376
2355
|
|
2377
2356
|
//
|
@@ -2398,8 +2377,11 @@ void grpc_chttp2_act_on_flowctl_action(
|
|
2398
2377
|
const grpc_core::chttp2::FlowControlAction& action,
|
2399
2378
|
grpc_chttp2_transport* t, grpc_chttp2_stream* s) {
|
2400
2379
|
WithUrgency(t, action.send_stream_update(),
|
2401
|
-
GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL,
|
2402
|
-
|
2380
|
+
GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL, [t, s]() {
|
2381
|
+
if (s->id != 0 && !s->read_closed) {
|
2382
|
+
grpc_chttp2_mark_stream_writable(t, s);
|
2383
|
+
}
|
2384
|
+
});
|
2403
2385
|
WithUrgency(t, action.send_transport_update(),
|
2404
2386
|
GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL, []() {});
|
2405
2387
|
WithUrgency(t, action.send_initial_window_update(),
|
@@ -2413,31 +2395,39 @@ void grpc_chttp2_act_on_flowctl_action(
|
|
2413
2395
|
queue_setting_update(t, GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
2414
2396
|
action.max_frame_size());
|
2415
2397
|
});
|
2398
|
+
if (t->enable_preferred_rx_crypto_frame_advertisement) {
|
2399
|
+
WithUrgency(
|
2400
|
+
t, action.preferred_rx_crypto_frame_size_update(),
|
2401
|
+
GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
|
2402
|
+
queue_setting_update(
|
2403
|
+
t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
|
2404
|
+
action.preferred_rx_crypto_frame_size());
|
2405
|
+
});
|
2406
|
+
}
|
2416
2407
|
}
|
2417
2408
|
|
2418
2409
|
static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
|
2419
2410
|
grpc_http_parser parser;
|
2420
2411
|
size_t i = 0;
|
2421
|
-
grpc_error_handle error
|
2412
|
+
grpc_error_handle error;
|
2422
2413
|
grpc_http_response response;
|
2423
2414
|
|
2424
2415
|
grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
|
2425
2416
|
|
2426
|
-
grpc_error_handle parse_error
|
2427
|
-
for (; i < t->read_buffer.count && parse_error
|
2417
|
+
grpc_error_handle parse_error;
|
2418
|
+
for (; i < t->read_buffer.count && parse_error.ok(); i++) {
|
2428
2419
|
parse_error =
|
2429
2420
|
grpc_http_parser_parse(&parser, t->read_buffer.slices[i], nullptr);
|
2430
2421
|
}
|
2431
|
-
if (parse_error
|
2432
|
-
(parse_error = grpc_http_parser_eof(&parser)) ==
|
2422
|
+
if (parse_error.ok() &&
|
2423
|
+
(parse_error = grpc_http_parser_eof(&parser)) == absl::OkStatus()) {
|
2433
2424
|
error = grpc_error_set_int(
|
2434
|
-
grpc_error_set_int(
|
2435
|
-
|
2436
|
-
|
2437
|
-
|
2425
|
+
grpc_error_set_int(
|
2426
|
+
GRPC_ERROR_CREATE("Trying to connect an http1.x server"),
|
2427
|
+
grpc_core::StatusIntProperty::kHttpStatus, response.status),
|
2428
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
2438
2429
|
grpc_http2_status_to_grpc_status(response.status));
|
2439
2430
|
}
|
2440
|
-
GRPC_ERROR_UNREF(parse_error);
|
2441
2431
|
|
2442
2432
|
grpc_http_parser_destroy(&parser);
|
2443
2433
|
grpc_http_response_destroy(&response);
|
@@ -2448,44 +2438,31 @@ static void read_action(void* tp, grpc_error_handle error) {
|
|
2448
2438
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2449
2439
|
t->combiner->Run(
|
2450
2440
|
GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
|
2451
|
-
|
2441
|
+
error);
|
2452
2442
|
}
|
2453
2443
|
|
2454
2444
|
static void read_action_locked(void* tp, grpc_error_handle error) {
|
2455
|
-
GPR_TIMER_SCOPE("reading_action_locked", 0);
|
2456
|
-
|
2457
2445
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2458
2446
|
|
2459
|
-
(void)GRPC_ERROR_REF(error);
|
2460
|
-
|
2461
2447
|
grpc_error_handle err = error;
|
2462
|
-
if (err
|
2463
|
-
err = grpc_error_set_int(
|
2464
|
-
|
2465
|
-
|
2466
|
-
t->write_state);
|
2448
|
+
if (!err.ok()) {
|
2449
|
+
err = grpc_error_set_int(
|
2450
|
+
GRPC_ERROR_CREATE_REFERENCING("Endpoint read failed", &err, 1),
|
2451
|
+
grpc_core::StatusIntProperty::kOccurredDuringWrite, t->write_state);
|
2467
2452
|
}
|
2468
2453
|
std::swap(err, error);
|
2469
|
-
|
2470
|
-
if (t->closed_with_error == GRPC_ERROR_NONE) {
|
2471
|
-
GPR_TIMER_SCOPE("reading_action.parse", 0);
|
2454
|
+
if (t->closed_with_error.ok()) {
|
2472
2455
|
size_t i = 0;
|
2473
|
-
grpc_error_handle errors[3] = {
|
2474
|
-
|
2475
|
-
for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
|
2456
|
+
grpc_error_handle errors[3] = {error, absl::OkStatus(), absl::OkStatus()};
|
2457
|
+
for (; i < t->read_buffer.count && errors[1] == absl::OkStatus(); i++) {
|
2476
2458
|
errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
|
2477
2459
|
}
|
2478
|
-
if (errors[1] !=
|
2460
|
+
if (errors[1] != absl::OkStatus()) {
|
2479
2461
|
errors[2] = try_http_parsing(t);
|
2480
|
-
|
2481
|
-
|
2482
|
-
"Failed parsing HTTP/2", errors, GPR_ARRAY_SIZE(errors));
|
2483
|
-
}
|
2484
|
-
for (i = 0; i < GPR_ARRAY_SIZE(errors); i++) {
|
2485
|
-
GRPC_ERROR_UNREF(errors[i]);
|
2462
|
+
error = GRPC_ERROR_CREATE_REFERENCING("Failed parsing HTTP/2", errors,
|
2463
|
+
GPR_ARRAY_SIZE(errors));
|
2486
2464
|
}
|
2487
2465
|
|
2488
|
-
GPR_TIMER_SCOPE("post_parse_locked", 0);
|
2489
2466
|
if (t->initial_window_update != 0) {
|
2490
2467
|
if (t->initial_window_update > 0) {
|
2491
2468
|
grpc_chttp2_stream* s;
|
@@ -2499,29 +2476,28 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
|
|
2499
2476
|
}
|
2500
2477
|
}
|
2501
2478
|
|
2502
|
-
GPR_TIMER_SCOPE("post_reading_action_locked", 0);
|
2503
2479
|
bool keep_reading = false;
|
2504
|
-
if (error
|
2505
|
-
error =
|
2506
|
-
|
2480
|
+
if (error.ok() && !t->closed_with_error.ok()) {
|
2481
|
+
error = GRPC_ERROR_CREATE_REFERENCING("Transport closed",
|
2482
|
+
&t->closed_with_error, 1);
|
2507
2483
|
}
|
2508
|
-
if (error
|
2484
|
+
if (!error.ok()) {
|
2509
2485
|
// If a goaway frame was received, this might be the reason why the read
|
2510
2486
|
// failed. Add this info to the error
|
2511
|
-
if (t->goaway_error
|
2512
|
-
error = grpc_error_add_child(error,
|
2487
|
+
if (!t->goaway_error.ok()) {
|
2488
|
+
error = grpc_error_add_child(error, t->goaway_error);
|
2513
2489
|
}
|
2514
2490
|
|
2515
|
-
close_transport_locked(t,
|
2491
|
+
close_transport_locked(t, error);
|
2516
2492
|
t->endpoint_reading = 0;
|
2517
|
-
} else if (t->closed_with_error
|
2493
|
+
} else if (t->closed_with_error.ok()) {
|
2518
2494
|
keep_reading = true;
|
2519
2495
|
// Since we have read a byte, reset the keepalive timer
|
2520
2496
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
|
2521
|
-
|
2497
|
+
maybe_reset_keepalive_ping_timer_locked(t);
|
2522
2498
|
}
|
2523
2499
|
}
|
2524
|
-
|
2500
|
+
grpc_slice_buffer_reset_and_unref(&t->read_buffer);
|
2525
2501
|
|
2526
2502
|
if (keep_reading) {
|
2527
2503
|
if (t->num_pending_induced_frames >= DEFAULT_MAX_PENDING_INDUCED_FRAMES) {
|
@@ -2537,22 +2513,20 @@ static void read_action_locked(void* tp, grpc_error_handle error) {
|
|
2537
2513
|
} else {
|
2538
2514
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "reading_action");
|
2539
2515
|
}
|
2540
|
-
|
2541
|
-
GRPC_ERROR_UNREF(error);
|
2542
2516
|
}
|
2543
2517
|
|
2544
2518
|
static void continue_read_action_locked(grpc_chttp2_transport* t) {
|
2545
|
-
const bool urgent = t->goaway_error
|
2519
|
+
const bool urgent = !t->goaway_error.ok();
|
2546
2520
|
GRPC_CLOSURE_INIT(&t->read_action_locked, read_action, t,
|
2547
2521
|
grpc_schedule_on_exec_ctx);
|
2548
|
-
grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent
|
2549
|
-
|
2522
|
+
grpc_endpoint_read(t->ep, &t->read_buffer, &t->read_action_locked, urgent,
|
2523
|
+
grpc_chttp2_min_read_progress_size(t));
|
2550
2524
|
}
|
2551
2525
|
|
2552
2526
|
// t is reffed prior to calling the first time, and once the callback chain
|
2553
2527
|
// that kicks off finishes, it's unreffed
|
2554
2528
|
void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
|
2555
|
-
t->flow_control
|
2529
|
+
t->flow_control.bdp_estimator()->SchedulePing();
|
2556
2530
|
send_ping_locked(
|
2557
2531
|
t,
|
2558
2532
|
GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked, start_bdp_ping, t,
|
@@ -2566,23 +2540,23 @@ static void start_bdp_ping(void* tp, grpc_error_handle error) {
|
|
2566
2540
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2567
2541
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked,
|
2568
2542
|
start_bdp_ping_locked, t, nullptr),
|
2569
|
-
|
2543
|
+
error);
|
2570
2544
|
}
|
2571
2545
|
|
2572
2546
|
static void start_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
2573
2547
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2574
2548
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
2575
2549
|
gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
|
2576
|
-
|
2550
|
+
grpc_core::StatusToString(error).c_str());
|
2577
2551
|
}
|
2578
|
-
if (error
|
2552
|
+
if (!error.ok() || !t->closed_with_error.ok()) {
|
2579
2553
|
return;
|
2580
2554
|
}
|
2581
2555
|
// Reset the keepalive ping timer
|
2582
2556
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
|
2583
|
-
|
2557
|
+
maybe_reset_keepalive_ping_timer_locked(t);
|
2584
2558
|
}
|
2585
|
-
t->flow_control
|
2559
|
+
t->flow_control.bdp_estimator()->StartPing();
|
2586
2560
|
t->bdp_ping_started = true;
|
2587
2561
|
}
|
2588
2562
|
|
@@ -2590,16 +2564,16 @@ static void finish_bdp_ping(void* tp, grpc_error_handle error) {
|
|
2590
2564
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2591
2565
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
|
2592
2566
|
finish_bdp_ping_locked, t, nullptr),
|
2593
|
-
|
2567
|
+
error);
|
2594
2568
|
}
|
2595
2569
|
|
2596
2570
|
static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
2597
2571
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2598
2572
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
2599
2573
|
gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
|
2600
|
-
|
2574
|
+
grpc_core::StatusToString(error).c_str());
|
2601
2575
|
}
|
2602
|
-
if (error
|
2576
|
+
if (!error.ok() || !t->closed_with_error.ok()) {
|
2603
2577
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
2604
2578
|
return;
|
2605
2579
|
}
|
@@ -2608,40 +2582,37 @@ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
|
|
2608
2582
|
// finish_bdp_ping_locked to be run later.
|
2609
2583
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
|
2610
2584
|
finish_bdp_ping_locked, t, nullptr),
|
2611
|
-
|
2585
|
+
error);
|
2612
2586
|
return;
|
2613
2587
|
}
|
2614
2588
|
t->bdp_ping_started = false;
|
2615
2589
|
grpc_core::Timestamp next_ping =
|
2616
|
-
t->flow_control
|
2617
|
-
grpc_chttp2_act_on_flowctl_action(t->flow_control
|
2590
|
+
t->flow_control.bdp_estimator()->CompletePing();
|
2591
|
+
grpc_chttp2_act_on_flowctl_action(t->flow_control.PeriodicUpdate(), t,
|
2618
2592
|
nullptr);
|
2619
|
-
GPR_ASSERT(!t->
|
2620
|
-
t->
|
2621
|
-
|
2622
|
-
|
2623
|
-
|
2624
|
-
|
2593
|
+
GPR_ASSERT(!t->next_bdp_ping_timer_handle.has_value());
|
2594
|
+
t->next_bdp_ping_timer_handle =
|
2595
|
+
t->event_engine->RunAfter(next_ping - grpc_core::Timestamp::Now(), [t] {
|
2596
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2597
|
+
grpc_core::ExecCtx exec_ctx;
|
2598
|
+
next_bdp_ping_timer_expired(t);
|
2599
|
+
});
|
2625
2600
|
}
|
2626
2601
|
|
2627
|
-
static void next_bdp_ping_timer_expired(
|
2628
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2602
|
+
static void next_bdp_ping_timer_expired(grpc_chttp2_transport* t) {
|
2629
2603
|
t->combiner->Run(
|
2630
2604
|
GRPC_CLOSURE_INIT(&t->next_bdp_ping_timer_expired_locked,
|
2631
2605
|
next_bdp_ping_timer_expired_locked, t, nullptr),
|
2632
|
-
|
2606
|
+
absl::OkStatus());
|
2633
2607
|
}
|
2634
2608
|
|
2635
|
-
static void next_bdp_ping_timer_expired_locked(
|
2636
|
-
|
2609
|
+
static void next_bdp_ping_timer_expired_locked(
|
2610
|
+
void* tp, GRPC_UNUSED grpc_error_handle error) {
|
2611
|
+
GPR_DEBUG_ASSERT(error.ok());
|
2637
2612
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
|
2638
|
-
GPR_ASSERT(t->
|
2639
|
-
t->
|
2640
|
-
if (
|
2641
|
-
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
2642
|
-
return;
|
2643
|
-
}
|
2644
|
-
if (t->flow_control->bdp_estimator()->accumulator() == 0) {
|
2613
|
+
GPR_ASSERT(t->next_bdp_ping_timer_handle.has_value());
|
2614
|
+
t->next_bdp_ping_timer_handle.reset();
|
2615
|
+
if (t->flow_control.bdp_estimator()->accumulator() == 0) {
|
2645
2616
|
// Block the bdp ping till we receive more data.
|
2646
2617
|
t->bdp_ping_blocked = true;
|
2647
2618
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
|
@@ -2709,42 +2680,37 @@ void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
|
|
2709
2680
|
}
|
2710
2681
|
}
|
2711
2682
|
|
2712
|
-
static void init_keepalive_ping(
|
2713
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2683
|
+
static void init_keepalive_ping(grpc_chttp2_transport* t) {
|
2714
2684
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked,
|
2715
2685
|
init_keepalive_ping_locked, t, nullptr),
|
2716
|
-
|
2686
|
+
absl::OkStatus());
|
2717
2687
|
}
|
2718
2688
|
|
2719
|
-
static void init_keepalive_ping_locked(void* arg,
|
2689
|
+
static void init_keepalive_ping_locked(void* arg,
|
2690
|
+
GRPC_UNUSED grpc_error_handle error) {
|
2691
|
+
GPR_DEBUG_ASSERT(error.ok());
|
2720
2692
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2721
2693
|
GPR_ASSERT(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
|
2722
|
-
|
2694
|
+
GPR_ASSERT(t->keepalive_ping_timer_handle.has_value());
|
2695
|
+
t->keepalive_ping_timer_handle.reset();
|
2696
|
+
if (t->destroying || !t->closed_with_error.ok()) {
|
2723
2697
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
|
2724
|
-
} else
|
2698
|
+
} else {
|
2725
2699
|
if (t->keepalive_permit_without_calls ||
|
2726
2700
|
grpc_chttp2_stream_map_size(&t->stream_map) > 0) {
|
2727
2701
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_PINGING;
|
2728
2702
|
GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive ping end");
|
2729
|
-
grpc_timer_init_unset(&t->keepalive_watchdog_timer);
|
2730
2703
|
send_keepalive_ping_locked(t);
|
2731
2704
|
grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING);
|
2732
2705
|
} else {
|
2733
2706
|
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
2734
|
-
|
2735
|
-
|
2736
|
-
|
2737
|
-
|
2738
|
-
|
2739
|
-
|
2740
|
-
|
2741
|
-
// The keepalive ping timer may be cancelled by bdp
|
2742
|
-
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
2743
|
-
GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
|
2744
|
-
grpc_schedule_on_exec_ctx);
|
2745
|
-
grpc_timer_init(&t->keepalive_ping_timer,
|
2746
|
-
grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
|
2747
|
-
&t->init_keepalive_ping_locked);
|
2707
|
+
t->keepalive_ping_timer_handle =
|
2708
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
2709
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2710
|
+
grpc_core::ExecCtx exec_ctx;
|
2711
|
+
init_keepalive_ping(t);
|
2712
|
+
});
|
2713
|
+
}
|
2748
2714
|
}
|
2749
2715
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
|
2750
2716
|
}
|
@@ -2753,12 +2719,12 @@ static void start_keepalive_ping(void* arg, grpc_error_handle error) {
|
|
2753
2719
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2754
2720
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
|
2755
2721
|
start_keepalive_ping_locked, t, nullptr),
|
2756
|
-
|
2722
|
+
error);
|
2757
2723
|
}
|
2758
2724
|
|
2759
2725
|
static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
2760
2726
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2761
|
-
if (error
|
2727
|
+
if (!error.ok()) {
|
2762
2728
|
return;
|
2763
2729
|
}
|
2764
2730
|
if (t->channelz_socket != nullptr) {
|
@@ -2769,11 +2735,12 @@ static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
|
2769
2735
|
gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string.c_str());
|
2770
2736
|
}
|
2771
2737
|
GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive watchdog");
|
2772
|
-
|
2773
|
-
|
2774
|
-
|
2775
|
-
|
2776
|
-
|
2738
|
+
t->keepalive_watchdog_timer_handle =
|
2739
|
+
t->event_engine->RunAfter(t->keepalive_timeout, [t] {
|
2740
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2741
|
+
grpc_core::ExecCtx exec_ctx;
|
2742
|
+
keepalive_watchdog_fired(t);
|
2743
|
+
});
|
2777
2744
|
t->keepalive_ping_started = true;
|
2778
2745
|
}
|
2779
2746
|
|
@@ -2781,13 +2748,13 @@ static void finish_keepalive_ping(void* arg, grpc_error_handle error) {
|
|
2781
2748
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2782
2749
|
t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
2783
2750
|
finish_keepalive_ping_locked, t, nullptr),
|
2784
|
-
|
2751
|
+
error);
|
2785
2752
|
}
|
2786
2753
|
|
2787
2754
|
static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
2788
2755
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2789
2756
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
|
2790
|
-
if (error
|
2757
|
+
if (error.ok()) {
|
2791
2758
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
|
2792
2759
|
GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
|
2793
2760
|
gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
|
@@ -2798,56 +2765,81 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
|
|
2798
2765
|
t->combiner->Run(
|
2799
2766
|
GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
|
2800
2767
|
finish_keepalive_ping_locked, t, nullptr),
|
2801
|
-
|
2768
|
+
error);
|
2802
2769
|
return;
|
2803
2770
|
}
|
2804
2771
|
t->keepalive_ping_started = false;
|
2805
2772
|
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_WAITING;
|
2806
|
-
|
2773
|
+
if (t->keepalive_watchdog_timer_handle.has_value()) {
|
2774
|
+
if (t->event_engine->Cancel(*t->keepalive_watchdog_timer_handle)) {
|
2775
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
|
2776
|
+
t->keepalive_watchdog_timer_handle.reset();
|
2777
|
+
}
|
2778
|
+
}
|
2779
|
+
GPR_ASSERT(!t->keepalive_ping_timer_handle.has_value());
|
2807
2780
|
GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
|
2808
|
-
|
2809
|
-
|
2810
|
-
|
2811
|
-
|
2812
|
-
|
2781
|
+
t->keepalive_ping_timer_handle =
|
2782
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
2783
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2784
|
+
grpc_core::ExecCtx exec_ctx;
|
2785
|
+
init_keepalive_ping(t);
|
2786
|
+
});
|
2813
2787
|
}
|
2814
2788
|
}
|
2815
2789
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive ping end");
|
2816
2790
|
}
|
2817
2791
|
|
2818
|
-
static void keepalive_watchdog_fired(
|
2819
|
-
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2792
|
+
static void keepalive_watchdog_fired(grpc_chttp2_transport* t) {
|
2820
2793
|
t->combiner->Run(
|
2821
2794
|
GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
|
2822
2795
|
keepalive_watchdog_fired_locked, t, nullptr),
|
2823
|
-
|
2796
|
+
absl::OkStatus());
|
2824
2797
|
}
|
2825
2798
|
|
2826
|
-
static void keepalive_watchdog_fired_locked(
|
2827
|
-
|
2799
|
+
static void keepalive_watchdog_fired_locked(
|
2800
|
+
void* arg, GRPC_UNUSED grpc_error_handle error) {
|
2801
|
+
GPR_DEBUG_ASSERT(error.ok());
|
2828
2802
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
2803
|
+
GPR_ASSERT(t->keepalive_watchdog_timer_handle.has_value());
|
2804
|
+
t->keepalive_watchdog_timer_handle.reset();
|
2829
2805
|
if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
|
2830
|
-
|
2831
|
-
|
2832
|
-
|
2833
|
-
|
2834
|
-
|
2835
|
-
|
2836
|
-
|
2837
|
-
GRPC_ERROR_INT_GRPC_STATUS,
|
2838
|
-
GRPC_STATUS_UNAVAILABLE));
|
2839
|
-
}
|
2806
|
+
gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
|
2807
|
+
t->peer_string.c_str());
|
2808
|
+
t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
|
2809
|
+
close_transport_locked(
|
2810
|
+
t, grpc_error_set_int(GRPC_ERROR_CREATE("keepalive watchdog timeout"),
|
2811
|
+
grpc_core::StatusIntProperty::kRpcStatus,
|
2812
|
+
GRPC_STATUS_UNAVAILABLE));
|
2840
2813
|
} else {
|
2841
|
-
//
|
2842
|
-
// finish_keepalive_ping_locked.
|
2843
|
-
|
2844
|
-
|
2845
|
-
|
2846
|
-
}
|
2814
|
+
// If keepalive_state is not PINGING, we consider it as an error. Maybe the
|
2815
|
+
// cancellation failed in finish_keepalive_ping_locked. Users have seen
|
2816
|
+
// other states: https://github.com/grpc/grpc/issues/32085.
|
2817
|
+
gpr_log(GPR_ERROR, "keepalive_ping_end state error: %d (expect: %d)",
|
2818
|
+
t->keepalive_state, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING);
|
2847
2819
|
}
|
2848
2820
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
|
2849
2821
|
}
|
2850
2822
|
|
2823
|
+
static void maybe_reset_keepalive_ping_timer_locked(grpc_chttp2_transport* t) {
|
2824
|
+
if (t->keepalive_ping_timer_handle.has_value()) {
|
2825
|
+
if (t->event_engine->Cancel(*t->keepalive_ping_timer_handle)) {
|
2826
|
+
// Cancel succeeds, resets the keepalive ping timer. Note that we don't
|
2827
|
+
// need to Ref or Unref here since we still hold the Ref.
|
2828
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
|
2829
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
|
2830
|
+
gpr_log(GPR_INFO, "%s: Keepalive ping cancelled. Resetting timer.",
|
2831
|
+
t->peer_string.c_str());
|
2832
|
+
}
|
2833
|
+
t->keepalive_ping_timer_handle =
|
2834
|
+
t->event_engine->RunAfter(t->keepalive_time, [t] {
|
2835
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2836
|
+
grpc_core::ExecCtx exec_ctx;
|
2837
|
+
init_keepalive_ping(t);
|
2838
|
+
});
|
2839
|
+
}
|
2840
|
+
}
|
2841
|
+
}
|
2842
|
+
|
2851
2843
|
//
|
2852
2844
|
// CALLBACK LOOP
|
2853
2845
|
//
|
@@ -2877,187 +2869,6 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
|
|
2877
2869
|
grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
|
2878
2870
|
}
|
2879
2871
|
|
2880
|
-
//
|
2881
|
-
// BYTE STREAM
|
2882
|
-
//
|
2883
|
-
|
2884
|
-
static void reset_byte_stream(void* arg, grpc_error_handle error) {
|
2885
|
-
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
|
2886
|
-
s->pending_byte_stream = false;
|
2887
|
-
if (error == GRPC_ERROR_NONE) {
|
2888
|
-
grpc_chttp2_maybe_complete_recv_message(s->t, s);
|
2889
|
-
grpc_chttp2_maybe_complete_recv_trailing_metadata(s->t, s);
|
2890
|
-
} else {
|
2891
|
-
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
2892
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, s->on_next, GRPC_ERROR_REF(error));
|
2893
|
-
s->on_next = nullptr;
|
2894
|
-
GRPC_ERROR_UNREF(s->byte_stream_error);
|
2895
|
-
s->byte_stream_error = GRPC_ERROR_NONE;
|
2896
|
-
grpc_chttp2_cancel_stream(s->t, s, GRPC_ERROR_REF(error));
|
2897
|
-
s->byte_stream_error = GRPC_ERROR_REF(error);
|
2898
|
-
}
|
2899
|
-
}
|
2900
|
-
|
2901
|
-
namespace grpc_core {
|
2902
|
-
|
2903
|
-
Chttp2IncomingByteStream::Chttp2IncomingByteStream(
|
2904
|
-
grpc_chttp2_transport* transport, grpc_chttp2_stream* stream,
|
2905
|
-
uint32_t frame_size, uint32_t flags)
|
2906
|
-
: ByteStream(frame_size, flags),
|
2907
|
-
transport_(transport),
|
2908
|
-
stream_(stream),
|
2909
|
-
refs_(2),
|
2910
|
-
remaining_bytes_(frame_size) {
|
2911
|
-
GRPC_ERROR_UNREF(stream->byte_stream_error);
|
2912
|
-
stream->byte_stream_error = GRPC_ERROR_NONE;
|
2913
|
-
}
|
2914
|
-
|
2915
|
-
void Chttp2IncomingByteStream::OrphanLocked(
|
2916
|
-
void* arg, grpc_error_handle /*error_ignored*/) {
|
2917
|
-
Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
|
2918
|
-
grpc_chttp2_stream* s = bs->stream_;
|
2919
|
-
grpc_chttp2_transport* t = s->t;
|
2920
|
-
bs->Unref();
|
2921
|
-
s->pending_byte_stream = false;
|
2922
|
-
grpc_chttp2_maybe_complete_recv_message(t, s);
|
2923
|
-
grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
|
2924
|
-
}
|
2925
|
-
|
2926
|
-
void Chttp2IncomingByteStream::Orphan() {
|
2927
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_destroy", 0);
|
2928
|
-
transport_->combiner->Run(
|
2929
|
-
GRPC_CLOSURE_INIT(&destroy_action_,
|
2930
|
-
&Chttp2IncomingByteStream::OrphanLocked, this, nullptr),
|
2931
|
-
GRPC_ERROR_NONE);
|
2932
|
-
}
|
2933
|
-
|
2934
|
-
void Chttp2IncomingByteStream::NextLocked(void* arg,
|
2935
|
-
grpc_error_handle /*error_ignored*/) {
|
2936
|
-
Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
|
2937
|
-
grpc_chttp2_transport* t = bs->transport_;
|
2938
|
-
grpc_chttp2_stream* s = bs->stream_;
|
2939
|
-
size_t cur_length = s->frame_storage.length;
|
2940
|
-
if (!s->read_closed) {
|
2941
|
-
s->flow_control->IncomingByteStreamUpdate(bs->next_action_.max_size_hint,
|
2942
|
-
cur_length);
|
2943
|
-
grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
|
2944
|
-
}
|
2945
|
-
GPR_ASSERT(s->unprocessed_incoming_frames_buffer.length == 0);
|
2946
|
-
if (s->frame_storage.length > 0) {
|
2947
|
-
grpc_slice_buffer_swap(&s->frame_storage,
|
2948
|
-
&s->unprocessed_incoming_frames_buffer);
|
2949
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete, GRPC_ERROR_NONE);
|
2950
|
-
} else if (s->byte_stream_error != GRPC_ERROR_NONE) {
|
2951
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
|
2952
|
-
GRPC_ERROR_REF(s->byte_stream_error));
|
2953
|
-
if (s->data_parser.parsing_frame != nullptr) {
|
2954
|
-
s->data_parser.parsing_frame->Unref();
|
2955
|
-
s->data_parser.parsing_frame = nullptr;
|
2956
|
-
}
|
2957
|
-
} else if (s->read_closed) {
|
2958
|
-
if (bs->remaining_bytes_ != 0) {
|
2959
|
-
s->byte_stream_error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
2960
|
-
"Truncated message", &s->read_closed_error, 1);
|
2961
|
-
ExecCtx::Run(DEBUG_LOCATION, bs->next_action_.on_complete,
|
2962
|
-
GRPC_ERROR_REF(s->byte_stream_error));
|
2963
|
-
if (s->data_parser.parsing_frame != nullptr) {
|
2964
|
-
s->data_parser.parsing_frame->Unref();
|
2965
|
-
s->data_parser.parsing_frame = nullptr;
|
2966
|
-
}
|
2967
|
-
} else {
|
2968
|
-
// Should never reach here.
|
2969
|
-
GPR_ASSERT(false);
|
2970
|
-
}
|
2971
|
-
} else {
|
2972
|
-
s->on_next = bs->next_action_.on_complete;
|
2973
|
-
}
|
2974
|
-
bs->Unref();
|
2975
|
-
}
|
2976
|
-
|
2977
|
-
bool Chttp2IncomingByteStream::Next(size_t max_size_hint,
|
2978
|
-
grpc_closure* on_complete) {
|
2979
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_next", 0);
|
2980
|
-
if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
|
2981
|
-
return true;
|
2982
|
-
} else {
|
2983
|
-
Ref();
|
2984
|
-
next_action_.max_size_hint = max_size_hint;
|
2985
|
-
next_action_.on_complete = on_complete;
|
2986
|
-
transport_->combiner->Run(
|
2987
|
-
GRPC_CLOSURE_INIT(&next_action_.closure,
|
2988
|
-
&Chttp2IncomingByteStream::NextLocked, this, nullptr),
|
2989
|
-
GRPC_ERROR_NONE);
|
2990
|
-
return false;
|
2991
|
-
}
|
2992
|
-
}
|
2993
|
-
|
2994
|
-
grpc_error_handle Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
|
2995
|
-
GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
|
2996
|
-
grpc_error_handle error;
|
2997
|
-
if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
|
2998
|
-
error = grpc_deframe_unprocessed_incoming_frames(
|
2999
|
-
&stream_->data_parser, stream_,
|
3000
|
-
&stream_->unprocessed_incoming_frames_buffer, slice, nullptr);
|
3001
|
-
if (error != GRPC_ERROR_NONE) {
|
3002
|
-
return error;
|
3003
|
-
}
|
3004
|
-
} else {
|
3005
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
3006
|
-
stream_->t->combiner->Run(&stream_->reset_byte_stream,
|
3007
|
-
GRPC_ERROR_REF(error));
|
3008
|
-
return error;
|
3009
|
-
}
|
3010
|
-
return GRPC_ERROR_NONE;
|
3011
|
-
}
|
3012
|
-
|
3013
|
-
void Chttp2IncomingByteStream::PublishError(grpc_error_handle error) {
|
3014
|
-
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
3015
|
-
ExecCtx::Run(DEBUG_LOCATION, stream_->on_next, GRPC_ERROR_REF(error));
|
3016
|
-
stream_->on_next = nullptr;
|
3017
|
-
GRPC_ERROR_UNREF(stream_->byte_stream_error);
|
3018
|
-
stream_->byte_stream_error = GRPC_ERROR_REF(error);
|
3019
|
-
grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
|
3020
|
-
}
|
3021
|
-
|
3022
|
-
grpc_error_handle Chttp2IncomingByteStream::Push(const grpc_slice& slice,
|
3023
|
-
grpc_slice* slice_out) {
|
3024
|
-
if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
|
3025
|
-
grpc_error_handle error =
|
3026
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
|
3027
|
-
transport_->combiner->Run(&stream_->reset_byte_stream,
|
3028
|
-
GRPC_ERROR_REF(error));
|
3029
|
-
grpc_slice_unref_internal(slice);
|
3030
|
-
return error;
|
3031
|
-
} else {
|
3032
|
-
remaining_bytes_ -= static_cast<uint32_t> GRPC_SLICE_LENGTH(slice);
|
3033
|
-
if (slice_out != nullptr) {
|
3034
|
-
*slice_out = slice;
|
3035
|
-
}
|
3036
|
-
return GRPC_ERROR_NONE;
|
3037
|
-
}
|
3038
|
-
}
|
3039
|
-
|
3040
|
-
grpc_error_handle Chttp2IncomingByteStream::Finished(grpc_error_handle error,
|
3041
|
-
bool reset_on_error) {
|
3042
|
-
if (error == GRPC_ERROR_NONE) {
|
3043
|
-
if (remaining_bytes_ != 0) {
|
3044
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
|
3045
|
-
}
|
3046
|
-
}
|
3047
|
-
if (error != GRPC_ERROR_NONE && reset_on_error) {
|
3048
|
-
transport_->combiner->Run(&stream_->reset_byte_stream,
|
3049
|
-
GRPC_ERROR_REF(error));
|
3050
|
-
}
|
3051
|
-
Unref();
|
3052
|
-
return error;
|
3053
|
-
}
|
3054
|
-
|
3055
|
-
void Chttp2IncomingByteStream::Shutdown(grpc_error_handle error) {
|
3056
|
-
GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
|
3057
|
-
}
|
3058
|
-
|
3059
|
-
} // namespace grpc_core
|
3060
|
-
|
3061
2872
|
//
|
3062
2873
|
// RESOURCE QUOTAS
|
3063
2874
|
//
|
@@ -3074,7 +2885,7 @@ static void post_benign_reclaimer(grpc_chttp2_transport* t) {
|
|
3074
2885
|
benign_reclaimer_locked, t,
|
3075
2886
|
grpc_schedule_on_exec_ctx);
|
3076
2887
|
t->active_reclamation = std::move(*sweep);
|
3077
|
-
t->combiner->Run(&t->benign_reclaimer_locked,
|
2888
|
+
t->combiner->Run(&t->benign_reclaimer_locked, absl::OkStatus());
|
3078
2889
|
} else {
|
3079
2890
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
|
3080
2891
|
}
|
@@ -3094,9 +2905,10 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
|
|
3094
2905
|
destructive_reclaimer_locked, t,
|
3095
2906
|
grpc_schedule_on_exec_ctx);
|
3096
2907
|
t->active_reclamation = std::move(*sweep);
|
3097
|
-
t->combiner->Run(&t->destructive_reclaimer_locked,
|
2908
|
+
t->combiner->Run(&t->destructive_reclaimer_locked,
|
2909
|
+
absl::OkStatus());
|
3098
2910
|
} else {
|
3099
|
-
GRPC_CHTTP2_UNREF_TRANSPORT(t, "
|
2911
|
+
GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
|
3100
2912
|
}
|
3101
2913
|
});
|
3102
2914
|
}
|
@@ -3104,8 +2916,7 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
|
|
3104
2916
|
|
3105
2917
|
static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
3106
2918
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3107
|
-
if (error ==
|
3108
|
-
grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
2919
|
+
if (error.ok() && grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
|
3109
2920
|
// Channel with no active streams: send a goaway to try and make it
|
3110
2921
|
// disconnect cleanly
|
3111
2922
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
@@ -3113,11 +2924,11 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3113
2924
|
t->peer_string.c_str());
|
3114
2925
|
}
|
3115
2926
|
send_goaway(t,
|
3116
|
-
grpc_error_set_int(
|
3117
|
-
|
3118
|
-
|
3119
|
-
|
3120
|
-
|
2927
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"),
|
2928
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
2929
|
+
GRPC_HTTP2_ENHANCE_YOUR_CALM),
|
2930
|
+
/*immediate_disconnect_hint=*/true);
|
2931
|
+
} else if (error.ok() && GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
3121
2932
|
gpr_log(GPR_INFO,
|
3122
2933
|
"HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
|
3123
2934
|
" streams",
|
@@ -3125,7 +2936,7 @@ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3125
2936
|
grpc_chttp2_stream_map_size(&t->stream_map));
|
3126
2937
|
}
|
3127
2938
|
t->benign_reclaimer_registered = false;
|
3128
|
-
if (error !=
|
2939
|
+
if (error != absl::CancelledError()) {
|
3129
2940
|
t->active_reclamation.Finish();
|
3130
2941
|
}
|
3131
2942
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
|
@@ -3135,7 +2946,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3135
2946
|
grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
|
3136
2947
|
size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
|
3137
2948
|
t->destructive_reclaimer_registered = false;
|
3138
|
-
if (error
|
2949
|
+
if (error.ok() && n > 0) {
|
3139
2950
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
|
3140
2951
|
grpc_chttp2_stream_map_rand(&t->stream_map));
|
3141
2952
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
@@ -3144,8 +2955,8 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3144
2955
|
}
|
3145
2956
|
grpc_chttp2_cancel_stream(
|
3146
2957
|
t, s,
|
3147
|
-
grpc_error_set_int(
|
3148
|
-
|
2958
|
+
grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"),
|
2959
|
+
grpc_core::StatusIntProperty::kHttp2Error,
|
3149
2960
|
GRPC_HTTP2_ENHANCE_YOUR_CALM));
|
3150
2961
|
if (n > 1) {
|
3151
2962
|
// Since we cancel one stream per destructive reclamation, if
|
@@ -3155,7 +2966,7 @@ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
|
|
3155
2966
|
post_destructive_reclaimer(t);
|
3156
2967
|
}
|
3157
2968
|
}
|
3158
|
-
if (error !=
|
2969
|
+
if (error != absl::CancelledError()) {
|
3159
2970
|
t->active_reclamation.Finish();
|
3160
2971
|
}
|
3161
2972
|
GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
|
@@ -3194,6 +3005,8 @@ const char* grpc_chttp2_initiate_write_reason_string(
|
|
3194
3005
|
return "TRANSPORT_FLOW_CONTROL";
|
3195
3006
|
case GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS:
|
3196
3007
|
return "SEND_SETTINGS";
|
3008
|
+
case GRPC_CHTTP2_INITIATE_WRITE_SETTINGS_ACK:
|
3009
|
+
return "SETTINGS_ACK";
|
3197
3010
|
case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_SETTING:
|
3198
3011
|
return "FLOW_CONTROL_UNSTALLED_BY_SETTING";
|
3199
3012
|
case GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_UPDATE:
|
@@ -3240,7 +3053,8 @@ grpc_chttp2_transport_get_socket_node(grpc_transport* transport) {
|
|
3240
3053
|
}
|
3241
3054
|
|
3242
3055
|
grpc_transport* grpc_create_chttp2_transport(
|
3243
|
-
const
|
3056
|
+
const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
|
3057
|
+
bool is_client) {
|
3244
3058
|
auto t = new grpc_chttp2_transport(channel_args, ep, is_client);
|
3245
3059
|
return &t->base;
|
3246
3060
|
}
|
@@ -3251,7 +3065,7 @@ void grpc_chttp2_transport_start_reading(
|
|
3251
3065
|
grpc_chttp2_transport* t =
|
3252
3066
|
reinterpret_cast<grpc_chttp2_transport*>(transport);
|
3253
3067
|
GRPC_CHTTP2_REF_TRANSPORT(
|
3254
|
-
t, "reading_action");
|
3068
|
+
t, "reading_action"); // matches unref inside reading_action
|
3255
3069
|
if (read_buffer != nullptr) {
|
3256
3070
|
grpc_slice_buffer_move_into(read_buffer, &t->read_buffer);
|
3257
3071
|
gpr_free(read_buffer);
|
@@ -3260,5 +3074,5 @@ void grpc_chttp2_transport_start_reading(
|
|
3260
3074
|
t->notify_on_close = notify_on_close;
|
3261
3075
|
t->combiner->Run(
|
3262
3076
|
GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
|
3263
|
-
|
3077
|
+
absl::OkStatus());
|
3264
3078
|
}
|