grpc 1.48.0 → 1.50.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 +114 -150
- data/include/grpc/event_engine/endpoint_config.h +11 -5
- data/include/grpc/event_engine/event_engine.h +20 -17
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
- data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
- data/include/grpc/impl/codegen/atm_windows.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +9 -8
- data/include/grpc/impl/codegen/port_platform.h +0 -8
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +6 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
- data/src/core/ext/filters/client_channel/backup_poller.cc +4 -6
- data/src/core/ext/filters/client_channel/client_channel.cc +154 -218
- data/src/core/ext/filters/client_channel/client_channel.h +16 -9
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +0 -16
- data/src/core/ext/filters/client_channel/config_selector.h +12 -4
- data/src/core/ext/filters/client_channel/connector.h +4 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +55 -74
- data/src/core/ext/filters/client_channel/http_proxy.h +15 -11
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +20 -16
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +11 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +0 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +181 -194
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +20 -11
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +250 -146
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +41 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +35 -32
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +195 -299
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +237 -250
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +12 -7
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +431 -498
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +31 -30
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +27 -27
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +108 -124
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +68 -76
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +131 -227
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +126 -121
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +325 -304
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +172 -101
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -16
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +51 -32
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +87 -41
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +16 -6
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +167 -168
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +40 -32
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
- data/src/core/ext/filters/client_channel/retry_filter.cc +25 -36
- data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
- data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
- data/src/core/ext/filters/client_channel/subchannel.cc +86 -121
- data/src/core/ext/filters/client_channel/subchannel.h +20 -11
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +4 -6
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
- data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +24 -19
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
- data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
- data/src/core/ext/filters/http/client_authority_filter.h +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -2
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -5
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
- data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +40 -63
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +86 -107
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +155 -295
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +139 -42
- data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +27 -28
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +30 -38
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -10
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +11 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +44 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -14
- data/src/core/ext/transport/inproc/inproc_transport.cc +41 -77
- 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 +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -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 +352 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -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 +21 -19
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -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 +23 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
- 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 +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -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 +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
- 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 +21 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -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.h +6 -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 +5 -5
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
- 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 +37 -13
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -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 +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -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 +21 -9
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
- 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 +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -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 +46 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -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 +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
- 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 +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
- 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 +5 -5
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
- 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 +131 -16
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -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/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/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/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/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.h +6 -2
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
- 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/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/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/typed_struct.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
- 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 +256 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -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 +191 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
- 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/listener/v3/listener.upbdefs.c +162 -139
- 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/udp_listener_config.upbdefs.c +39 -31
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
- 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 +72 -75
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -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/opentelemetry.upbdefs.c +47 -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/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -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/regex.upbdefs.c +29 -28
- 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/google/protobuf/descriptor.upbdefs.c +92 -90
- data/src/core/ext/xds/certificate_provider_store.cc +63 -3
- data/src/core/ext/xds/certificate_provider_store.h +9 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +5 -5
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/upb_utils.h +0 -21
- data/src/core/ext/xds/xds_api.cc +73 -102
- data/src/core/ext/xds/xds_api.h +26 -28
- data/src/core/ext/xds/xds_bootstrap.cc +5 -550
- data/src/core/ext/xds/xds_bootstrap.h +39 -91
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +370 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +169 -0
- data/src/core/ext/xds/xds_certificate_provider.h +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
- data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
- data/src/core/ext/xds/xds_client.cc +732 -1317
- data/src/core/ext/xds/xds_client.h +33 -59
- data/src/core/ext/xds/xds_client_grpc.cc +229 -0
- data/src/core/ext/xds/xds_client_grpc.h +79 -0
- data/src/core/ext/xds/xds_client_stats.cc +4 -4
- data/src/core/ext/xds/xds_cluster.cc +162 -165
- data/src/core/ext/xds/xds_cluster.h +8 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +12 -14
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
- data/src/core/ext/xds/xds_common_types.cc +140 -108
- data/src/core/ext/xds/xds_common_types.h +6 -7
- data/src/core/ext/xds/xds_endpoint.cc +87 -85
- data/src/core/ext/xds/xds_endpoint.h +4 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
- data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
- data/src/core/ext/xds/xds_lb_policy_registry.cc +21 -22
- data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
- data/src/core/ext/xds/xds_listener.cc +348 -313
- data/src/core/ext/xds/xds_listener.h +4 -5
- data/src/core/ext/xds/xds_resource_type.h +23 -9
- data/src/core/ext/xds/xds_route_config.cc +193 -191
- data/src/core/ext/xds/xds_route_config.h +31 -17
- data/src/core/ext/xds/xds_routing.cc +3 -6
- data/src/core/ext/xds/xds_routing.h +7 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +81 -84
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +357 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +19 -17
- data/src/core/lib/address_utils/parse_address.h +8 -5
- data/src/core/lib/avl/avl.h +47 -25
- data/src/core/lib/backoff/backoff.cc +2 -4
- data/src/core/lib/channel/call_finalization.h +1 -3
- data/src/core/lib/channel/call_tracer.h +1 -1
- data/src/core/lib/channel/channel_args.cc +88 -19
- data/src/core/lib/channel/channel_args.h +218 -67
- data/src/core/lib/channel/channel_stack.cc +0 -1
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_stack_builder.h +2 -2
- data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
- data/src/core/lib/channel/channel_trace.cc +3 -4
- data/src/core/lib/channel/channelz.cc +27 -37
- data/src/core/lib/channel/channelz.h +9 -0
- data/src/core/lib/channel/promise_based_filter.cc +18 -19
- data/src/core/lib/channel/promise_based_filter.h +0 -1
- data/src/core/lib/channel/status_util.cc +27 -0
- data/src/core/lib/channel/status_util.h +10 -0
- data/src/core/lib/config/core_configuration.cc +5 -1
- data/src/core/lib/config/core_configuration.h +81 -35
- data/src/core/lib/debug/stats.cc +39 -46
- data/src/core/lib/debug/stats.h +11 -13
- data/src/core/lib/debug/stats_data.cc +118 -614
- data/src/core/lib/debug/stats_data.h +67 -465
- data/src/core/lib/debug/trace.cc +0 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +12 -20
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +13 -7
- data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
- data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
- data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
- data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
- data/src/core/lib/event_engine/forkable.cc +101 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/poller.h +56 -0
- data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
- data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +87 -30
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +40 -9
- data/src/core/lib/event_engine/socket_notifier.h +55 -0
- data/src/core/lib/event_engine/thread_pool.cc +195 -0
- data/src/core/lib/event_engine/thread_pool.h +114 -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/utils.cc +44 -0
- data/src/core/lib/event_engine/utils.h +36 -0
- data/src/core/lib/event_engine/windows/iocp.cc +155 -0
- data/src/core/lib/event_engine/windows/iocp.h +69 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
- data/src/core/lib/event_engine/windows/win_socket.h +120 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
- data/src/core/lib/experiments/config.cc +146 -0
- data/src/core/lib/experiments/config.h +43 -0
- data/src/core/lib/experiments/experiments.cc +75 -0
- data/src/core/lib/experiments/experiments.h +56 -0
- data/src/core/lib/gpr/alloc.cc +1 -9
- data/src/core/lib/gpr/log_windows.cc +0 -1
- data/src/core/lib/gpr/string_util_windows.cc +3 -30
- data/src/core/lib/gpr/sync_abseil.cc +0 -14
- data/src/core/lib/gpr/sync_posix.cc +0 -14
- data/src/core/lib/gpr/time.cc +11 -9
- data/src/core/lib/gpr/time_posix.cc +0 -6
- data/src/core/lib/gpr/time_precise.h +1 -1
- data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
- data/src/core/lib/gpr/useful.h +40 -0
- data/src/core/lib/gprpp/bitset.h +3 -13
- data/src/core/lib/gprpp/debug_location.h +39 -7
- data/src/core/lib/{gpr → gprpp}/env.h +25 -12
- data/src/core/lib/{gpr → gprpp}/env_linux.cc +20 -15
- data/src/core/lib/{gpr → gprpp}/env_posix.cc +11 -10
- data/src/core/lib/gprpp/env_windows.cc +56 -0
- data/src/core/lib/gprpp/fork.cc +14 -22
- data/src/core/lib/gprpp/fork.h +0 -8
- data/src/core/lib/gprpp/global_config_env.cc +7 -6
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/no_destruct.h +94 -0
- data/src/core/lib/gprpp/notification.h +67 -0
- data/src/core/lib/gprpp/packed_table.h +40 -0
- data/src/core/lib/gprpp/ref_counted_ptr.h +20 -34
- data/src/core/lib/gprpp/sorted_pack.h +98 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -0
- data/src/core/lib/gprpp/status_helper.h +6 -0
- data/src/core/lib/gprpp/table.h +9 -2
- data/src/core/lib/gprpp/tchar.cc +49 -0
- data/src/core/lib/gprpp/tchar.h +33 -0
- data/src/core/lib/gprpp/time.cc +21 -0
- data/src/core/lib/gprpp/time.h +55 -0
- data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
- data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
- data/src/core/lib/gprpp/validation_errors.cc +61 -0
- data/src/core/lib/gprpp/validation_errors.h +110 -0
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
- data/src/core/{ext/filters/client_channel → lib/handshaker}/proxy_mapper.h +16 -17
- 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/httpcli.cc +12 -24
- data/src/core/lib/http/httpcli_security_connector.cc +11 -11
- data/src/core/lib/iomgr/call_combiner.cc +0 -34
- data/src/core/lib/iomgr/closure.h +0 -10
- data/src/core/lib/iomgr/combiner.cc +0 -20
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +14 -9
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
- data/src/core/lib/iomgr/error.cc +0 -773
- data/src/core/lib/iomgr/error.h +0 -145
- data/src/core/lib/iomgr/error_cfstream.cc +0 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +1 -38
- data/src/core/lib/iomgr/ev_poll_posix.cc +19 -26
- data/src/core/lib/iomgr/exec_ctx.cc +0 -22
- data/src/core/lib/iomgr/exec_ctx.h +7 -31
- data/src/core/lib/iomgr/executor.cc +0 -10
- data/src/core/lib/iomgr/executor.h +0 -3
- data/src/core/lib/iomgr/iocp_windows.cc +1 -2
- data/src/core/lib/iomgr/iomgr.cc +6 -8
- data/src/core/lib/iomgr/iomgr_fwd.h +1 -0
- data/src/core/lib/iomgr/lockfree_event.cc +0 -17
- data/src/core/lib/iomgr/pollset.h +1 -1
- data/src/core/lib/iomgr/pollset_set.h +0 -1
- data/src/core/lib/iomgr/port.h +3 -0
- data/src/core/lib/iomgr/resolve_address.h +30 -6
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +43 -8
- data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
- data/src/core/lib/iomgr/resolve_address_windows.cc +45 -10
- data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +2 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +12 -34
- data/src/core/lib/iomgr/socket_utils_posix.cc +83 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
- data/src/core/lib/iomgr/socket_windows.h +0 -2
- data/src/core/lib/iomgr/tcp_client.cc +6 -7
- data/src/core/lib/iomgr/tcp_client.h +11 -11
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +33 -29
- data/src/core/lib/iomgr/tcp_client_posix.h +12 -9
- data/src/core/lib/iomgr/tcp_client_windows.cc +6 -6
- data/src/core/lib/iomgr/tcp_posix.cc +249 -120
- data/src/core/lib/iomgr/tcp_posix.h +3 -1
- data/src/core/lib/iomgr/tcp_server.cc +5 -4
- data/src/core/lib/iomgr/tcp_server.h +9 -6
- data/src/core/lib/iomgr/tcp_server_posix.cc +17 -28
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +3 -3
- data/src/core/lib/iomgr/tcp_server_windows.cc +6 -7
- data/src/core/lib/iomgr/tcp_windows.cc +0 -1
- data/src/core/lib/iomgr/tcp_windows.h +0 -1
- data/src/core/lib/iomgr/timer_generic.cc +10 -12
- data/src/core/lib/iomgr/timer_manager.cc +1 -2
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +0 -2
- data/src/core/lib/json/json.h +19 -22
- data/src/core/lib/json/json_args.h +34 -0
- data/src/core/lib/json/json_object_loader.cc +202 -0
- data/src/core/lib/json/json_object_loader.h +598 -0
- data/src/core/lib/json/json_reader.cc +86 -62
- data/src/core/lib/json/json_util.cc +9 -36
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +20 -29
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -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 +6 -6
- data/src/core/lib/promise/activity.h +57 -10
- data/src/core/lib/promise/arena_promise.h +84 -81
- data/src/core/lib/promise/context.h +1 -2
- data/src/core/lib/promise/detail/basic_seq.h +43 -23
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/map.h +0 -1
- data/src/core/lib/promise/seq.h +25 -4
- data/src/core/lib/promise/sleep.cc +50 -42
- data/src/core/lib/promise/sleep.h +32 -23
- data/src/core/lib/promise/try_seq.h +26 -6
- data/src/core/lib/resolver/resolver.cc +0 -47
- data/src/core/lib/resolver/resolver.h +15 -15
- data/src/core/lib/resolver/resolver_factory.h +2 -3
- data/src/core/lib/resolver/resolver_registry.cc +1 -1
- data/src/core/lib/resolver/resolver_registry.h +2 -3
- data/src/core/lib/resolver/server_address.cc +11 -15
- data/src/core/lib/resolver/server_address.h +4 -8
- data/src/core/lib/resource_quota/api.cc +10 -1
- data/src/core/lib/resource_quota/api.h +6 -0
- data/src/core/lib/resource_quota/arena.cc +19 -1
- data/src/core/lib/resource_quota/arena.h +24 -2
- data/src/core/lib/resource_quota/memory_quota.cc +143 -19
- data/src/core/lib/resource_quota/memory_quota.h +85 -17
- 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/security/authorization/evaluate_args.cc +10 -7
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
- data/src/core/lib/security/authorization/matchers.cc +13 -10
- data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
- data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +3 -3
- 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/credentials/alts/alts_credentials.cc +2 -3
- data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
- data/src/core/lib/security/credentials/credentials.h +16 -12
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +33 -27
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +34 -24
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
- data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +5 -8
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +35 -32
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
- data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +14 -15
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
- data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
- data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -20
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +10 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
- data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
- data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
- data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/security_connector.h +5 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
- data/src/core/lib/security/transport/auth_filters.h +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +15 -5
- data/src/core/lib/security/transport/secure_endpoint.cc +0 -4
- data/src/core/lib/security/transport/security_handshaker.cc +32 -44
- data/src/core/lib/security/transport/security_handshaker.h +2 -1
- data/src/core/lib/service_config/service_config.h +11 -0
- data/src/core/lib/service_config/service_config_impl.cc +98 -97
- data/src/core/lib/service_config/service_config_impl.h +11 -13
- data/src/core/lib/service_config/service_config_parser.cc +26 -27
- data/src/core/lib/service_config/service_config_parser.h +10 -22
- data/src/core/lib/slice/percent_encoding.cc +4 -13
- data/src/core/lib/slice/slice.cc +10 -4
- data/src/core/lib/surface/call.cc +9 -13
- data/src/core/lib/surface/channel.cc +9 -8
- data/src/core/lib/surface/channel.h +1 -1
- data/src/core/lib/surface/completion_queue.cc +16 -30
- data/src/core/lib/surface/completion_queue.h +1 -4
- data/src/core/lib/surface/completion_queue_factory.cc +5 -0
- data/src/core/lib/surface/init.cc +17 -16
- data/src/core/lib/surface/init_internally.cc +24 -0
- data/src/core/lib/surface/init_internally.h +28 -0
- data/src/core/lib/surface/lame_client.cc +2 -3
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +8 -19
- data/src/core/lib/surface/server.h +11 -13
- data/src/core/lib/surface/validate_metadata.cc +4 -14
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -3
- data/src/core/lib/transport/connectivity_state.cc +0 -1
- data/src/core/lib/transport/connectivity_state.h +1 -1
- data/src/core/lib/transport/error_utils.cc +0 -36
- data/src/core/lib/transport/handshaker.cc +7 -9
- data/src/core/lib/transport/handshaker.h +4 -5
- data/src/core/lib/transport/handshaker_factory.h +2 -3
- data/src/core/lib/transport/handshaker_registry.cc +2 -1
- data/src/core/lib/transport/handshaker_registry.h +2 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
- data/src/core/lib/transport/metadata_batch.cc +7 -3
- data/src/core/lib/transport/metadata_batch.h +61 -14
- data/src/core/lib/transport/parsed_metadata.h +4 -3
- data/src/core/lib/transport/status_conversion.cc +1 -3
- data/src/core/lib/transport/tcp_connect_handshaker.cc +20 -22
- data/src/core/lib/transport/transport.h +0 -8
- data/src/core/lib/transport/transport_impl.h +0 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +23 -46
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +13 -25
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
- data/src/core/tsi/fake_transport_security.cc +53 -30
- data/src/core/tsi/local_transport_security.cc +9 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
- data/src/core/tsi/ssl_transport_security.cc +47 -23
- data/src/core/tsi/transport_security.cc +18 -6
- data/src/core/tsi/transport_security.h +2 -1
- data/src/core/tsi/transport_security_interface.h +17 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/spec/channel_spec.rb +5 -0
- 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/functional/any_invocable.h +313 -0
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
- 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
- metadata +117 -51
- 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 -190
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -90
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
- data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
- data/src/core/ext/xds/certificate_provider_registry.h +0 -59
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +0 -123
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +0 -70
- data/src/core/lib/event_engine/promise.h +0 -69
- data/src/core/lib/gpr/env_windows.cc +0 -74
- data/src/core/lib/gpr/string_windows.h +0 -32
- 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/detail/switch.h +0 -1455
@@ -20,6 +20,7 @@
|
|
20
20
|
|
21
21
|
#include "src/core/lib/resource_quota/arena.h"
|
22
22
|
|
23
|
+
#include <atomic>
|
23
24
|
#include <new>
|
24
25
|
|
25
26
|
#include <grpc/support/alloc.h>
|
@@ -49,7 +50,7 @@ Arena::~Arena() {
|
|
49
50
|
Zone* z = last_zone_;
|
50
51
|
while (z) {
|
51
52
|
Zone* prev_z = z->prev;
|
52
|
-
z
|
53
|
+
Destruct(z);
|
53
54
|
gpr_free_aligned(z);
|
54
55
|
z = prev_z;
|
55
56
|
}
|
@@ -71,6 +72,16 @@ std::pair<Arena*, void*> Arena::CreateWithAlloc(
|
|
71
72
|
}
|
72
73
|
|
73
74
|
size_t Arena::Destroy() {
|
75
|
+
ManagedNewObject* p;
|
76
|
+
// Outer loop: clear the managed new object list.
|
77
|
+
// We do this repeatedly in case a destructor ends up allocating something.
|
78
|
+
while ((p = managed_new_head_.exchange(nullptr, std::memory_order_relaxed)) !=
|
79
|
+
nullptr) {
|
80
|
+
// Inner loop: destruct a batch of objects.
|
81
|
+
while (p != nullptr) {
|
82
|
+
Destruct(std::exchange(p, p->next));
|
83
|
+
}
|
84
|
+
}
|
74
85
|
size_t size = total_used_.load(std::memory_order_relaxed);
|
75
86
|
memory_allocator_->Release(total_allocated_.load(std::memory_order_relaxed));
|
76
87
|
this->~Arena();
|
@@ -98,4 +109,11 @@ void* Arena::AllocZone(size_t size) {
|
|
98
109
|
return reinterpret_cast<char*>(z) + zone_base_size;
|
99
110
|
}
|
100
111
|
|
112
|
+
void Arena::ManagedNewObject::Link(std::atomic<ManagedNewObject*>* head) {
|
113
|
+
next = head->load(std::memory_order_relaxed);
|
114
|
+
while (!head->compare_exchange_weak(next, this, std::memory_order_acq_rel,
|
115
|
+
std::memory_order_relaxed)) {
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
101
119
|
} // namespace grpc_core
|
@@ -31,12 +31,12 @@
|
|
31
31
|
|
32
32
|
#include <atomic>
|
33
33
|
#include <memory>
|
34
|
-
#include <new>
|
35
34
|
#include <utility>
|
36
35
|
|
37
36
|
#include <grpc/event_engine/memory_allocator.h>
|
38
37
|
|
39
38
|
#include "src/core/lib/gpr/alloc.h"
|
39
|
+
#include "src/core/lib/gprpp/construct_destruct.h"
|
40
40
|
#include "src/core/lib/promise/context.h"
|
41
41
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
42
42
|
|
@@ -76,15 +76,36 @@ class Arena {
|
|
76
76
|
template <typename T, typename... Args>
|
77
77
|
T* New(Args&&... args) {
|
78
78
|
T* t = static_cast<T*>(Alloc(sizeof(T)));
|
79
|
-
|
79
|
+
Construct(t, std::forward<Args>(args)...);
|
80
80
|
return t;
|
81
81
|
}
|
82
82
|
|
83
|
+
// Like New, but has the arena call p->~T() at arena destruction time.
|
84
|
+
template <typename T, typename... Args>
|
85
|
+
T* ManagedNew(Args&&... args) {
|
86
|
+
auto* p = New<ManagedNewImpl<T>>(std::forward<Args>(args)...);
|
87
|
+
p->Link(&managed_new_head_);
|
88
|
+
return &p->t;
|
89
|
+
}
|
90
|
+
|
83
91
|
private:
|
84
92
|
struct Zone {
|
85
93
|
Zone* prev;
|
86
94
|
};
|
87
95
|
|
96
|
+
struct ManagedNewObject {
|
97
|
+
ManagedNewObject* next = nullptr;
|
98
|
+
void Link(std::atomic<ManagedNewObject*>* head);
|
99
|
+
virtual ~ManagedNewObject() = default;
|
100
|
+
};
|
101
|
+
|
102
|
+
template <typename T>
|
103
|
+
struct ManagedNewImpl : public ManagedNewObject {
|
104
|
+
T t;
|
105
|
+
template <typename... Args>
|
106
|
+
explicit ManagedNewImpl(Args&&... args) : t(std::forward<Args>(args)...) {}
|
107
|
+
};
|
108
|
+
|
88
109
|
// Initialize an arena.
|
89
110
|
// Parameters:
|
90
111
|
// initial_size: The initial size of the whole arena in bytes. These bytes
|
@@ -118,6 +139,7 @@ class Arena {
|
|
118
139
|
// and (2) the allocated memory. The arena itself maintains a pointer to the
|
119
140
|
// last zone; the zone list is reverse-walked during arena destruction only.
|
120
141
|
std::atomic<Zone*> last_zone_{nullptr};
|
142
|
+
std::atomic<ManagedNewObject*> managed_new_head_{nullptr};
|
121
143
|
// The backing memory quota
|
122
144
|
MemoryAllocator* const memory_allocator_;
|
123
145
|
};
|
@@ -21,11 +21,9 @@
|
|
21
21
|
#include <algorithm>
|
22
22
|
#include <atomic>
|
23
23
|
#include <tuple>
|
24
|
-
#include <type_traits>
|
25
24
|
|
26
25
|
#include "absl/status/status.h"
|
27
26
|
#include "absl/strings/str_cat.h"
|
28
|
-
#include "absl/utility/utility.h"
|
29
27
|
|
30
28
|
#include "src/core/lib/debug/trace.h"
|
31
29
|
#include "src/core/lib/gpr/useful.h"
|
@@ -179,7 +177,7 @@ void GrpcMemoryAllocatorImpl::Shutdown() {
|
|
179
177
|
shutdown_ = true;
|
180
178
|
memory_quota = memory_quota_;
|
181
179
|
for (size_t i = 0; i < kNumReclamationPasses; i++) {
|
182
|
-
reclamation_handles[i] =
|
180
|
+
reclamation_handles[i] = std::exchange(reclamation_handles_[i], nullptr);
|
183
181
|
}
|
184
182
|
}
|
185
183
|
}
|
@@ -207,11 +205,10 @@ absl::optional<size_t> GrpcMemoryAllocatorImpl::TryReserve(
|
|
207
205
|
// Scale the request down according to memory pressure if we have that
|
208
206
|
// flexibility.
|
209
207
|
if (scaled_size_over_min != 0) {
|
210
|
-
const auto
|
211
|
-
|
212
|
-
double pressure = pressure_and_max_recommended_allocation_size.first;
|
208
|
+
const auto pressure_info = memory_quota_->GetPressureInfo();
|
209
|
+
double pressure = pressure_info.pressure_control_value;
|
213
210
|
size_t max_recommended_allocation_size =
|
214
|
-
|
211
|
+
pressure_info.max_recommended_allocation_size;
|
215
212
|
// Reduce allocation size proportional to the pressure > 80% usage.
|
216
213
|
if (pressure > 0.8) {
|
217
214
|
scaled_size_over_min =
|
@@ -249,11 +246,17 @@ absl::optional<size_t> GrpcMemoryAllocatorImpl::TryReserve(
|
|
249
246
|
|
250
247
|
void GrpcMemoryAllocatorImpl::MaybeDonateBack() {
|
251
248
|
size_t free = free_bytes_.load(std::memory_order_relaxed);
|
252
|
-
|
253
|
-
|
254
|
-
if (
|
255
|
-
|
256
|
-
|
249
|
+
while (free > 0) {
|
250
|
+
size_t ret = 0;
|
251
|
+
if (!IsUnconstrainedMaxQuotaBufferSizeEnabled() &&
|
252
|
+
free > kMaxQuotaBufferSize / 2) {
|
253
|
+
ret = std::max(ret, free - kMaxQuotaBufferSize / 2);
|
254
|
+
}
|
255
|
+
if (IsPeriodicResourceQuotaReclamationEnabled()) {
|
256
|
+
ret = std::max(ret, free > 8192 ? free / 2 : free);
|
257
|
+
}
|
258
|
+
const size_t new_free = free - ret;
|
259
|
+
if (free_bytes_.compare_exchange_weak(free, new_free,
|
257
260
|
std::memory_order_acq_rel,
|
258
261
|
std::memory_order_acquire)) {
|
259
262
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
@@ -446,19 +449,140 @@ void BasicMemoryQuota::Return(size_t amount) {
|
|
446
449
|
free_bytes_.fetch_add(amount, std::memory_order_relaxed);
|
447
450
|
}
|
448
451
|
|
449
|
-
|
450
|
-
BasicMemoryQuota::InstantaneousPressureAndMaxRecommendedAllocationSize() const {
|
452
|
+
BasicMemoryQuota::PressureInfo BasicMemoryQuota::GetPressureInfo() {
|
451
453
|
double free = free_bytes_.load();
|
452
454
|
if (free < 0) free = 0;
|
453
455
|
size_t quota_size = quota_size_.load();
|
454
456
|
double size = quota_size;
|
455
|
-
if (size < 1) return
|
456
|
-
|
457
|
-
|
458
|
-
if (
|
459
|
-
|
457
|
+
if (size < 1) return PressureInfo{1, 1, 1};
|
458
|
+
PressureInfo pressure_info;
|
459
|
+
pressure_info.instantaneous_pressure = std::max(0.0, (size - free) / size);
|
460
|
+
if (IsMemoryPressureControllerEnabled()) {
|
461
|
+
pressure_info.pressure_control_value =
|
462
|
+
pressure_tracker_.AddSampleAndGetControlValue(
|
463
|
+
pressure_info.instantaneous_pressure);
|
464
|
+
} else {
|
465
|
+
pressure_info.pressure_control_value =
|
466
|
+
std::min(pressure_info.instantaneous_pressure, 1.0);
|
467
|
+
}
|
468
|
+
pressure_info.max_recommended_allocation_size = quota_size / 16;
|
469
|
+
return pressure_info;
|
460
470
|
}
|
461
471
|
|
472
|
+
//
|
473
|
+
// PressureTracker
|
474
|
+
//
|
475
|
+
|
476
|
+
namespace memory_quota_detail {
|
477
|
+
|
478
|
+
double PressureController::Update(double error) {
|
479
|
+
bool is_low = error < 0;
|
480
|
+
bool was_low = std::exchange(last_was_low_, is_low);
|
481
|
+
double new_control; // leave unset to compiler can note bad branches
|
482
|
+
if (is_low && was_low) {
|
483
|
+
// Memory pressure is too low this round, and was last round too.
|
484
|
+
// If we have reached the min reporting value last time, then we will report
|
485
|
+
// the same value again this time and can start to increase the ticks_same_
|
486
|
+
// counter.
|
487
|
+
if (last_control_ == min_) {
|
488
|
+
ticks_same_++;
|
489
|
+
if (ticks_same_ >= max_ticks_same_) {
|
490
|
+
// If it's been the same for too long, reduce the min reported value
|
491
|
+
// down towards zero.
|
492
|
+
min_ /= 2.0;
|
493
|
+
ticks_same_ = 0;
|
494
|
+
}
|
495
|
+
}
|
496
|
+
// Target the min reporting value.
|
497
|
+
new_control = min_;
|
498
|
+
} else if (!is_low && !was_low) {
|
499
|
+
// Memory pressure is high, and was high previously.
|
500
|
+
ticks_same_++;
|
501
|
+
if (ticks_same_ >= max_ticks_same_) {
|
502
|
+
// It's been high for too long, increase the max reporting value up
|
503
|
+
// towards 1.0.
|
504
|
+
max_ = (1.0 + max_) / 2.0;
|
505
|
+
ticks_same_ = 0;
|
506
|
+
}
|
507
|
+
// Target the max reporting value.
|
508
|
+
new_control = max_;
|
509
|
+
} else if (is_low) {
|
510
|
+
// Memory pressure is low, but was high last round.
|
511
|
+
// Target the min reporting value, but first update it to be closer to the
|
512
|
+
// current max (that we've been reporting lately).
|
513
|
+
// In this way the min will gradually climb towards the max as we find a
|
514
|
+
// stable point.
|
515
|
+
// If this is too high, then we'll eventually move it back towards zero.
|
516
|
+
ticks_same_ = 0;
|
517
|
+
min_ = (min_ + max_) / 2.0;
|
518
|
+
new_control = min_;
|
519
|
+
} else {
|
520
|
+
// Memory pressure is high, but was low last round.
|
521
|
+
// Target the max reporting value, but first update it to be closer to the
|
522
|
+
// last reported value.
|
523
|
+
// The first switchover will have last_control_ being 0, and max_ being 2,
|
524
|
+
// so we'll immediately choose 1.0 which will tend to really slow down
|
525
|
+
// progress.
|
526
|
+
// If we end up targetting too low, we'll eventually move it back towards
|
527
|
+
// 1.0 after max_ticks_same_ ticks.
|
528
|
+
ticks_same_ = 0;
|
529
|
+
max_ = (last_control_ + max_) / 2.0;
|
530
|
+
new_control = max_;
|
531
|
+
}
|
532
|
+
// If the control value is decreasing we do it slowly. This avoids rapid
|
533
|
+
// oscillations.
|
534
|
+
// (If we want a control value that's higher than the last one we snap
|
535
|
+
// immediately because it's likely that memory pressure is growing unchecked).
|
536
|
+
if (new_control < last_control_) {
|
537
|
+
new_control =
|
538
|
+
std::max(new_control, last_control_ - max_reduction_per_tick_ / 1000.0);
|
539
|
+
}
|
540
|
+
last_control_ = new_control;
|
541
|
+
return new_control;
|
542
|
+
}
|
543
|
+
|
544
|
+
std::string PressureController::DebugString() const {
|
545
|
+
return absl::StrCat(last_was_low_ ? "low" : "high", " min=", min_,
|
546
|
+
" max=", max_, " ticks=", ticks_same_,
|
547
|
+
" last_control=", last_control_);
|
548
|
+
}
|
549
|
+
|
550
|
+
double PressureTracker::AddSampleAndGetControlValue(double sample) {
|
551
|
+
static const double kSetPoint = 95.0;
|
552
|
+
|
553
|
+
double max_so_far = max_this_round_.load(std::memory_order_relaxed);
|
554
|
+
if (sample > max_so_far) {
|
555
|
+
max_this_round_.compare_exchange_weak(max_so_far, sample,
|
556
|
+
std::memory_order_relaxed,
|
557
|
+
std::memory_order_relaxed);
|
558
|
+
}
|
559
|
+
// If memory pressure is almost done, immediately hit the brakes and report
|
560
|
+
// full memory usage.
|
561
|
+
if (sample >= 0.99) {
|
562
|
+
report_.store(1.0, std::memory_order_relaxed);
|
563
|
+
}
|
564
|
+
update_.Tick([&](Duration) {
|
565
|
+
// Reset the round tracker with the new sample.
|
566
|
+
const double current_estimate =
|
567
|
+
max_this_round_.exchange(sample, std::memory_order_relaxed);
|
568
|
+
double report;
|
569
|
+
if (current_estimate > 0.99) {
|
570
|
+
// Under very high memory pressure we... just max things out.
|
571
|
+
report = controller_.Update(1e99);
|
572
|
+
} else {
|
573
|
+
report = controller_.Update(current_estimate - kSetPoint);
|
574
|
+
}
|
575
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
576
|
+
gpr_log(GPR_INFO, "RQ: pressure:%lf report:%lf controller:%s",
|
577
|
+
current_estimate, report, controller_.DebugString().c_str());
|
578
|
+
}
|
579
|
+
report_.store(report, std::memory_order_relaxed);
|
580
|
+
});
|
581
|
+
return report_.load(std::memory_order_relaxed);
|
582
|
+
}
|
583
|
+
|
584
|
+
} // namespace memory_quota_detail
|
585
|
+
|
462
586
|
//
|
463
587
|
// MemoryQuota
|
464
588
|
//
|
@@ -34,11 +34,14 @@
|
|
34
34
|
#include <grpc/event_engine/memory_request.h>
|
35
35
|
#include <grpc/support/log.h>
|
36
36
|
|
37
|
+
#include "src/core/lib/experiments/experiments.h"
|
37
38
|
#include "src/core/lib/gprpp/orphanable.h"
|
38
39
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
39
40
|
#include "src/core/lib/gprpp/sync.h"
|
41
|
+
#include "src/core/lib/gprpp/time.h"
|
40
42
|
#include "src/core/lib/promise/activity.h"
|
41
43
|
#include "src/core/lib/promise/poll.h"
|
44
|
+
#include "src/core/lib/resource_quota/periodic_update.h"
|
42
45
|
|
43
46
|
namespace grpc_core {
|
44
47
|
|
@@ -80,7 +83,6 @@ enum class ReclamationPass {
|
|
80
83
|
kDestructive = 3,
|
81
84
|
};
|
82
85
|
static constexpr size_t kNumReclamationPasses = 4;
|
83
|
-
static constexpr size_t kMaxQuotaBufferSize = 1024 * 1024;
|
84
86
|
|
85
87
|
// For each reclamation function run we construct a ReclamationSweep.
|
86
88
|
// When this object is finally destroyed (it may be moved several times first),
|
@@ -220,9 +222,72 @@ class ReclaimerQueue {
|
|
220
222
|
std::shared_ptr<State> state_;
|
221
223
|
};
|
222
224
|
|
225
|
+
namespace memory_quota_detail {
|
226
|
+
// Controller: tries to adjust a control variable up or down to get memory
|
227
|
+
// pressure to some target. We use the control variable to size buffers
|
228
|
+
// throughout the stack.
|
229
|
+
class PressureController {
|
230
|
+
public:
|
231
|
+
PressureController(uint8_t max_ticks_same, uint8_t max_reduction_per_tick)
|
232
|
+
: max_ticks_same_(max_ticks_same),
|
233
|
+
max_reduction_per_tick_(max_reduction_per_tick) {}
|
234
|
+
// Update the controller, returns the new control value.
|
235
|
+
double Update(double error);
|
236
|
+
// Textual representation of the controller.
|
237
|
+
std::string DebugString() const;
|
238
|
+
|
239
|
+
private:
|
240
|
+
// How many update periods have we reached the same decision in a row?
|
241
|
+
// Too many and we should start expanding the search space since we're not
|
242
|
+
// being agressive enough.
|
243
|
+
uint8_t ticks_same_ = 0;
|
244
|
+
// Maximum number of ticks with the same value until we start expanding the
|
245
|
+
// control space.
|
246
|
+
const uint8_t max_ticks_same_;
|
247
|
+
// Maximum amount to reduce the reporting value per iteration (in tenths of a
|
248
|
+
// percentile).
|
249
|
+
const uint8_t max_reduction_per_tick_;
|
250
|
+
// Was the last error indicating a too low pressure (or if false,
|
251
|
+
// a too high pressure).
|
252
|
+
bool last_was_low_ = true;
|
253
|
+
// Current minimum value to report.
|
254
|
+
double min_ = 0.0;
|
255
|
+
// Current maximum value to report.
|
256
|
+
// Set so that the first change over will choose 1.0 for max.
|
257
|
+
double max_ = 2.0;
|
258
|
+
// Last control value reported.
|
259
|
+
double last_control_ = 0.0;
|
260
|
+
};
|
261
|
+
|
262
|
+
// Utility to track memory pressure.
|
263
|
+
// Tries to be conservative (returns a higher pressure than there may actually
|
264
|
+
// be) but to be eventually accurate.
|
265
|
+
class PressureTracker {
|
266
|
+
public:
|
267
|
+
double AddSampleAndGetControlValue(double sample);
|
268
|
+
|
269
|
+
private:
|
270
|
+
std::atomic<double> max_this_round_{0.0};
|
271
|
+
std::atomic<double> report_{0.0};
|
272
|
+
PeriodicUpdate update_{Duration::Seconds(1)};
|
273
|
+
PressureController controller_{100, 3};
|
274
|
+
};
|
275
|
+
} // namespace memory_quota_detail
|
276
|
+
|
223
277
|
class BasicMemoryQuota final
|
224
278
|
: public std::enable_shared_from_this<BasicMemoryQuota> {
|
225
279
|
public:
|
280
|
+
// Data about current memory pressure.
|
281
|
+
struct PressureInfo {
|
282
|
+
// The current instantaneously measured memory pressure.
|
283
|
+
double instantaneous_pressure;
|
284
|
+
// A control value that can be used to scale buffer sizes up or down to
|
285
|
+
// adjust memory pressure to our target set point.
|
286
|
+
double pressure_control_value;
|
287
|
+
// Maximum recommended individual allocation size.
|
288
|
+
size_t max_recommended_allocation_size;
|
289
|
+
};
|
290
|
+
|
226
291
|
explicit BasicMemoryQuota(std::string name) : name_(std::move(name)) {}
|
227
292
|
|
228
293
|
// Start the reclamation activity.
|
@@ -243,8 +308,7 @@ class BasicMemoryQuota final
|
|
243
308
|
// Return some memory to the quota.
|
244
309
|
void Return(size_t amount);
|
245
310
|
// Instantaneous memory pressure approximation.
|
246
|
-
|
247
|
-
InstantaneousPressureAndMaxRecommendedAllocationSize() const;
|
311
|
+
PressureInfo GetPressureInfo();
|
248
312
|
// Get a reclamation queue
|
249
313
|
ReclaimerQueue* reclaimer_queue(size_t i) { return &reclaimers_[i]; }
|
250
314
|
|
@@ -276,6 +340,8 @@ class BasicMemoryQuota final
|
|
276
340
|
// We also increment this counter on completion of a sweep, as an indicator
|
277
341
|
// that the wait has ended.
|
278
342
|
std::atomic<uint64_t> reclamation_counter_{0};
|
343
|
+
// Memory pressure smoothing
|
344
|
+
memory_quota_detail::PressureTracker pressure_tracker_;
|
279
345
|
// The name of this quota - used for debugging/tracing/etc..
|
280
346
|
std::string name_;
|
281
347
|
};
|
@@ -299,7 +365,10 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
|
|
299
365
|
// from 0 to non-zero, then we have more to do, otherwise, we're actually
|
300
366
|
// done.
|
301
367
|
size_t prev_free = free_bytes_.fetch_add(n, std::memory_order_release);
|
302
|
-
if (
|
368
|
+
if ((!IsUnconstrainedMaxQuotaBufferSizeEnabled() &&
|
369
|
+
prev_free + n > kMaxQuotaBufferSize) ||
|
370
|
+
(IsPeriodicResourceQuotaReclamationEnabled() &&
|
371
|
+
donate_back_.Tick([](Duration) {}))) {
|
303
372
|
// Try to immediately return some free'ed memory back to the total quota.
|
304
373
|
MaybeDonateBack();
|
305
374
|
}
|
@@ -319,22 +388,19 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
|
|
319
388
|
void Shutdown() override;
|
320
389
|
|
321
390
|
// Read the instantaneous memory pressure
|
322
|
-
|
323
|
-
return memory_quota_->
|
324
|
-
.first;
|
391
|
+
BasicMemoryQuota::PressureInfo GetPressureInfo() const {
|
392
|
+
return memory_quota_->GetPressureInfo();
|
325
393
|
}
|
326
394
|
|
327
395
|
// Name of this allocator
|
328
396
|
absl::string_view name() const { return name_; }
|
329
397
|
|
330
398
|
private:
|
399
|
+
static constexpr size_t kMaxQuotaBufferSize = 1024 * 1024;
|
331
400
|
// Primitive reservation function.
|
332
401
|
absl::optional<size_t> TryReserve(MemoryRequest request) GRPC_MUST_USE_RESULT;
|
333
|
-
// This function may be invoked during a memory release operation.
|
334
|
-
//
|
335
|
-
// kMaxQuotaBufferSize / 2, donate the excess free_bytes in this cache back
|
336
|
-
// to the total quota immediately. This helps prevent free bytes in any
|
337
|
-
// particular allocator from growing too large.
|
402
|
+
// This function may be invoked during a memory release operation.
|
403
|
+
// It will try to return half of our free pool to the quota.
|
338
404
|
void MaybeDonateBack();
|
339
405
|
// Replenish bytes from the quota, without blocking, possibly entering
|
340
406
|
// overcommit.
|
@@ -359,6 +425,8 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
|
|
359
425
|
// Amount of memory taken from the quota by this allocator.
|
360
426
|
std::atomic<size_t> taken_bytes_{sizeof(GrpcMemoryAllocatorImpl)};
|
361
427
|
std::atomic<bool> registered_reclaimer_{false};
|
428
|
+
// We try to donate back some memory periodically to the central quota.
|
429
|
+
PeriodicUpdate donate_back_{Duration::Seconds(10)};
|
362
430
|
Mutex reclaimer_mu_;
|
363
431
|
bool shutdown_ ABSL_GUARDED_BY(reclaimer_mu_) = false;
|
364
432
|
// Indices into the various reclaimer queues, used so that we can cancel
|
@@ -392,8 +460,8 @@ class MemoryOwner final : public MemoryAllocator {
|
|
392
460
|
}
|
393
461
|
|
394
462
|
// Instantaneous memory pressure in the underlying quota.
|
395
|
-
|
396
|
-
return impl()->
|
463
|
+
BasicMemoryQuota::PressureInfo GetPressureInfo() const {
|
464
|
+
return impl()->GetPressureInfo();
|
397
465
|
}
|
398
466
|
|
399
467
|
template <typename T, typename... Args>
|
@@ -442,9 +510,9 @@ class MemoryQuota final
|
|
442
510
|
|
443
511
|
// Return true if the instantaneous memory pressure is high.
|
444
512
|
bool IsMemoryPressureHigh() const {
|
445
|
-
static constexpr double kMemoryPressureHighThreshold = 0
|
446
|
-
return memory_quota_->
|
447
|
-
|
513
|
+
static constexpr double kMemoryPressureHighThreshold = 1.0;
|
514
|
+
return memory_quota_->GetPressureInfo().instantaneous_pressure >
|
515
|
+
kMemoryPressureHighThreshold;
|
448
516
|
}
|
449
517
|
|
450
518
|
private:
|
@@ -0,0 +1,78 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "src/core/lib/resource_quota/periodic_update.h"
|
18
|
+
|
19
|
+
#include <atomic>
|
20
|
+
|
21
|
+
#include "src/core/lib/gpr/useful.h"
|
22
|
+
|
23
|
+
namespace grpc_core {
|
24
|
+
|
25
|
+
bool PeriodicUpdate::MaybeEndPeriod(absl::FunctionRef<void(Duration)> f) {
|
26
|
+
if (period_start_ == Timestamp::ProcessEpoch()) {
|
27
|
+
period_start_ = Timestamp::Now();
|
28
|
+
updates_remaining_.store(1, std::memory_order_release);
|
29
|
+
return false;
|
30
|
+
}
|
31
|
+
// updates_remaining_ just reached 0 and the thread calling this function was
|
32
|
+
// the decrementer that got us there.
|
33
|
+
// We can now safely mutate any non-atomic mutable variables (we've got a
|
34
|
+
// guarantee that no other thread will), and by the time this function returns
|
35
|
+
// we must store a postive number into updates_remaining_.
|
36
|
+
auto now = Timestamp::Now();
|
37
|
+
Duration time_so_far = now - period_start_;
|
38
|
+
if (time_so_far < period_) {
|
39
|
+
// At most double the number of updates remaining until the next period.
|
40
|
+
// At least try to estimate when we'll reach it.
|
41
|
+
int64_t better_guess;
|
42
|
+
if (time_so_far.millis() == 0) {
|
43
|
+
better_guess = expected_updates_per_period_ * 2;
|
44
|
+
} else {
|
45
|
+
// Determine a scaling factor that would have gotten us to the next
|
46
|
+
// period, but clamp between 1.01 (at least 1% increase in guesses)
|
47
|
+
// and 2.0 (at most doubling) - to avoid running completely out of
|
48
|
+
// control.
|
49
|
+
const double scale =
|
50
|
+
Clamp(period_.seconds() / time_so_far.seconds(), 1.01, 2.0);
|
51
|
+
better_guess = expected_updates_per_period_ * scale;
|
52
|
+
if (better_guess <= expected_updates_per_period_) {
|
53
|
+
better_guess = expected_updates_per_period_ + 1;
|
54
|
+
}
|
55
|
+
}
|
56
|
+
// Store the remainder left. Note that updates_remaining_ may have been
|
57
|
+
// decremented by another thread whilst we performed the above calculations:
|
58
|
+
// we simply discard those decrements.
|
59
|
+
updates_remaining_.store(better_guess - expected_updates_per_period_,
|
60
|
+
std::memory_order_release);
|
61
|
+
// Not quite done, return, try for longer.
|
62
|
+
return false;
|
63
|
+
}
|
64
|
+
// Finished period, start a new one and return true.
|
65
|
+
// We try to predict how many update periods we'd need to cover the full time
|
66
|
+
// span, and we increase that by 1% to attempt to tend to not enter the above
|
67
|
+
// stanza.
|
68
|
+
expected_updates_per_period_ =
|
69
|
+
period_.seconds() * expected_updates_per_period_ / time_so_far.seconds();
|
70
|
+
if (expected_updates_per_period_ < 1) expected_updates_per_period_ = 1;
|
71
|
+
period_start_ = now;
|
72
|
+
f(time_so_far);
|
73
|
+
updates_remaining_.store(expected_updates_per_period_,
|
74
|
+
std::memory_order_release);
|
75
|
+
return true;
|
76
|
+
}
|
77
|
+
|
78
|
+
} // namespace grpc_core
|
@@ -0,0 +1,71 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_CORE_LIB_RESOURCE_QUOTA_PERIODIC_UPDATE_H
|
16
|
+
#define GRPC_CORE_LIB_RESOURCE_QUOTA_PERIODIC_UPDATE_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <inttypes.h>
|
21
|
+
|
22
|
+
#include <atomic>
|
23
|
+
|
24
|
+
#include "absl/functional/function_ref.h"
|
25
|
+
|
26
|
+
#include "src/core/lib/gprpp/time.h"
|
27
|
+
|
28
|
+
namespace grpc_core {
|
29
|
+
|
30
|
+
// Lightweight timer-like mechanism for periodic updates.
|
31
|
+
// Fast path only decrements an atomic int64.
|
32
|
+
// Slow path runs corrections and estimates how many ticks are required to hit
|
33
|
+
// the target period.
|
34
|
+
// This is super inaccurate of course, but for places where we can't run timers,
|
35
|
+
// or places where continuous registration/unregistration would cause problems
|
36
|
+
// it can be quite useful.
|
37
|
+
class PeriodicUpdate {
|
38
|
+
public:
|
39
|
+
explicit PeriodicUpdate(Duration period) : period_(period) {}
|
40
|
+
|
41
|
+
// Tick the update, call f and return true if we think the period expired.
|
42
|
+
bool Tick(absl::FunctionRef<void(Duration)> f) {
|
43
|
+
// Atomically decrement the remaining ticks counter.
|
44
|
+
// If we hit 0 our estimate of period length has expired.
|
45
|
+
// See the comment next to the data members for a description of thread
|
46
|
+
// safety.
|
47
|
+
if (updates_remaining_.fetch_sub(1, std::memory_order_acquire) == 1) {
|
48
|
+
return MaybeEndPeriod(f);
|
49
|
+
}
|
50
|
+
return false;
|
51
|
+
}
|
52
|
+
|
53
|
+
private:
|
54
|
+
bool MaybeEndPeriod(absl::FunctionRef<void(Duration)> f);
|
55
|
+
|
56
|
+
// Thread safety:
|
57
|
+
// When updates_remaining_ reaches 0 the thread that decremented becomes
|
58
|
+
// responsible for updating any mutable variables and then setting
|
59
|
+
// updates_remaining_ to a value greater than zero.
|
60
|
+
// Whilst in this state other threads *may* decrement updates_remaining_, but
|
61
|
+
// this is fine because they'll observe an ignorable negative value.
|
62
|
+
|
63
|
+
std::atomic<int64_t> updates_remaining_{1};
|
64
|
+
const Duration period_;
|
65
|
+
Timestamp period_start_ = Timestamp::ProcessEpoch();
|
66
|
+
int64_t expected_updates_per_period_ = 1;
|
67
|
+
};
|
68
|
+
|
69
|
+
} // namespace grpc_core
|
70
|
+
|
71
|
+
#endif // GRPC_CORE_LIB_RESOURCE_QUOTA_PERIODIC_UPDATE_H
|