grpc 1.46.3 → 1.47.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 +49 -97
- data/include/grpc/event_engine/event_engine.h +42 -7
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +112 -0
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +100 -36
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
- data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
- data/src/core/ext/filters/client_channel/client_channel.h +26 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +7 -5
- data/src/core/ext/filters/client_channel/connector.h +8 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
- data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
- data/src/core/ext/filters/client_channel/subchannel.h +80 -20
- data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
- data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
- data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -2
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
- data/src/core/ext/xds/xds_client.cc +46 -22
- data/src/core/ext/xds/xds_cluster.cc +106 -16
- data/src/core/ext/xds/xds_cluster.h +3 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
- data/src/core/ext/xds/xds_listener.cc +19 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
- data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
- data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
- data/src/core/lib/avl/avl.h +3 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +8 -2
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +33 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_stack.cc +41 -3
- data/src/core/lib/channel/channel_stack.h +49 -3
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +15 -27
- data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +8 -13
- data/src/core/lib/channel/channelz.h +13 -4
- data/src/core/lib/channel/channelz_registry.cc +7 -14
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +21 -31
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +444 -189
- data/src/core/lib/channel/promise_based_filter.h +160 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression_internal.cc +45 -10
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +12 -2
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
- data/src/core/lib/event_engine/iomgr_engine.h +118 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +8 -4
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +6 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +29 -0
- data/src/core/lib/http/format_request.h +2 -0
- data/src/core/lib/http/httpcli.cc +88 -81
- data/src/core/lib/http/httpcli.h +39 -7
- data/src/core/lib/http/httpcli_security_connector.cc +3 -4
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +6 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/ev_posix.cc +1 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +0 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- data/src/core/lib/iomgr/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
- data/src/core/lib/iomgr/tcp_posix.cc +9 -27
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
- data/src/core/lib/iomgr/tcp_windows.cc +7 -4
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +2 -0
- data/src/core/lib/promise/sleep.h +10 -0
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver_factory.h +1 -2
- data/src/core/lib/resolver/server_address.cc +9 -3
- data/src/core/lib/resolver/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +47 -5
- data/src/core/lib/resource_quota/memory_quota.h +24 -5
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
- data/src/core/lib/security/credentials/credentials.h +17 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
- data/src/core/lib/security/transport/security_handshaker.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +4 -1
- data/src/core/lib/service_config/service_config_impl.cc +7 -0
- data/src/core/lib/service_config/service_config_impl.h +9 -2
- data/src/core/lib/service_config/service_config_parser.cc +8 -0
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +50 -23
- data/src/core/lib/slice/slice_buffer.h +106 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_split.cc +3 -0
- data/src/core/lib/slice/slice_split.h +0 -4
- data/src/core/lib/slice/slice_string_helpers.cc +4 -0
- data/src/core/lib/slice/slice_string_helpers.h +1 -4
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +41 -26
- data/src/core/lib/surface/call.h +16 -2
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +94 -57
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +14 -6
- data/src/core/lib/surface/completion_queue.h +5 -1
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -45
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +64 -110
- data/src/core/lib/surface/lame_client.h +40 -2
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +69 -56
- data/src/core/lib/surface/server.h +39 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -5
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/byte_stream.cc +4 -3
- data/src/core/lib/transport/byte_stream.h +5 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +4 -2
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -17
- data/src/core/lib/transport/transport.h +28 -2
- data/src/core/lib/transport/transport_impl.h +10 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -10
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
- metadata +36 -29
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/promise.h +0 -51
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -17,6 +17,16 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
+
#include <utility>
|
21
|
+
|
22
|
+
#include "absl/base/thread_annotations.h"
|
23
|
+
#include "absl/status/status.h"
|
24
|
+
|
25
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
26
|
+
#include "src/core/lib/gprpp/sync.h"
|
27
|
+
#include "src/core/lib/gprpp/time.h"
|
28
|
+
#include "src/core/lib/iomgr/closure.h"
|
29
|
+
#include "src/core/lib/iomgr/error.h"
|
20
30
|
#include "src/core/lib/iomgr/timer.h"
|
21
31
|
#include "src/core/lib/promise/activity.h"
|
22
32
|
#include "src/core/lib/promise/poll.h"
|
@@ -17,12 +17,12 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
-
#include <
|
20
|
+
#include <type_traits>
|
21
21
|
#include <utility>
|
22
22
|
|
23
|
+
#include "absl/meta/type_traits.h"
|
23
24
|
#include "absl/status/status.h"
|
24
25
|
#include "absl/status/statusor.h"
|
25
|
-
#include "absl/types/variant.h"
|
26
26
|
|
27
27
|
#include "src/core/lib/promise/detail/basic_seq.h"
|
28
28
|
#include "src/core/lib/promise/detail/status.h"
|
@@ -25,11 +25,10 @@
|
|
25
25
|
|
26
26
|
#include "src/core/lib/gprpp/memory.h"
|
27
27
|
#include "src/core/lib/gprpp/orphanable.h"
|
28
|
+
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
28
29
|
#include "src/core/lib/resolver/resolver.h"
|
29
30
|
#include "src/core/lib/uri/uri_parser.h"
|
30
31
|
|
31
|
-
typedef struct grpc_pollset_set grpc_pollset_set;
|
32
|
-
|
33
32
|
namespace grpc_core {
|
34
33
|
|
35
34
|
// TODO(yashkt): Move WorkSerializer to its own Bazel target, depend on that
|
@@ -25,6 +25,7 @@
|
|
25
25
|
#include <vector>
|
26
26
|
|
27
27
|
#include "absl/strings/str_cat.h"
|
28
|
+
#include "absl/strings/str_format.h"
|
28
29
|
#include "absl/strings/str_join.h"
|
29
30
|
|
30
31
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
@@ -80,6 +81,7 @@ ServerAddress::ServerAddress(ServerAddress&& other) noexcept
|
|
80
81
|
attributes_(std::move(other.attributes_)) {
|
81
82
|
other.args_ = nullptr;
|
82
83
|
}
|
84
|
+
|
83
85
|
ServerAddress& ServerAddress::operator=(ServerAddress&& other) noexcept {
|
84
86
|
address_ = other.address_;
|
85
87
|
grpc_channel_args_destroy(args_);
|
@@ -149,12 +151,12 @@ ServerAddress ServerAddress::WithAttribute(
|
|
149
151
|
}
|
150
152
|
|
151
153
|
std::string ServerAddress::ToString() const {
|
154
|
+
auto addr_str = grpc_sockaddr_to_string(&address_, false);
|
152
155
|
std::vector<std::string> parts = {
|
153
|
-
|
156
|
+
addr_str.ok() ? addr_str.value() : addr_str.status().ToString(),
|
154
157
|
};
|
155
158
|
if (args_ != nullptr) {
|
156
|
-
parts.emplace_back(
|
157
|
-
absl::StrCat("args={", grpc_channel_args_string(args_), "}"));
|
159
|
+
parts.emplace_back(absl::StrCat("args=", grpc_channel_args_string(args_)));
|
158
160
|
}
|
159
161
|
if (!attributes_.empty()) {
|
160
162
|
std::vector<std::string> attrs;
|
@@ -167,4 +169,8 @@ std::string ServerAddress::ToString() const {
|
|
167
169
|
return absl::StrJoin(parts, " ");
|
168
170
|
}
|
169
171
|
|
172
|
+
std::string ServerAddressWeightAttribute::ToString() const {
|
173
|
+
return absl::StrFormat("%d", weight_);
|
174
|
+
}
|
175
|
+
|
170
176
|
} // namespace grpc_core
|
@@ -25,7 +25,6 @@
|
|
25
25
|
#include <memory>
|
26
26
|
|
27
27
|
#include "absl/container/inlined_vector.h"
|
28
|
-
#include "absl/strings/str_format.h"
|
29
28
|
|
30
29
|
#include "src/core/lib/channel/channel_args.h"
|
31
30
|
#include "src/core/lib/gpr/useful.h"
|
@@ -96,6 +95,9 @@ class ServerAddress {
|
|
96
95
|
ServerAddress WithAttribute(const char* key,
|
97
96
|
std::unique_ptr<AttributeInterface> value) const;
|
98
97
|
|
98
|
+
// TODO(ctiller): Prior to making this a public API we should ensure that the
|
99
|
+
// channel args are not part of the generated string, lest we make that debug
|
100
|
+
// format load-bearing via Hyrum's law.
|
99
101
|
std::string ToString() const;
|
100
102
|
|
101
103
|
private:
|
@@ -131,9 +133,7 @@ class ServerAddressWeightAttribute : public ServerAddress::AttributeInterface {
|
|
131
133
|
return QsortCompare(weight_, other_locality_attr->weight_);
|
132
134
|
}
|
133
135
|
|
134
|
-
std::string ToString() const override
|
135
|
-
return absl::StrFormat("%d", weight_);
|
136
|
-
}
|
136
|
+
std::string ToString() const override;
|
137
137
|
|
138
138
|
private:
|
139
139
|
uint32_t weight_;
|
@@ -16,11 +16,24 @@
|
|
16
16
|
|
17
17
|
#include "src/core/lib/resource_quota/api.h"
|
18
18
|
|
19
|
+
#include <stdint.h>
|
20
|
+
|
21
|
+
#include <atomic>
|
22
|
+
#include <memory>
|
23
|
+
#include <string>
|
24
|
+
#include <utility>
|
25
|
+
|
26
|
+
#include "absl/strings/str_cat.h"
|
27
|
+
|
19
28
|
#include <grpc/grpc.h>
|
20
29
|
|
21
|
-
#include "src/core/lib/
|
30
|
+
#include "src/core/lib/channel/channel_args.h"
|
31
|
+
#include "src/core/lib/channel/channel_args_preconditioning.h"
|
32
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
22
33
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
34
|
+
#include "src/core/lib/resource_quota/memory_quota.h"
|
23
35
|
#include "src/core/lib/resource_quota/resource_quota.h"
|
36
|
+
#include "src/core/lib/resource_quota/thread_quota.h"
|
24
37
|
|
25
38
|
namespace grpc_core {
|
26
39
|
|
@@ -17,7 +17,10 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
-
#include
|
20
|
+
#include <stddef.h>
|
21
|
+
|
22
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
23
|
+
|
21
24
|
#include "src/core/lib/config/core_configuration.h"
|
22
25
|
#include "src/core/lib/resource_quota/resource_quota.h"
|
23
26
|
|
@@ -20,17 +20,11 @@
|
|
20
20
|
|
21
21
|
#include "src/core/lib/resource_quota/arena.h"
|
22
22
|
|
23
|
-
#include <string.h>
|
24
|
-
|
25
23
|
#include <new>
|
26
24
|
|
27
25
|
#include <grpc/support/alloc.h>
|
28
|
-
#include <grpc/support/atm.h>
|
29
|
-
#include <grpc/support/log.h>
|
30
|
-
#include <grpc/support/sync.h>
|
31
26
|
|
32
27
|
#include "src/core/lib/gpr/alloc.h"
|
33
|
-
#include "src/core/lib/gprpp/memory.h"
|
34
28
|
|
35
29
|
namespace {
|
36
30
|
|
@@ -16,8 +16,18 @@
|
|
16
16
|
|
17
17
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
18
18
|
|
19
|
+
#include <inttypes.h>
|
20
|
+
|
21
|
+
#include <algorithm>
|
19
22
|
#include <atomic>
|
23
|
+
#include <tuple>
|
24
|
+
#include <type_traits>
|
25
|
+
|
26
|
+
#include "absl/status/status.h"
|
27
|
+
#include "absl/strings/str_cat.h"
|
28
|
+
#include "absl/utility/utility.h"
|
20
29
|
|
30
|
+
#include "src/core/lib/debug/trace.h"
|
21
31
|
#include "src/core/lib/gpr/useful.h"
|
22
32
|
#include "src/core/lib/gprpp/mpscq.h"
|
23
33
|
#include "src/core/lib/promise/exec_ctx_wakeup_scheduler.h"
|
@@ -25,7 +35,6 @@
|
|
25
35
|
#include "src/core/lib/promise/map.h"
|
26
36
|
#include "src/core/lib/promise/race.h"
|
27
37
|
#include "src/core/lib/promise/seq.h"
|
28
|
-
#include "src/core/lib/resource_quota/memory_quota.h"
|
29
38
|
#include "src/core/lib/resource_quota/trace.h"
|
30
39
|
|
31
40
|
namespace grpc_core {
|
@@ -183,7 +192,9 @@ size_t GrpcMemoryAllocatorImpl::Reserve(MemoryRequest request) {
|
|
183
192
|
while (true) {
|
184
193
|
// Attempt to reserve memory from our pool.
|
185
194
|
auto reservation = TryReserve(request);
|
186
|
-
if (reservation.has_value())
|
195
|
+
if (reservation.has_value()) {
|
196
|
+
return *reservation;
|
197
|
+
}
|
187
198
|
// If that failed, grab more from the quota and retry.
|
188
199
|
Replenish();
|
189
200
|
}
|
@@ -241,6 +252,28 @@ absl::optional<size_t> GrpcMemoryAllocatorImpl::TryReserve(
|
|
241
252
|
}
|
242
253
|
}
|
243
254
|
|
255
|
+
void GrpcMemoryAllocatorImpl::MaybeDonateBack() {
|
256
|
+
size_t free = free_bytes_.load(std::memory_order_relaxed);
|
257
|
+
const size_t kReduceToSize = kMaxQuotaBufferSize / 2;
|
258
|
+
while (true) {
|
259
|
+
if (free <= kReduceToSize) return;
|
260
|
+
size_t ret = free - kReduceToSize;
|
261
|
+
if (free_bytes_.compare_exchange_weak(free, kReduceToSize,
|
262
|
+
std::memory_order_acq_rel,
|
263
|
+
std::memory_order_acquire)) {
|
264
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
265
|
+
gpr_log(GPR_INFO, "[%p|%s] Early return %" PRIdPTR " bytes", this,
|
266
|
+
name_.c_str(), ret);
|
267
|
+
}
|
268
|
+
MutexLock lock(&memory_quota_mu_);
|
269
|
+
GPR_ASSERT(taken_bytes_ >= ret);
|
270
|
+
taken_bytes_ -= ret;
|
271
|
+
memory_quota_->Return(ret);
|
272
|
+
return;
|
273
|
+
}
|
274
|
+
}
|
275
|
+
}
|
276
|
+
|
244
277
|
void GrpcMemoryAllocatorImpl::Replenish() {
|
245
278
|
MutexLock lock(&memory_quota_mu_);
|
246
279
|
GPR_ASSERT(!shutdown_);
|
@@ -376,8 +409,12 @@ void BasicMemoryQuota::Start() {
|
|
376
409
|
std::tuple<const char*, RefCountedPtr<ReclaimerQueue::Handle>> arg) {
|
377
410
|
auto reclaimer = std::move(std::get<1>(arg));
|
378
411
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
379
|
-
|
380
|
-
|
412
|
+
double free = std::max(intptr_t(0), self->free_bytes_.load());
|
413
|
+
size_t quota_size = self->quota_size_.load();
|
414
|
+
gpr_log(GPR_INFO,
|
415
|
+
"RQ: %s perform %s reclamation. Available free bytes: %f, "
|
416
|
+
"total quota_size: %zu",
|
417
|
+
self->name_.c_str(), std::get<0>(arg), free, quota_size);
|
381
418
|
}
|
382
419
|
// One of the reclaimer queues gave us a way to get back memory.
|
383
420
|
// Call the reclaimer with a token that contains enough to wake us
|
@@ -436,7 +473,12 @@ void BasicMemoryQuota::FinishReclamation(uint64_t token, Waker waker) {
|
|
436
473
|
std::memory_order_relaxed,
|
437
474
|
std::memory_order_relaxed)) {
|
438
475
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
|
439
|
-
|
476
|
+
double free = std::max(intptr_t(0), free_bytes_.load());
|
477
|
+
size_t quota_size = quota_size_.load();
|
478
|
+
gpr_log(GPR_INFO,
|
479
|
+
"RQ: %s reclamation complete. Available free bytes: %f, "
|
480
|
+
"total quota_size: %zu",
|
481
|
+
name_.c_str(), free, quota_size);
|
440
482
|
}
|
441
483
|
waker.Wakeup();
|
442
484
|
}
|
@@ -17,18 +17,25 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
-
#include <
|
20
|
+
#include <stdint.h>
|
21
|
+
|
21
22
|
#include <atomic>
|
22
23
|
#include <cstddef>
|
23
24
|
#include <limits>
|
24
25
|
#include <memory>
|
25
|
-
#include <
|
26
|
-
#include <
|
26
|
+
#include <string>
|
27
|
+
#include <utility>
|
28
|
+
|
29
|
+
#include "absl/base/thread_annotations.h"
|
30
|
+
#include "absl/strings/string_view.h"
|
31
|
+
#include "absl/types/optional.h"
|
27
32
|
|
28
33
|
#include <grpc/event_engine/memory_allocator.h>
|
29
|
-
#include <grpc/
|
34
|
+
#include <grpc/event_engine/memory_request.h>
|
35
|
+
#include <grpc/support/log.h>
|
30
36
|
|
31
37
|
#include "src/core/lib/gprpp/orphanable.h"
|
38
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
32
39
|
#include "src/core/lib/gprpp/sync.h"
|
33
40
|
#include "src/core/lib/promise/activity.h"
|
34
41
|
#include "src/core/lib/promise/poll.h"
|
@@ -73,6 +80,7 @@ enum class ReclamationPass {
|
|
73
80
|
kDestructive = 3,
|
74
81
|
};
|
75
82
|
static constexpr size_t kNumReclamationPasses = 4;
|
83
|
+
static constexpr size_t kMaxQuotaBufferSize = 1024 * 1024;
|
76
84
|
|
77
85
|
// For each reclamation function run we construct a ReclamationSweep.
|
78
86
|
// When this object is finally destroyed (it may be moved several times first),
|
@@ -295,7 +303,12 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
|
|
295
303
|
// Add the released memory to our free bytes counter... if this increases
|
296
304
|
// from 0 to non-zero, then we have more to do, otherwise, we're actually
|
297
305
|
// done.
|
298
|
-
|
306
|
+
size_t prev_free = free_bytes_.fetch_add(n, std::memory_order_release);
|
307
|
+
if (prev_free + n > kMaxQuotaBufferSize) {
|
308
|
+
// Try to immediately return some free'ed memory back to the total quota.
|
309
|
+
MaybeDonateBack();
|
310
|
+
}
|
311
|
+
if (prev_free != 0) return;
|
299
312
|
MaybeRegisterReclaimer();
|
300
313
|
}
|
301
314
|
|
@@ -323,6 +336,12 @@ class GrpcMemoryAllocatorImpl final : public EventEngineMemoryAllocatorImpl {
|
|
323
336
|
private:
|
324
337
|
// Primitive reservation function.
|
325
338
|
absl::optional<size_t> TryReserve(MemoryRequest request) GRPC_MUST_USE_RESULT;
|
339
|
+
// This function may be invoked during a memory release operation. If the
|
340
|
+
// total free_bytes in this allocator/local cache exceeds
|
341
|
+
// kMaxQuotaBufferSize / 2, donate the excess free_bytes in this cache back
|
342
|
+
// to the total quota immediately. This helps prevent free bytes in any
|
343
|
+
// particular allocator from growing too large.
|
344
|
+
void MaybeDonateBack();
|
326
345
|
// Replenish bytes from the quota, without blocking, possibly entering
|
327
346
|
// overcommit.
|
328
347
|
void Replenish() ABSL_LOCKS_EXCLUDED(memory_quota_mu_);
|
@@ -17,16 +17,24 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
+
#include <string>
|
21
|
+
#include <utility>
|
22
|
+
|
23
|
+
#include "absl/strings/string_view.h"
|
24
|
+
|
20
25
|
#include <grpc/impl/codegen/grpc_types.h>
|
21
26
|
|
22
27
|
#include "src/core/lib/gpr/useful.h"
|
23
28
|
#include "src/core/lib/gprpp/cpp_impl_of.h"
|
29
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
30
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
24
31
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
25
32
|
#include "src/core/lib/resource_quota/thread_quota.h"
|
26
33
|
|
27
34
|
namespace grpc_core {
|
28
35
|
|
29
36
|
class ResourceQuota;
|
37
|
+
|
30
38
|
using ResourceQuotaRefPtr = RefCountedPtr<ResourceQuota>;
|
31
39
|
|
32
40
|
class ResourceQuota : public RefCounted<ResourceQuota>,
|
@@ -18,8 +18,12 @@
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
20
|
#include <cstddef>
|
21
|
+
#include <limits>
|
22
|
+
|
23
|
+
#include "absl/base/thread_annotations.h"
|
21
24
|
|
22
25
|
#include "src/core/lib/gprpp/ref_counted.h"
|
26
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
23
27
|
#include "src/core/lib/gprpp/sync.h"
|
24
28
|
|
25
29
|
namespace grpc_core {
|
@@ -16,7 +16,10 @@
|
|
16
16
|
|
17
17
|
#include "src/core/lib/security/authorization/grpc_server_authz_filter.h"
|
18
18
|
|
19
|
+
#include "absl/strings/str_join.h"
|
20
|
+
|
19
21
|
#include "src/core/lib/channel/promise_based_filter.h"
|
22
|
+
#include "src/core/lib/promise/promise.h"
|
20
23
|
#include "src/core/lib/security/authorization/evaluate_args.h"
|
21
24
|
#include "src/core/lib/transport/transport.h"
|
22
25
|
|
@@ -56,7 +56,10 @@ grpc_alts_credentials::create_security_connector(
|
|
56
56
|
this->Ref(), std::move(call_creds), target_name);
|
57
57
|
}
|
58
58
|
|
59
|
-
|
59
|
+
grpc_core::UniqueTypeName grpc_alts_credentials::type() const {
|
60
|
+
static grpc_core::UniqueTypeName::Factory kFactory("Alts");
|
61
|
+
return kFactory.Create();
|
62
|
+
}
|
60
63
|
|
61
64
|
grpc_alts_server_credentials::grpc_alts_server_credentials(
|
62
65
|
const grpc_alts_credentials_options* options,
|
@@ -79,7 +82,10 @@ grpc_alts_server_credentials::~grpc_alts_server_credentials() {
|
|
79
82
|
gpr_free(handshaker_service_url_);
|
80
83
|
}
|
81
84
|
|
82
|
-
|
85
|
+
grpc_core::UniqueTypeName grpc_alts_server_credentials::type() const {
|
86
|
+
static grpc_core::UniqueTypeName::Factory kFactory("Alts");
|
87
|
+
return kFactory.Create();
|
88
|
+
}
|
83
89
|
|
84
90
|
grpc_channel_credentials* grpc_alts_credentials_create_customized(
|
85
91
|
const grpc_alts_credentials_options* options,
|
@@ -39,7 +39,7 @@ class grpc_alts_credentials final : public grpc_channel_credentials {
|
|
39
39
|
const char* target_name, const grpc_channel_args* args,
|
40
40
|
grpc_channel_args** new_args) override;
|
41
41
|
|
42
|
-
|
42
|
+
grpc_core::UniqueTypeName type() const override;
|
43
43
|
|
44
44
|
const grpc_alts_credentials_options* options() const { return options_; }
|
45
45
|
grpc_alts_credentials_options* mutable_options() { return options_; }
|
@@ -66,7 +66,7 @@ class grpc_alts_server_credentials final : public grpc_server_credentials {
|
|
66
66
|
grpc_core::RefCountedPtr<grpc_server_security_connector>
|
67
67
|
create_security_connector(const grpc_channel_args* /* args */) override;
|
68
68
|
|
69
|
-
|
69
|
+
grpc_core::UniqueTypeName type() const override;
|
70
70
|
|
71
71
|
const grpc_alts_credentials_options* options() const { return options_; }
|
72
72
|
grpc_alts_credentials_options* mutable_options() { return options_; }
|
@@ -41,8 +41,9 @@
|
|
41
41
|
// grpc_composite_channel_credentials
|
42
42
|
//
|
43
43
|
|
44
|
-
|
45
|
-
|
44
|
+
grpc_core::UniqueTypeName grpc_composite_channel_credentials::type() const {
|
45
|
+
static grpc_core::UniqueTypeName::Factory kFactory("Composite");
|
46
|
+
return kFactory.Create();
|
46
47
|
}
|
47
48
|
|
48
49
|
/* -- Composite call credentials. -- */
|
@@ -60,7 +61,10 @@ grpc_composite_call_credentials::GetRequestMetadata(
|
|
60
61
|
});
|
61
62
|
}
|
62
63
|
|
63
|
-
|
64
|
+
grpc_core::UniqueTypeName grpc_composite_call_credentials::Type() {
|
65
|
+
static grpc_core::UniqueTypeName::Factory kFactory("Composite");
|
66
|
+
return kFactory.Create();
|
67
|
+
}
|
64
68
|
|
65
69
|
std::string grpc_composite_call_credentials::debug_string() {
|
66
70
|
std::vector<std::string> outputs;
|
@@ -51,11 +51,12 @@ class grpc_composite_channel_credentials : public grpc_channel_credentials {
|
|
51
51
|
const char* target, const grpc_channel_args* args,
|
52
52
|
grpc_channel_args** new_args) override;
|
53
53
|
|
54
|
-
|
54
|
+
grpc_core::ChannelArgs update_arguments(
|
55
|
+
grpc_core::ChannelArgs args) override {
|
55
56
|
return inner_creds_->update_arguments(args);
|
56
57
|
}
|
57
58
|
|
58
|
-
|
59
|
+
grpc_core::UniqueTypeName type() const override;
|
59
60
|
|
60
61
|
const grpc_channel_credentials* inner_creds() const {
|
61
62
|
return inner_creds_.get();
|
@@ -98,9 +99,9 @@ class grpc_composite_call_credentials : public grpc_call_credentials {
|
|
98
99
|
const CallCredentialsList& inner() const { return inner_; }
|
99
100
|
std::string debug_string() override;
|
100
101
|
|
101
|
-
static
|
102
|
+
static grpc_core::UniqueTypeName Type();
|
102
103
|
|
103
|
-
|
104
|
+
grpc_core::UniqueTypeName type() const override { return Type(); }
|
104
105
|
|
105
106
|
private:
|
106
107
|
int cmp_impl(const grpc_call_credentials* other) const override {
|
@@ -29,7 +29,9 @@
|
|
29
29
|
#include <grpc/grpc_security.h>
|
30
30
|
#include <grpc/support/sync.h>
|
31
31
|
|
32
|
+
#include "src/core/lib/channel/channel_args.h"
|
32
33
|
#include "src/core/lib/gprpp/ref_counted.h"
|
34
|
+
#include "src/core/lib/gprpp/unique_type_name.h"
|
33
35
|
#include "src/core/lib/iomgr/polling_entity.h"
|
34
36
|
#include "src/core/lib/promise/arena_promise.h"
|
35
37
|
#include "src/core/lib/security/context/security_context.h"
|
@@ -92,6 +94,15 @@ void grpc_override_well_known_credentials_path_getter(
|
|
92
94
|
struct grpc_channel_credentials
|
93
95
|
: grpc_core::RefCounted<grpc_channel_credentials> {
|
94
96
|
public:
|
97
|
+
static absl::string_view ChannelArgName() {
|
98
|
+
return GRPC_ARG_CHANNEL_CREDENTIALS;
|
99
|
+
}
|
100
|
+
|
101
|
+
static int ChannelArgsCompare(const grpc_channel_credentials* args1,
|
102
|
+
const grpc_channel_credentials* args2) {
|
103
|
+
return args1->cmp(args2);
|
104
|
+
}
|
105
|
+
|
95
106
|
// Creates a security connector for the channel. May also create new channel
|
96
107
|
// args for the channel to be used in place of the passed in const args if
|
97
108
|
// returned non NULL. In that case the caller is responsible for destroying
|
@@ -115,7 +126,7 @@ struct grpc_channel_credentials
|
|
115
126
|
// By default, leave channel args as is. The callee takes ownership
|
116
127
|
// of the passed-in channel args, and the caller takes ownership
|
117
128
|
// of the returned channel args.
|
118
|
-
virtual
|
129
|
+
virtual grpc_core::ChannelArgs update_arguments(grpc_core::ChannelArgs args) {
|
119
130
|
return args;
|
120
131
|
}
|
121
132
|
|
@@ -129,9 +140,7 @@ struct grpc_channel_credentials
|
|
129
140
|
// as equal (assuming other channel args match).
|
130
141
|
int cmp(const grpc_channel_credentials* other) const {
|
131
142
|
GPR_ASSERT(other != nullptr);
|
132
|
-
|
133
|
-
// against different grpc_channel_credentials types using the same name.
|
134
|
-
int r = grpc_core::QsortCompare(type(), other->type());
|
143
|
+
int r = type().Compare(other->type());
|
135
144
|
if (r != 0) return r;
|
136
145
|
return cmp_impl(other);
|
137
146
|
}
|
@@ -140,7 +149,7 @@ struct grpc_channel_credentials
|
|
140
149
|
// implementation for down-casting purposes. Every creds implementation should
|
141
150
|
// use a unique string instance, which should be returned by all instances of
|
142
151
|
// that creds implementation.
|
143
|
-
virtual
|
152
|
+
virtual grpc_core::UniqueTypeName type() const = 0;
|
144
153
|
|
145
154
|
private:
|
146
155
|
// Implementation for `cmp` method intended to be overridden by subclasses.
|
@@ -212,9 +221,7 @@ struct grpc_call_credentials
|
|
212
221
|
// credentials as effectively the same..
|
213
222
|
int cmp(const grpc_call_credentials* other) const {
|
214
223
|
GPR_ASSERT(other != nullptr);
|
215
|
-
|
216
|
-
// against different grpc_call_credentials types using the same name.
|
217
|
-
int r = grpc_core::QsortCompare(type(), other->type());
|
224
|
+
int r = type().Compare(other->type());
|
218
225
|
if (r != 0) return r;
|
219
226
|
return cmp_impl(other);
|
220
227
|
}
|
@@ -227,7 +234,7 @@ struct grpc_call_credentials
|
|
227
234
|
// implementation for down-casting purposes. Every creds implementation should
|
228
235
|
// use a unique string instance, which should be returned by all instances of
|
229
236
|
// that creds implementation.
|
230
|
-
virtual
|
237
|
+
virtual grpc_core::UniqueTypeName type() const = 0;
|
231
238
|
|
232
239
|
private:
|
233
240
|
// Implementation for `cmp` method intended to be overridden by subclasses.
|
@@ -256,7 +263,7 @@ struct grpc_server_credentials
|
|
256
263
|
virtual grpc_core::RefCountedPtr<grpc_server_security_connector>
|
257
264
|
create_security_connector(const grpc_channel_args* args) = 0;
|
258
265
|
|
259
|
-
virtual
|
266
|
+
virtual grpc_core::UniqueTypeName type() const = 0;
|
260
267
|
|
261
268
|
const grpc_auth_metadata_processor& auth_metadata_processor() const {
|
262
269
|
return processor_;
|