grpc 1.50.0.pre1 → 1.52.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +206 -49
- 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/event_engine.h +27 -6
- 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 -1
- data/include/grpc/event_engine/slice.h +24 -4
- data/include/grpc/event_engine/slice_buffer.h +31 -2
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +3 -13
- data/include/grpc/grpc_posix.h +1 -1
- data/include/grpc/impl/codegen/atm.h +3 -71
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -58
- data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -59
- data/include/grpc/impl/codegen/atm_windows.h +3 -106
- 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 +3 -82
- data/include/grpc/impl/codegen/connectivity_state.h +3 -20
- data/include/grpc/impl/codegen/fork.h +4 -25
- data/include/grpc/impl/codegen/gpr_types.h +2 -34
- data/include/grpc/impl/codegen/grpc_types.h +3 -791
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -758
- data/include/grpc/impl/codegen/propagation_bits.h +3 -28
- data/include/grpc/impl/codegen/slice.h +3 -106
- 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 +824 -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 +25 -2
- data/src/core/ext/filters/census/grpc_context.cc +17 -18
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +28 -22
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -1
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +1 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +24 -24
- data/src/core/ext/filters/client_channel/backup_poller.h +21 -21
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +51 -28
- data/src/core/ext/filters/client_channel/client_channel.cc +157 -168
- data/src/core/ext/filters/client_channel/client_channel.h +10 -10
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -19
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +19 -19
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -17
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -18
- 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} +26 -23
- data/src/core/ext/filters/client_channel/config_selector.h +16 -20
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +28 -55
- data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +18 -18
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +39 -40
- data/src/core/ext/filters/client_channel/http_proxy.h +18 -18
- 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 +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +17 -17
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +7 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +59 -130
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +37 -21
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +131 -154
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +24 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +2 -4
- 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 +18 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +18 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +18 -19
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +8 -9
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +212 -223
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +11 -22
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +73 -101
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +20 -21
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +119 -106
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +12 -12
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +30 -16
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +60 -56
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +60 -64
- 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} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +22 -28
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +62 -94
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +70 -146
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +651 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +60 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +18 -18
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +26 -35
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +40 -41
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +82 -82
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +117 -118
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +51 -52
- 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 +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +18 -19
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +3 -5
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -27
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +44 -34
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -10
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +122 -119
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +81 -103
- data/src/core/ext/filters/client_channel/retry_service_config.cc +193 -235
- data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
- data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
- data/src/core/ext/filters/client_channel/retry_throttle.h +26 -25
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +3 -3
- data/src/core/ext/filters/client_channel/subchannel.cc +158 -178
- data/src/core/ext/filters/client_channel/subchannel.h +17 -40
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +18 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +34 -17
- data/src/core/ext/filters/deadline/deadline_filter.h +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
- 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} +20 -12
- data/src/core/ext/filters/http/client/http_client_filter.cc +36 -37
- data/src/core/ext/filters/http/client/http_client_filter.h +17 -17
- data/src/core/ext/filters/http/client_authority_filter.cc +19 -19
- data/src/core/ext/filters/http/client_authority_filter.h +18 -18
- data/src/core/ext/filters/http/http_filters_plugin.cc +35 -51
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +315 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.h +132 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +44 -43
- data/src/core/ext/filters/http/server/http_server_filter.h +18 -18
- data/src/core/ext/filters/message_size/message_size_filter.cc +92 -123
- data/src/core/ext/filters/message_size/message_size_filter.h +23 -16
- data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +6 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +7 -9
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +229 -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 +22 -22
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +69 -63
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -22
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +81 -97
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +18 -18
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +30 -30
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +29 -29
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +27 -27
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +273 -283
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +18 -19
- data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/context_list.h +25 -25
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +0 -36
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +35 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +112 -44
- data/src/core/ext/transport/chttp2/transport/flow_control.h +60 -34
- data/src/core/ext/transport/chttp2/transport/frame.h +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -32
- data/src/core/ext/transport/chttp2/transport/frame_data.h +23 -23
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +36 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +25 -24
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +28 -25
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +34 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +20 -20
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +22 -21
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +18 -18
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +133 -181
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +40 -59
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +93 -143
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +20 -20
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +26 -26
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -18
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +36 -34
- 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 +19 -19
- data/src/core/ext/transport/chttp2/transport/internal.h +193 -170
- data/src/core/ext/transport/chttp2/transport/parsing.cc +147 -80
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
- data/src/core/ext/transport/chttp2/transport/stream_map.h +31 -31
- data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
- data/src/core/ext/transport/chttp2/transport/varint.h +35 -32
- data/src/core/ext/transport/chttp2/transport/writing.cc +60 -56
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
- data/src/core/ext/transport/inproc/inproc_transport.cc +122 -140
- data/src/core/ext/transport/inproc/inproc_transport.h +19 -19
- 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/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/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/data/orca/v3/orca_load_report.upb.c +3 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +9 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +0 -1
- 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/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/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 +0 -1
- 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/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/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 +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
- data/src/core/ext/xds/xds_api.cc +20 -95
- data/src/core/ext/xds/xds_api.h +5 -8
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
- data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_args.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.h +2 -2
- data/src/core/ext/xds/xds_client.cc +134 -94
- data/src/core/ext/xds/xds_client.h +13 -5
- data/src/core/ext/xds/xds_client_grpc.cc +31 -24
- data/src/core/ext/xds/xds_client_grpc.h +1 -1
- data/src/core/ext/xds/xds_client_stats.cc +17 -17
- data/src/core/ext/xds/xds_client_stats.h +18 -18
- data/src/core/ext/xds/xds_cluster.cc +359 -203
- data/src/core/ext/xds/xds_cluster.h +52 -35
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +54 -71
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +45 -21
- data/src/core/ext/xds/xds_common_types.cc +209 -141
- data/src/core/ext/xds/xds_common_types.h +19 -13
- data/src/core/ext/xds/xds_endpoint.cc +221 -130
- data/src/core/ext/xds/xds_endpoint.h +4 -7
- data/src/core/ext/xds/xds_health_status.cc +80 -0
- data/src/core/ext/xds/xds_health_status.h +82 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +57 -43
- data/src/core/ext/xds/xds_http_fault_filter.h +14 -22
- data/src/core/ext/xds/xds_http_filters.cc +65 -73
- data/src/core/ext/xds/xds_http_filters.h +68 -20
- data/src/core/ext/xds/xds_http_rbac_filter.cc +153 -207
- data/src/core/ext/xds/xds_http_rbac_filter.h +13 -16
- 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 +120 -171
- data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
- data/src/core/ext/xds/xds_listener.cc +447 -419
- data/src/core/ext/xds/xds_listener.h +45 -47
- data/src/core/ext/xds/xds_resource_type.h +3 -11
- data/src/core/ext/xds/xds_resource_type_impl.h +10 -13
- data/src/core/ext/xds/xds_route_config.cc +514 -528
- data/src/core/ext/xds/xds_route_config.h +39 -28
- data/src/core/ext/xds/xds_routing.cc +2 -1
- data/src/core/ext/xds/xds_routing.h +2 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -106
- data/src/core/ext/xds/xds_transport_grpc.cc +6 -7
- data/src/core/ext/xds/xds_transport_grpc.h +1 -1
- data/src/core/lib/address_utils/parse_address.cc +30 -29
- data/src/core/lib/address_utils/parse_address.h +32 -32
- data/src/core/lib/address_utils/sockaddr_utils.cc +29 -28
- data/src/core/lib/address_utils/sockaddr_utils.h +33 -33
- data/src/core/lib/avl/avl.h +4 -4
- data/src/core/lib/backoff/backoff.cc +17 -17
- data/src/core/lib/backoff/backoff.h +18 -18
- data/src/core/lib/channel/call_tracer.h +10 -1
- data/src/core/lib/channel/channel_args.cc +19 -20
- data/src/core/lib/channel/channel_args.h +59 -43
- data/src/core/lib/channel/channel_args_preconditioning.h +1 -1
- data/src/core/lib/channel/channel_stack.cc +62 -58
- data/src/core/lib/channel/channel_stack.h +144 -131
- data/src/core/lib/channel/channel_stack_builder.cc +21 -24
- data/src/core/lib/channel/channel_stack_builder.h +14 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +43 -25
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
- data/src/core/lib/channel/channel_trace.cc +21 -22
- data/src/core/lib/channel/channel_trace.h +19 -19
- data/src/core/lib/channel/channelz.cc +18 -19
- data/src/core/lib/channel/channelz.h +26 -26
- data/src/core/lib/channel/channelz_registry.cc +17 -17
- data/src/core/lib/channel/channelz_registry.h +18 -18
- data/src/core/lib/channel/connected_channel.cc +732 -63
- data/src/core/lib/channel/connected_channel.h +18 -22
- data/src/core/lib/channel/context.h +18 -18
- data/src/core/lib/channel/promise_based_filter.cc +1137 -150
- data/src/core/lib/channel/promise_based_filter.h +374 -88
- data/src/core/lib/channel/status_util.cc +35 -17
- data/src/core/lib/channel/status_util.h +26 -19
- data/src/core/lib/compression/compression.cc +19 -19
- data/src/core/lib/compression/compression_internal.cc +41 -48
- data/src/core/lib/compression/compression_internal.h +22 -22
- data/src/core/lib/compression/message_compress.cc +26 -26
- data/src/core/lib/compression/message_compress.h +25 -25
- data/src/core/lib/config/core_configuration.h +1 -1
- 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/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
- data/src/core/lib/debug/stats.cc +39 -136
- data/src/core/lib/debug/stats.h +46 -52
- data/src/core/lib/debug/stats_data.cc +224 -73
- data/src/core/lib/debug/stats_data.h +263 -122
- data/src/core/lib/debug/trace.cc +18 -18
- data/src/core/lib/debug/trace.h +19 -19
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +38 -15
- data/src/core/lib/event_engine/default_event_engine.h +15 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
- data/src/core/lib/event_engine/executor/executor.h +1 -1
- data/src/core/lib/event_engine/forkable.h +1 -1
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/poller.h +10 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +614 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +900 -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/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +11 -14
- 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 +1308 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +684 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +456 -28
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
- 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 +236 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +228 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +380 -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 +49 -49
- data/src/core/lib/event_engine/posix_engine/timer.h +87 -86
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +27 -27
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +21 -21
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +76 -214
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +41 -69
- 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/event_engine/{executor/threaded_executor.h → posix_engine/wakeup_fd_pipe.h} +16 -15
- 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/slice.cc +7 -6
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/socket_notifier.h +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +373 -0
- data/src/core/lib/event_engine/tcp_socket_utils.h +85 -0
- data/src/core/lib/event_engine/thread_pool.cc +125 -43
- data/src/core/lib/event_engine/thread_pool.h +49 -26
- data/src/core/lib/event_engine/time_util.h +1 -1
- data/src/core/lib/event_engine/windows/iocp.cc +13 -12
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/win_socket.cc +9 -9
- data/src/core/lib/event_engine/windows/windows_engine.cc +26 -20
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
- data/src/core/lib/experiments/config.cc +1 -1
- data/src/core/lib/experiments/experiments.cc +13 -13
- data/src/core/lib/experiments/experiments.h +8 -6
- data/src/core/lib/gpr/alloc.cc +19 -17
- data/src/core/lib/gpr/alloc.h +18 -18
- 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 +27 -19
- 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 -24
- data/src/core/lib/gpr/spinlock.h +18 -18
- data/src/core/lib/gpr/string.cc +25 -24
- data/src/core/lib/gpr/string.h +58 -58
- data/src/core/lib/gpr/string_posix.cc +24 -24
- data/src/core/lib/gpr/string_util_windows.cc +22 -22
- 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 +22 -20
- data/src/core/lib/gpr/sync_posix.cc +23 -21
- data/src/core/lib/gpr/sync_windows.cc +29 -27
- data/src/core/lib/gpr/time.cc +23 -21
- data/src/core/lib/gpr/time_posix.cc +35 -30
- data/src/core/lib/gpr/time_precise.cc +22 -22
- data/src/core/lib/gpr/time_precise.h +18 -19
- data/src/core/lib/gpr/time_windows.cc +25 -22
- data/src/core/lib/gpr/tmpfile.h +22 -22
- 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 +23 -22
- data/src/core/lib/gpr/useful.h +40 -27
- data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
- data/src/core/lib/gprpp/atomic_utils.h +18 -18
- data/src/core/lib/gprpp/bitset.h +24 -0
- 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 +18 -18
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -1
- data/src/core/lib/gprpp/env.h +20 -20
- data/src/core/lib/gprpp/env_linux.cc +21 -21
- data/src/core/lib/gprpp/env_posix.cc +18 -18
- data/src/core/lib/gprpp/env_windows.cc +18 -18
- data/src/core/lib/gprpp/examine_stack.cc +17 -17
- data/src/core/lib/gprpp/examine_stack.h +18 -18
- data/src/core/lib/gprpp/fork.cc +21 -22
- data/src/core/lib/gprpp/fork.h +22 -22
- data/src/core/lib/gprpp/global_config.h +18 -18
- data/src/core/lib/gprpp/global_config_custom.h +18 -18
- data/src/core/lib/gprpp/global_config_env.cc +17 -17
- data/src/core/lib/gprpp/global_config_env.h +23 -23
- data/src/core/lib/gprpp/global_config_generic.h +18 -18
- data/src/core/lib/gprpp/host_port.cc +26 -26
- data/src/core/lib/gprpp/host_port.h +29 -28
- 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 +18 -17
- data/src/core/lib/gprpp/memory.h +18 -18
- data/src/core/lib/gprpp/mpscq.cc +17 -17
- data/src/core/lib/gprpp/mpscq.h +18 -18
- data/src/core/lib/gprpp/no_destruct.h +1 -0
- data/src/core/lib/gprpp/orphanable.h +18 -18
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/ref_counted.h +18 -18
- data/src/core/lib/gprpp/ref_counted_ptr.h +19 -18
- data/src/core/lib/gprpp/stat_posix.cc +5 -4
- data/src/core/lib/gprpp/stat_windows.cc +4 -2
- data/src/core/lib/gprpp/status_helper.cc +4 -3
- data/src/core/lib/gprpp/status_helper.h +1 -3
- data/src/core/lib/gprpp/strerror.cc +41 -0
- data/src/core/lib/gprpp/strerror.h +29 -0
- data/src/core/lib/gprpp/sync.h +20 -20
- data/src/core/lib/gprpp/table.h +1 -0
- data/src/core/lib/gprpp/thd.h +19 -19
- data/src/core/lib/gprpp/thd_posix.cc +30 -31
- data/src/core/lib/gprpp/thd_windows.cc +26 -26
- data/src/core/lib/gprpp/time.cc +16 -11
- data/src/core/lib/gprpp/time.h +13 -3
- data/src/core/lib/gprpp/time_averaged_stats.cc +20 -20
- data/src/core/lib/gprpp/time_averaged_stats.h +48 -48
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +18 -18
- data/src/core/lib/gprpp/validation_errors.h +18 -1
- data/src/core/lib/handshaker/proxy_mapper.h +18 -18
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +17 -17
- data/src/core/lib/handshaker/proxy_mapper_registry.h +18 -18
- data/src/core/lib/http/format_request.cc +18 -18
- data/src/core/lib/http/format_request.h +18 -18
- data/src/core/lib/http/httpcli.cc +57 -61
- data/src/core/lib/http/httpcli.h +26 -26
- data/src/core/lib/http/httpcli_security_connector.cc +22 -25
- data/src/core/lib/http/parser.cc +76 -87
- data/src/core/lib/http/parser.h +32 -32
- data/src/core/lib/iomgr/block_annotate.h +21 -21
- data/src/core/lib/iomgr/buffer_list.cc +156 -136
- data/src/core/lib/iomgr/buffer_list.h +120 -98
- data/src/core/lib/iomgr/call_combiner.cc +29 -27
- data/src/core/lib/iomgr/call_combiner.h +21 -22
- data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
- data/src/core/lib/iomgr/cfstream_handle.h +22 -22
- data/src/core/lib/iomgr/closure.h +90 -45
- data/src/core/lib/iomgr/combiner.cc +20 -19
- data/src/core/lib/iomgr/combiner.h +18 -18
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
- data/src/core/lib/iomgr/dynamic_annotations.h +20 -20
- data/src/core/lib/iomgr/endpoint.cc +17 -17
- data/src/core/lib/iomgr/endpoint.h +46 -46
- data/src/core/lib/iomgr/endpoint_cfstream.cc +44 -43
- data/src/core/lib/iomgr/endpoint_cfstream.h +27 -27
- data/src/core/lib/iomgr/endpoint_pair.h +18 -18
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +20 -19
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +18 -17
- data/src/core/lib/iomgr/error.cc +49 -61
- data/src/core/lib/iomgr/error.h +42 -173
- data/src/core/lib/iomgr/error_cfstream.cc +18 -18
- data/src/core/lib/iomgr/error_cfstream.h +19 -19
- data/src/core/lib/iomgr/ev_apple.cc +21 -21
- data/src/core/lib/iomgr/ev_apple.h +17 -17
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +208 -195
- data/src/core/lib/iomgr/ev_epoll1_linux.h +18 -18
- data/src/core/lib/iomgr/ev_poll_posix.cc +212 -205
- data/src/core/lib/iomgr/ev_poll_posix.h +18 -18
- data/src/core/lib/iomgr/ev_posix.cc +36 -28
- data/src/core/lib/iomgr/ev_posix.h +85 -81
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/exec_ctx.cc +34 -34
- data/src/core/lib/iomgr/exec_ctx.h +141 -141
- data/src/core/lib/iomgr/executor.cc +21 -21
- data/src/core/lib/iomgr/executor.h +24 -24
- data/src/core/lib/iomgr/fork_posix.cc +24 -22
- data/src/core/lib/iomgr/fork_windows.cc +21 -21
- data/src/core/lib/iomgr/gethostname.h +18 -18
- 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 +20 -20
- 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 +4 -2
- data/src/core/lib/iomgr/internal_errqueue.h +80 -80
- data/src/core/lib/iomgr/iocp_windows.cc +22 -21
- data/src/core/lib/iomgr/iocp_windows.h +18 -18
- data/src/core/lib/iomgr/iomgr.cc +19 -18
- data/src/core/lib/iomgr/iomgr.h +32 -32
- data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
- data/src/core/lib/iomgr/iomgr_internal.h +25 -25
- data/src/core/lib/iomgr/iomgr_posix.cc +20 -20
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +20 -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 +20 -20
- data/src/core/lib/iomgr/lockfree_event.cc +114 -114
- data/src/core/lib/iomgr/lockfree_event.h +19 -19
- data/src/core/lib/iomgr/nameser.h +84 -84
- data/src/core/lib/iomgr/polling_entity.cc +25 -21
- data/src/core/lib/iomgr/polling_entity.h +27 -27
- data/src/core/lib/iomgr/pollset.cc +17 -17
- data/src/core/lib/iomgr/pollset.h +51 -51
- data/src/core/lib/iomgr/pollset_set.cc +17 -17
- data/src/core/lib/iomgr/pollset_set.h +22 -22
- data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
- data/src/core/lib/iomgr/pollset_set_windows.h +18 -18
- data/src/core/lib/iomgr/pollset_windows.cc +30 -29
- data/src/core/lib/iomgr/pollset_windows.h +22 -22
- data/src/core/lib/iomgr/port.h +29 -29
- data/src/core/lib/iomgr/python_util.h +20 -20
- data/src/core/lib/iomgr/resolve_address.cc +26 -20
- data/src/core/lib/iomgr/resolve_address.h +21 -22
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +35 -45
- data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +18 -20
- data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
- data/src/core/lib/iomgr/resolved_address.h +1 -1
- data/src/core/lib/iomgr/sockaddr.h +21 -21
- data/src/core/lib/iomgr/sockaddr_posix.h +18 -18
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +18 -17
- data/src/core/lib/iomgr/sockaddr_windows.h +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.h +30 -30
- data/src/core/lib/iomgr/socket_mutator.cc +19 -18
- data/src/core/lib/iomgr/socket_mutator.h +37 -37
- data/src/core/lib/iomgr/socket_utils.h +24 -24
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +68 -66
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +22 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +78 -78
- 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 +56 -56
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/{slice/slice_buffer_api.cc → iomgr/systemd_utils.h} +12 -14
- data/src/core/lib/iomgr/tcp_client.cc +17 -17
- data/src/core/lib/iomgr/tcp_client.h +26 -26
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +25 -28
- data/src/core/lib/iomgr/tcp_client_posix.cc +70 -73
- data/src/core/lib/iomgr/tcp_client_posix.h +43 -43
- data/src/core/lib/iomgr/tcp_client_windows.cc +36 -39
- data/src/core/lib/iomgr/tcp_posix.cc +223 -237
- data/src/core/lib/iomgr/tcp_posix.h +27 -27
- data/src/core/lib/iomgr/tcp_server.cc +30 -22
- data/src/core/lib/iomgr/tcp_server.h +68 -62
- data/src/core/lib/iomgr/tcp_server_posix.cc +124 -94
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +54 -51
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +90 -55
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
- data/src/core/lib/iomgr/tcp_server_windows.cc +97 -104
- data/src/core/lib/iomgr/tcp_windows.cc +109 -93
- data/src/core/lib/iomgr/tcp_windows.h +29 -29
- data/src/core/lib/iomgr/timer.cc +17 -17
- data/src/core/lib/iomgr/timer.h +65 -65
- data/src/core/lib/iomgr/timer_generic.cc +115 -122
- data/src/core/lib/iomgr/timer_generic.h +19 -19
- data/src/core/lib/iomgr/timer_heap.cc +25 -25
- data/src/core/lib/iomgr/timer_heap.h +19 -19
- data/src/core/lib/iomgr/timer_manager.cc +30 -29
- data/src/core/lib/iomgr/timer_manager.h +25 -25
- data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +18 -18
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -21
- 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 +18 -18
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
- data/src/core/lib/iomgr/wakeup_fd_posix.h +50 -50
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +17 -2
- data/src/core/lib/json/json_object_loader.h +37 -1
- data/src/core/lib/json/json_reader.cc +28 -28
- data/src/core/lib/json/json_util.cc +5 -5
- data/src/core/lib/json/json_util.h +4 -4
- data/src/core/lib/json/json_writer.cc +56 -56
- data/src/core/lib/load_balancing/lb_policy.cc +18 -18
- data/src/core/lib/load_balancing/lb_policy.h +7 -4
- data/src/core/lib/load_balancing/subchannel_interface.h +1 -8
- data/src/core/lib/matchers/matchers.cc +6 -5
- data/src/core/lib/matchers/matchers.h +1 -1
- data/src/core/lib/promise/activity.cc +16 -2
- data/src/core/lib/promise/activity.h +58 -27
- data/src/core/lib/promise/arena_promise.h +82 -52
- data/src/core/lib/promise/context.h +14 -6
- data/src/core/lib/promise/detail/basic_seq.h +9 -28
- data/src/core/lib/promise/detail/promise_factory.h +59 -10
- data/src/core/lib/promise/detail/status.h +28 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +20 -12
- data/src/core/lib/promise/for_each.h +155 -0
- data/src/core/lib/promise/latch.h +13 -19
- data/src/core/lib/promise/loop.h +7 -5
- data/src/core/lib/promise/map.h +1 -0
- data/src/core/lib/promise/map_pipe.h +88 -0
- data/src/core/lib/promise/pipe.cc +19 -0
- data/src/core/lib/promise/pipe.h +505 -0
- data/src/core/lib/promise/poll.h +19 -0
- data/src/core/lib/promise/seq.h +4 -5
- data/src/core/lib/promise/sleep.cc +5 -4
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/try_concurrently.h +342 -0
- data/src/core/lib/promise/try_seq.h +11 -13
- data/src/core/lib/resolver/resolver.cc +17 -17
- data/src/core/lib/resolver/server_address.cc +18 -17
- data/src/core/lib/resolver/server_address.h +19 -21
- data/src/core/lib/resource_quota/api.cc +0 -1
- data/src/core/lib/resource_quota/api.h +1 -1
- data/src/core/lib/resource_quota/arena.cc +36 -17
- data/src/core/lib/resource_quota/arena.h +107 -18
- data/src/core/lib/resource_quota/memory_quota.cc +140 -43
- data/src/core/lib/resource_quota/memory_quota.h +85 -23
- data/src/core/lib/resource_quota/resource_quota.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
- data/src/core/lib/security/authorization/matchers.cc +25 -22
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
- data/src/core/lib/security/authorization/rbac_policy.h +1 -1
- data/src/core/lib/security/context/security_context.cc +22 -23
- data/src/core/lib/security/context/security_context.h +40 -30
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +17 -17
- data/src/core/lib/security/credentials/alts/alts_credentials.h +50 -50
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +41 -41
- 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 +19 -19
- 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 +36 -37
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
- data/src/core/lib/security/credentials/call_creds_util.h +1 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +22 -22
- data/src/core/lib/security/credentials/composite/composite_credentials.h +20 -21
- data/src/core/lib/security/credentials/credentials.cc +19 -18
- data/src/core/lib/security/credentials/credentials.h +34 -33
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +20 -19
- data/src/core/lib/security/credentials/fake/fake_credentials.h +34 -35
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +17 -17
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +75 -73
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +18 -19
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +18 -17
- data/src/core/lib/security/credentials/iam/iam_credentials.h +18 -18
- data/src/core/lib/security/credentials/jwt/json_token.cc +24 -25
- data/src/core/lib/security/credentials/jwt/json_token.h +32 -32
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +18 -18
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +18 -19
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +75 -75
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +43 -43
- data/src/core/lib/security/credentials/local/local_credentials.cc +17 -17
- data/src/core/lib/security/credentials/local/local_credentials.h +20 -20
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +52 -59
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +19 -19
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +24 -23
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +22 -22
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -20
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +18 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +20 -28
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +30 -43
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -19
- data/src/core/lib/security/credentials/tls/tls_credentials.h +18 -18
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +32 -38
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +41 -42
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +32 -41
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +20 -21
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +3 -8
- data/src/core/lib/security/security_connector/load_system_roots.h +18 -18
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +19 -22
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +19 -20
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +30 -34
- data/src/core/lib/security/security_connector/local/local_security_connector.h +40 -41
- data/src/core/lib/security/security_connector/security_connector.cc +17 -17
- data/src/core/lib/security/security_connector/security_connector.h +32 -33
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +34 -39
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +38 -39
- data/src/core/lib/security/security_connector/ssl_utils.cc +37 -39
- data/src/core/lib/security/security_connector/ssl_utils.h +31 -31
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
- data/src/core/lib/security/security_connector/ssl_utils_config.h +18 -19
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +42 -48
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +17 -17
- data/src/core/lib/security/transport/auth_filters.h +18 -18
- data/src/core/lib/security/transport/client_auth_filter.cc +21 -21
- data/src/core/lib/security/transport/secure_endpoint.cc +54 -56
- data/src/core/lib/security/transport/secure_endpoint.h +22 -22
- data/src/core/lib/security/transport/security_handshaker.cc +70 -70
- data/src/core/lib/security/transport/security_handshaker.h +19 -19
- data/src/core/lib/security/transport/server_auth_filter.cc +43 -44
- data/src/core/lib/security/transport/tsi_error.cc +23 -20
- data/src/core/lib/security/transport/tsi_error.h +18 -18
- data/src/core/lib/security/util/json_util.cc +21 -22
- data/src/core/lib/security/util/json_util.h +18 -18
- data/src/core/lib/service_config/service_config.h +2 -2
- data/src/core/lib/service_config/service_config_call_data.h +7 -1
- data/src/core/lib/service_config/service_config_impl.cc +111 -158
- data/src/core/lib/service_config/service_config_impl.h +14 -17
- data/src/core/lib/service_config/service_config_parser.cc +14 -31
- data/src/core/lib/service_config/service_config_parser.h +14 -10
- data/src/core/lib/slice/b64.cc +26 -26
- data/src/core/lib/slice/b64.h +29 -29
- data/src/core/lib/slice/percent_encoding.cc +17 -17
- data/src/core/lib/slice/percent_encoding.h +24 -24
- data/src/core/lib/slice/slice.cc +44 -38
- data/src/core/lib/slice/slice.h +57 -11
- data/src/core/lib/slice/slice_buffer.cc +63 -59
- data/src/core/lib/slice/slice_buffer.h +27 -2
- data/src/core/lib/slice/slice_internal.h +31 -39
- data/src/core/lib/slice/slice_refcount.h +34 -19
- data/src/core/lib/slice/slice_string_helpers.cc +17 -17
- data/src/core/lib/slice/slice_string_helpers.h +19 -19
- data/src/core/lib/surface/api_trace.cc +17 -17
- data/src/core/lib/surface/api_trace.h +22 -22
- data/src/core/lib/surface/byte_buffer.cc +22 -23
- data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
- data/src/core/lib/surface/call.cc +1521 -335
- data/src/core/lib/surface/call.h +86 -39
- data/src/core/lib/surface/call_details.cc +20 -21
- data/src/core/lib/surface/call_log_batch.cc +18 -18
- data/src/core/lib/surface/call_test_only.h +30 -30
- data/src/core/lib/surface/call_trace.cc +113 -0
- data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/surface/call_trace.h} +10 -12
- data/src/core/lib/surface/channel.cc +62 -67
- data/src/core/lib/surface/channel.h +40 -32
- data/src/core/lib/surface/channel_init.cc +17 -17
- data/src/core/lib/surface/channel_init.h +18 -18
- data/src/core/lib/surface/channel_ping.cc +19 -19
- data/src/core/lib/surface/channel_stack_type.cc +21 -17
- data/src/core/lib/surface/channel_stack_type.h +20 -18
- data/src/core/lib/surface/completion_queue.cc +173 -191
- data/src/core/lib/surface/completion_queue.h +32 -32
- data/src/core/lib/surface/completion_queue_factory.cc +28 -28
- data/src/core/lib/surface/completion_queue_factory.h +20 -20
- data/src/core/lib/surface/event_string.cc +17 -17
- data/src/core/lib/surface/event_string.h +20 -20
- data/src/core/lib/surface/init.cc +29 -58
- data/src/core/lib/surface/init.h +18 -18
- data/src/core/lib/surface/init_internally.cc +1 -0
- data/src/core/lib/surface/init_internally.h +9 -0
- data/src/core/lib/surface/lame_client.cc +28 -26
- data/src/core/lib/surface/lame_client.h +19 -19
- data/src/core/lib/surface/metadata_array.cc +17 -18
- data/src/core/lib/surface/server.cc +61 -83
- data/src/core/lib/surface/server.h +5 -7
- data/src/core/lib/surface/validate_metadata.cc +28 -29
- data/src/core/lib/surface/validate_metadata.h +18 -18
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/bdp_estimator.cc +17 -17
- data/src/core/lib/transport/bdp_estimator.h +18 -19
- data/src/core/lib/transport/connectivity_state.cc +19 -19
- data/src/core/lib/transport/connectivity_state.h +19 -19
- data/src/core/lib/transport/error_utils.cc +51 -45
- data/src/core/lib/transport/error_utils.h +21 -21
- data/src/core/lib/transport/handshaker.cc +49 -46
- data/src/core/lib/transport/handshaker.h +43 -38
- data/src/core/lib/transport/handshaker_factory.h +44 -18
- data/src/core/lib/transport/handshaker_registry.cc +25 -19
- data/src/core/lib/transport/handshaker_registry.h +21 -22
- data/src/core/lib/transport/http2_errors.h +20 -20
- data/src/core/lib/transport/http_connect_handshaker.cc +40 -41
- data/src/core/lib/transport/http_connect_handshaker.h +18 -18
- data/src/core/lib/transport/metadata_batch.cc +4 -1
- data/src/core/lib/transport/metadata_batch.h +46 -20
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/parsed_metadata.h +1 -0
- data/src/core/lib/transport/pid_controller.cc +20 -20
- data/src/core/lib/transport/pid_controller.h +24 -24
- data/src/core/lib/transport/status_conversion.cc +22 -22
- data/src/core/lib/transport/status_conversion.h +20 -20
- data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
- data/src/core/lib/transport/tcp_connect_handshaker.h +1 -1
- data/src/core/lib/transport/timeout_encoding.cc +22 -22
- data/src/core/lib/transport/timeout_encoding.h +18 -18
- data/src/core/lib/transport/transport.cc +88 -41
- data/src/core/lib/transport/transport.h +193 -195
- data/src/core/lib/transport/transport_impl.h +42 -42
- data/src/core/lib/transport/transport_op_string.cc +26 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +25 -27
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +7 -14
- 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 +334 -334
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
- data/src/core/tsi/alts/frame_protector/alts_counter.h +66 -66
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +206 -206
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +38 -38
- 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 +80 -81
- 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 +166 -166
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +78 -77
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +99 -99
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +41 -42
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +37 -36
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +58 -58
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +20 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +36 -36
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +102 -101
- 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 +38 -39
- 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 +33 -34
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +65 -66
- 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 +53 -54
- 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 +138 -139
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +58 -57
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +41 -42
- data/src/core/tsi/fake_transport_security.cc +80 -79
- data/src/core/tsi/fake_transport_security.h +30 -30
- data/src/core/tsi/local_transport_security.cc +34 -33
- data/src/core/tsi/local_transport_security.h +31 -31
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +8 -3
- data/src/core/tsi/ssl/session_cache/ssl_session.h +18 -18
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -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 +19 -19
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
- data/src/core/tsi/ssl_transport_security.cc +139 -323
- data/src/core/tsi/ssl_transport_security.h +201 -200
- 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 +25 -25
- data/src/core/tsi/transport_security.cc +26 -26
- data/src/core/tsi/transport_security.h +45 -45
- data/src/core/tsi/transport_security_grpc.cc +20 -20
- data/src/core/tsi/transport_security_grpc.h +39 -39
- data/src/core/tsi/transport_security_interface.h +330 -330
- data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
- data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -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.clang +0 -1
- data/src/ruby/ext/grpc/ext-export.gcc +1 -2
- data/src/ruby/ext/grpc/extconf.rb +47 -2
- 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 +59 -59
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +0 -43
- data/src/ruby/spec/client_server_spec.rb +20 -8
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- 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/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/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +146 -40
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -332
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -322
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
- 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/tls.h +0 -156
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -1,26 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2015 gRPC authors.
|
4
|
+
//
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
// you may not use this file except in compliance with the License.
|
7
|
+
// You may obtain a copy of the License at
|
8
|
+
//
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
//
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
// See the License for the specific language governing permissions and
|
15
|
+
// limitations under the License.
|
16
|
+
//
|
17
|
+
//
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
|
-
#include <grpc/impl/
|
21
|
+
#include <grpc/impl/grpc_types.h>
|
22
22
|
|
23
23
|
#include "src/core/lib/gprpp/global_config_generic.h"
|
24
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
24
25
|
#include "src/core/lib/iomgr/port.h"
|
25
26
|
|
26
27
|
#ifdef GRPC_POSIX_SOCKET_TCP
|
@@ -48,11 +49,15 @@
|
|
48
49
|
#include <grpc/support/time.h>
|
49
50
|
|
50
51
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
52
|
+
#include "src/core/lib/debug/event_log.h"
|
51
53
|
#include "src/core/lib/debug/stats.h"
|
54
|
+
#include "src/core/lib/debug/stats_data.h"
|
52
55
|
#include "src/core/lib/debug/trace.h"
|
53
56
|
#include "src/core/lib/experiments/experiments.h"
|
54
57
|
#include "src/core/lib/gpr/string.h"
|
55
58
|
#include "src/core/lib/gpr/useful.h"
|
59
|
+
#include "src/core/lib/gprpp/crash.h"
|
60
|
+
#include "src/core/lib/gprpp/strerror.h"
|
56
61
|
#include "src/core/lib/gprpp/sync.h"
|
57
62
|
#include "src/core/lib/iomgr/buffer_list.h"
|
58
63
|
#include "src/core/lib/iomgr/ev_posix.h"
|
@@ -105,7 +110,7 @@ class TcpZerocopySendRecord {
|
|
105
110
|
|
106
111
|
~TcpZerocopySendRecord() {
|
107
112
|
AssertEmpty();
|
108
|
-
|
113
|
+
grpc_slice_buffer_destroy(&buf_);
|
109
114
|
}
|
110
115
|
|
111
116
|
// Given the slices that we wish to send, and the current offset into the
|
@@ -173,7 +178,7 @@ class TcpZerocopySendRecord {
|
|
173
178
|
// reference to the underlying data since we no longer need it.
|
174
179
|
void AllSendsComplete() {
|
175
180
|
GPR_DEBUG_ASSERT(ref_.load(std::memory_order_relaxed) == 0);
|
176
|
-
|
181
|
+
grpc_slice_buffer_reset_and_unref(&buf_);
|
177
182
|
}
|
178
183
|
|
179
184
|
grpc_slice_buffer buf_;
|
@@ -360,7 +365,7 @@ class TcpZerocopySendCtx {
|
|
360
365
|
// state was CHECK and is_in_write is false. This means that after the
|
361
366
|
// previous sendmsg returned and set is_in_write to false, it did
|
362
367
|
// not update the z-copy change from CHECK to OPEN.
|
363
|
-
|
368
|
+
Crash("OMem state error!");
|
364
369
|
}
|
365
370
|
}
|
366
371
|
|
@@ -474,8 +479,8 @@ struct grpc_tcp {
|
|
474
479
|
grpc_endpoint base;
|
475
480
|
grpc_fd* em_fd;
|
476
481
|
int fd;
|
477
|
-
|
478
|
-
|
482
|
+
// Used by the endpoint read function to distinguish the very first read call
|
483
|
+
// from the rest
|
479
484
|
bool is_first_read;
|
480
485
|
bool has_posted_reclaimer ABSL_GUARDED_BY(read_mu) = false;
|
481
486
|
double target_length;
|
@@ -487,16 +492,16 @@ struct grpc_tcp {
|
|
487
492
|
int max_read_chunk_size;
|
488
493
|
int set_rcvlowat = 0;
|
489
494
|
|
490
|
-
|
495
|
+
// garbage after the last read
|
491
496
|
grpc_slice_buffer last_read_buffer;
|
492
497
|
|
493
498
|
grpc_core::Mutex read_mu;
|
494
499
|
grpc_slice_buffer* incoming_buffer ABSL_GUARDED_BY(read_mu) = nullptr;
|
495
|
-
int inq;
|
496
|
-
bool inq_capable;
|
500
|
+
int inq; // bytes pending on the socket from the last read.
|
501
|
+
bool inq_capable; // cache whether kernel supports inq
|
497
502
|
|
498
503
|
grpc_slice_buffer* outgoing_buffer;
|
499
|
-
|
504
|
+
// byte within outgoing_buffer->slices[0] to write next
|
500
505
|
size_t outgoing_byte_idx;
|
501
506
|
|
502
507
|
grpc_closure* read_cb;
|
@@ -514,35 +519,33 @@ struct grpc_tcp {
|
|
514
519
|
grpc_core::MemoryOwner memory_owner;
|
515
520
|
grpc_core::MemoryAllocator::Reservation self_reservation;
|
516
521
|
|
517
|
-
grpc_core::
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
* if the user wants timestamps for the write. */
|
522
|
+
grpc_core::TracedBufferList tb_list; // List of traced buffers
|
523
|
+
|
524
|
+
// grpc_endpoint_write takes an argument which if non-null means that the
|
525
|
+
// transport layer wants the TCP layer to collect timestamps for this write.
|
526
|
+
// This arg is forwarded to the timestamps callback function when the ACK
|
527
|
+
// timestamp is received from the kernel. This arg is a (void *) which allows
|
528
|
+
// users of this API to pass in a pointer to any kind of structure. This
|
529
|
+
// structure could actually be a tag or any book-keeping object that the user
|
530
|
+
// can use to distinguish between different traced writes. The only
|
531
|
+
// requirement from the TCP endpoint layer is that this arg should be non-null
|
532
|
+
// if the user wants timestamps for the write.
|
529
533
|
void* outgoing_buffer_arg;
|
530
|
-
|
531
|
-
|
532
|
-
|
534
|
+
// A counter which starts at 0. It is initialized the first time the socket
|
535
|
+
// options for collecting timestamps are set, and is incremented with each
|
536
|
+
// byte sent.
|
533
537
|
int bytes_counter;
|
534
|
-
bool socket_ts_enabled;
|
535
|
-
|
536
|
-
bool ts_capable;
|
537
|
-
gpr_atm stop_error_notification;
|
538
|
-
|
538
|
+
bool socket_ts_enabled; // True if timestamping options are set on the socket
|
539
|
+
//
|
540
|
+
bool ts_capable; // Cache whether we can set timestamping options
|
541
|
+
gpr_atm stop_error_notification; // Set to 1 if we do not want to be notified
|
542
|
+
// on errors anymore
|
539
543
|
TcpZerocopySendCtx tcp_zerocopy_send_ctx;
|
540
544
|
TcpZerocopySendRecord* current_zerocopy_send = nullptr;
|
541
545
|
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
meaningful progress */
|
546
|
+
int min_progress_size; // A hint from upper layers specifying the minimum
|
547
|
+
// number of bytes that need to be read to make
|
548
|
+
// meaningful progress
|
546
549
|
};
|
547
550
|
|
548
551
|
struct backup_poller {
|
@@ -588,7 +591,7 @@ static void run_poller(void* bp, grpc_error_handle /*error_ignored*/) {
|
|
588
591
|
grpc_pollset_work(BACKUP_POLLER_POLLSET(p), nullptr, deadline));
|
589
592
|
gpr_mu_unlock(p->pollset_mu);
|
590
593
|
g_backup_poller_mu->Lock();
|
591
|
-
|
594
|
+
// last "uncovered" notification is the ref that keeps us polling
|
592
595
|
if (g_uncovered_notifications_pending == 1) {
|
593
596
|
GPR_ASSERT(g_backup_poller == p);
|
594
597
|
g_backup_poller = nullptr;
|
@@ -605,7 +608,7 @@ static void run_poller(void* bp, grpc_error_handle /*error_ignored*/) {
|
|
605
608
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
606
609
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p reschedule", p);
|
607
610
|
}
|
608
|
-
grpc_core::Executor::Run(&p->run_poller,
|
611
|
+
grpc_core::Executor::Run(&p->run_poller, absl::OkStatus(),
|
609
612
|
grpc_core::ExecutorType::DEFAULT,
|
610
613
|
grpc_core::ExecutorJobType::LONG);
|
611
614
|
}
|
@@ -648,7 +651,7 @@ static void cover_self(grpc_tcp* tcp) {
|
|
648
651
|
}
|
649
652
|
grpc_core::Executor::Run(
|
650
653
|
GRPC_CLOSURE_INIT(&p->run_poller, run_poller, p, nullptr),
|
651
|
-
|
654
|
+
absl::OkStatus(), grpc_core::ExecutorType::DEFAULT,
|
652
655
|
grpc_core::ExecutorJobType::LONG);
|
653
656
|
} else {
|
654
657
|
old_count = g_uncovered_notifications_pending++;
|
@@ -683,7 +686,7 @@ static void tcp_drop_uncovered_then_handle_write(void* arg,
|
|
683
686
|
grpc_error_handle error) {
|
684
687
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
685
688
|
gpr_log(GPR_INFO, "TCP:%p got_write: %s", arg,
|
686
|
-
|
689
|
+
grpc_core::StatusToString(error).c_str());
|
687
690
|
}
|
688
691
|
drop_uncovered(static_cast<grpc_tcp*>(arg));
|
689
692
|
tcp_handle_write(arg, error);
|
@@ -694,9 +697,9 @@ static void add_to_estimate(grpc_tcp* tcp, size_t bytes) {
|
|
694
697
|
}
|
695
698
|
|
696
699
|
static void finish_estimate(grpc_tcp* tcp) {
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
+
// If we read >80% of the target buffer in one read loop, increase the size
|
701
|
+
// of the target buffer to either the amount read, or twice its previous
|
702
|
+
// value
|
700
703
|
if (tcp->bytes_read_this_round > tcp->target_length * 0.8) {
|
701
704
|
tcp->target_length =
|
702
705
|
std::max(2 * tcp->target_length, tcp->bytes_read_this_round);
|
@@ -711,11 +714,12 @@ static grpc_error_handle tcp_annotate_error(grpc_error_handle src_error,
|
|
711
714
|
grpc_tcp* tcp) {
|
712
715
|
return grpc_error_set_str(
|
713
716
|
grpc_error_set_int(
|
714
|
-
grpc_error_set_int(src_error,
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
717
|
+
grpc_error_set_int(src_error, grpc_core::StatusIntProperty::kFd,
|
718
|
+
tcp->fd),
|
719
|
+
// All tcp errors are marked with UNAVAILABLE so that application may
|
720
|
+
// choose to retry.
|
721
|
+
grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE),
|
722
|
+
grpc_core::StatusStrProperty::kTargetAddress, tcp->peer_string);
|
719
723
|
}
|
720
724
|
|
721
725
|
static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error);
|
@@ -730,15 +734,10 @@ static void tcp_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
|
|
730
734
|
static void tcp_free(grpc_tcp* tcp) {
|
731
735
|
grpc_fd_orphan(tcp->em_fd, tcp->release_fd_cb, tcp->release_fd,
|
732
736
|
"tcp_unref_orphan");
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
grpc_core::TracedBuffer::Shutdown(
|
737
|
-
&tcp->tb_head, tcp->outgoing_buffer_arg,
|
738
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("endpoint destroyed"));
|
739
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
737
|
+
grpc_slice_buffer_destroy(&tcp->last_read_buffer);
|
738
|
+
tcp->tb_list.Shutdown(tcp->outgoing_buffer_arg,
|
739
|
+
GRPC_ERROR_CREATE("endpoint destroyed"));
|
740
740
|
tcp->outgoing_buffer_arg = nullptr;
|
741
|
-
gpr_mu_destroy(&tcp->tb_mu);
|
742
741
|
delete tcp;
|
743
742
|
}
|
744
743
|
|
@@ -770,7 +769,7 @@ static void tcp_ref(grpc_tcp* tcp) { tcp->refcount.Ref(); }
|
|
770
769
|
|
771
770
|
static void tcp_destroy(grpc_endpoint* ep) {
|
772
771
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
773
|
-
|
772
|
+
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
774
773
|
if (grpc_event_engine_can_track_errors()) {
|
775
774
|
ZerocopyDisableAndWaitForRemaining(tcp);
|
776
775
|
gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
|
@@ -786,7 +785,7 @@ static void perform_reclamation(grpc_tcp* tcp)
|
|
786
785
|
}
|
787
786
|
tcp->read_mu.Lock();
|
788
787
|
if (tcp->incoming_buffer != nullptr) {
|
789
|
-
|
788
|
+
grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
|
790
789
|
}
|
791
790
|
tcp->has_posted_reclaimer = false;
|
792
791
|
tcp->read_mu.Unlock();
|
@@ -812,12 +811,12 @@ static void tcp_trace_read(grpc_tcp* tcp, grpc_error_handle error)
|
|
812
811
|
gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
|
813
812
|
size_t i;
|
814
813
|
gpr_log(GPR_INFO, "READ %p (peer=%s) error=%s", tcp,
|
815
|
-
tcp->peer_string.c_str(),
|
814
|
+
tcp->peer_string.c_str(), grpc_core::StatusToString(error).c_str());
|
816
815
|
if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
817
816
|
for (i = 0; i < tcp->incoming_buffer->count; i++) {
|
818
817
|
char* dump = grpc_dump_slice(tcp->incoming_buffer->slices[i],
|
819
818
|
GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
820
|
-
gpr_log(GPR_DEBUG, "DATA: %s", dump);
|
819
|
+
gpr_log(GPR_DEBUG, "READ DATA: %s", dump);
|
821
820
|
gpr_free(dump);
|
822
821
|
}
|
823
822
|
}
|
@@ -861,14 +860,14 @@ static void update_rcvlowat(grpc_tcp* tcp)
|
|
861
860
|
sizeof(remaining)) != 0) {
|
862
861
|
gpr_log(GPR_ERROR, "%s",
|
863
862
|
absl::StrCat("Cannot set SO_RCVLOWAT on fd=", tcp->fd,
|
864
|
-
" err=",
|
863
|
+
" err=", grpc_core::StrError(errno).c_str())
|
865
864
|
.c_str());
|
866
865
|
return;
|
867
866
|
}
|
868
867
|
tcp->set_rcvlowat = remaining;
|
869
868
|
}
|
870
869
|
|
871
|
-
|
870
|
+
// Returns true if data available to read or error other than EAGAIN.
|
872
871
|
#define MAX_READ_IOVEC 64
|
873
872
|
static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
874
873
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
|
@@ -886,7 +885,7 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
886
885
|
CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) + CMSG_SPACE(sizeof(int));
|
887
886
|
#else
|
888
887
|
constexpr size_t cmsg_alloc_space = 24 /* CMSG_SPACE(sizeof(int)) */;
|
889
|
-
#endif
|
888
|
+
#endif // GRPC_LINUX_ERRQUEUE
|
890
889
|
char cmsgbuf[cmsg_alloc_space];
|
891
890
|
for (size_t i = 0; i < iov_len; i++) {
|
892
891
|
iov[i].iov_base = GRPC_SLICE_START_PTR(tcp->incoming_buffer->slices[i]);
|
@@ -897,9 +896,9 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
897
896
|
GPR_DEBUG_ASSERT(tcp->min_progress_size > 0);
|
898
897
|
|
899
898
|
do {
|
900
|
-
|
901
|
-
|
902
|
-
|
899
|
+
// Assume there is something on the queue. If we receive TCP_INQ from
|
900
|
+
// kernel, we will update this value, otherwise, we have to assume there is
|
901
|
+
// always something to read until we get EAGAIN.
|
903
902
|
tcp->inq = 1;
|
904
903
|
|
905
904
|
msg.msg_name = nullptr;
|
@@ -915,51 +914,49 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
915
914
|
}
|
916
915
|
msg.msg_flags = 0;
|
917
916
|
|
918
|
-
|
919
|
-
|
917
|
+
grpc_core::global_stats().IncrementTcpReadOffer(
|
918
|
+
tcp->incoming_buffer->length);
|
919
|
+
grpc_core::global_stats().IncrementTcpReadOfferIovSize(
|
920
|
+
tcp->incoming_buffer->count);
|
920
921
|
|
921
922
|
do {
|
922
|
-
|
923
|
+
grpc_core::global_stats().IncrementSyscallRead();
|
923
924
|
read_bytes = recvmsg(tcp->fd, &msg, 0);
|
924
925
|
} while (read_bytes < 0 && errno == EINTR);
|
925
926
|
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
927
|
+
if (read_bytes < 0 && errno == EAGAIN) {
|
928
|
+
// NB: After calling call_read_cb a parallel call of the read handler may
|
929
|
+
// be running.
|
930
|
+
if (total_read_bytes > 0) {
|
931
|
+
break;
|
932
|
+
}
|
933
|
+
finish_estimate(tcp);
|
934
|
+
tcp->inq = 0;
|
935
|
+
return false;
|
936
|
+
}
|
937
|
+
|
938
|
+
// We have read something in previous reads. We need to deliver those
|
939
|
+
// bytes to the upper layer.
|
940
|
+
if (read_bytes <= 0 && total_read_bytes >= 1) {
|
930
941
|
tcp->inq = 1;
|
931
942
|
break;
|
932
943
|
}
|
933
944
|
|
934
|
-
if (read_bytes
|
935
|
-
|
936
|
-
|
937
|
-
if (
|
938
|
-
|
939
|
-
break;
|
940
|
-
}
|
941
|
-
finish_estimate(tcp);
|
942
|
-
tcp->inq = 0;
|
943
|
-
return false;
|
945
|
+
if (read_bytes <= 0) {
|
946
|
+
// 0 read size ==> end of stream
|
947
|
+
grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
|
948
|
+
if (read_bytes == 0) {
|
949
|
+
*error = tcp_annotate_error(absl::InternalError("Socket closed"), tcp);
|
944
950
|
} else {
|
945
|
-
|
946
|
-
|
947
|
-
|
951
|
+
*error =
|
952
|
+
tcp_annotate_error(absl::InternalError(absl::StrCat(
|
953
|
+
"recvmsg:", grpc_core::StrError(errno))),
|
954
|
+
tcp);
|
948
955
|
}
|
949
|
-
}
|
950
|
-
if (read_bytes == 0) {
|
951
|
-
/* 0 read size ==> end of stream
|
952
|
-
*
|
953
|
-
* We may have read something, i.e., total_read_bytes > 0, but
|
954
|
-
* since the connection is closed we will drop the data here, because we
|
955
|
-
* can't call the callback multiple times. */
|
956
|
-
grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
|
957
|
-
*error = tcp_annotate_error(
|
958
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Socket closed"), tcp);
|
959
956
|
return true;
|
960
957
|
}
|
961
958
|
|
962
|
-
|
959
|
+
grpc_core::global_stats().IncrementTcpReadSize(read_bytes);
|
963
960
|
add_to_estimate(tcp, static_cast<size_t>(read_bytes));
|
964
961
|
GPR_DEBUG_ASSERT((size_t)read_bytes <=
|
965
962
|
tcp->incoming_buffer->length - total_read_bytes);
|
@@ -976,15 +973,15 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
976
973
|
}
|
977
974
|
}
|
978
975
|
}
|
979
|
-
#endif
|
976
|
+
#endif // GRPC_HAVE_TCP_INQ
|
980
977
|
|
981
978
|
total_read_bytes += read_bytes;
|
982
979
|
if (tcp->inq == 0 || total_read_bytes == tcp->incoming_buffer->length) {
|
983
980
|
break;
|
984
981
|
}
|
985
982
|
|
986
|
-
|
987
|
-
|
983
|
+
// We had a partial read, and still have space to read more data.
|
984
|
+
// So, adjust IOVs and try to read more.
|
988
985
|
size_t remaining = read_bytes;
|
989
986
|
size_t j = 0;
|
990
987
|
for (size_t i = 0; i < iov_len; i++) {
|
@@ -1010,8 +1007,8 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
1010
1007
|
}
|
1011
1008
|
|
1012
1009
|
GPR_DEBUG_ASSERT(total_read_bytes > 0);
|
1013
|
-
*error =
|
1014
|
-
if (
|
1010
|
+
*error = absl::OkStatus();
|
1011
|
+
if (grpc_core::IsTcpFrameSizeTuningEnabled()) {
|
1015
1012
|
// Update min progress size based on the total number of bytes read in
|
1016
1013
|
// this round.
|
1017
1014
|
tcp->min_progress_size -= total_read_bytes;
|
@@ -1069,14 +1066,14 @@ static void maybe_make_read_slices(grpc_tcp* tcp)
|
|
1069
1066
|
extra_wanted -= kBigAlloc;
|
1070
1067
|
grpc_slice_buffer_add_indexed(tcp->incoming_buffer,
|
1071
1068
|
tcp->memory_owner.MakeSlice(kBigAlloc));
|
1072
|
-
|
1069
|
+
grpc_core::global_stats().IncrementTcpReadAlloc64k();
|
1073
1070
|
}
|
1074
1071
|
} else {
|
1075
1072
|
while (extra_wanted > 0) {
|
1076
1073
|
extra_wanted -= kSmallAlloc;
|
1077
1074
|
grpc_slice_buffer_add_indexed(
|
1078
1075
|
tcp->incoming_buffer, tcp->memory_owner.MakeSlice(kSmallAlloc));
|
1079
|
-
|
1076
|
+
grpc_core::global_stats().IncrementTcpReadAlloc8k();
|
1080
1077
|
}
|
1081
1078
|
}
|
1082
1079
|
maybe_post_reclaimer(tcp);
|
@@ -1114,14 +1111,14 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
|
|
1114
1111
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
1115
1112
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1116
1113
|
gpr_log(GPR_INFO, "TCP:%p got_read: %s", tcp,
|
1117
|
-
|
1114
|
+
grpc_core::StatusToString(error).c_str());
|
1118
1115
|
}
|
1119
1116
|
tcp->read_mu.Lock();
|
1120
1117
|
grpc_error_handle tcp_read_error;
|
1121
|
-
if (GPR_LIKELY(
|
1118
|
+
if (GPR_LIKELY(error.ok())) {
|
1122
1119
|
maybe_make_read_slices(tcp);
|
1123
1120
|
if (!tcp_do_read(tcp, &tcp_read_error)) {
|
1124
|
-
|
1121
|
+
// We've consumed the edge, request a new one
|
1125
1122
|
update_rcvlowat(tcp);
|
1126
1123
|
tcp->read_mu.Unlock();
|
1127
1124
|
notify_on_read(tcp);
|
@@ -1129,9 +1126,9 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
|
|
1129
1126
|
}
|
1130
1127
|
tcp_trace_read(tcp, tcp_read_error);
|
1131
1128
|
} else {
|
1132
|
-
tcp_read_error =
|
1133
|
-
|
1134
|
-
|
1129
|
+
tcp_read_error = error;
|
1130
|
+
grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
|
1131
|
+
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
1135
1132
|
}
|
1136
1133
|
grpc_closure* cb = tcp->read_cb;
|
1137
1134
|
tcp->read_cb = nullptr;
|
@@ -1148,62 +1145,63 @@ static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
|
|
1148
1145
|
tcp->read_cb = cb;
|
1149
1146
|
tcp->read_mu.Lock();
|
1150
1147
|
tcp->incoming_buffer = incoming_buffer;
|
1151
|
-
tcp->min_progress_size =
|
1152
|
-
|
1153
|
-
|
1148
|
+
tcp->min_progress_size = grpc_core::IsTcpFrameSizeTuningEnabled()
|
1149
|
+
? std::max(min_progress_size, 1)
|
1150
|
+
: 1;
|
1151
|
+
grpc_slice_buffer_reset_and_unref(incoming_buffer);
|
1154
1152
|
grpc_slice_buffer_swap(incoming_buffer, &tcp->last_read_buffer);
|
1155
1153
|
TCP_REF(tcp, "read");
|
1156
1154
|
if (tcp->is_first_read) {
|
1157
1155
|
update_rcvlowat(tcp);
|
1158
1156
|
tcp->read_mu.Unlock();
|
1159
|
-
|
1160
|
-
|
1157
|
+
// Endpoint read called for the very first time. Register read callback with
|
1158
|
+
// the polling engine
|
1161
1159
|
tcp->is_first_read = false;
|
1162
1160
|
notify_on_read(tcp);
|
1163
1161
|
} else if (!urgent && tcp->inq == 0) {
|
1164
1162
|
update_rcvlowat(tcp);
|
1165
1163
|
tcp->read_mu.Unlock();
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1164
|
+
// Upper layer asked to read more but we know there is no pending data
|
1165
|
+
// to read from previous reads. So, wait for POLLIN.
|
1166
|
+
//
|
1169
1167
|
notify_on_read(tcp);
|
1170
1168
|
} else {
|
1171
1169
|
tcp->read_mu.Unlock();
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1170
|
+
// Not the first time. We may or may not have more bytes available. In any
|
1171
|
+
// case call tcp->read_done_closure (i.e tcp_handle_read()) which does the
|
1172
|
+
// right thing (i.e calls tcp_do_read() which either reads the available
|
1173
|
+
// bytes or calls notify_on_read() to be notified when new bytes become
|
1174
|
+
// available
|
1177
1175
|
grpc_core::Closure::Run(DEBUG_LOCATION, &tcp->read_done_closure,
|
1178
|
-
|
1176
|
+
absl::OkStatus());
|
1179
1177
|
}
|
1180
1178
|
}
|
1181
1179
|
|
1182
|
-
|
1183
|
-
|
1180
|
+
// A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
|
1181
|
+
// of bytes sent.
|
1184
1182
|
ssize_t tcp_send(int fd, const struct msghdr* msg, int* saved_errno,
|
1185
1183
|
int additional_flags = 0) {
|
1186
1184
|
ssize_t sent_length;
|
1187
1185
|
do {
|
1188
|
-
|
1189
|
-
|
1186
|
+
// TODO(klempner): Cork if this is a partial write
|
1187
|
+
grpc_core::global_stats().IncrementSyscallWrite();
|
1190
1188
|
sent_length = sendmsg(fd, msg, SENDMSG_FLAGS | additional_flags);
|
1191
1189
|
} while (sent_length < 0 && (*saved_errno = errno) == EINTR);
|
1192
1190
|
return sent_length;
|
1193
1191
|
}
|
1194
1192
|
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1193
|
+
/// This is to be called if outgoing_buffer_arg is not null. On linux platforms,
|
1194
|
+
/// this will call sendmsg with socket options set to collect timestamps inside
|
1195
|
+
/// the kernel. On return, sent_length is set to the return value of the sendmsg
|
1196
|
+
/// call. Returns false if setting the socket options failed. This is not
|
1197
|
+
/// implemented for non-linux platforms currently, and crashes out.
|
1198
|
+
///
|
1201
1199
|
static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
1202
1200
|
size_t sending_length,
|
1203
1201
|
ssize_t* sent_length, int* saved_errno,
|
1204
1202
|
int additional_flags = 0);
|
1205
1203
|
|
1206
|
-
|
1204
|
+
/// The callback function to be invoked when we get an error on the socket.
|
1207
1205
|
static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error_handle error);
|
1208
1206
|
|
1209
1207
|
static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
|
@@ -1258,7 +1256,7 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
|
1258
1256
|
tcp->bytes_counter = -1;
|
1259
1257
|
tcp->socket_ts_enabled = true;
|
1260
1258
|
}
|
1261
|
-
|
1259
|
+
// Set control message to indicate that you want timestamps.
|
1262
1260
|
union {
|
1263
1261
|
char cmsg_buf[CMSG_SPACE(sizeof(uint32_t))];
|
1264
1262
|
struct cmsghdr align;
|
@@ -1272,16 +1270,13 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
|
1272
1270
|
msg->msg_control = u.cmsg_buf;
|
1273
1271
|
msg->msg_controllen = CMSG_SPACE(sizeof(uint32_t));
|
1274
1272
|
|
1275
|
-
|
1273
|
+
// If there was an error on sendmsg the logic in tcp_flush will handle it.
|
1276
1274
|
ssize_t length = tcp_send(tcp->fd, msg, saved_errno, additional_flags);
|
1277
1275
|
*sent_length = length;
|
1278
|
-
|
1276
|
+
// Only save timestamps if all the bytes were taken by sendmsg.
|
1279
1277
|
if (sending_length == static_cast<size_t>(length)) {
|
1280
|
-
|
1281
|
-
|
1282
|
-
&tcp->tb_head, static_cast<uint32_t>(tcp->bytes_counter + length),
|
1283
|
-
tcp->fd, tcp->outgoing_buffer_arg);
|
1284
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
1278
|
+
tcp->tb_list.AddNewEntry(static_cast<uint32_t>(tcp->bytes_counter + length),
|
1279
|
+
tcp->fd, tcp->outgoing_buffer_arg);
|
1285
1280
|
tcp->outgoing_buffer_arg = nullptr;
|
1286
1281
|
}
|
1287
1282
|
return true;
|
@@ -1327,13 +1322,13 @@ static bool CmsgIsZeroCopy(const cmsghdr& cmsg) {
|
|
1327
1322
|
return serr->ee_errno == 0 && serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY;
|
1328
1323
|
}
|
1329
1324
|
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
|
1336
|
-
|
1325
|
+
/// Reads \a cmsg to derive timestamps from the control messages. If a valid
|
1326
|
+
/// timestamp is found, the traced buffer list is updated with this timestamp.
|
1327
|
+
/// The caller of this function should be looping on the control messages found
|
1328
|
+
/// in \a msg. \a cmsg should point to the control message that the caller wants
|
1329
|
+
/// processed.
|
1330
|
+
/// On return, a pointer to a control message is returned. On the next
|
1331
|
+
/// iteration, CMSG_NXTHDR(msg, ret_val) should be passed as \a cmsg.
|
1337
1332
|
struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
|
1338
1333
|
struct cmsghdr* cmsg) {
|
1339
1334
|
auto next_cmsg = CMSG_NXTHDR(msg, cmsg);
|
@@ -1345,7 +1340,7 @@ struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
|
|
1345
1340
|
return cmsg;
|
1346
1341
|
}
|
1347
1342
|
|
1348
|
-
|
1343
|
+
// Check if next_cmsg is an OPT_STATS msg
|
1349
1344
|
if (next_cmsg->cmsg_level == SOL_SOCKET &&
|
1350
1345
|
next_cmsg->cmsg_type == SCM_TIMESTAMPING_OPT_STATS) {
|
1351
1346
|
opt_stats = next_cmsg;
|
@@ -1375,19 +1370,13 @@ struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
|
|
1375
1370
|
gpr_log(GPR_ERROR, "Unexpected control message");
|
1376
1371
|
return cmsg;
|
1377
1372
|
}
|
1378
|
-
|
1379
|
-
* to protect the traced buffer list. A lock free list might be better. Using
|
1380
|
-
* a simple mutex for now. */
|
1381
|
-
gpr_mu_lock(&tcp->tb_mu);
|
1382
|
-
grpc_core::TracedBuffer::ProcessTimestamp(&tcp->tb_head, serr, opt_stats,
|
1383
|
-
tss);
|
1384
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
1373
|
+
tcp->tb_list.ProcessTimestamp(serr, opt_stats, tss);
|
1385
1374
|
return next_cmsg;
|
1386
1375
|
}
|
1387
1376
|
|
1388
|
-
|
1389
|
-
|
1390
|
-
|
1377
|
+
/// For linux platforms, reads the socket's error queue and processes error
|
1378
|
+
/// messages from the queue.
|
1379
|
+
///
|
1391
1380
|
static bool process_errors(grpc_tcp* tcp) {
|
1392
1381
|
bool processed_err = false;
|
1393
1382
|
struct iovec iov;
|
@@ -1399,13 +1388,13 @@ static bool process_errors(grpc_tcp* tcp) {
|
|
1399
1388
|
msg.msg_iov = &iov;
|
1400
1389
|
msg.msg_iovlen = 0;
|
1401
1390
|
msg.msg_flags = 0;
|
1402
|
-
|
1403
|
-
|
1391
|
+
// Allocate enough space so we don't need to keep increasing this as size
|
1392
|
+
// of OPT_STATS increase
|
1404
1393
|
constexpr size_t cmsg_alloc_space =
|
1405
1394
|
CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) +
|
1406
1395
|
CMSG_SPACE(sizeof(sock_extended_err) + sizeof(sockaddr_in)) +
|
1407
1396
|
CMSG_SPACE(32 * NLA_ALIGN(NLA_HDRLEN + sizeof(uint64_t)));
|
1408
|
-
|
1397
|
+
// Allocate aligned space for cmsgs received along with timestamps
|
1409
1398
|
union {
|
1410
1399
|
char rbuf[cmsg_alloc_space];
|
1411
1400
|
struct cmsghdr align;
|
@@ -1420,7 +1409,7 @@ static bool process_errors(grpc_tcp* tcp) {
|
|
1420
1409
|
} while (r < 0 && saved_errno == EINTR);
|
1421
1410
|
|
1422
1411
|
if (r == -1 && saved_errno == EAGAIN) {
|
1423
|
-
return processed_err;
|
1412
|
+
return processed_err; // No more errors to process
|
1424
1413
|
}
|
1425
1414
|
if (r == -1) {
|
1426
1415
|
return processed_err;
|
@@ -1430,7 +1419,7 @@ static bool process_errors(grpc_tcp* tcp) {
|
|
1430
1419
|
}
|
1431
1420
|
|
1432
1421
|
if (msg.msg_controllen == 0) {
|
1433
|
-
|
1422
|
+
// There was no control message found. It was probably spurious.
|
1434
1423
|
return processed_err;
|
1435
1424
|
}
|
1436
1425
|
bool seen = false;
|
@@ -1446,8 +1435,8 @@ static bool process_errors(grpc_tcp* tcp) {
|
|
1446
1435
|
seen = true;
|
1447
1436
|
processed_err = true;
|
1448
1437
|
} else {
|
1449
|
-
|
1450
|
-
|
1438
|
+
// Got a control message that is not a timestamp or zerocopy. Don't know
|
1439
|
+
// how to handle this.
|
1451
1440
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1452
1441
|
gpr_log(GPR_INFO,
|
1453
1442
|
"unknown control message cmsg_level:%d cmsg_type:%d",
|
@@ -1467,22 +1456,22 @@ static void tcp_handle_error(void* arg /* grpc_tcp */,
|
|
1467
1456
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
1468
1457
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1469
1458
|
gpr_log(GPR_INFO, "TCP:%p got_error: %s", tcp,
|
1470
|
-
|
1459
|
+
grpc_core::StatusToString(error).c_str());
|
1471
1460
|
}
|
1472
1461
|
|
1473
|
-
if (!
|
1462
|
+
if (!error.ok() ||
|
1474
1463
|
static_cast<bool>(gpr_atm_acq_load(&tcp->stop_error_notification))) {
|
1475
|
-
|
1476
|
-
|
1464
|
+
// We aren't going to register to hear on error anymore, so it is safe to
|
1465
|
+
// unref.
|
1477
1466
|
TCP_UNREF(tcp, "error-tracking");
|
1478
1467
|
return;
|
1479
1468
|
}
|
1480
1469
|
|
1481
|
-
|
1482
|
-
|
1470
|
+
// We are still interested in collecting timestamps, so let's try reading
|
1471
|
+
// them.
|
1483
1472
|
bool processed = process_errors(tcp);
|
1484
|
-
|
1485
|
-
|
1473
|
+
// This might not a timestamps error. Set the read and write closures to be
|
1474
|
+
// ready.
|
1486
1475
|
if (!processed) {
|
1487
1476
|
grpc_fd_set_readable(tcp->em_fd);
|
1488
1477
|
grpc_fd_set_writable(tcp->em_fd);
|
@@ -1490,7 +1479,7 @@ static void tcp_handle_error(void* arg /* grpc_tcp */,
|
|
1490
1479
|
grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);
|
1491
1480
|
}
|
1492
1481
|
|
1493
|
-
#else
|
1482
|
+
#else // GRPC_LINUX_ERRQUEUE
|
1494
1483
|
static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
|
1495
1484
|
grpc_tcp* /*tcp*/, grpc_slice_buffer* /*buf*/) {
|
1496
1485
|
return nullptr;
|
@@ -1513,17 +1502,14 @@ static void tcp_handle_error(void* /*arg*/ /* grpc_tcp */,
|
|
1513
1502
|
gpr_log(GPR_ERROR, "Error handling is not supported for this platform");
|
1514
1503
|
GPR_ASSERT(0);
|
1515
1504
|
}
|
1516
|
-
#endif
|
1505
|
+
#endif // GRPC_LINUX_ERRQUEUE
|
1517
1506
|
|
1518
|
-
|
1519
|
-
|
1507
|
+
// If outgoing_buffer_arg is filled, shuts down the list early, so that any
|
1508
|
+
// release operations needed can be performed on the arg
|
1520
1509
|
void tcp_shutdown_buffer_list(grpc_tcp* tcp) {
|
1521
1510
|
if (tcp->outgoing_buffer_arg) {
|
1522
|
-
|
1523
|
-
|
1524
|
-
&tcp->tb_head, tcp->outgoing_buffer_arg,
|
1525
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("TracedBuffer list shutdown"));
|
1526
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
1511
|
+
tcp->tb_list.Shutdown(tcp->outgoing_buffer_arg,
|
1512
|
+
GRPC_ERROR_CREATE("TracedBuffer list shutdown"));
|
1527
1513
|
tcp->outgoing_buffer_arg = nullptr;
|
1528
1514
|
}
|
1529
1515
|
}
|
@@ -1606,8 +1592,8 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1606
1592
|
if (!tcp->ts_capable ||
|
1607
1593
|
!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
|
1608
1594
|
&saved_errno, MSG_ZEROCOPY)) {
|
1609
|
-
|
1610
|
-
|
1595
|
+
// We could not set socket options to collect Fathom timestamps.
|
1596
|
+
// Fallback on writing without timestamps.
|
1611
1597
|
tcp->ts_capable = false;
|
1612
1598
|
tcp_shutdown_buffer_list(tcp);
|
1613
1599
|
} else {
|
@@ -1617,8 +1603,8 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1617
1603
|
if (!tried_sending_message) {
|
1618
1604
|
msg.msg_control = nullptr;
|
1619
1605
|
msg.msg_controllen = 0;
|
1620
|
-
|
1621
|
-
|
1606
|
+
grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
|
1607
|
+
grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
|
1622
1608
|
sent_length = tcp_send(tcp->fd, &msg, &saved_errno, MSG_ZEROCOPY);
|
1623
1609
|
}
|
1624
1610
|
if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterSend(
|
@@ -1641,11 +1627,12 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1641
1627
|
return true;
|
1642
1628
|
}
|
1643
1629
|
}
|
1630
|
+
grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
|
1644
1631
|
tcp->bytes_counter += sent_length;
|
1645
1632
|
record->UpdateOffsetForBytesSent(sending_length,
|
1646
1633
|
static_cast<size_t>(sent_length));
|
1647
1634
|
if (record->AllSlicesSent()) {
|
1648
|
-
*error =
|
1635
|
+
*error = absl::OkStatus();
|
1649
1636
|
return true;
|
1650
1637
|
}
|
1651
1638
|
}
|
@@ -1717,8 +1704,8 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1717
1704
|
if (!tcp->ts_capable ||
|
1718
1705
|
!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
|
1719
1706
|
&saved_errno)) {
|
1720
|
-
|
1721
|
-
|
1707
|
+
// We could not set socket options to collect Fathom timestamps.
|
1708
|
+
// Fallback on writing without timestamps.
|
1722
1709
|
tcp->ts_capable = false;
|
1723
1710
|
tcp_shutdown_buffer_list(tcp);
|
1724
1711
|
} else {
|
@@ -1729,8 +1716,8 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1729
1716
|
msg.msg_control = nullptr;
|
1730
1717
|
msg.msg_controllen = 0;
|
1731
1718
|
|
1732
|
-
|
1733
|
-
|
1719
|
+
grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
|
1720
|
+
grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
|
1734
1721
|
|
1735
1722
|
sent_length = tcp_send(tcp->fd, &msg, &saved_errno);
|
1736
1723
|
}
|
@@ -1746,18 +1733,19 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1746
1733
|
return false;
|
1747
1734
|
} else if (saved_errno == EPIPE) {
|
1748
1735
|
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1749
|
-
|
1736
|
+
grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
|
1750
1737
|
tcp_shutdown_buffer_list(tcp);
|
1751
1738
|
return true;
|
1752
1739
|
} else {
|
1753
1740
|
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1754
|
-
|
1741
|
+
grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
|
1755
1742
|
tcp_shutdown_buffer_list(tcp);
|
1756
1743
|
return true;
|
1757
1744
|
}
|
1758
1745
|
}
|
1759
1746
|
|
1760
1747
|
GPR_ASSERT(tcp->outgoing_byte_idx == 0);
|
1748
|
+
grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
|
1761
1749
|
tcp->bytes_counter += sent_length;
|
1762
1750
|
trailing = sending_length - static_cast<size_t>(sent_length);
|
1763
1751
|
while (trailing > 0) {
|
@@ -1774,8 +1762,8 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1774
1762
|
}
|
1775
1763
|
}
|
1776
1764
|
if (outgoing_slice_idx == tcp->outgoing_buffer->count) {
|
1777
|
-
*error =
|
1778
|
-
|
1765
|
+
*error = absl::OkStatus();
|
1766
|
+
grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
|
1779
1767
|
return true;
|
1780
1768
|
}
|
1781
1769
|
}
|
@@ -1786,7 +1774,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1786
1774
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
1787
1775
|
grpc_closure* cb;
|
1788
1776
|
|
1789
|
-
if (!
|
1777
|
+
if (!error.ok()) {
|
1790
1778
|
cb = tcp->write_cb;
|
1791
1779
|
tcp->write_cb = nullptr;
|
1792
1780
|
if (tcp->current_zerocopy_send != nullptr) {
|
@@ -1794,7 +1782,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1794
1782
|
"handle_write_err");
|
1795
1783
|
tcp->current_zerocopy_send = nullptr;
|
1796
1784
|
}
|
1797
|
-
grpc_core::Closure::Run(DEBUG_LOCATION, cb,
|
1785
|
+
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
1798
1786
|
TCP_UNREF(tcp, "write");
|
1799
1787
|
return;
|
1800
1788
|
}
|
@@ -1808,13 +1796,13 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1808
1796
|
}
|
1809
1797
|
notify_on_write(tcp);
|
1810
1798
|
// tcp_flush does not populate error if it has returned false.
|
1811
|
-
GPR_DEBUG_ASSERT(
|
1799
|
+
GPR_DEBUG_ASSERT(error.ok());
|
1812
1800
|
} else {
|
1813
1801
|
cb = tcp->write_cb;
|
1814
1802
|
tcp->write_cb = nullptr;
|
1815
1803
|
tcp->current_zerocopy_send = nullptr;
|
1816
1804
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1817
|
-
gpr_log(GPR_INFO, "write: %s",
|
1805
|
+
gpr_log(GPR_INFO, "write: %s", grpc_core::StatusToString(error).c_str());
|
1818
1806
|
}
|
1819
1807
|
// No need to take a ref on error since tcp_flush provides a ref.
|
1820
1808
|
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
@@ -1825,9 +1813,11 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1825
1813
|
static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
1826
1814
|
grpc_closure* cb, void* arg, int /*max_frame_size*/) {
|
1827
1815
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
1828
|
-
grpc_error_handle error
|
1816
|
+
grpc_error_handle error;
|
1829
1817
|
TcpZerocopySendRecord* zerocopy_send_record = nullptr;
|
1830
1818
|
|
1819
|
+
grpc_core::EventLog::Append("tcp-write-outstanding", buf->length);
|
1820
|
+
|
1831
1821
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1832
1822
|
size_t i;
|
1833
1823
|
|
@@ -1836,7 +1826,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1836
1826
|
if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1837
1827
|
char* data =
|
1838
1828
|
grpc_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
1839
|
-
gpr_log(GPR_DEBUG, "DATA: %s", data);
|
1829
|
+
gpr_log(GPR_DEBUG, "WRITE DATA: %s", data);
|
1840
1830
|
gpr_free(data);
|
1841
1831
|
}
|
1842
1832
|
}
|
@@ -1849,9 +1839,8 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1849
1839
|
grpc_core::Closure::Run(
|
1850
1840
|
DEBUG_LOCATION, cb,
|
1851
1841
|
grpc_fd_is_shutdown(tcp->em_fd)
|
1852
|
-
? tcp_annotate_error(
|
1853
|
-
|
1854
|
-
: GRPC_ERROR_NONE);
|
1842
|
+
? tcp_annotate_error(GRPC_ERROR_CREATE("EOF"), tcp)
|
1843
|
+
: absl::OkStatus());
|
1855
1844
|
tcp_shutdown_buffer_list(tcp);
|
1856
1845
|
return;
|
1857
1846
|
}
|
@@ -1881,7 +1870,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1881
1870
|
notify_on_write(tcp);
|
1882
1871
|
} else {
|
1883
1872
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1884
|
-
gpr_log(GPR_INFO, "write: %s",
|
1873
|
+
gpr_log(GPR_INFO, "write: %s", grpc_core::StatusToString(error).c_str());
|
1885
1874
|
}
|
1886
1875
|
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
1887
1876
|
}
|
@@ -1974,13 +1963,12 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1974
1963
|
tcp->release_fd = nullptr;
|
1975
1964
|
tcp->target_length = static_cast<double>(options.tcp_read_chunk_size);
|
1976
1965
|
tcp->bytes_read_this_round = 0;
|
1977
|
-
|
1966
|
+
// Will be set to false by the very first endpoint read function
|
1978
1967
|
tcp->is_first_read = true;
|
1979
1968
|
tcp->bytes_counter = -1;
|
1980
1969
|
tcp->socket_ts_enabled = false;
|
1981
1970
|
tcp->ts_capable = true;
|
1982
1971
|
tcp->outgoing_buffer_arg = nullptr;
|
1983
|
-
tcp->frame_size_tuning_enabled = grpc_core::IsTcpFrameSizeTuningEnabled();
|
1984
1972
|
tcp->min_progress_size = 1;
|
1985
1973
|
if (options.tcp_tx_zero_copy_enabled &&
|
1986
1974
|
!tcp->tcp_zerocopy_send_ctx.memory_limited()) {
|
@@ -1995,14 +1983,12 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1995
1983
|
}
|
1996
1984
|
#endif
|
1997
1985
|
}
|
1998
|
-
|
1986
|
+
// paired with unref in grpc_tcp_destroy
|
1999
1987
|
new (&tcp->refcount) grpc_core::RefCount(
|
2000
1988
|
1, GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace) ? "tcp" : nullptr);
|
2001
1989
|
gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
|
2002
1990
|
tcp->em_fd = em_fd;
|
2003
1991
|
grpc_slice_buffer_init(&tcp->last_read_buffer);
|
2004
|
-
gpr_mu_init(&tcp->tb_mu);
|
2005
|
-
tcp->tb_head = nullptr;
|
2006
1992
|
GRPC_CLOSURE_INIT(&tcp->read_done_closure, tcp_handle_read, tcp,
|
2007
1993
|
grpc_schedule_on_exec_ctx);
|
2008
1994
|
if (grpc_event_engine_run_in_background()) {
|
@@ -2015,7 +2001,7 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
2015
2001
|
tcp_drop_uncovered_then_handle_write, tcp,
|
2016
2002
|
grpc_schedule_on_exec_ctx);
|
2017
2003
|
}
|
2018
|
-
|
2004
|
+
// Always assume there is something on the queue to read.
|
2019
2005
|
tcp->inq = 1;
|
2020
2006
|
#ifdef GRPC_HAVE_TCP_INQ
|
2021
2007
|
int one = 1;
|
@@ -2027,12 +2013,12 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
2027
2013
|
}
|
2028
2014
|
#else
|
2029
2015
|
tcp->inq_capable = false;
|
2030
|
-
#endif
|
2031
|
-
|
2016
|
+
#endif // GRPC_HAVE_TCP_INQ
|
2017
|
+
// Start being notified on errors if event engine can track errors.
|
2032
2018
|
if (grpc_event_engine_can_track_errors()) {
|
2033
|
-
|
2034
|
-
|
2035
|
-
|
2019
|
+
// Grab a ref to tcp so that we can safely access the tcp struct when
|
2020
|
+
// processing errors. We unref when we no longer want to track errors
|
2021
|
+
// separately.
|
2036
2022
|
TCP_REF(tcp, "error-tracking");
|
2037
2023
|
gpr_atm_rel_store(&tcp->stop_error_notification, 0);
|
2038
2024
|
GRPC_CLOSURE_INIT(&tcp->error_closure, tcp_handle_error, tcp,
|
@@ -2055,9 +2041,9 @@ void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
|
|
2055
2041
|
GPR_ASSERT(ep->vtable == &vtable);
|
2056
2042
|
tcp->release_fd = fd;
|
2057
2043
|
tcp->release_fd_cb = done;
|
2058
|
-
|
2044
|
+
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
2059
2045
|
if (grpc_event_engine_can_track_errors()) {
|
2060
|
-
|
2046
|
+
// Stop errors notification.
|
2061
2047
|
ZerocopyDisableAndWaitForRemaining(tcp);
|
2062
2048
|
gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
|
2063
2049
|
grpc_fd_set_error(tcp->em_fd);
|
@@ -2072,4 +2058,4 @@ void grpc_tcp_posix_shutdown() {
|
|
2072
2058
|
g_backup_poller_mu = nullptr;
|
2073
2059
|
}
|
2074
2060
|
|
2075
|
-
#endif
|
2061
|
+
#endif // GRPC_POSIX_SOCKET_TCP
|