grpc 1.47.0 → 1.53.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +386 -162
- data/include/grpc/byte_buffer.h +76 -1
- data/include/grpc/byte_buffer_reader.h +19 -1
- data/include/grpc/compression.h +2 -2
- data/include/grpc/event_engine/endpoint_config.h +11 -5
- data/include/grpc/event_engine/event_engine.h +87 -32
- 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 +52 -5
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +4 -14
- data/include/grpc/grpc_posix.h +1 -1
- data/include/grpc/impl/codegen/atm.h +3 -71
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
- data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
- data/include/grpc/impl/codegen/atm_windows.h +3 -108
- data/include/grpc/impl/codegen/byte_buffer.h +4 -78
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
- data/include/grpc/impl/codegen/compression_types.h +5 -83
- data/include/grpc/impl/codegen/connectivity_state.h +5 -21
- data/include/grpc/impl/codegen/fork.h +4 -25
- data/include/grpc/impl/codegen/gpr_types.h +4 -35
- data/include/grpc/impl/codegen/grpc_types.h +5 -791
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -763
- 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 +827 -0
- data/include/grpc/impl/propagation_bits.h +54 -0
- data/include/grpc/impl/slice_type.h +112 -0
- data/include/grpc/load_reporting.h +1 -1
- data/include/grpc/module.modulemap +5 -1
- data/include/grpc/slice.h +1 -1
- data/include/grpc/status.h +131 -1
- data/include/grpc/support/atm.h +70 -1
- data/include/grpc/support/atm_gcc_atomic.h +59 -1
- data/include/grpc/support/atm_gcc_sync.h +58 -1
- data/include/grpc/support/atm_windows.h +105 -1
- data/include/grpc/support/log.h +87 -1
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/port_platform.h +767 -1
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +35 -2
- data/include/grpc/support/sync_abseil.h +11 -1
- data/include/grpc/support/sync_custom.h +13 -1
- data/include/grpc/support/sync_generic.h +24 -1
- data/include/grpc/support/sync_posix.h +27 -1
- data/include/grpc/support/sync_windows.h +15 -1
- data/include/grpc/support/time.h +31 -6
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
- data/src/core/ext/filters/census/grpc_context.cc +19 -17
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +49 -31
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +22 -5
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +6 -4
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
- data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +30 -30
- data/src/core/ext/filters/client_channel/backup_poller.h +24 -24
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +52 -29
- data/src/core/ext/filters/client_channel/client_channel.cc +348 -441
- data/src/core/ext/filters/client_channel/client_channel.h +46 -24
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -19
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +22 -22
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -46
- data/src/core/ext/filters/client_channel/client_channel_factory.h +5 -13
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -34
- 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 -26
- data/src/core/ext/filters/client_channel/config_selector.h +27 -23
- data/src/core/ext/filters/client_channel/connector.h +13 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +29 -54
- data/src/core/ext/filters/client_channel/dynamic_filters.h +10 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +21 -21
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +90 -110
- data/src/core/ext/filters/client_channel/http_proxy.h +36 -32
- 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 +4 -5
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +21 -21
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +27 -18
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +66 -132
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +361 -366
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +21 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +19 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +22 -24
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +28 -98
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +418 -327
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +46 -6
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +140 -154
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +304 -387
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +388 -363
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -11
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +578 -628
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +154 -138
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +134 -115
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +202 -224
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +124 -139
- 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_channel_args.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +154 -258
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +183 -214
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +361 -411
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +21 -21
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +15 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +452 -175
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +42 -43
- 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 +88 -83
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +276 -202
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +69 -57
- 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 +20 -21
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -23
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +9 -21
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +15 -4
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +83 -57
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +123 -67
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +25 -17
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +9 -19
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +293 -286
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
- data/src/core/ext/filters/client_channel/retry_filter.cc +135 -172
- data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
- data/src/core/ext/filters/client_channel/retry_service_config.cc +193 -224
- data/src/core/ext/filters/client_channel/retry_service_config.h +22 -28
- data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
- data/src/core/ext/filters/client_channel/retry_throttle.h +29 -28
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +13 -13
- data/src/core/ext/filters/client_channel/subchannel.cc +275 -323
- data/src/core/ext/filters/client_channel/subchannel.h +45 -75
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +4 -4
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +37 -46
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +23 -111
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +90 -76
- data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +43 -18
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +20 -11
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
- data/src/core/ext/filters/http/client/http_client_filter.cc +61 -48
- data/src/core/ext/filters/http/client/http_client_filter.h +29 -22
- data/src/core/ext/filters/http/client_authority_filter.cc +28 -28
- data/src/core/ext/filters/http/client_authority_filter.h +27 -24
- data/src/core/ext/filters/http/http_filters_plugin.cc +43 -51
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +63 -56
- data/src/core/ext/filters/http/server/http_server_filter.h +28 -23
- data/src/core/ext/filters/message_size/message_size_filter.cc +109 -123
- data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
- data/src/core/ext/filters/rbac/rbac_filter.cc +28 -16
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +28 -12
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
- data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +109 -131
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +30 -24
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +167 -203
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +25 -27
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -33
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +30 -30
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +29 -29
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +714 -1060
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +24 -24
- data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/context_list.h +28 -28
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +347 -301
- data/src/core/ext/transport/chttp2/transport/flow_control.h +245 -326
- data/src/core/ext/transport/chttp2/transport/frame.h +21 -21
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +84 -239
- data/src/core/ext/transport/chttp2/transport/frame_data.h +36 -62
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +38 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +20 -20
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +27 -26
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +22 -22
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +30 -25
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +21 -21
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +35 -77
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +22 -22
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +31 -33
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +21 -21
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +159 -208
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +46 -61
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +96 -542
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +23 -23
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +28 -38
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +32 -27
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -37
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
- data/src/core/ext/transport/chttp2/transport/internal.h +225 -296
- data/src/core/ext/transport/chttp2/transport/parsing.cc +333 -129
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -23
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
- data/src/core/ext/transport/chttp2/transport/stream_map.h +33 -33
- data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
- data/src/core/ext/transport/chttp2/transport/varint.h +37 -34
- data/src/core/ext/transport/chttp2/transport/writing.cc +85 -94
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
- data/src/core/ext/transport/inproc/inproc_transport.cc +223 -273
- data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +6 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +33 -8
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +25 -19
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +168 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -43
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +195 -116
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +35 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +179 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +23 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +137 -69
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +23 -21
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +132 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +67 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +15 -9
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +73 -18
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +39 -13
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +194 -15
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +28 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +26 -11
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +124 -14
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +19 -15
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +78 -69
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +168 -82
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +887 -166
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +27 -14
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +29 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +38 -27
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +207 -52
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +13 -11
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +73 -23
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +133 -16
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +656 -12
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
- data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
- data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
- 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 +15 -2
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -2
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
- 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 +1 -2
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -222
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -74
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +740 -667
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +485 -467
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
- data/src/core/ext/upbdefs-generated/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 +65 -3
- data/src/core/ext/xds/certificate_provider_store.h +21 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
- data/src/core/ext/xds/upb_utils.h +3 -25
- data/src/core/ext/xds/xds_api.cc +90 -196
- data/src/core/ext/xds/xds_api.h +41 -39
- data/src/core/ext/xds/xds_bootstrap.cc +5 -537
- data/src/core/ext/xds/xds_bootstrap.h +41 -96
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +31 -25
- data/src/core/ext/xds/xds_certificate_provider.h +28 -4
- data/src/core/ext/xds/xds_channel_args.h +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +15 -5
- data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
- data/src/core/ext/xds/xds_client.cc +833 -1324
- data/src/core/ext/xds/xds_client.h +57 -61
- data/src/core/ext/xds/xds_client_grpc.cc +235 -0
- data/src/core/ext/xds/xds_client_grpc.h +79 -0
- data/src/core/ext/xds/xds_client_stats.cc +24 -25
- data/src/core/ext/xds/xds_client_stats.h +26 -24
- data/src/core/ext/xds/xds_cluster.cc +413 -245
- data/src/core/ext/xds/xds_cluster.h +66 -40
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +67 -77
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +47 -29
- data/src/core/ext/xds/xds_common_types.cc +238 -123
- data/src/core/ext/xds/xds_common_types.h +29 -16
- data/src/core/ext/xds/xds_endpoint.cc +265 -162
- data/src/core/ext/xds/xds_endpoint.h +19 -15
- data/src/core/ext/xds/xds_health_status.cc +80 -0
- data/src/core/ext/xds/xds_health_status.h +109 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +66 -57
- data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
- data/src/core/ext/xds/xds_http_filters.cc +70 -71
- data/src/core/ext/xds/xds_http_filters.h +73 -25
- data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
- data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
- data/src/core/ext/xds/xds_listener.cc +557 -475
- data/src/core/ext/xds/xds_listener.h +57 -51
- data/src/core/ext/xds/xds_resource_type.h +28 -22
- data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
- data/src/core/ext/xds/xds_route_config.cc +592 -570
- data/src/core/ext/xds/xds_route_config.h +74 -40
- data/src/core/ext/xds/xds_routing.cc +21 -7
- data/src/core/ext/xds/xds_routing.h +17 -12
- data/src/core/ext/xds/xds_server_config_fetcher.cc +227 -179
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +52 -52
- data/src/core/lib/address_utils/parse_address.h +46 -42
- data/src/core/lib/address_utils/sockaddr_utils.cc +38 -35
- data/src/core/lib/address_utils/sockaddr_utils.h +38 -36
- data/src/core/lib/avl/avl.h +54 -32
- data/src/core/lib/backoff/backoff.cc +19 -21
- data/src/core/lib/backoff/backoff.h +21 -21
- data/src/core/lib/channel/call_finalization.h +4 -6
- data/src/core/lib/channel/call_tracer.h +17 -8
- data/src/core/lib/channel/channel_args.cc +108 -39
- data/src/core/lib/channel/channel_args.h +285 -111
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +60 -58
- data/src/core/lib/channel/channel_stack.h +149 -146
- data/src/core/lib/channel/channel_stack_builder.cc +21 -24
- data/src/core/lib/channel/channel_stack_builder.h +19 -14
- data/src/core/lib/channel/channel_stack_builder_impl.cc +55 -26
- data/src/core/lib/channel/channel_stack_builder_impl.h +6 -3
- data/src/core/lib/channel/channel_trace.cc +24 -26
- data/src/core/lib/channel/channel_trace.h +22 -22
- data/src/core/lib/channel/channelz.cc +44 -54
- data/src/core/lib/channel/channelz.h +40 -32
- data/src/core/lib/channel/channelz_registry.cc +21 -22
- data/src/core/lib/channel/channelz_registry.h +21 -21
- data/src/core/lib/channel/connected_channel.cc +1264 -65
- data/src/core/lib/channel/connected_channel.h +21 -24
- data/src/core/lib/channel/context.h +25 -21
- data/src/core/lib/channel/promise_based_filter.cc +1544 -280
- data/src/core/lib/channel/promise_based_filter.h +466 -99
- data/src/core/lib/channel/status_util.cc +62 -17
- data/src/core/lib/channel/status_util.h +39 -22
- data/src/core/lib/compression/compression.cc +24 -19
- data/src/core/lib/compression/compression_internal.cc +43 -53
- data/src/core/lib/compression/compression_internal.h +27 -26
- data/src/core/lib/compression/message_compress.cc +28 -26
- data/src/core/lib/compression/message_compress.h +28 -29
- data/src/core/lib/config/core_configuration.cc +5 -1
- data/src/core/lib/config/core_configuration.h +84 -38
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/debug/histogram_view.h +37 -0
- data/src/core/lib/debug/stats.cc +48 -152
- data/src/core/lib/debug/stats.h +50 -57
- data/src/core/lib/debug/stats_data.cc +302 -645
- data/src/core/lib/debug/stats_data.h +293 -545
- data/src/core/lib/debug/trace.cc +18 -20
- data/src/core/lib/debug/trace.h +27 -48
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +15 -18
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -10
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +99 -0
- data/src/core/lib/event_engine/default_event_engine.h +73 -0
- data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -5
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +4 -12
- data/src/core/lib/event_engine/event_engine.cc +3 -40
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/forkable.cc +106 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/handle_containers.h +10 -3
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/poller.h +62 -0
- data/src/core/lib/event_engine/posix.h +158 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
- data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/resolved_address.cc +19 -0
- data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
- data/src/core/lib/event_engine/shim.cc +56 -0
- data/src/core/lib/event_engine/shim.h +33 -0
- data/src/core/lib/event_engine/slice.cc +8 -7
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
- data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
- data/src/core/lib/event_engine/thread_local.cc +29 -0
- data/src/core/lib/event_engine/thread_local.h +32 -0
- data/src/core/lib/event_engine/thread_pool.cc +253 -0
- data/src/core/lib/event_engine/thread_pool.h +141 -0
- data/src/core/lib/event_engine/time_util.cc +30 -0
- data/src/core/lib/event_engine/time_util.h +32 -0
- data/src/core/lib/event_engine/trace.cc +6 -0
- data/src/core/lib/event_engine/trace.h +16 -3
- data/src/core/lib/event_engine/utils.cc +44 -0
- data/src/core/lib/event_engine/utils.h +44 -0
- data/src/core/lib/event_engine/windows/iocp.cc +140 -0
- data/src/core/lib/event_engine/windows/iocp.h +69 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
- data/src/core/lib/event_engine/windows/win_socket.h +129 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
- data/src/core/lib/experiments/config.cc +161 -0
- data/src/core/lib/experiments/config.h +53 -0
- data/src/core/lib/experiments/experiments.cc +81 -0
- data/src/core/lib/experiments/experiments.h +117 -0
- data/src/core/lib/gpr/alloc.cc +19 -25
- data/src/core/lib/gpr/alloc.h +20 -20
- data/src/core/lib/gpr/atm.cc +17 -17
- data/src/core/lib/gpr/cpu_iphone.cc +24 -24
- data/src/core/lib/gpr/cpu_linux.cc +28 -23
- data/src/core/lib/gpr/cpu_posix.cc +23 -22
- data/src/core/lib/gpr/cpu_windows.cc +20 -18
- data/src/core/lib/gpr/log.cc +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 -25
- data/src/core/lib/gpr/spinlock.h +20 -20
- data/src/core/lib/gpr/string.cc +25 -24
- data/src/core/lib/gpr/string.h +61 -61
- data/src/core/lib/gpr/string_posix.cc +24 -24
- data/src/core/lib/gpr/string_util_windows.cc +25 -52
- data/src/core/lib/gpr/string_windows.cc +24 -24
- data/src/core/lib/gpr/sync.cc +25 -25
- data/src/core/lib/gpr/sync_abseil.cc +36 -40
- data/src/core/lib/gpr/sync_posix.cc +22 -34
- data/src/core/lib/gpr/sync_windows.cc +29 -27
- data/src/core/lib/gpr/time.cc +34 -30
- data/src/core/lib/gpr/time_posix.cc +41 -45
- data/src/core/lib/gpr/time_precise.cc +22 -22
- data/src/core/lib/gpr/time_precise.h +21 -22
- data/src/core/lib/gpr/time_windows.cc +35 -29
- data/src/core/lib/gpr/tmpfile.h +24 -24
- data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
- data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
- data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
- data/src/core/lib/gpr/useful.h +83 -30
- data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
- data/src/core/lib/gprpp/atomic_utils.h +20 -20
- data/src/core/lib/gprpp/bitset.h +30 -16
- data/src/core/lib/gprpp/chunked_vector.h +3 -3
- data/src/core/lib/gprpp/construct_destruct.h +3 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
- data/src/core/lib/gprpp/crash.h +34 -0
- data/src/core/lib/gprpp/debug_location.h +60 -31
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/env.h +53 -0
- data/src/core/lib/gprpp/env_linux.cc +80 -0
- data/src/core/lib/gprpp/env_posix.cc +47 -0
- data/src/core/lib/gprpp/env_windows.cc +56 -0
- data/src/core/lib/gprpp/examine_stack.cc +17 -17
- data/src/core/lib/gprpp/examine_stack.h +21 -21
- data/src/core/lib/gprpp/fork.cc +56 -48
- data/src/core/lib/gprpp/fork.h +29 -35
- data/src/core/lib/gprpp/global_config.h +20 -20
- data/src/core/lib/gprpp/global_config_custom.h +20 -20
- data/src/core/lib/gprpp/global_config_env.cc +25 -23
- data/src/core/lib/gprpp/global_config_env.h +26 -26
- data/src/core/lib/gprpp/global_config_generic.h +21 -21
- data/src/core/lib/gprpp/host_port.cc +28 -26
- data/src/core/lib/gprpp/host_port.h +32 -31
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/manual_constructor.h +21 -88
- data/src/core/lib/gprpp/match.h +3 -3
- data/src/core/lib/gprpp/memory.h +21 -21
- data/src/core/lib/gprpp/mpscq.cc +17 -17
- data/src/core/lib/gprpp/mpscq.h +21 -21
- data/src/core/lib/gprpp/no_destruct.h +95 -0
- data/src/core/lib/gprpp/notification.h +67 -0
- data/src/core/lib/gprpp/orphanable.h +21 -21
- data/src/core/lib/gprpp/overload.h +3 -3
- data/src/core/lib/gprpp/packed_table.h +40 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/ref_counted.h +21 -21
- data/src/core/lib/gprpp/ref_counted_ptr.h +41 -54
- data/src/core/lib/gprpp/single_set_ptr.h +3 -3
- data/src/core/lib/gprpp/sorted_pack.h +98 -0
- data/src/core/lib/gprpp/stat.h +3 -3
- 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 +49 -33
- data/src/core/lib/gprpp/status_helper.h +9 -5
- data/src/core/lib/gprpp/strerror.cc +43 -0
- data/src/core/lib/gprpp/strerror.h +29 -0
- data/src/core/lib/gprpp/sync.h +23 -23
- data/src/core/lib/gprpp/table.h +12 -4
- data/src/core/lib/gprpp/tchar.cc +49 -0
- data/src/core/lib/gprpp/tchar.h +33 -0
- data/src/core/lib/gprpp/thd.h +23 -23
- 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 +44 -9
- data/src/core/lib/gprpp/time.h +73 -4
- data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
- data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
- data/src/core/lib/gprpp/time_util.h +4 -4
- data/src/core/lib/gprpp/unique_type_name.h +21 -21
- data/src/core/lib/gprpp/validation_errors.cc +61 -0
- data/src/core/lib/gprpp/validation_errors.h +127 -0
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
- data/src/core/lib/handshaker/proxy_mapper.h +53 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
- data/src/core/lib/http/format_request.cc +24 -22
- data/src/core/lib/http/format_request.h +21 -21
- data/src/core/lib/http/httpcli.cc +79 -88
- data/src/core/lib/http/httpcli.h +47 -31
- data/src/core/lib/http/httpcli_security_connector.cc +47 -38
- data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
- data/src/core/lib/http/parser.cc +78 -90
- data/src/core/lib/http/parser.h +38 -35
- data/src/core/lib/iomgr/block_annotate.h +23 -23
- data/src/core/lib/iomgr/buffer_list.cc +156 -136
- data/src/core/lib/iomgr/buffer_list.h +123 -101
- data/src/core/lib/iomgr/call_combiner.cc +32 -64
- data/src/core/lib/iomgr/call_combiner.h +24 -25
- data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
- data/src/core/lib/iomgr/cfstream_handle.h +25 -25
- data/src/core/lib/iomgr/closure.cc +27 -0
- data/src/core/lib/iomgr/closure.h +95 -58
- data/src/core/lib/iomgr/combiner.cc +20 -39
- data/src/core/lib/iomgr/combiner.h +20 -20
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
- data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
- data/src/core/lib/iomgr/endpoint.cc +17 -17
- data/src/core/lib/iomgr/endpoint.h +49 -49
- data/src/core/lib/iomgr/endpoint_cfstream.cc +44 -43
- data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
- data/src/core/lib/iomgr/endpoint_pair.h +20 -20
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +34 -28
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +30 -21
- data/src/core/lib/iomgr/error.cc +51 -834
- data/src/core/lib/iomgr/error.h +45 -317
- data/src/core/lib/iomgr/error_cfstream.cc +18 -23
- data/src/core/lib/iomgr/error_cfstream.h +21 -21
- data/src/core/lib/iomgr/ev_apple.cc +21 -21
- data/src/core/lib/iomgr/ev_apple.h +21 -21
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
- data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
- data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
- data/src/core/lib/iomgr/ev_posix.cc +87 -117
- data/src/core/lib/iomgr/ev_posix.h +93 -87
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
- data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
- data/src/core/lib/iomgr/exec_ctx.cc +34 -56
- data/src/core/lib/iomgr/exec_ctx.h +151 -175
- data/src/core/lib/iomgr/executor.cc +21 -31
- data/src/core/lib/iomgr/executor.h +27 -30
- data/src/core/lib/iomgr/fork_posix.cc +30 -27
- data/src/core/lib/iomgr/fork_windows.cc +21 -21
- data/src/core/lib/iomgr/gethostname.h +20 -20
- data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
- data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
- data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
- data/src/core/lib/iomgr/internal_errqueue.h +83 -83
- data/src/core/lib/iomgr/iocp_windows.cc +23 -23
- data/src/core/lib/iomgr/iocp_windows.h +21 -21
- data/src/core/lib/iomgr/iomgr.cc +25 -19
- data/src/core/lib/iomgr/iomgr.h +35 -35
- data/src/core/lib/iomgr/iomgr_fwd.h +4 -3
- data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
- data/src/core/lib/iomgr/iomgr_internal.h +28 -28
- data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
- data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
- data/src/core/lib/iomgr/load_file.cc +24 -27
- data/src/core/lib/iomgr/load_file.h +22 -22
- data/src/core/lib/iomgr/lockfree_event.cc +114 -131
- data/src/core/lib/iomgr/lockfree_event.h +23 -23
- data/src/core/lib/iomgr/nameser.h +86 -86
- data/src/core/lib/iomgr/polling_entity.cc +25 -21
- data/src/core/lib/iomgr/polling_entity.h +29 -29
- data/src/core/lib/iomgr/pollset.cc +17 -17
- data/src/core/lib/iomgr/pollset.h +55 -55
- data/src/core/lib/iomgr/pollset_set.cc +17 -17
- data/src/core/lib/iomgr/pollset_set.h +25 -26
- data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
- data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
- data/src/core/lib/iomgr/pollset_windows.cc +32 -31
- data/src/core/lib/iomgr/pollset_windows.h +24 -24
- data/src/core/lib/iomgr/port.h +34 -31
- data/src/core/lib/iomgr/python_util.h +24 -24
- data/src/core/lib/iomgr/resolve_address.cc +26 -20
- data/src/core/lib/iomgr/resolve_address.h +54 -31
- data/src/core/lib/iomgr/resolve_address_impl.h +5 -4
- data/src/core/lib/iomgr/resolve_address_posix.cc +74 -49
- data/src/core/lib/iomgr/resolve_address_posix.h +23 -10
- data/src/core/lib/iomgr/resolve_address_windows.cc +59 -26
- data/src/core/lib/iomgr/resolve_address_windows.h +23 -10
- data/src/core/lib/iomgr/resolved_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr.h +23 -23
- data/src/core/lib/iomgr/sockaddr_posix.h +21 -21
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
- data/src/core/lib/iomgr/sockaddr_windows.h +21 -21
- data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
- data/src/core/lib/iomgr/socket_mutator.cc +19 -18
- data/src/core/lib/iomgr/socket_mutator.h +39 -39
- data/src/core/lib/iomgr/socket_utils.h +27 -27
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +80 -100
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
- data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
- data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
- data/src/core/lib/iomgr/socket_windows.cc +37 -36
- data/src/core/lib/iomgr/socket_windows.h +59 -61
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/iomgr/systemd_utils.h +33 -0
- data/src/core/lib/iomgr/tcp_client.cc +28 -24
- data/src/core/lib/iomgr/tcp_client.h +49 -38
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +39 -36
- data/src/core/lib/iomgr/tcp_client_posix.cc +236 -105
- data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
- data/src/core/lib/iomgr/tcp_client_windows.cc +64 -51
- data/src/core/lib/iomgr/tcp_posix.cc +502 -341
- data/src/core/lib/iomgr/tcp_posix.h +32 -30
- data/src/core/lib/iomgr/tcp_server.cc +33 -24
- data/src/core/lib/iomgr/tcp_server.h +78 -69
- data/src/core/lib/iomgr/tcp_server_posix.cc +358 -124
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +93 -58
- 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 +106 -116
- data/src/core/lib/iomgr/tcp_windows.cc +109 -94
- data/src/core/lib/iomgr/tcp_windows.h +34 -35
- data/src/core/lib/iomgr/timer.cc +17 -17
- data/src/core/lib/iomgr/timer.h +68 -68
- data/src/core/lib/iomgr/timer_generic.cc +125 -134
- data/src/core/lib/iomgr/timer_generic.h +21 -21
- data/src/core/lib/iomgr/timer_heap.cc +25 -25
- data/src/core/lib/iomgr/timer_heap.h +22 -22
- data/src/core/lib/iomgr/timer_manager.cc +31 -31
- data/src/core/lib/iomgr/timer_manager.h +27 -27
- data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
- data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
- data/src/core/lib/json/json.h +22 -25
- data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +217 -0
- data/src/core/lib/json/json_object_loader.h +634 -0
- data/src/core/lib/json/json_reader.cc +115 -90
- data/src/core/lib/json/json_util.cc +14 -41
- data/src/core/lib/json/json_util.h +7 -7
- data/src/core/lib/json/json_writer.cc +56 -56
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +26 -58
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +32 -41
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
- data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +18 -31
- data/src/core/lib/matchers/matchers.cc +12 -7
- data/src/core/lib/matchers/matchers.h +5 -3
- data/src/core/lib/promise/activity.cc +22 -7
- data/src/core/lib/promise/activity.h +110 -52
- data/src/core/lib/promise/arena_promise.h +105 -72
- data/src/core/lib/promise/context.h +17 -10
- data/src/core/lib/promise/detail/basic_join.h +197 -0
- data/src/core/lib/promise/detail/basic_seq.h +27 -32
- data/src/core/lib/promise/detail/promise_factory.h +61 -13
- data/src/core/lib/promise/detail/promise_like.h +3 -3
- data/src/core/lib/promise/detail/status.h +31 -3
- data/src/core/lib/promise/detail/switch.h +21 -21
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
- data/src/core/lib/promise/if.h +195 -0
- data/src/core/lib/promise/interceptor_list.h +308 -0
- data/src/core/lib/promise/intra_activity_waiter.h +9 -3
- data/src/core/lib/promise/latch.h +110 -22
- data/src/core/lib/promise/loop.h +12 -9
- data/src/core/lib/promise/map.h +4 -6
- data/src/core/lib/promise/pipe.h +608 -0
- data/src/core/lib/promise/poll.h +129 -11
- data/src/core/lib/promise/promise.h +5 -5
- data/src/core/lib/promise/race.h +6 -9
- data/src/core/lib/promise/seq.h +32 -12
- data/src/core/lib/promise/sleep.cc +56 -42
- data/src/core/lib/promise/sleep.h +40 -32
- data/src/core/lib/promise/trace.cc +20 -0
- data/src/core/lib/promise/trace.h +24 -0
- data/src/core/lib/promise/try_join.h +82 -0
- data/src/core/lib/promise/try_seq.h +39 -21
- data/src/core/lib/resolver/resolver.cc +17 -59
- data/src/core/lib/resolver/resolver.h +21 -18
- data/src/core/lib/resolver/resolver_factory.h +10 -8
- data/src/core/lib/resolver/resolver_registry.cc +17 -9
- data/src/core/lib/resolver/resolver_registry.h +15 -5
- data/src/core/lib/resolver/server_address.cc +38 -32
- data/src/core/lib/resolver/server_address.h +32 -31
- data/src/core/lib/resource_quota/api.cc +10 -2
- data/src/core/lib/resource_quota/api.h +10 -4
- data/src/core/lib/resource_quota/arena.cc +85 -21
- data/src/core/lib/resource_quota/arena.h +196 -23
- data/src/core/lib/resource_quota/memory_quota.cc +287 -108
- data/src/core/lib/resource_quota/memory_quota.h +175 -59
- data/src/core/lib/resource_quota/periodic_update.cc +78 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/resource_quota/resource_quota.h +4 -4
- data/src/core/lib/resource_quota/thread_quota.h +3 -3
- data/src/core/lib/resource_quota/trace.h +3 -3
- data/src/core/lib/security/authorization/authorization_engine.h +3 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +10 -3
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
- data/src/core/lib/security/authorization/evaluate_args.h +9 -6
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +16 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +16 -5
- data/src/core/lib/security/authorization/matchers.cc +44 -30
- data/src/core/lib/security/authorization/matchers.h +10 -3
- data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
- data/src/core/lib/security/authorization/rbac_policy.h +10 -3
- data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
- data/src/core/lib/security/context/security_context.cc +27 -25
- data/src/core/lib/security/context/security_context.h +56 -34
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +23 -22
- data/src/core/lib/security/credentials/alts/alts_credentials.h +61 -57
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +4 -3
- data/src/core/lib/security/credentials/channel_creds_registry.h +9 -4
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +27 -31
- data/src/core/lib/security/credentials/composite/composite_credentials.h +40 -29
- data/src/core/lib/security/credentials/credentials.cc +23 -26
- data/src/core/lib/security/credentials/credentials.h +62 -55
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +123 -76
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +83 -68
- data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +42 -31
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +30 -36
- data/src/core/lib/security/credentials/fake/fake_credentials.h +49 -42
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +129 -107
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +31 -25
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +27 -20
- data/src/core/lib/security/credentials/iam/iam_credentials.h +31 -21
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +7 -3
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +10 -6
- data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
- data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +29 -27
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +35 -21
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
- data/src/core/lib/security/credentials/local/local_credentials.cc +24 -24
- data/src/core/lib/security/credentials/local/local_credentials.h +32 -26
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +85 -81
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +42 -21
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +31 -30
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +47 -23
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +36 -40
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +35 -23
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +55 -48
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +22 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +10 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +9 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +36 -44
- data/src/core/lib/security/credentials/tls/tls_credentials.h +28 -25
- data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -32
- data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +74 -78
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
- data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +64 -47
- data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
- data/src/core/lib/security/security_connector/security_connector.cc +37 -35
- data/src/core/lib/security/security_connector/security_connector.h +57 -44
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +54 -45
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
- data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
- data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
- data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +58 -56
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
- data/src/core/lib/security/transport/auth_filters.h +53 -24
- data/src/core/lib/security/transport/client_auth_filter.cc +51 -32
- data/src/core/lib/security/transport/secure_endpoint.cc +112 -68
- data/src/core/lib/security/transport/secure_endpoint.h +28 -27
- data/src/core/lib/security/transport/security_handshaker.cc +139 -109
- data/src/core/lib/security/transport/security_handshaker.h +27 -22
- data/src/core/lib/security/transport/server_auth_filter.cc +157 -267
- data/src/core/lib/security/transport/tsi_error.cc +23 -20
- data/src/core/lib/security/transport/tsi_error.h +20 -20
- data/src/core/lib/security/util/json_util.cc +24 -24
- data/src/core/lib/security/util/json_util.h +21 -23
- data/src/core/lib/service_config/service_config.h +15 -4
- data/src/core/lib/service_config/service_config_call_data.h +11 -4
- data/src/core/lib/service_config/service_config_impl.cc +107 -153
- data/src/core/lib/service_config/service_config_impl.h +19 -26
- data/src/core/lib/service_config/service_config_parser.cc +10 -30
- data/src/core/lib/service_config/service_config_parser.h +13 -21
- data/src/core/lib/slice/b64.cc +26 -26
- data/src/core/lib/slice/b64.h +32 -32
- data/src/core/lib/slice/percent_encoding.cc +21 -30
- data/src/core/lib/slice/percent_encoding.h +28 -28
- data/src/core/lib/slice/slice.cc +57 -45
- data/src/core/lib/slice/slice.h +57 -18
- data/src/core/lib/slice/slice_buffer.cc +93 -60
- data/src/core/lib/slice/slice_buffer.h +72 -10
- data/src/core/lib/slice/slice_internal.h +34 -42
- data/src/core/lib/slice/slice_refcount.cc +3 -18
- data/src/core/lib/slice/slice_refcount.h +53 -18
- data/src/core/lib/slice/slice_string_helpers.cc +17 -37
- data/src/core/lib/slice/slice_string_helpers.h +21 -25
- data/src/core/lib/surface/api_trace.cc +17 -17
- data/src/core/lib/surface/api_trace.h +25 -25
- data/src/core/lib/surface/builtins.h +3 -3
- 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 +2205 -471
- data/src/core/lib/surface/call.h +121 -42
- data/src/core/lib/surface/call_details.cc +20 -21
- data/src/core/lib/surface/call_log_batch.cc +19 -18
- data/src/core/lib/surface/call_test_only.h +33 -33
- data/src/core/lib/surface/call_trace.cc +123 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +65 -69
- data/src/core/lib/surface/channel.h +45 -35
- data/src/core/lib/surface/channel_init.cc +17 -17
- data/src/core/lib/surface/channel_init.h +20 -20
- data/src/core/lib/surface/channel_ping.cc +20 -20
- data/src/core/lib/surface/channel_stack_type.cc +21 -17
- data/src/core/lib/surface/channel_stack_type.h +22 -20
- data/src/core/lib/surface/completion_queue.cc +188 -218
- data/src/core/lib/surface/completion_queue.h +39 -41
- data/src/core/lib/surface/completion_queue_factory.cc +33 -28
- data/src/core/lib/surface/completion_queue_factory.h +22 -22
- data/src/core/lib/surface/event_string.cc +18 -17
- data/src/core/lib/surface/event_string.h +22 -22
- data/src/core/lib/surface/init.cc +44 -73
- data/src/core/lib/surface/init.h +20 -20
- data/src/core/lib/surface/init_internally.cc +25 -0
- data/src/core/lib/surface/init_internally.h +37 -0
- data/src/core/lib/surface/lame_client.cc +33 -30
- data/src/core/lib/surface/lame_client.h +23 -23
- data/src/core/lib/surface/metadata_array.cc +17 -18
- data/src/core/lib/surface/server.cc +349 -130
- data/src/core/lib/surface/server.h +24 -22
- data/src/core/lib/surface/validate_metadata.cc +32 -43
- data/src/core/lib/surface/validate_metadata.h +21 -21
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/bdp_estimator.cc +18 -20
- data/src/core/lib/transport/bdp_estimator.h +21 -22
- data/src/core/lib/transport/connectivity_state.cc +19 -20
- data/src/core/lib/transport/connectivity_state.h +23 -23
- data/src/core/lib/transport/error_utils.cc +54 -78
- data/src/core/lib/transport/error_utils.h +24 -24
- data/src/core/lib/transport/handshaker.cc +66 -54
- data/src/core/lib/transport/handshaker.h +51 -47
- data/src/core/lib/transport/handshaker_factory.h +49 -24
- data/src/core/lib/transport/handshaker_registry.cc +27 -20
- data/src/core/lib/transport/handshaker_registry.h +25 -28
- data/src/core/lib/transport/http2_errors.h +22 -22
- data/src/core/lib/transport/http_connect_handshaker.cc +56 -57
- data/src/core/lib/transport/http_connect_handshaker.h +21 -21
- data/src/core/lib/transport/metadata_batch.cc +22 -4
- data/src/core/lib/transport/metadata_batch.h +129 -35
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/parsed_metadata.h +7 -5
- data/src/core/lib/transport/pid_controller.cc +20 -20
- data/src/core/lib/transport/pid_controller.h +27 -27
- data/src/core/lib/transport/status_conversion.cc +23 -25
- data/src/core/lib/transport/status_conversion.h +22 -22
- data/src/core/lib/transport/tcp_connect_handshaker.cc +34 -42
- data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +22 -22
- data/src/core/lib/transport/timeout_encoding.h +20 -20
- data/src/core/lib/transport/transport.cc +85 -46
- data/src/core/lib/transport/transport.h +219 -215
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +46 -46
- data/src/core/lib/transport/transport_op_string.cc +32 -30
- data/src/core/lib/uri/uri_parser.cc +1 -1
- data/src/core/lib/uri/uri_parser.h +3 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +53 -73
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
- data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
- data/src/core/tsi/alts/crypt/gsec.cc +26 -26
- data/src/core/tsi/alts/crypt/gsec.h +336 -336
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
- data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
- data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +51 -43
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
- data/src/core/tsi/fake_transport_security.cc +146 -110
- data/src/core/tsi/fake_transport_security.h +36 -30
- data/src/core/tsi/local_transport_security.cc +43 -38
- data/src/core/tsi/local_transport_security.h +33 -33
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
- 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 +31 -22
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
- data/src/core/tsi/ssl_transport_security.cc +299 -370
- data/src/core/tsi/ssl_transport_security.h +206 -203
- data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
- data/src/core/tsi/ssl_transport_security_utils.h +147 -0
- data/src/core/tsi/ssl_types.h +27 -27
- data/src/core/tsi/transport_security.cc +44 -32
- data/src/core/tsi/transport_security.h +49 -48
- data/src/core/tsi/transport_security_grpc.cc +23 -22
- data/src/core/tsi/transport_security_grpc.h +44 -41
- data/src/core/tsi/transport_security_interface.h +344 -332
- data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -1
- data/src/ruby/ext/grpc/extconf.rb +97 -19
- data/src/ruby/ext/grpc/rb_call.c +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +0 -6
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/spec/channel_spec.rb +5 -43
- data/src/ruby/spec/client_server_spec.rb +20 -8
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
- data/src/ruby/spec/user_agent_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
- data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +221 -39
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/macros.h +4 -21
- data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
- data/third_party/abseil-cpp/absl/base/options.h +1 -7
- data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -16
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
- data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
- data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
- data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
- data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/random.h +6 -6
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/status.cc +193 -14
- data/third_party/abseil-cpp/absl/status/status.h +24 -14
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
- data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
- data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
- data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
- data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
- data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
- data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
- data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
- data/third_party/abseil-cpp/absl/time/format.cc +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
- data/third_party/abseil-cpp/absl/time/time.cc +2 -2
- data/third_party/abseil-cpp/absl/time/time.h +268 -169
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
- data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +31 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
- data/third_party/re2/re2/bitstate.cc +3 -3
- data/third_party/re2/re2/dfa.cc +13 -13
- data/third_party/re2/re2/nfa.cc +4 -4
- data/third_party/re2/re2/onepass.cc +2 -2
- data/third_party/re2/re2/prefilter_tree.cc +27 -59
- data/third_party/re2/re2/prefilter_tree.h +3 -2
- data/third_party/re2/re2/prog.cc +11 -2
- data/third_party/re2/re2/prog.h +17 -5
- data/third_party/re2/re2/re2.cc +6 -11
- data/third_party/re2/re2/re2.h +1 -1
- data/third_party/re2/re2/regexp.cc +1 -2
- data/third_party/re2/re2/stringpiece.h +10 -7
- data/third_party/re2/re2/unicode_casefold.cc +25 -11
- data/third_party/re2/re2/unicode_groups.cc +319 -151
- data/third_party/re2/re2/walker-inl.h +3 -2
- data/third_party/re2/util/mutex.h +4 -4
- data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
- data/third_party/upb/upb/arena.c +277 -0
- data/third_party/upb/upb/arena.h +225 -0
- data/third_party/upb/upb/array.c +114 -0
- data/third_party/upb/upb/array.h +83 -0
- data/third_party/upb/upb/collections.h +36 -0
- data/third_party/upb/upb/decode.c +161 -65
- data/third_party/upb/upb/decode.h +1 -0
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/def.c +10 -2
- data/third_party/upb/upb/def.h +8 -1
- data/third_party/upb/upb/def.hpp +7 -4
- data/third_party/upb/upb/encode.c +29 -20
- data/third_party/upb/upb/encode.h +16 -6
- data/third_party/upb/upb/extension_registry.c +93 -0
- data/third_party/upb/upb/extension_registry.h +84 -0
- data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
- data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
- data/third_party/upb/upb/json_decode.c +1512 -0
- data/third_party/upb/upb/json_decode.h +47 -0
- data/third_party/upb/upb/json_encode.c +7 -3
- data/third_party/upb/upb/json_encode.h +6 -3
- data/third_party/upb/upb/map.c +108 -0
- data/third_party/upb/upb/map.h +117 -0
- data/third_party/upb/upb/message_value.h +66 -0
- data/third_party/upb/upb/mini_table.c +1147 -0
- data/third_party/upb/upb/mini_table.h +189 -0
- data/third_party/upb/upb/mini_table.hpp +112 -0
- data/third_party/upb/upb/msg.c +2 -62
- data/third_party/upb/upb/msg.h +2 -45
- data/third_party/upb/upb/msg_internal.h +28 -22
- data/third_party/upb/upb/port_def.inc +2 -1
- data/third_party/upb/upb/port_undef.inc +1 -0
- data/third_party/upb/upb/reflection.c +2 -159
- data/third_party/upb/upb/reflection.h +2 -112
- data/third_party/upb/upb/status.c +86 -0
- data/third_party/upb/upb/status.h +66 -0
- data/third_party/upb/upb/table.c +2 -2
- data/third_party/upb/upb/table_internal.h +3 -352
- data/third_party/upb/upb/text_encode.c +3 -2
- data/third_party/upb/upb/upb.c +4 -290
- data/third_party/upb/upb/upb.h +7 -196
- 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 +339 -78
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -192
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
- data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -91
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -180
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -457
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -388
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -61
- data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
- data/src/core/ext/xds/certificate_provider_registry.h +0 -57
- data/src/core/lib/event_engine/iomgr_engine.cc +0 -206
- data/src/core/lib/event_engine/iomgr_engine.h +0 -118
- data/src/core/lib/gpr/env.h +0 -40
- data/src/core/lib/gpr/env_linux.cc +0 -75
- data/src/core/lib/gpr/env_posix.cc +0 -46
- data/src/core/lib/gpr/env_windows.cc +0 -74
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/string_windows.h +0 -32
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
- data/src/core/lib/profiling/basic_timers.cc +0 -295
- data/src/core/lib/profiling/stap_timers.cc +0 -50
- data/src/core/lib/profiling/timers.h +0 -94
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -1,25 +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
|
+
#include "src/core/lib/gprpp/global_config_generic.h"
|
24
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
23
25
|
#include "src/core/lib/iomgr/port.h"
|
24
26
|
|
25
27
|
#ifdef GRPC_POSIX_SOCKET_TCP
|
@@ -47,18 +49,22 @@
|
|
47
49
|
#include <grpc/support/time.h>
|
48
50
|
|
49
51
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
50
|
-
#include "src/core/lib/
|
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"
|
56
|
+
#include "src/core/lib/experiments/experiments.h"
|
53
57
|
#include "src/core/lib/gpr/string.h"
|
54
58
|
#include "src/core/lib/gpr/useful.h"
|
59
|
+
#include "src/core/lib/gprpp/crash.h"
|
60
|
+
#include "src/core/lib/gprpp/strerror.h"
|
55
61
|
#include "src/core/lib/gprpp/sync.h"
|
56
62
|
#include "src/core/lib/iomgr/buffer_list.h"
|
57
63
|
#include "src/core/lib/iomgr/ev_posix.h"
|
64
|
+
#include "src/core/lib/iomgr/event_engine_shims/endpoint.h"
|
58
65
|
#include "src/core/lib/iomgr/executor.h"
|
59
66
|
#include "src/core/lib/iomgr/socket_utils_posix.h"
|
60
67
|
#include "src/core/lib/iomgr/tcp_posix.h"
|
61
|
-
#include "src/core/lib/profiling/timers.h"
|
62
68
|
#include "src/core/lib/resource_quota/api.h"
|
63
69
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
64
70
|
#include "src/core/lib/resource_quota/trace.h"
|
@@ -105,7 +111,7 @@ class TcpZerocopySendRecord {
|
|
105
111
|
|
106
112
|
~TcpZerocopySendRecord() {
|
107
113
|
AssertEmpty();
|
108
|
-
|
114
|
+
grpc_slice_buffer_destroy(&buf_);
|
109
115
|
}
|
110
116
|
|
111
117
|
// Given the slices that we wish to send, and the current offset into the
|
@@ -173,7 +179,7 @@ class TcpZerocopySendRecord {
|
|
173
179
|
// reference to the underlying data since we no longer need it.
|
174
180
|
void AllSendsComplete() {
|
175
181
|
GPR_DEBUG_ASSERT(ref_.load(std::memory_order_relaxed) == 0);
|
176
|
-
|
182
|
+
grpc_slice_buffer_reset_and_unref(&buf_);
|
177
183
|
}
|
178
184
|
|
179
185
|
grpc_slice_buffer buf_;
|
@@ -232,7 +238,11 @@ class TcpZerocopySendCtx {
|
|
232
238
|
// buffers that were sent with the corresponding call to sendmsg().
|
233
239
|
void NoteSend(TcpZerocopySendRecord* record) {
|
234
240
|
record->Ref();
|
235
|
-
|
241
|
+
{
|
242
|
+
MutexLock guard(&lock_);
|
243
|
+
is_in_write_ = true;
|
244
|
+
AssociateSeqWithSendRecordLocked(last_send_, record);
|
245
|
+
}
|
236
246
|
++last_send_;
|
237
247
|
}
|
238
248
|
|
@@ -253,8 +263,8 @@ class TcpZerocopySendCtx {
|
|
253
263
|
|
254
264
|
// Simply associate this send record (and the underlying sent data buffers)
|
255
265
|
// with the implicit sequence number for this zerocopy sendmsg().
|
256
|
-
void
|
257
|
-
|
266
|
+
void AssociateSeqWithSendRecordLocked(uint32_t seq,
|
267
|
+
TcpZerocopySendRecord* record) {
|
258
268
|
ctx_lookup_.emplace(seq, record);
|
259
269
|
}
|
260
270
|
|
@@ -312,7 +322,107 @@ class TcpZerocopySendCtx {
|
|
312
322
|
// zerocopy is not useful for small transfers.
|
313
323
|
size_t threshold_bytes() const { return threshold_bytes_; }
|
314
324
|
|
325
|
+
// Expected to be called by handler reading messages from the err queue.
|
326
|
+
// It is used to indicate that some OMem meory is now available. It returns
|
327
|
+
// true to tell the caller to mark the file descriptor as immediately
|
328
|
+
// writable.
|
329
|
+
//
|
330
|
+
// If a write is currently in progress on the socket (ie. we have issued a
|
331
|
+
// sendmsg() and are about to check its return value) then we set omem state
|
332
|
+
// to CHECK to make the sending thread know that some tcp_omem was
|
333
|
+
// concurrently freed even if sendmsg() returns ENOBUFS. In this case, since
|
334
|
+
// there is already an active send thread, we do not need to mark the
|
335
|
+
// socket writeable, so we return false.
|
336
|
+
//
|
337
|
+
// If there was no write in progress on the socket, and the socket was not
|
338
|
+
// marked as FULL, then we need not mark the socket writeable now that some
|
339
|
+
// tcp_omem memory is freed since it was not considered as blocked on
|
340
|
+
// tcp_omem to begin with. So in this case, return false.
|
341
|
+
//
|
342
|
+
// But, if a write was not in progress and the omem state was FULL, then we
|
343
|
+
// need to mark the socket writeable since it is no longer blocked by
|
344
|
+
// tcp_omem. In this case, return true.
|
345
|
+
//
|
346
|
+
// Please refer to the STATE TRANSITION DIAGRAM below for more details.
|
347
|
+
//
|
348
|
+
bool UpdateZeroCopyOMemStateAfterFree() {
|
349
|
+
MutexLock guard(&lock_);
|
350
|
+
if (is_in_write_) {
|
351
|
+
zcopy_enobuf_state_ = OMemState::CHECK;
|
352
|
+
return false;
|
353
|
+
}
|
354
|
+
GPR_DEBUG_ASSERT(zcopy_enobuf_state_ != OMemState::CHECK);
|
355
|
+
if (zcopy_enobuf_state_ == OMemState::FULL) {
|
356
|
+
// A previous sendmsg attempt was blocked by ENOBUFS. Return true to
|
357
|
+
// mark the fd as writable so the next write attempt could be made.
|
358
|
+
zcopy_enobuf_state_ = OMemState::OPEN;
|
359
|
+
return true;
|
360
|
+
} else if (zcopy_enobuf_state_ == OMemState::OPEN) {
|
361
|
+
// No need to mark the fd as writable because the previous write
|
362
|
+
// attempt did not encounter ENOBUFS.
|
363
|
+
return false;
|
364
|
+
} else {
|
365
|
+
// This state should never be reached because it implies that the previous
|
366
|
+
// state was CHECK and is_in_write is false. This means that after the
|
367
|
+
// previous sendmsg returned and set is_in_write to false, it did
|
368
|
+
// not update the z-copy change from CHECK to OPEN.
|
369
|
+
Crash("OMem state error!");
|
370
|
+
}
|
371
|
+
}
|
372
|
+
|
373
|
+
// Expected to be called by the thread calling sendmsg after the syscall
|
374
|
+
// invocation. is complete. If an ENOBUF is seen, it checks if the error
|
375
|
+
// handler (Tx0cp completions) has already run and free'ed up some OMem. It
|
376
|
+
// returns true indicating that the write can be attempted again immediately.
|
377
|
+
// If ENOBUFS was seen but no Tx0cp completions have been received between the
|
378
|
+
// sendmsg() and us taking this lock, then tcp_omem is still full from our
|
379
|
+
// point of view. Therefore, we do not signal that the socket is writeable
|
380
|
+
// with respect to the availability of tcp_omem. Therefore the function
|
381
|
+
// returns false. This indicates that another write should not be attempted
|
382
|
+
// immediately and the calling thread should wait until the socket is writable
|
383
|
+
// again. If ENOBUFS was not seen, then again return false because the next
|
384
|
+
// write should be attempted only when the socket is writable again.
|
385
|
+
//
|
386
|
+
// Please refer to the STATE TRANSITION DIAGRAM below for more details.
|
387
|
+
//
|
388
|
+
bool UpdateZeroCopyOMemStateAfterSend(bool seen_enobuf) {
|
389
|
+
MutexLock guard(&lock_);
|
390
|
+
is_in_write_ = false;
|
391
|
+
if (seen_enobuf) {
|
392
|
+
if (zcopy_enobuf_state_ == OMemState::CHECK) {
|
393
|
+
zcopy_enobuf_state_ = OMemState::OPEN;
|
394
|
+
return true;
|
395
|
+
} else {
|
396
|
+
zcopy_enobuf_state_ = OMemState::FULL;
|
397
|
+
}
|
398
|
+
} else if (zcopy_enobuf_state_ != OMemState::OPEN) {
|
399
|
+
zcopy_enobuf_state_ = OMemState::OPEN;
|
400
|
+
}
|
401
|
+
return false;
|
402
|
+
}
|
403
|
+
|
315
404
|
private:
|
405
|
+
// STATE TRANSITION DIAGRAM
|
406
|
+
//
|
407
|
+
// sendmsg succeeds Tx-zero copy succeeds and there is no active sendmsg
|
408
|
+
// ----<<--+ +------<<-------------------------------------+
|
409
|
+
// | | | |
|
410
|
+
// | | v sendmsg returns ENOBUFS |
|
411
|
+
// +-----> OPEN ------------->>-------------------------> FULL
|
412
|
+
// ^ |
|
413
|
+
// | |
|
414
|
+
// | sendmsg completes |
|
415
|
+
// +----<<---------- CHECK <-------<<-------------+
|
416
|
+
// Tx-zero copy succeeds and there is
|
417
|
+
// an active sendmsg
|
418
|
+
//
|
419
|
+
enum class OMemState : int8_t {
|
420
|
+
OPEN, // Everything is clear and omem is not full.
|
421
|
+
FULL, // The last sendmsg() has returned with an errno of ENOBUFS.
|
422
|
+
CHECK, // Error queue is read while is_in_write_ was true, so we should
|
423
|
+
// check this state after the sendmsg.
|
424
|
+
};
|
425
|
+
|
316
426
|
TcpZerocopySendRecord* ReleaseSendRecordLocked(uint32_t seq) {
|
317
427
|
auto iter = ctx_lookup_.find(seq);
|
318
428
|
GPR_DEBUG_ASSERT(iter != ctx_lookup_.end());
|
@@ -349,6 +459,8 @@ class TcpZerocopySendCtx {
|
|
349
459
|
size_t threshold_bytes_ = kDefaultSendBytesThreshold;
|
350
460
|
std::unordered_map<uint32_t, TcpZerocopySendRecord*> ctx_lookup_;
|
351
461
|
bool memory_limited_ = false;
|
462
|
+
bool is_in_write_ = false;
|
463
|
+
OMemState zcopy_enobuf_state_;
|
352
464
|
};
|
353
465
|
|
354
466
|
} // namespace grpc_core
|
@@ -357,16 +469,21 @@ using grpc_core::TcpZerocopySendCtx;
|
|
357
469
|
using grpc_core::TcpZerocopySendRecord;
|
358
470
|
|
359
471
|
namespace {
|
472
|
+
|
360
473
|
struct grpc_tcp {
|
361
|
-
grpc_tcp(
|
362
|
-
:
|
474
|
+
explicit grpc_tcp(const grpc_core::PosixTcpOptions& tcp_options)
|
475
|
+
: min_read_chunk_size(tcp_options.tcp_min_read_chunk_size),
|
476
|
+
max_read_chunk_size(tcp_options.tcp_max_read_chunk_size),
|
477
|
+
tcp_zerocopy_send_ctx(
|
478
|
+
tcp_options.tcp_tx_zerocopy_max_simultaneous_sends,
|
479
|
+
tcp_options.tcp_tx_zerocopy_send_bytes_threshold) {}
|
363
480
|
grpc_endpoint base;
|
364
481
|
grpc_fd* em_fd;
|
365
482
|
int fd;
|
366
|
-
|
367
|
-
|
483
|
+
// Used by the endpoint read function to distinguish the very first read call
|
484
|
+
// from the rest
|
368
485
|
bool is_first_read;
|
369
|
-
bool has_posted_reclaimer;
|
486
|
+
bool has_posted_reclaimer ABSL_GUARDED_BY(read_mu) = false;
|
370
487
|
double target_length;
|
371
488
|
double bytes_read_this_round;
|
372
489
|
grpc_core::RefCount refcount;
|
@@ -374,17 +491,18 @@ struct grpc_tcp {
|
|
374
491
|
|
375
492
|
int min_read_chunk_size;
|
376
493
|
int max_read_chunk_size;
|
494
|
+
int set_rcvlowat = 0;
|
377
495
|
|
378
|
-
|
496
|
+
// garbage after the last read
|
379
497
|
grpc_slice_buffer last_read_buffer;
|
380
498
|
|
381
499
|
grpc_core::Mutex read_mu;
|
382
500
|
grpc_slice_buffer* incoming_buffer ABSL_GUARDED_BY(read_mu) = nullptr;
|
383
|
-
int inq;
|
384
|
-
bool inq_capable;
|
501
|
+
int inq; // bytes pending on the socket from the last read.
|
502
|
+
bool inq_capable; // cache whether kernel supports inq
|
385
503
|
|
386
504
|
grpc_slice_buffer* outgoing_buffer;
|
387
|
-
|
505
|
+
// byte within outgoing_buffer->slices[0] to write next
|
388
506
|
size_t outgoing_byte_idx;
|
389
507
|
|
390
508
|
grpc_closure* read_cb;
|
@@ -402,30 +520,33 @@ struct grpc_tcp {
|
|
402
520
|
grpc_core::MemoryOwner memory_owner;
|
403
521
|
grpc_core::MemoryAllocator::Reservation self_reservation;
|
404
522
|
|
405
|
-
grpc_core::
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
* if the user wants timestamps for the write. */
|
523
|
+
grpc_core::TracedBufferList tb_list; // List of traced buffers
|
524
|
+
|
525
|
+
// grpc_endpoint_write takes an argument which if non-null means that the
|
526
|
+
// transport layer wants the TCP layer to collect timestamps for this write.
|
527
|
+
// This arg is forwarded to the timestamps callback function when the ACK
|
528
|
+
// timestamp is received from the kernel. This arg is a (void *) which allows
|
529
|
+
// users of this API to pass in a pointer to any kind of structure. This
|
530
|
+
// structure could actually be a tag or any book-keeping object that the user
|
531
|
+
// can use to distinguish between different traced writes. The only
|
532
|
+
// requirement from the TCP endpoint layer is that this arg should be non-null
|
533
|
+
// if the user wants timestamps for the write.
|
417
534
|
void* outgoing_buffer_arg;
|
418
|
-
|
419
|
-
|
420
|
-
|
535
|
+
// A counter which starts at 0. It is initialized the first time the socket
|
536
|
+
// options for collecting timestamps are set, and is incremented with each
|
537
|
+
// byte sent.
|
421
538
|
int bytes_counter;
|
422
|
-
bool socket_ts_enabled;
|
423
|
-
|
424
|
-
bool ts_capable;
|
425
|
-
gpr_atm stop_error_notification;
|
426
|
-
|
539
|
+
bool socket_ts_enabled; // True if timestamping options are set on the socket
|
540
|
+
//
|
541
|
+
bool ts_capable; // Cache whether we can set timestamping options
|
542
|
+
gpr_atm stop_error_notification; // Set to 1 if we do not want to be notified
|
543
|
+
// on errors anymore
|
427
544
|
TcpZerocopySendCtx tcp_zerocopy_send_ctx;
|
428
545
|
TcpZerocopySendRecord* current_zerocopy_send = nullptr;
|
546
|
+
|
547
|
+
int min_progress_size; // A hint from upper layers specifying the minimum
|
548
|
+
// number of bytes that need to be read to make
|
549
|
+
// meaningful progress
|
429
550
|
};
|
430
551
|
|
431
552
|
struct backup_poller {
|
@@ -465,14 +586,13 @@ static void run_poller(void* bp, grpc_error_handle /*error_ignored*/) {
|
|
465
586
|
}
|
466
587
|
gpr_mu_lock(p->pollset_mu);
|
467
588
|
grpc_core::Timestamp deadline =
|
468
|
-
grpc_core::
|
469
|
-
GRPC_STATS_INC_TCP_BACKUP_POLLER_POLLS();
|
589
|
+
grpc_core::Timestamp::Now() + grpc_core::Duration::Seconds(10);
|
470
590
|
GRPC_LOG_IF_ERROR(
|
471
591
|
"backup_poller:pollset_work",
|
472
592
|
grpc_pollset_work(BACKUP_POLLER_POLLSET(p), nullptr, deadline));
|
473
593
|
gpr_mu_unlock(p->pollset_mu);
|
474
594
|
g_backup_poller_mu->Lock();
|
475
|
-
|
595
|
+
// last "uncovered" notification is the ref that keeps us polling
|
476
596
|
if (g_uncovered_notifications_pending == 1) {
|
477
597
|
GPR_ASSERT(g_backup_poller == p);
|
478
598
|
g_backup_poller = nullptr;
|
@@ -489,7 +609,7 @@ static void run_poller(void* bp, grpc_error_handle /*error_ignored*/) {
|
|
489
609
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
490
610
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p reschedule", p);
|
491
611
|
}
|
492
|
-
grpc_core::Executor::Run(&p->run_poller,
|
612
|
+
grpc_core::Executor::Run(&p->run_poller, absl::OkStatus(),
|
493
613
|
grpc_core::ExecutorType::DEFAULT,
|
494
614
|
grpc_core::ExecutorJobType::LONG);
|
495
615
|
}
|
@@ -527,13 +647,12 @@ static void cover_self(grpc_tcp* tcp) {
|
|
527
647
|
g_backup_poller = p;
|
528
648
|
grpc_pollset_init(BACKUP_POLLER_POLLSET(p), &p->pollset_mu);
|
529
649
|
g_backup_poller_mu->Unlock();
|
530
|
-
GRPC_STATS_INC_TCP_BACKUP_POLLERS_CREATED();
|
531
650
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
532
651
|
gpr_log(GPR_INFO, "BACKUP_POLLER:%p create", p);
|
533
652
|
}
|
534
653
|
grpc_core::Executor::Run(
|
535
654
|
GRPC_CLOSURE_INIT(&p->run_poller, run_poller, p, nullptr),
|
536
|
-
|
655
|
+
absl::OkStatus(), grpc_core::ExecutorType::DEFAULT,
|
537
656
|
grpc_core::ExecutorJobType::LONG);
|
538
657
|
} else {
|
539
658
|
old_count = g_uncovered_notifications_pending++;
|
@@ -568,7 +687,7 @@ static void tcp_drop_uncovered_then_handle_write(void* arg,
|
|
568
687
|
grpc_error_handle error) {
|
569
688
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
570
689
|
gpr_log(GPR_INFO, "TCP:%p got_write: %s", arg,
|
571
|
-
|
690
|
+
grpc_core::StatusToString(error).c_str());
|
572
691
|
}
|
573
692
|
drop_uncovered(static_cast<grpc_tcp*>(arg));
|
574
693
|
tcp_handle_write(arg, error);
|
@@ -579,9 +698,9 @@ static void add_to_estimate(grpc_tcp* tcp, size_t bytes) {
|
|
579
698
|
}
|
580
699
|
|
581
700
|
static void finish_estimate(grpc_tcp* tcp) {
|
582
|
-
|
583
|
-
|
584
|
-
|
701
|
+
// If we read >80% of the target buffer in one read loop, increase the size
|
702
|
+
// of the target buffer to either the amount read, or twice its previous
|
703
|
+
// value
|
585
704
|
if (tcp->bytes_read_this_round > tcp->target_length * 0.8) {
|
586
705
|
tcp->target_length =
|
587
706
|
std::max(2 * tcp->target_length, tcp->bytes_read_this_round);
|
@@ -596,11 +715,12 @@ static grpc_error_handle tcp_annotate_error(grpc_error_handle src_error,
|
|
596
715
|
grpc_tcp* tcp) {
|
597
716
|
return grpc_error_set_str(
|
598
717
|
grpc_error_set_int(
|
599
|
-
grpc_error_set_int(src_error,
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
718
|
+
grpc_error_set_int(src_error, grpc_core::StatusIntProperty::kFd,
|
719
|
+
tcp->fd),
|
720
|
+
// All tcp errors are marked with UNAVAILABLE so that application may
|
721
|
+
// choose to retry.
|
722
|
+
grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE),
|
723
|
+
grpc_core::StatusStrProperty::kTargetAddress, tcp->peer_string);
|
604
724
|
}
|
605
725
|
|
606
726
|
static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error);
|
@@ -615,15 +735,10 @@ static void tcp_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
|
|
615
735
|
static void tcp_free(grpc_tcp* tcp) {
|
616
736
|
grpc_fd_orphan(tcp->em_fd, tcp->release_fd_cb, tcp->release_fd,
|
617
737
|
"tcp_unref_orphan");
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
grpc_core::TracedBuffer::Shutdown(
|
622
|
-
&tcp->tb_head, tcp->outgoing_buffer_arg,
|
623
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("endpoint destroyed"));
|
624
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
738
|
+
grpc_slice_buffer_destroy(&tcp->last_read_buffer);
|
739
|
+
tcp->tb_list.Shutdown(tcp->outgoing_buffer_arg,
|
740
|
+
GRPC_ERROR_CREATE("endpoint destroyed"));
|
625
741
|
tcp->outgoing_buffer_arg = nullptr;
|
626
|
-
gpr_mu_destroy(&tcp->tb_mu);
|
627
742
|
delete tcp;
|
628
743
|
}
|
629
744
|
|
@@ -655,7 +770,7 @@ static void tcp_ref(grpc_tcp* tcp) { tcp->refcount.Ref(); }
|
|
655
770
|
|
656
771
|
static void tcp_destroy(grpc_endpoint* ep) {
|
657
772
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
658
|
-
|
773
|
+
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
659
774
|
if (grpc_event_engine_can_track_errors()) {
|
660
775
|
ZerocopyDisableAndWaitForRemaining(tcp);
|
661
776
|
gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
|
@@ -671,10 +786,10 @@ static void perform_reclamation(grpc_tcp* tcp)
|
|
671
786
|
}
|
672
787
|
tcp->read_mu.Lock();
|
673
788
|
if (tcp->incoming_buffer != nullptr) {
|
674
|
-
|
789
|
+
grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
|
675
790
|
}
|
676
|
-
tcp->read_mu.Unlock();
|
677
791
|
tcp->has_posted_reclaimer = false;
|
792
|
+
tcp->read_mu.Unlock();
|
678
793
|
}
|
679
794
|
|
680
795
|
static void maybe_post_reclaimer(grpc_tcp* tcp)
|
@@ -697,23 +812,67 @@ static void tcp_trace_read(grpc_tcp* tcp, grpc_error_handle error)
|
|
697
812
|
gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
|
698
813
|
size_t i;
|
699
814
|
gpr_log(GPR_INFO, "READ %p (peer=%s) error=%s", tcp,
|
700
|
-
tcp->peer_string.c_str(),
|
815
|
+
tcp->peer_string.c_str(), grpc_core::StatusToString(error).c_str());
|
701
816
|
if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
702
817
|
for (i = 0; i < tcp->incoming_buffer->count; i++) {
|
703
818
|
char* dump = grpc_dump_slice(tcp->incoming_buffer->slices[i],
|
704
819
|
GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
705
|
-
gpr_log(GPR_DEBUG, "DATA: %s", dump);
|
820
|
+
gpr_log(GPR_DEBUG, "READ DATA: %s", dump);
|
706
821
|
gpr_free(dump);
|
707
822
|
}
|
708
823
|
}
|
709
824
|
}
|
710
825
|
}
|
711
826
|
|
712
|
-
|
713
|
-
|
827
|
+
static void update_rcvlowat(grpc_tcp* tcp)
|
828
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
|
829
|
+
if (!grpc_core::IsTcpRcvLowatEnabled()) return;
|
830
|
+
|
831
|
+
// TODO(ctiller): Check if supported by OS.
|
832
|
+
// TODO(ctiller): Allow some adjustments instead of hardcoding things.
|
833
|
+
|
834
|
+
static constexpr int kRcvLowatMax = 16 * 1024 * 1024;
|
835
|
+
static constexpr int kRcvLowatThreshold = 16 * 1024;
|
836
|
+
|
837
|
+
int remaining = std::min(static_cast<int>(tcp->incoming_buffer->length),
|
838
|
+
tcp->min_progress_size);
|
839
|
+
|
840
|
+
remaining = std::min(remaining, kRcvLowatMax);
|
841
|
+
|
842
|
+
// Setting SO_RCVLOWAT for small quantities does not save on CPU.
|
843
|
+
if (remaining < 2 * kRcvLowatThreshold) {
|
844
|
+
remaining = 0;
|
845
|
+
}
|
846
|
+
|
847
|
+
// Decrement remaining by kRcvLowatThreshold. This would have the effect of
|
848
|
+
// waking up a little early. It would help with latency because some bytes
|
849
|
+
// may arrive while we execute the recvmsg syscall after waking up.
|
850
|
+
if (remaining > 0) {
|
851
|
+
remaining -= kRcvLowatThreshold;
|
852
|
+
}
|
853
|
+
|
854
|
+
// We still do not know the RPC size. Do not set SO_RCVLOWAT.
|
855
|
+
if (tcp->set_rcvlowat <= 1 && remaining <= 1) return;
|
856
|
+
|
857
|
+
// Previous value is still valid. No change needed in SO_RCVLOWAT.
|
858
|
+
if (tcp->set_rcvlowat == remaining) {
|
859
|
+
return;
|
860
|
+
}
|
861
|
+
if (setsockopt(tcp->fd, SOL_SOCKET, SO_RCVLOWAT, &remaining,
|
862
|
+
sizeof(remaining)) != 0) {
|
863
|
+
gpr_log(GPR_ERROR, "%s",
|
864
|
+
absl::StrCat("Cannot set SO_RCVLOWAT on fd=", tcp->fd,
|
865
|
+
" err=", grpc_core::StrError(errno).c_str())
|
866
|
+
.c_str());
|
867
|
+
return;
|
868
|
+
}
|
869
|
+
tcp->set_rcvlowat = remaining;
|
870
|
+
}
|
871
|
+
|
872
|
+
// Returns true if data available to read or error other than EAGAIN.
|
873
|
+
#define MAX_READ_IOVEC 64
|
714
874
|
static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
715
875
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
|
716
|
-
GPR_TIMER_SCOPE("tcp_do_read", 0);
|
717
876
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
718
877
|
gpr_log(GPR_INFO, "TCP:%p do_read", tcp);
|
719
878
|
}
|
@@ -728,7 +887,7 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
728
887
|
CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) + CMSG_SPACE(sizeof(int));
|
729
888
|
#else
|
730
889
|
constexpr size_t cmsg_alloc_space = 24 /* CMSG_SPACE(sizeof(int)) */;
|
731
|
-
#endif
|
890
|
+
#endif // GRPC_LINUX_ERRQUEUE
|
732
891
|
char cmsgbuf[cmsg_alloc_space];
|
733
892
|
for (size_t i = 0; i < iov_len; i++) {
|
734
893
|
iov[i].iov_base = GRPC_SLICE_START_PTR(tcp->incoming_buffer->slices[i]);
|
@@ -736,11 +895,12 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
736
895
|
}
|
737
896
|
|
738
897
|
GPR_ASSERT(tcp->incoming_buffer->length != 0);
|
898
|
+
GPR_DEBUG_ASSERT(tcp->min_progress_size > 0);
|
739
899
|
|
740
900
|
do {
|
741
|
-
|
742
|
-
|
743
|
-
|
901
|
+
// Assume there is something on the queue. If we receive TCP_INQ from
|
902
|
+
// kernel, we will update this value, otherwise, we have to assume there is
|
903
|
+
// always something to read until we get EAGAIN.
|
744
904
|
tcp->inq = 1;
|
745
905
|
|
746
906
|
msg.msg_name = nullptr;
|
@@ -756,48 +916,49 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
756
916
|
}
|
757
917
|
msg.msg_flags = 0;
|
758
918
|
|
759
|
-
|
760
|
-
|
919
|
+
grpc_core::global_stats().IncrementTcpReadOffer(
|
920
|
+
tcp->incoming_buffer->length);
|
921
|
+
grpc_core::global_stats().IncrementTcpReadOfferIovSize(
|
922
|
+
tcp->incoming_buffer->count);
|
761
923
|
|
762
924
|
do {
|
763
|
-
|
764
|
-
GRPC_STATS_INC_SYSCALL_READ();
|
925
|
+
grpc_core::global_stats().IncrementSyscallRead();
|
765
926
|
read_bytes = recvmsg(tcp->fd, &msg, 0);
|
766
927
|
} while (read_bytes < 0 && errno == EINTR);
|
767
928
|
|
768
|
-
|
769
|
-
|
770
|
-
|
929
|
+
if (read_bytes < 0 && errno == EAGAIN) {
|
930
|
+
// NB: After calling call_read_cb a parallel call of the read handler may
|
931
|
+
// be running.
|
932
|
+
if (total_read_bytes > 0) {
|
933
|
+
break;
|
934
|
+
}
|
935
|
+
finish_estimate(tcp);
|
936
|
+
tcp->inq = 0;
|
937
|
+
return false;
|
938
|
+
}
|
939
|
+
|
940
|
+
// We have read something in previous reads. We need to deliver those
|
941
|
+
// bytes to the upper layer.
|
942
|
+
if (read_bytes <= 0 && total_read_bytes >= 1) {
|
771
943
|
tcp->inq = 1;
|
772
944
|
break;
|
773
945
|
}
|
774
946
|
|
775
|
-
if (read_bytes
|
776
|
-
|
777
|
-
|
778
|
-
if (
|
779
|
-
|
780
|
-
tcp->inq = 0;
|
781
|
-
return false;
|
947
|
+
if (read_bytes <= 0) {
|
948
|
+
// 0 read size ==> end of stream
|
949
|
+
grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
|
950
|
+
if (read_bytes == 0) {
|
951
|
+
*error = tcp_annotate_error(absl::InternalError("Socket closed"), tcp);
|
782
952
|
} else {
|
783
|
-
|
784
|
-
|
785
|
-
|
953
|
+
*error =
|
954
|
+
tcp_annotate_error(absl::InternalError(absl::StrCat(
|
955
|
+
"recvmsg:", grpc_core::StrError(errno))),
|
956
|
+
tcp);
|
786
957
|
}
|
787
|
-
}
|
788
|
-
if (read_bytes == 0) {
|
789
|
-
/* 0 read size ==> end of stream
|
790
|
-
*
|
791
|
-
* We may have read something, i.e., total_read_bytes > 0, but
|
792
|
-
* since the connection is closed we will drop the data here, because we
|
793
|
-
* can't call the callback multiple times. */
|
794
|
-
grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
|
795
|
-
*error = tcp_annotate_error(
|
796
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Socket closed"), tcp);
|
797
958
|
return true;
|
798
959
|
}
|
799
960
|
|
800
|
-
|
961
|
+
grpc_core::global_stats().IncrementTcpReadSize(read_bytes);
|
801
962
|
add_to_estimate(tcp, static_cast<size_t>(read_bytes));
|
802
963
|
GPR_DEBUG_ASSERT((size_t)read_bytes <=
|
803
964
|
tcp->incoming_buffer->length - total_read_bytes);
|
@@ -814,15 +975,15 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
814
975
|
}
|
815
976
|
}
|
816
977
|
}
|
817
|
-
#endif
|
978
|
+
#endif // GRPC_HAVE_TCP_INQ
|
818
979
|
|
819
980
|
total_read_bytes += read_bytes;
|
820
981
|
if (tcp->inq == 0 || total_read_bytes == tcp->incoming_buffer->length) {
|
821
982
|
break;
|
822
983
|
}
|
823
984
|
|
824
|
-
|
825
|
-
|
985
|
+
// We had a partial read, and still have space to read more data.
|
986
|
+
// So, adjust IOVs and try to read more.
|
826
987
|
size_t remaining = read_bytes;
|
827
988
|
size_t j = 0;
|
828
989
|
for (size_t i = 0; i < iov_len; i++) {
|
@@ -848,35 +1009,74 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
848
1009
|
}
|
849
1010
|
|
850
1011
|
GPR_DEBUG_ASSERT(total_read_bytes > 0);
|
1012
|
+
*error = absl::OkStatus();
|
1013
|
+
if (grpc_core::IsTcpFrameSizeTuningEnabled()) {
|
1014
|
+
// Update min progress size based on the total number of bytes read in
|
1015
|
+
// this round.
|
1016
|
+
tcp->min_progress_size -= total_read_bytes;
|
1017
|
+
if (tcp->min_progress_size > 0) {
|
1018
|
+
// There is still some bytes left to be read before we can signal
|
1019
|
+
// the read as complete. Append the bytes read so far into
|
1020
|
+
// last_read_buffer which serves as a staging buffer. Return false
|
1021
|
+
// to indicate tcp_handle_read needs to be scheduled again.
|
1022
|
+
grpc_slice_buffer_move_first(tcp->incoming_buffer, total_read_bytes,
|
1023
|
+
&tcp->last_read_buffer);
|
1024
|
+
return false;
|
1025
|
+
} else {
|
1026
|
+
// The required number of bytes have been read. Append the bytes
|
1027
|
+
// read in this round into last_read_buffer. Then swap last_read_buffer
|
1028
|
+
// and incoming_buffer. Now incoming buffer contains all the bytes
|
1029
|
+
// read since the start of the last tcp_read operation. last_read_buffer
|
1030
|
+
// would contain any spare space left in the incoming buffer. This
|
1031
|
+
// space will be used in the next tcp_read operation.
|
1032
|
+
tcp->min_progress_size = 1;
|
1033
|
+
grpc_slice_buffer_move_first(tcp->incoming_buffer, total_read_bytes,
|
1034
|
+
&tcp->last_read_buffer);
|
1035
|
+
grpc_slice_buffer_swap(&tcp->last_read_buffer, tcp->incoming_buffer);
|
1036
|
+
return true;
|
1037
|
+
}
|
1038
|
+
}
|
851
1039
|
if (total_read_bytes < tcp->incoming_buffer->length) {
|
852
1040
|
grpc_slice_buffer_trim_end(tcp->incoming_buffer,
|
853
1041
|
tcp->incoming_buffer->length - total_read_bytes,
|
854
1042
|
&tcp->last_read_buffer);
|
855
1043
|
}
|
856
|
-
*error = GRPC_ERROR_NONE;
|
857
1044
|
return true;
|
858
1045
|
}
|
859
1046
|
|
860
1047
|
static void maybe_make_read_slices(grpc_tcp* tcp)
|
861
1048
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(tcp->read_mu) {
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
1049
|
+
static const int kBigAlloc = 64 * 1024;
|
1050
|
+
static const int kSmallAlloc = 8 * 1024;
|
1051
|
+
if (tcp->incoming_buffer->length <
|
1052
|
+
static_cast<size_t>(tcp->min_progress_size)) {
|
1053
|
+
size_t allocate_length = tcp->min_progress_size;
|
1054
|
+
const size_t target_length = static_cast<size_t>(tcp->target_length);
|
1055
|
+
// If memory pressure is low and we think there will be more than
|
1056
|
+
// min_progress_size bytes to read, allocate a bit more.
|
1057
|
+
const bool low_memory_pressure =
|
1058
|
+
tcp->memory_owner.GetPressureInfo().pressure_control_value < 0.8;
|
1059
|
+
if (low_memory_pressure && target_length > allocate_length) {
|
1060
|
+
allocate_length = target_length;
|
870
1061
|
}
|
871
|
-
int target_length = static_cast<int>(tcp->target_length);
|
872
1062
|
int extra_wanted =
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
1063
|
+
allocate_length - static_cast<int>(tcp->incoming_buffer->length);
|
1064
|
+
if (extra_wanted >=
|
1065
|
+
(low_memory_pressure ? kSmallAlloc * 3 / 2 : kBigAlloc)) {
|
1066
|
+
while (extra_wanted > 0) {
|
1067
|
+
extra_wanted -= kBigAlloc;
|
1068
|
+
grpc_slice_buffer_add_indexed(tcp->incoming_buffer,
|
1069
|
+
tcp->memory_owner.MakeSlice(kBigAlloc));
|
1070
|
+
grpc_core::global_stats().IncrementTcpReadAlloc64k();
|
1071
|
+
}
|
1072
|
+
} else {
|
1073
|
+
while (extra_wanted > 0) {
|
1074
|
+
extra_wanted -= kSmallAlloc;
|
1075
|
+
grpc_slice_buffer_add_indexed(tcp->incoming_buffer,
|
1076
|
+
tcp->memory_owner.MakeSlice(kSmallAlloc));
|
1077
|
+
grpc_core::global_stats().IncrementTcpReadAlloc8k();
|
1078
|
+
}
|
1079
|
+
}
|
880
1080
|
maybe_post_reclaimer(tcp);
|
881
1081
|
}
|
882
1082
|
}
|
@@ -885,24 +1085,33 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
|
|
885
1085
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
886
1086
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
887
1087
|
gpr_log(GPR_INFO, "TCP:%p got_read: %s", tcp,
|
888
|
-
|
1088
|
+
grpc_core::StatusToString(error).c_str());
|
889
1089
|
}
|
890
1090
|
tcp->read_mu.Lock();
|
891
1091
|
grpc_error_handle tcp_read_error;
|
892
|
-
if (GPR_LIKELY(error
|
1092
|
+
if (GPR_LIKELY(error.ok())) {
|
893
1093
|
maybe_make_read_slices(tcp);
|
894
1094
|
if (!tcp_do_read(tcp, &tcp_read_error)) {
|
895
|
-
|
1095
|
+
// Maybe update rcv lowat value based on the number of bytes read in this
|
1096
|
+
// round.
|
1097
|
+
update_rcvlowat(tcp);
|
896
1098
|
tcp->read_mu.Unlock();
|
1099
|
+
// We've consumed the edge, request a new one
|
897
1100
|
notify_on_read(tcp);
|
898
1101
|
return;
|
899
1102
|
}
|
900
1103
|
tcp_trace_read(tcp, tcp_read_error);
|
901
1104
|
} else {
|
902
|
-
tcp_read_error =
|
903
|
-
|
904
|
-
|
905
|
-
}
|
1105
|
+
tcp_read_error = error;
|
1106
|
+
grpc_slice_buffer_reset_and_unref(tcp->incoming_buffer);
|
1107
|
+
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
1108
|
+
}
|
1109
|
+
// Update rcv lowat needs to be called at the end of the current read
|
1110
|
+
// operation to ensure the right SO_RCVLOWAT value is set for the next read.
|
1111
|
+
// Otherwise the next endpoint read operation may get stuck indefinitely
|
1112
|
+
// because the previously set rcv lowat value will persist and the socket may
|
1113
|
+
// erroneously considered to not be ready for read.
|
1114
|
+
update_rcvlowat(tcp);
|
906
1115
|
grpc_closure* cb = tcp->read_cb;
|
907
1116
|
tcp->read_cb = nullptr;
|
908
1117
|
tcp->incoming_buffer = nullptr;
|
@@ -912,62 +1121,67 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
|
|
912
1121
|
}
|
913
1122
|
|
914
1123
|
static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
|
915
|
-
grpc_closure* cb, bool urgent, int
|
1124
|
+
grpc_closure* cb, bool urgent, int min_progress_size) {
|
916
1125
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
917
1126
|
GPR_ASSERT(tcp->read_cb == nullptr);
|
918
1127
|
tcp->read_cb = cb;
|
919
1128
|
tcp->read_mu.Lock();
|
920
1129
|
tcp->incoming_buffer = incoming_buffer;
|
921
|
-
|
1130
|
+
tcp->min_progress_size = grpc_core::IsTcpFrameSizeTuningEnabled()
|
1131
|
+
? std::max(min_progress_size, 1)
|
1132
|
+
: 1;
|
1133
|
+
grpc_slice_buffer_reset_and_unref(incoming_buffer);
|
922
1134
|
grpc_slice_buffer_swap(incoming_buffer, &tcp->last_read_buffer);
|
923
|
-
tcp->read_mu.Unlock();
|
924
1135
|
TCP_REF(tcp, "read");
|
925
1136
|
if (tcp->is_first_read) {
|
926
|
-
|
927
|
-
|
1137
|
+
tcp->read_mu.Unlock();
|
1138
|
+
// Endpoint read called for the very first time. Register read callback with
|
1139
|
+
// the polling engine
|
928
1140
|
tcp->is_first_read = false;
|
929
1141
|
notify_on_read(tcp);
|
930
1142
|
} else if (!urgent && tcp->inq == 0) {
|
931
|
-
|
932
|
-
|
933
|
-
|
1143
|
+
tcp->read_mu.Unlock();
|
1144
|
+
// Upper layer asked to read more but we know there is no pending data
|
1145
|
+
// to read from previous reads. So, wait for POLLIN.
|
1146
|
+
//
|
934
1147
|
notify_on_read(tcp);
|
935
1148
|
} else {
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
1149
|
+
tcp->read_mu.Unlock();
|
1150
|
+
// Not the first time. We may or may not have more bytes available. In any
|
1151
|
+
// case call tcp->read_done_closure (i.e tcp_handle_read()) which does the
|
1152
|
+
// right thing (i.e calls tcp_do_read() which either reads the available
|
1153
|
+
// bytes or calls notify_on_read() to be notified when new bytes become
|
1154
|
+
// available
|
941
1155
|
grpc_core::Closure::Run(DEBUG_LOCATION, &tcp->read_done_closure,
|
942
|
-
|
1156
|
+
absl::OkStatus());
|
943
1157
|
}
|
944
1158
|
}
|
945
1159
|
|
946
|
-
|
947
|
-
|
948
|
-
ssize_t tcp_send(int fd, const struct msghdr* msg, int
|
949
|
-
|
1160
|
+
// A wrapper around sendmsg. It sends \a msg over \a fd and returns the number
|
1161
|
+
// of bytes sent.
|
1162
|
+
ssize_t tcp_send(int fd, const struct msghdr* msg, int* saved_errno,
|
1163
|
+
int additional_flags = 0) {
|
950
1164
|
ssize_t sent_length;
|
951
1165
|
do {
|
952
|
-
|
953
|
-
|
1166
|
+
// TODO(klempner): Cork if this is a partial write
|
1167
|
+
grpc_core::global_stats().IncrementSyscallWrite();
|
954
1168
|
sent_length = sendmsg(fd, msg, SENDMSG_FLAGS | additional_flags);
|
955
|
-
} while (sent_length < 0 && errno == EINTR);
|
1169
|
+
} while (sent_length < 0 && (*saved_errno = errno) == EINTR);
|
956
1170
|
return sent_length;
|
957
1171
|
}
|
958
1172
|
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
964
|
-
|
1173
|
+
/// This is to be called if outgoing_buffer_arg is not null. On linux platforms,
|
1174
|
+
/// this will call sendmsg with socket options set to collect timestamps inside
|
1175
|
+
/// the kernel. On return, sent_length is set to the return value of the sendmsg
|
1176
|
+
/// call. Returns false if setting the socket options failed. This is not
|
1177
|
+
/// implemented for non-linux platforms currently, and crashes out.
|
1178
|
+
///
|
965
1179
|
static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
966
1180
|
size_t sending_length,
|
967
|
-
ssize_t* sent_length,
|
1181
|
+
ssize_t* sent_length, int* saved_errno,
|
968
1182
|
int additional_flags = 0);
|
969
1183
|
|
970
|
-
|
1184
|
+
/// The callback function to be invoked when we get an error on the socket.
|
971
1185
|
static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error_handle error);
|
972
1186
|
|
973
1187
|
static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
|
@@ -1008,7 +1222,7 @@ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp) {
|
|
1008
1222
|
|
1009
1223
|
static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
1010
1224
|
size_t sending_length,
|
1011
|
-
ssize_t* sent_length,
|
1225
|
+
ssize_t* sent_length, int* saved_errno,
|
1012
1226
|
int additional_flags) {
|
1013
1227
|
if (!tcp->socket_ts_enabled) {
|
1014
1228
|
uint32_t opt = grpc_core::kTimestampingSocketOptions;
|
@@ -1022,7 +1236,7 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
|
1022
1236
|
tcp->bytes_counter = -1;
|
1023
1237
|
tcp->socket_ts_enabled = true;
|
1024
1238
|
}
|
1025
|
-
|
1239
|
+
// Set control message to indicate that you want timestamps.
|
1026
1240
|
union {
|
1027
1241
|
char cmsg_buf[CMSG_SPACE(sizeof(uint32_t))];
|
1028
1242
|
struct cmsghdr align;
|
@@ -1036,16 +1250,13 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
|
|
1036
1250
|
msg->msg_control = u.cmsg_buf;
|
1037
1251
|
msg->msg_controllen = CMSG_SPACE(sizeof(uint32_t));
|
1038
1252
|
|
1039
|
-
|
1040
|
-
ssize_t length = tcp_send(tcp->fd, msg, additional_flags);
|
1253
|
+
// If there was an error on sendmsg the logic in tcp_flush will handle it.
|
1254
|
+
ssize_t length = tcp_send(tcp->fd, msg, saved_errno, additional_flags);
|
1041
1255
|
*sent_length = length;
|
1042
|
-
|
1256
|
+
// Only save timestamps if all the bytes were taken by sendmsg.
|
1043
1257
|
if (sending_length == static_cast<size_t>(length)) {
|
1044
|
-
|
1045
|
-
|
1046
|
-
&tcp->tb_head, static_cast<uint32_t>(tcp->bytes_counter + length),
|
1047
|
-
tcp->fd, tcp->outgoing_buffer_arg);
|
1048
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
1258
|
+
tcp->tb_list.AddNewEntry(static_cast<uint32_t>(tcp->bytes_counter + length),
|
1259
|
+
tcp->fd, tcp->outgoing_buffer_arg);
|
1049
1260
|
tcp->outgoing_buffer_arg = nullptr;
|
1050
1261
|
}
|
1051
1262
|
return true;
|
@@ -1072,6 +1283,9 @@ static void process_zerocopy(grpc_tcp* tcp, struct cmsghdr* cmsg) {
|
|
1072
1283
|
GPR_DEBUG_ASSERT(record);
|
1073
1284
|
UnrefMaybePutZerocopySendRecord(tcp, record, seq, "CALLBACK RCVD");
|
1074
1285
|
}
|
1286
|
+
if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterFree()) {
|
1287
|
+
grpc_fd_set_writable(tcp->em_fd);
|
1288
|
+
}
|
1075
1289
|
}
|
1076
1290
|
|
1077
1291
|
// Whether the cmsg received from error queue is of the IPv4 or IPv6 levels.
|
@@ -1088,13 +1302,13 @@ static bool CmsgIsZeroCopy(const cmsghdr& cmsg) {
|
|
1088
1302
|
return serr->ee_errno == 0 && serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY;
|
1089
1303
|
}
|
1090
1304
|
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1305
|
+
/// Reads \a cmsg to derive timestamps from the control messages. If a valid
|
1306
|
+
/// timestamp is found, the traced buffer list is updated with this timestamp.
|
1307
|
+
/// The caller of this function should be looping on the control messages found
|
1308
|
+
/// in \a msg. \a cmsg should point to the control message that the caller wants
|
1309
|
+
/// processed.
|
1310
|
+
/// On return, a pointer to a control message is returned. On the next
|
1311
|
+
/// iteration, CMSG_NXTHDR(msg, ret_val) should be passed as \a cmsg.
|
1098
1312
|
struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
|
1099
1313
|
struct cmsghdr* cmsg) {
|
1100
1314
|
auto next_cmsg = CMSG_NXTHDR(msg, cmsg);
|
@@ -1106,7 +1320,7 @@ struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
|
|
1106
1320
|
return cmsg;
|
1107
1321
|
}
|
1108
1322
|
|
1109
|
-
|
1323
|
+
// Check if next_cmsg is an OPT_STATS msg
|
1110
1324
|
if (next_cmsg->cmsg_level == SOL_SOCKET &&
|
1111
1325
|
next_cmsg->cmsg_type == SCM_TIMESTAMPING_OPT_STATS) {
|
1112
1326
|
opt_stats = next_cmsg;
|
@@ -1136,19 +1350,13 @@ struct cmsghdr* process_timestamp(grpc_tcp* tcp, msghdr* msg,
|
|
1136
1350
|
gpr_log(GPR_ERROR, "Unexpected control message");
|
1137
1351
|
return cmsg;
|
1138
1352
|
}
|
1139
|
-
|
1140
|
-
* to protect the traced buffer list. A lock free list might be better. Using
|
1141
|
-
* a simple mutex for now. */
|
1142
|
-
gpr_mu_lock(&tcp->tb_mu);
|
1143
|
-
grpc_core::TracedBuffer::ProcessTimestamp(&tcp->tb_head, serr, opt_stats,
|
1144
|
-
tss);
|
1145
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
1353
|
+
tcp->tb_list.ProcessTimestamp(serr, opt_stats, tss);
|
1146
1354
|
return next_cmsg;
|
1147
1355
|
}
|
1148
1356
|
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1357
|
+
/// For linux platforms, reads the socket's error queue and processes error
|
1358
|
+
/// messages from the queue.
|
1359
|
+
///
|
1152
1360
|
static bool process_errors(grpc_tcp* tcp) {
|
1153
1361
|
bool processed_err = false;
|
1154
1362
|
struct iovec iov;
|
@@ -1160,13 +1368,13 @@ static bool process_errors(grpc_tcp* tcp) {
|
|
1160
1368
|
msg.msg_iov = &iov;
|
1161
1369
|
msg.msg_iovlen = 0;
|
1162
1370
|
msg.msg_flags = 0;
|
1163
|
-
|
1164
|
-
|
1371
|
+
// Allocate enough space so we don't need to keep increasing this as size
|
1372
|
+
// of OPT_STATS increase
|
1165
1373
|
constexpr size_t cmsg_alloc_space =
|
1166
1374
|
CMSG_SPACE(sizeof(grpc_core::scm_timestamping)) +
|
1167
1375
|
CMSG_SPACE(sizeof(sock_extended_err) + sizeof(sockaddr_in)) +
|
1168
1376
|
CMSG_SPACE(32 * NLA_ALIGN(NLA_HDRLEN + sizeof(uint64_t)));
|
1169
|
-
|
1377
|
+
// Allocate aligned space for cmsgs received along with timestamps
|
1170
1378
|
union {
|
1171
1379
|
char rbuf[cmsg_alloc_space];
|
1172
1380
|
struct cmsghdr align;
|
@@ -1181,7 +1389,7 @@ static bool process_errors(grpc_tcp* tcp) {
|
|
1181
1389
|
} while (r < 0 && saved_errno == EINTR);
|
1182
1390
|
|
1183
1391
|
if (r == -1 && saved_errno == EAGAIN) {
|
1184
|
-
return processed_err;
|
1392
|
+
return processed_err; // No more errors to process
|
1185
1393
|
}
|
1186
1394
|
if (r == -1) {
|
1187
1395
|
return processed_err;
|
@@ -1191,7 +1399,7 @@ static bool process_errors(grpc_tcp* tcp) {
|
|
1191
1399
|
}
|
1192
1400
|
|
1193
1401
|
if (msg.msg_controllen == 0) {
|
1194
|
-
|
1402
|
+
// There was no control message found. It was probably spurious.
|
1195
1403
|
return processed_err;
|
1196
1404
|
}
|
1197
1405
|
bool seen = false;
|
@@ -1207,8 +1415,8 @@ static bool process_errors(grpc_tcp* tcp) {
|
|
1207
1415
|
seen = true;
|
1208
1416
|
processed_err = true;
|
1209
1417
|
} else {
|
1210
|
-
|
1211
|
-
|
1418
|
+
// Got a control message that is not a timestamp or zerocopy. Don't know
|
1419
|
+
// how to handle this.
|
1212
1420
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1213
1421
|
gpr_log(GPR_INFO,
|
1214
1422
|
"unknown control message cmsg_level:%d cmsg_type:%d",
|
@@ -1228,22 +1436,22 @@ static void tcp_handle_error(void* arg /* grpc_tcp */,
|
|
1228
1436
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
1229
1437
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1230
1438
|
gpr_log(GPR_INFO, "TCP:%p got_error: %s", tcp,
|
1231
|
-
|
1439
|
+
grpc_core::StatusToString(error).c_str());
|
1232
1440
|
}
|
1233
1441
|
|
1234
|
-
if (error
|
1442
|
+
if (!error.ok() ||
|
1235
1443
|
static_cast<bool>(gpr_atm_acq_load(&tcp->stop_error_notification))) {
|
1236
|
-
|
1237
|
-
|
1444
|
+
// We aren't going to register to hear on error anymore, so it is safe to
|
1445
|
+
// unref.
|
1238
1446
|
TCP_UNREF(tcp, "error-tracking");
|
1239
1447
|
return;
|
1240
1448
|
}
|
1241
1449
|
|
1242
|
-
|
1243
|
-
|
1450
|
+
// We are still interested in collecting timestamps, so let's try reading
|
1451
|
+
// them.
|
1244
1452
|
bool processed = process_errors(tcp);
|
1245
|
-
|
1246
|
-
|
1453
|
+
// This might not a timestamps error. Set the read and write closures to be
|
1454
|
+
// ready.
|
1247
1455
|
if (!processed) {
|
1248
1456
|
grpc_fd_set_readable(tcp->em_fd);
|
1249
1457
|
grpc_fd_set_writable(tcp->em_fd);
|
@@ -1251,7 +1459,7 @@ static void tcp_handle_error(void* arg /* grpc_tcp */,
|
|
1251
1459
|
grpc_fd_notify_on_error(tcp->em_fd, &tcp->error_closure);
|
1252
1460
|
}
|
1253
1461
|
|
1254
|
-
#else
|
1462
|
+
#else // GRPC_LINUX_ERRQUEUE
|
1255
1463
|
static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
|
1256
1464
|
grpc_tcp* /*tcp*/, grpc_slice_buffer* /*buf*/) {
|
1257
1465
|
return nullptr;
|
@@ -1262,6 +1470,7 @@ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* /*tcp*/) {}
|
|
1262
1470
|
static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
|
1263
1471
|
size_t /*sending_length*/,
|
1264
1472
|
ssize_t* /*sent_length*/,
|
1473
|
+
int* /* saved_errno */,
|
1265
1474
|
int /*additional_flags*/) {
|
1266
1475
|
gpr_log(GPR_ERROR, "Write with timestamps not supported for this platform");
|
1267
1476
|
GPR_ASSERT(0);
|
@@ -1273,17 +1482,14 @@ static void tcp_handle_error(void* /*arg*/ /* grpc_tcp */,
|
|
1273
1482
|
gpr_log(GPR_ERROR, "Error handling is not supported for this platform");
|
1274
1483
|
GPR_ASSERT(0);
|
1275
1484
|
}
|
1276
|
-
#endif
|
1485
|
+
#endif // GRPC_LINUX_ERRQUEUE
|
1277
1486
|
|
1278
|
-
|
1279
|
-
|
1487
|
+
// If outgoing_buffer_arg is filled, shuts down the list early, so that any
|
1488
|
+
// release operations needed can be performed on the arg
|
1280
1489
|
void tcp_shutdown_buffer_list(grpc_tcp* tcp) {
|
1281
1490
|
if (tcp->outgoing_buffer_arg) {
|
1282
|
-
|
1283
|
-
|
1284
|
-
&tcp->tb_head, tcp->outgoing_buffer_arg,
|
1285
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("TracedBuffer list shutdown"));
|
1286
|
-
gpr_mu_unlock(&tcp->tb_mu);
|
1491
|
+
tcp->tb_list.Shutdown(tcp->outgoing_buffer_arg,
|
1492
|
+
GRPC_ERROR_CREATE("TracedBuffer list shutdown"));
|
1287
1493
|
tcp->outgoing_buffer_arg = nullptr;
|
1288
1494
|
}
|
1289
1495
|
}
|
@@ -1342,6 +1548,7 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1342
1548
|
size_t unwind_slice_idx;
|
1343
1549
|
size_t unwind_byte_idx;
|
1344
1550
|
bool tried_sending_message;
|
1551
|
+
int saved_errno;
|
1345
1552
|
msghdr msg;
|
1346
1553
|
// iov consumes a large space. Keep it as the last item on the stack to
|
1347
1554
|
// improve locality. After all, we expect only the first elements of it being
|
@@ -1360,12 +1567,13 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1360
1567
|
// Before calling sendmsg (with or without timestamps): we
|
1361
1568
|
// take a single ref on the zerocopy send record.
|
1362
1569
|
tcp->tcp_zerocopy_send_ctx.NoteSend(record);
|
1570
|
+
saved_errno = 0;
|
1363
1571
|
if (tcp->outgoing_buffer_arg != nullptr) {
|
1364
1572
|
if (!tcp->ts_capable ||
|
1365
1573
|
!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
|
1366
|
-
MSG_ZEROCOPY)) {
|
1367
|
-
|
1368
|
-
|
1574
|
+
&saved_errno, MSG_ZEROCOPY)) {
|
1575
|
+
// We could not set socket options to collect Fathom timestamps.
|
1576
|
+
// Fallback on writing without timestamps.
|
1369
1577
|
tcp->ts_capable = false;
|
1370
1578
|
tcp_shutdown_buffer_list(tcp);
|
1371
1579
|
} else {
|
@@ -1375,31 +1583,36 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
|
|
1375
1583
|
if (!tried_sending_message) {
|
1376
1584
|
msg.msg_control = nullptr;
|
1377
1585
|
msg.msg_controllen = 0;
|
1378
|
-
|
1379
|
-
|
1380
|
-
sent_length = tcp_send(tcp->fd, &msg, MSG_ZEROCOPY);
|
1586
|
+
grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
|
1587
|
+
grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
|
1588
|
+
sent_length = tcp_send(tcp->fd, &msg, &saved_errno, MSG_ZEROCOPY);
|
1589
|
+
}
|
1590
|
+
if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterSend(
|
1591
|
+
saved_errno == ENOBUFS)) {
|
1592
|
+
grpc_fd_set_writable(tcp->em_fd);
|
1381
1593
|
}
|
1382
1594
|
if (sent_length < 0) {
|
1383
1595
|
// If this particular send failed, drop ref taken earlier in this method.
|
1384
1596
|
tcp->tcp_zerocopy_send_ctx.UndoSend();
|
1385
|
-
if (
|
1597
|
+
if (saved_errno == EAGAIN || saved_errno == ENOBUFS) {
|
1386
1598
|
record->UnwindIfThrottled(unwind_slice_idx, unwind_byte_idx);
|
1387
1599
|
return false;
|
1388
|
-
} else if (
|
1389
|
-
*error = tcp_annotate_error(GRPC_OS_ERROR(
|
1600
|
+
} else if (saved_errno == EPIPE) {
|
1601
|
+
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1390
1602
|
tcp_shutdown_buffer_list(tcp);
|
1391
1603
|
return true;
|
1392
1604
|
} else {
|
1393
|
-
*error = tcp_annotate_error(GRPC_OS_ERROR(
|
1605
|
+
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1394
1606
|
tcp_shutdown_buffer_list(tcp);
|
1395
1607
|
return true;
|
1396
1608
|
}
|
1397
1609
|
}
|
1610
|
+
grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
|
1398
1611
|
tcp->bytes_counter += sent_length;
|
1399
1612
|
record->UpdateOffsetForBytesSent(sending_length,
|
1400
1613
|
static_cast<size_t>(sent_length));
|
1401
1614
|
if (record->AllSlicesSent()) {
|
1402
|
-
*error =
|
1615
|
+
*error = absl::OkStatus();
|
1403
1616
|
return true;
|
1404
1617
|
}
|
1405
1618
|
}
|
@@ -1434,6 +1647,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1434
1647
|
size_t trailing;
|
1435
1648
|
size_t unwind_slice_idx;
|
1436
1649
|
size_t unwind_byte_idx;
|
1650
|
+
int saved_errno;
|
1437
1651
|
|
1438
1652
|
// We always start at zero, because we eagerly unref and trim the slice
|
1439
1653
|
// buffer as we write
|
@@ -1465,11 +1679,13 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1465
1679
|
msg.msg_iovlen = iov_size;
|
1466
1680
|
msg.msg_flags = 0;
|
1467
1681
|
bool tried_sending_message = false;
|
1682
|
+
saved_errno = 0;
|
1468
1683
|
if (tcp->outgoing_buffer_arg != nullptr) {
|
1469
1684
|
if (!tcp->ts_capable ||
|
1470
|
-
!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length
|
1471
|
-
|
1472
|
-
|
1685
|
+
!tcp_write_with_timestamps(tcp, &msg, sending_length, &sent_length,
|
1686
|
+
&saved_errno)) {
|
1687
|
+
// We could not set socket options to collect Fathom timestamps.
|
1688
|
+
// Fallback on writing without timestamps.
|
1473
1689
|
tcp->ts_capable = false;
|
1474
1690
|
tcp_shutdown_buffer_list(tcp);
|
1475
1691
|
} else {
|
@@ -1480,14 +1696,14 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1480
1696
|
msg.msg_control = nullptr;
|
1481
1697
|
msg.msg_controllen = 0;
|
1482
1698
|
|
1483
|
-
|
1484
|
-
|
1699
|
+
grpc_core::global_stats().IncrementTcpWriteSize(sending_length);
|
1700
|
+
grpc_core::global_stats().IncrementTcpWriteIovSize(iov_size);
|
1485
1701
|
|
1486
|
-
sent_length = tcp_send(tcp->fd, &msg);
|
1702
|
+
sent_length = tcp_send(tcp->fd, &msg, &saved_errno);
|
1487
1703
|
}
|
1488
1704
|
|
1489
1705
|
if (sent_length < 0) {
|
1490
|
-
if (
|
1706
|
+
if (saved_errno == EAGAIN || saved_errno == ENOBUFS) {
|
1491
1707
|
tcp->outgoing_byte_idx = unwind_byte_idx;
|
1492
1708
|
// unref all and forget about all slices that have been written to this
|
1493
1709
|
// point
|
@@ -1495,20 +1711,21 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1495
1711
|
grpc_slice_buffer_remove_first(tcp->outgoing_buffer);
|
1496
1712
|
}
|
1497
1713
|
return false;
|
1498
|
-
} else if (
|
1499
|
-
*error = tcp_annotate_error(GRPC_OS_ERROR(
|
1500
|
-
|
1714
|
+
} else if (saved_errno == EPIPE) {
|
1715
|
+
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1716
|
+
grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
|
1501
1717
|
tcp_shutdown_buffer_list(tcp);
|
1502
1718
|
return true;
|
1503
1719
|
} else {
|
1504
|
-
*error = tcp_annotate_error(GRPC_OS_ERROR(
|
1505
|
-
|
1720
|
+
*error = tcp_annotate_error(GRPC_OS_ERROR(saved_errno, "sendmsg"), tcp);
|
1721
|
+
grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
|
1506
1722
|
tcp_shutdown_buffer_list(tcp);
|
1507
1723
|
return true;
|
1508
1724
|
}
|
1509
1725
|
}
|
1510
1726
|
|
1511
1727
|
GPR_ASSERT(tcp->outgoing_byte_idx == 0);
|
1728
|
+
grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
|
1512
1729
|
tcp->bytes_counter += sent_length;
|
1513
1730
|
trailing = sending_length - static_cast<size_t>(sent_length);
|
1514
1731
|
while (trailing > 0) {
|
@@ -1525,8 +1742,8 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1525
1742
|
}
|
1526
1743
|
}
|
1527
1744
|
if (outgoing_slice_idx == tcp->outgoing_buffer->count) {
|
1528
|
-
*error =
|
1529
|
-
|
1745
|
+
*error = absl::OkStatus();
|
1746
|
+
grpc_slice_buffer_reset_and_unref(tcp->outgoing_buffer);
|
1530
1747
|
return true;
|
1531
1748
|
}
|
1532
1749
|
}
|
@@ -1537,7 +1754,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1537
1754
|
grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
|
1538
1755
|
grpc_closure* cb;
|
1539
1756
|
|
1540
|
-
if (error
|
1757
|
+
if (!error.ok()) {
|
1541
1758
|
cb = tcp->write_cb;
|
1542
1759
|
tcp->write_cb = nullptr;
|
1543
1760
|
if (tcp->current_zerocopy_send != nullptr) {
|
@@ -1545,11 +1762,10 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1545
1762
|
"handle_write_err");
|
1546
1763
|
tcp->current_zerocopy_send = nullptr;
|
1547
1764
|
}
|
1548
|
-
grpc_core::Closure::Run(DEBUG_LOCATION, cb,
|
1765
|
+
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
1549
1766
|
TCP_UNREF(tcp, "write");
|
1550
1767
|
return;
|
1551
1768
|
}
|
1552
|
-
|
1553
1769
|
bool flush_result =
|
1554
1770
|
tcp->current_zerocopy_send != nullptr
|
1555
1771
|
? tcp_flush_zerocopy(tcp, tcp->current_zerocopy_send, &error)
|
@@ -1560,13 +1776,13 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1560
1776
|
}
|
1561
1777
|
notify_on_write(tcp);
|
1562
1778
|
// tcp_flush does not populate error if it has returned false.
|
1563
|
-
GPR_DEBUG_ASSERT(error
|
1779
|
+
GPR_DEBUG_ASSERT(error.ok());
|
1564
1780
|
} else {
|
1565
1781
|
cb = tcp->write_cb;
|
1566
1782
|
tcp->write_cb = nullptr;
|
1567
1783
|
tcp->current_zerocopy_send = nullptr;
|
1568
1784
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1569
|
-
gpr_log(GPR_INFO, "write: %s",
|
1785
|
+
gpr_log(GPR_INFO, "write: %s", grpc_core::StatusToString(error).c_str());
|
1570
1786
|
}
|
1571
1787
|
// No need to take a ref on error since tcp_flush provides a ref.
|
1572
1788
|
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
@@ -1576,11 +1792,12 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1576
1792
|
|
1577
1793
|
static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
1578
1794
|
grpc_closure* cb, void* arg, int /*max_frame_size*/) {
|
1579
|
-
GPR_TIMER_SCOPE("tcp_write", 0);
|
1580
1795
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
1581
|
-
grpc_error_handle error
|
1796
|
+
grpc_error_handle error;
|
1582
1797
|
TcpZerocopySendRecord* zerocopy_send_record = nullptr;
|
1583
1798
|
|
1799
|
+
grpc_core::EventLog::Append("tcp-write-outstanding", buf->length);
|
1800
|
+
|
1584
1801
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1585
1802
|
size_t i;
|
1586
1803
|
|
@@ -1589,7 +1806,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1589
1806
|
if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
|
1590
1807
|
char* data =
|
1591
1808
|
grpc_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
1592
|
-
gpr_log(GPR_DEBUG, "DATA: %s", data);
|
1809
|
+
gpr_log(GPR_DEBUG, "WRITE DATA: %s", data);
|
1593
1810
|
gpr_free(data);
|
1594
1811
|
}
|
1595
1812
|
}
|
@@ -1602,9 +1819,8 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1602
1819
|
grpc_core::Closure::Run(
|
1603
1820
|
DEBUG_LOCATION, cb,
|
1604
1821
|
grpc_fd_is_shutdown(tcp->em_fd)
|
1605
|
-
? tcp_annotate_error(
|
1606
|
-
|
1607
|
-
: GRPC_ERROR_NONE);
|
1822
|
+
? tcp_annotate_error(GRPC_ERROR_CREATE("EOF"), tcp)
|
1823
|
+
: absl::OkStatus());
|
1608
1824
|
tcp_shutdown_buffer_list(tcp);
|
1609
1825
|
return;
|
1610
1826
|
}
|
@@ -1634,7 +1850,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
|
|
1634
1850
|
notify_on_write(tcp);
|
1635
1851
|
} else {
|
1636
1852
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
|
1637
|
-
gpr_log(GPR_INFO, "write: %s",
|
1853
|
+
gpr_log(GPR_INFO, "write: %s", grpc_core::StatusToString(error).c_str());
|
1638
1854
|
}
|
1639
1855
|
grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
|
1640
1856
|
}
|
@@ -1697,72 +1913,16 @@ static const grpc_endpoint_vtable vtable = {tcp_read,
|
|
1697
1913
|
tcp_get_fd,
|
1698
1914
|
tcp_can_track_err};
|
1699
1915
|
|
1700
|
-
#define MAX_CHUNK_SIZE (32 * 1024 * 1024)
|
1701
|
-
|
1702
1916
|
grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
1703
|
-
const
|
1917
|
+
const grpc_core::PosixTcpOptions& options,
|
1704
1918
|
absl::string_view peer_string) {
|
1705
|
-
|
1706
|
-
int tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE;
|
1707
|
-
int tcp_max_read_chunk_size = 4 * 1024 * 1024;
|
1708
|
-
int tcp_min_read_chunk_size = 256;
|
1709
|
-
bool tcp_tx_zerocopy_enabled = kZerocpTxEnabledDefault;
|
1710
|
-
int tcp_tx_zerocopy_send_bytes_thresh =
|
1711
|
-
grpc_core::TcpZerocopySendCtx::kDefaultSendBytesThreshold;
|
1712
|
-
int tcp_tx_zerocopy_max_simult_sends =
|
1713
|
-
grpc_core::TcpZerocopySendCtx::kDefaultMaxSends;
|
1714
|
-
if (channel_args != nullptr) {
|
1715
|
-
for (size_t i = 0; i < channel_args->num_args; i++) {
|
1716
|
-
if (0 ==
|
1717
|
-
strcmp(channel_args->args[i].key, GRPC_ARG_TCP_READ_CHUNK_SIZE)) {
|
1718
|
-
grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
|
1719
|
-
tcp_read_chunk_size =
|
1720
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
1721
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
1722
|
-
GRPC_ARG_TCP_MIN_READ_CHUNK_SIZE)) {
|
1723
|
-
grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
|
1724
|
-
tcp_min_read_chunk_size =
|
1725
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
1726
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
1727
|
-
GRPC_ARG_TCP_MAX_READ_CHUNK_SIZE)) {
|
1728
|
-
grpc_integer_options options = {tcp_read_chunk_size, 1, MAX_CHUNK_SIZE};
|
1729
|
-
tcp_max_read_chunk_size =
|
1730
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
1731
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
1732
|
-
GRPC_ARG_TCP_TX_ZEROCOPY_ENABLED)) {
|
1733
|
-
tcp_tx_zerocopy_enabled = grpc_channel_arg_get_bool(
|
1734
|
-
&channel_args->args[i], kZerocpTxEnabledDefault);
|
1735
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
1736
|
-
GRPC_ARG_TCP_TX_ZEROCOPY_SEND_BYTES_THRESHOLD)) {
|
1737
|
-
grpc_integer_options options = {
|
1738
|
-
grpc_core::TcpZerocopySendCtx::kDefaultSendBytesThreshold, 0,
|
1739
|
-
INT_MAX};
|
1740
|
-
tcp_tx_zerocopy_send_bytes_thresh =
|
1741
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
1742
|
-
} else if (0 == strcmp(channel_args->args[i].key,
|
1743
|
-
GRPC_ARG_TCP_TX_ZEROCOPY_MAX_SIMULT_SENDS)) {
|
1744
|
-
grpc_integer_options options = {
|
1745
|
-
grpc_core::TcpZerocopySendCtx::kDefaultMaxSends, 0, INT_MAX};
|
1746
|
-
tcp_tx_zerocopy_max_simult_sends =
|
1747
|
-
grpc_channel_arg_get_integer(&channel_args->args[i], options);
|
1748
|
-
}
|
1749
|
-
}
|
1750
|
-
}
|
1751
|
-
|
1752
|
-
if (tcp_min_read_chunk_size > tcp_max_read_chunk_size) {
|
1753
|
-
tcp_min_read_chunk_size = tcp_max_read_chunk_size;
|
1754
|
-
}
|
1755
|
-
tcp_read_chunk_size = grpc_core::Clamp(
|
1756
|
-
tcp_read_chunk_size, tcp_min_read_chunk_size, tcp_max_read_chunk_size);
|
1757
|
-
|
1758
|
-
grpc_tcp* tcp = new grpc_tcp(tcp_tx_zerocopy_max_simult_sends,
|
1759
|
-
tcp_tx_zerocopy_send_bytes_thresh);
|
1919
|
+
grpc_tcp* tcp = new grpc_tcp(options);
|
1760
1920
|
tcp->base.vtable = &vtable;
|
1761
1921
|
tcp->peer_string = std::string(peer_string);
|
1762
1922
|
tcp->fd = grpc_fd_wrapped_fd(em_fd);
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1923
|
+
GPR_ASSERT(options.resource_quota != nullptr);
|
1924
|
+
tcp->memory_owner =
|
1925
|
+
options.resource_quota->memory_quota()->CreateMemoryOwner(peer_string);
|
1766
1926
|
tcp->self_reservation = tcp->memory_owner.MakeReservation(sizeof(grpc_tcp));
|
1767
1927
|
grpc_resolved_address resolved_local_addr;
|
1768
1928
|
memset(&resolved_local_addr, 0, sizeof(resolved_local_addr));
|
@@ -1781,18 +1941,17 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1781
1941
|
tcp->current_zerocopy_send = nullptr;
|
1782
1942
|
tcp->release_fd_cb = nullptr;
|
1783
1943
|
tcp->release_fd = nullptr;
|
1784
|
-
tcp->target_length = static_cast<double>(tcp_read_chunk_size);
|
1785
|
-
tcp->min_read_chunk_size = tcp_min_read_chunk_size;
|
1786
|
-
tcp->max_read_chunk_size = tcp_max_read_chunk_size;
|
1944
|
+
tcp->target_length = static_cast<double>(options.tcp_read_chunk_size);
|
1787
1945
|
tcp->bytes_read_this_round = 0;
|
1788
|
-
|
1946
|
+
// Will be set to false by the very first endpoint read function
|
1789
1947
|
tcp->is_first_read = true;
|
1790
|
-
tcp->has_posted_reclaimer = false;
|
1791
1948
|
tcp->bytes_counter = -1;
|
1792
1949
|
tcp->socket_ts_enabled = false;
|
1793
1950
|
tcp->ts_capable = true;
|
1794
1951
|
tcp->outgoing_buffer_arg = nullptr;
|
1795
|
-
|
1952
|
+
tcp->min_progress_size = 1;
|
1953
|
+
if (options.tcp_tx_zero_copy_enabled &&
|
1954
|
+
!tcp->tcp_zerocopy_send_ctx.memory_limited()) {
|
1796
1955
|
#ifdef GRPC_LINUX_ERRQUEUE
|
1797
1956
|
const int enable = 1;
|
1798
1957
|
auto err =
|
@@ -1804,14 +1963,12 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1804
1963
|
}
|
1805
1964
|
#endif
|
1806
1965
|
}
|
1807
|
-
|
1966
|
+
// paired with unref in grpc_tcp_destroy
|
1808
1967
|
new (&tcp->refcount) grpc_core::RefCount(
|
1809
1968
|
1, GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace) ? "tcp" : nullptr);
|
1810
1969
|
gpr_atm_no_barrier_store(&tcp->shutdown_count, 0);
|
1811
1970
|
tcp->em_fd = em_fd;
|
1812
1971
|
grpc_slice_buffer_init(&tcp->last_read_buffer);
|
1813
|
-
gpr_mu_init(&tcp->tb_mu);
|
1814
|
-
tcp->tb_head = nullptr;
|
1815
1972
|
GRPC_CLOSURE_INIT(&tcp->read_done_closure, tcp_handle_read, tcp,
|
1816
1973
|
grpc_schedule_on_exec_ctx);
|
1817
1974
|
if (grpc_event_engine_run_in_background()) {
|
@@ -1824,7 +1981,7 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1824
1981
|
tcp_drop_uncovered_then_handle_write, tcp,
|
1825
1982
|
grpc_schedule_on_exec_ctx);
|
1826
1983
|
}
|
1827
|
-
|
1984
|
+
// Always assume there is something on the queue to read.
|
1828
1985
|
tcp->inq = 1;
|
1829
1986
|
#ifdef GRPC_HAVE_TCP_INQ
|
1830
1987
|
int one = 1;
|
@@ -1836,12 +1993,12 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1836
1993
|
}
|
1837
1994
|
#else
|
1838
1995
|
tcp->inq_capable = false;
|
1839
|
-
#endif
|
1840
|
-
|
1996
|
+
#endif // GRPC_HAVE_TCP_INQ
|
1997
|
+
// Start being notified on errors if event engine can track errors.
|
1841
1998
|
if (grpc_event_engine_can_track_errors()) {
|
1842
|
-
|
1843
|
-
|
1844
|
-
|
1999
|
+
// Grab a ref to tcp so that we can safely access the tcp struct when
|
2000
|
+
// processing errors. We unref when we no longer want to track errors
|
2001
|
+
// separately.
|
1845
2002
|
TCP_REF(tcp, "error-tracking");
|
1846
2003
|
gpr_atm_rel_store(&tcp->stop_error_notification, 0);
|
1847
2004
|
GRPC_CLOSURE_INIT(&tcp->error_closure, tcp_handle_error, tcp,
|
@@ -1860,13 +2017,17 @@ int grpc_tcp_fd(grpc_endpoint* ep) {
|
|
1860
2017
|
|
1861
2018
|
void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
|
1862
2019
|
grpc_closure* done) {
|
2020
|
+
if (grpc_event_engine::experimental::grpc_is_event_engine_endpoint(ep)) {
|
2021
|
+
return grpc_event_engine::experimental::
|
2022
|
+
grpc_event_engine_endpoint_destroy_and_release_fd(ep, fd, done);
|
2023
|
+
}
|
1863
2024
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
1864
2025
|
GPR_ASSERT(ep->vtable == &vtable);
|
1865
2026
|
tcp->release_fd = fd;
|
1866
2027
|
tcp->release_fd_cb = done;
|
1867
|
-
|
2028
|
+
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
1868
2029
|
if (grpc_event_engine_can_track_errors()) {
|
1869
|
-
|
2030
|
+
// Stop errors notification.
|
1870
2031
|
ZerocopyDisableAndWaitForRemaining(tcp);
|
1871
2032
|
gpr_atm_no_barrier_store(&tcp->stop_error_notification, true);
|
1872
2033
|
grpc_fd_set_error(tcp->em_fd);
|
@@ -1881,4 +2042,4 @@ void grpc_tcp_posix_shutdown() {
|
|
1881
2042
|
g_backup_poller_mu = nullptr;
|
1882
2043
|
}
|
1883
2044
|
|
1884
|
-
#endif
|
2045
|
+
#endif // GRPC_POSIX_SOCKET_TCP
|