grpc 1.64.3 → 1.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +57 -58
- data/include/grpc/event_engine/event_engine.h +13 -6
- data/include/grpc/impl/channel_arg_names.h +7 -3
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/passive_listener.h +62 -0
- data/include/grpc/support/log.h +7 -17
- data/include/grpc/support/port_platform.h +3 -0
- data/src/core/channelz/channel_trace.cc +1 -1
- data/src/core/channelz/channel_trace.h +1 -1
- data/src/core/channelz/channelz.cc +3 -3
- data/src/core/channelz/channelz.h +7 -7
- data/src/core/channelz/channelz_registry.cc +4 -3
- data/src/core/client_channel/backup_poller.cc +4 -5
- data/src/core/client_channel/client_channel.cc +1324 -0
- data/src/core/client_channel/client_channel.h +243 -0
- data/src/core/client_channel/client_channel_filter.cc +266 -709
- data/src/core/client_channel/client_channel_filter.h +11 -64
- data/src/core/client_channel/client_channel_internal.h +16 -5
- data/src/core/client_channel/client_channel_plugin.cc +1 -14
- data/src/core/client_channel/client_channel_service_config.h +3 -3
- data/src/core/client_channel/config_selector.cc +1 -1
- data/src/core/client_channel/config_selector.h +1 -1
- data/src/core/client_channel/dynamic_filters.cc +3 -3
- data/src/core/client_channel/dynamic_filters.h +1 -3
- data/src/core/client_channel/load_balanced_call_destination.cc +336 -0
- data/src/core/client_channel/load_balanced_call_destination.h +49 -0
- data/src/core/client_channel/retry_filter.cc +2 -9
- data/src/core/client_channel/retry_filter.h +2 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +65 -72
- data/src/core/client_channel/retry_filter_legacy_call_data.h +0 -2
- data/src/core/client_channel/retry_service_config.cc +4 -5
- data/src/core/client_channel/retry_service_config.h +3 -3
- data/src/core/client_channel/subchannel.cc +220 -112
- data/src/core/client_channel/subchannel.h +31 -18
- data/src/core/client_channel/subchannel_pool_interface.cc +0 -2
- data/src/core/client_channel/subchannel_pool_interface.h +2 -4
- data/src/core/client_channel/subchannel_stream_client.cc +36 -49
- data/src/core/client_channel/subchannel_stream_client.h +2 -4
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -10
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
- data/src/core/ext/filters/census/grpc_context.cc +2 -4
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -15
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -7
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -0
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -0
- data/src/core/ext/filters/http/client_authority_filter.h +1 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +10 -15
- data/src/core/ext/filters/http/message_compress/compression_filter.h +2 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +2 -2
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +6 -9
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -6
- data/src/core/ext/filters/rbac/rbac_filter.cc +2 -5
- data/src/core/ext/filters/rbac/rbac_filter.h +1 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +2 -6
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +1 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -25
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +223 -148
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -107
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -8
- data/src/core/ext/transport/chttp2/transport/context_list_entry.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +9 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -43
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +3 -8
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +29 -19
- data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -25
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +0 -2
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +29 -13
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +5 -4
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
- data/src/core/ext/transport/inproc/inproc_transport.cc +56 -32
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +13 -15
- data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
- data/src/core/handshaker/handshaker.cc +6 -14
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +9 -17
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +3 -2
- data/src/core/handshaker/security/secure_endpoint.cc +38 -32
- data/src/core/handshaker/security/secure_endpoint.h +0 -2
- data/src/core/handshaker/security/security_handshaker.cc +25 -37
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -1
- data/src/core/lib/address_utils/parse_address.cc +27 -39
- data/src/core/lib/address_utils/sockaddr_utils.cc +5 -6
- data/src/core/lib/avl/avl.h +1 -1
- data/src/core/lib/channel/channel_args.cc +13 -17
- data/src/core/lib/channel/channel_args.h +19 -8
- data/src/core/lib/channel/channel_stack.cc +5 -63
- data/src/core/lib/channel/channel_stack.h +13 -37
- data/src/core/lib/channel/channel_stack_builder.h +0 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +0 -142
- data/src/core/lib/channel/channel_stack_builder_impl.h +0 -2
- data/src/core/lib/channel/connected_channel.cc +37 -676
- data/src/core/lib/channel/promise_based_filter.cc +41 -47
- data/src/core/lib/channel/promise_based_filter.h +124 -477
- data/src/core/lib/channel/status_util.cc +1 -1
- data/src/core/lib/compression/compression.cc +1 -1
- data/src/core/lib/compression/message_compress.cc +6 -6
- data/src/core/lib/config/config_vars.cc +3 -8
- data/src/core/lib/config/config_vars.h +1 -5
- data/src/core/lib/debug/event_log.h +1 -1
- data/src/core/lib/debug/trace.cc +43 -59
- data/src/core/lib/debug/trace.h +2 -97
- data/src/core/lib/debug/trace_flags.cc +255 -0
- data/src/core/lib/debug/trace_flags.h +133 -0
- data/src/core/lib/debug/trace_impl.h +115 -0
- data/src/core/lib/event_engine/ares_resolver.cc +5 -7
- data/src/core/lib/event_engine/ares_resolver.h +1 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +17 -22
- data/src/core/lib/event_engine/event_engine.cc +29 -4
- data/src/core/lib/event_engine/extensions/supports_fd.h +7 -0
- data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
- data/src/core/lib/event_engine/forkable.cc +4 -5
- data/src/core/lib/event_engine/forkable.h +0 -11
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +10 -11
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -3
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +19 -33
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +24 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -16
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +18 -22
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +13 -17
- data/src/core/lib/event_engine/posix_engine/timer.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -6
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -1
- data/src/core/lib/event_engine/shim.cc +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
- data/src/core/lib/event_engine/thread_local.h +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +19 -21
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -6
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +14 -13
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +4 -3
- data/src/core/lib/event_engine/trace.h +6 -17
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/win_socket.cc +23 -17
- data/src/core/lib/event_engine/windows/win_socket.h +4 -5
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +6 -9
- data/src/core/lib/event_engine/windows/windows_engine.cc +201 -87
- data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
- data/src/core/lib/event_engine/windows/windows_listener.cc +12 -23
- data/src/core/lib/experiments/experiments.cc +35 -151
- data/src/core/lib/experiments/experiments.h +12 -45
- data/src/core/lib/gprpp/bitset.h +1 -1
- data/src/core/lib/gprpp/crash.cc +2 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +45 -33
- data/src/core/lib/gprpp/dump_args.cc +54 -0
- data/src/core/lib/gprpp/dump_args.h +69 -0
- data/src/core/lib/gprpp/glob.cc +70 -0
- data/src/core/lib/gprpp/glob.h +29 -0
- data/src/core/lib/gprpp/per_cpu.cc +1 -1
- data/src/core/lib/gprpp/posix/stat.cc +3 -4
- data/src/core/lib/gprpp/posix/thd.cc +8 -9
- data/src/core/lib/gprpp/ref_counted.h +30 -22
- data/src/core/lib/gprpp/single_set_ptr.h +5 -3
- data/src/core/lib/gprpp/status_helper.cc +11 -30
- data/src/core/lib/gprpp/status_helper.h +3 -31
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +3 -2
- data/src/core/lib/gprpp/unique_type_name.h +1 -1
- data/src/core/lib/gprpp/validation_errors.cc +10 -1
- data/src/core/lib/gprpp/validation_errors.h +11 -0
- data/src/core/lib/gprpp/windows/stat.cc +3 -4
- data/src/core/lib/gprpp/windows/thd.cc +3 -2
- data/src/core/lib/gprpp/work_serializer.cc +48 -57
- data/src/core/lib/iomgr/buffer_list.cc +4 -2
- data/src/core/lib/iomgr/call_combiner.cc +18 -27
- data/src/core/lib/iomgr/call_combiner.h +1 -3
- data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
- data/src/core/lib/iomgr/closure.h +2 -4
- data/src/core/lib/iomgr/combiner.cc +6 -8
- data/src/core/lib/iomgr/combiner.h +0 -2
- data/src/core/lib/iomgr/endpoint.cc +0 -6
- data/src/core/lib/iomgr/endpoint.h +0 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +19 -41
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
- data/src/core/lib/iomgr/error.cc +13 -21
- data/src/core/lib/iomgr/error.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +3 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +43 -42
- data/src/core/lib/iomgr/ev_poll_posix.cc +38 -29
- data/src/core/lib/iomgr/ev_posix.cc +8 -9
- data/src/core/lib/iomgr/ev_posix.h +10 -7
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +2 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +14 -28
- data/src/core/lib/iomgr/exec_ctx.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +6 -15
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +8 -10
- data/src/core/lib/iomgr/fork_windows.cc +3 -1
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -3
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
- data/src/core/lib/iomgr/iocp_windows.cc +4 -3
- data/src/core/lib/iomgr/iomgr.cc +13 -17
- data/src/core/lib/iomgr/lockfree_event.cc +3 -5
- data/src/core/lib/iomgr/pollset.h +0 -2
- data/src/core/lib/iomgr/pollset_windows.cc +0 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -17
- data/src/core/lib/iomgr/socket_windows.cc +4 -6
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -15
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -4
- data/src/core/lib/iomgr/tcp_posix.cc +57 -84
- data/src/core/lib/iomgr/tcp_posix.h +0 -2
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +4 -6
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_windows.cc +10 -16
- data/src/core/lib/iomgr/tcp_windows.cc +25 -41
- data/src/core/lib/iomgr/timer_generic.cc +17 -20
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/iomgr/timer_manager.cc +17 -30
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/vsock.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
- data/src/core/lib/promise/activity.h +27 -4
- data/src/core/lib/promise/cancel_callback.h +24 -0
- data/src/core/lib/promise/context.h +11 -0
- data/src/core/lib/promise/detail/basic_seq.h +1 -2
- data/src/core/lib/promise/detail/join_state.h +354 -398
- data/src/core/lib/promise/detail/promise_like.h +6 -5
- data/src/core/lib/promise/detail/seq_state.h +1178 -1178
- data/src/core/lib/promise/for_each.h +6 -6
- data/src/core/lib/promise/interceptor_list.h +6 -7
- data/src/core/lib/promise/latch.h +9 -9
- data/src/core/lib/promise/map.h +17 -0
- data/src/core/lib/promise/observable.h +182 -0
- data/src/core/lib/promise/party.cc +7 -8
- data/src/core/lib/promise/party.h +10 -8
- data/src/core/lib/promise/pipe.h +16 -35
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/status_flag.h +2 -0
- data/src/core/lib/resource_quota/arena.cc +56 -79
- data/src/core/lib/resource_quota/arena.h +118 -209
- data/src/core/lib/resource_quota/memory_quota.cc +12 -13
- data/src/core/lib/resource_quota/memory_quota.h +2 -3
- data/src/core/lib/resource_quota/periodic_update.cc +1 -1
- data/src/core/lib/resource_quota/resource_quota.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +6 -8
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -6
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -0
- data/src/core/lib/security/authorization/matchers.cc +3 -3
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +2 -3
- data/src/core/lib/security/context/security_context.cc +12 -13
- data/src/core/lib/security/context/security_context.h +31 -8
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +3 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +5 -5
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -1
- data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +5 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials.cc +6 -6
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -4
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +2 -2
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.h +1 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -11
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.cc +14 -15
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +6 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +50 -54
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +12 -11
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -3
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +15 -21
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +21 -30
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +3 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +14 -16
- data/src/core/lib/security/credentials/tls/tls_utils.cc +4 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -16
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +15 -12
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +6 -6
- data/src/core/lib/security/security_connector/load_system_roots_windows.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +8 -12
- data/src/core/lib/security/security_connector/security_connector.cc +1 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +17 -19
- data/src/core/lib/security/security_connector/ssl_utils.cc +19 -21
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +29 -40
- data/src/core/lib/security/transport/auth_filters.h +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +7 -13
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -8
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/slice.h +1 -1
- data/src/core/lib/slice/slice_refcount.h +2 -4
- data/src/core/lib/slice/slice_string_helpers.cc +1 -1
- data/src/core/lib/surface/api_trace.h +1 -3
- data/src/core/lib/surface/call.cc +64 -3738
- data/src/core/lib/surface/call.h +41 -143
- data/src/core/lib/surface/call_log_batch.cc +1 -1
- data/src/core/lib/surface/call_utils.cc +276 -0
- data/src/core/lib/surface/call_utils.h +449 -0
- data/src/core/lib/surface/channel.cc +8 -3
- data/src/core/lib/surface/channel.h +10 -7
- data/src/core/lib/surface/channel_create.cc +14 -6
- data/src/core/lib/surface/channel_create.h +3 -2
- data/src/core/lib/surface/channel_init.cc +21 -77
- data/src/core/lib/surface/channel_init.h +19 -97
- data/src/core/lib/surface/client_call.cc +419 -0
- data/src/core/lib/surface/client_call.h +180 -0
- data/src/core/lib/surface/completion_queue.cc +28 -33
- data/src/core/lib/surface/completion_queue.h +0 -8
- data/src/core/lib/surface/filter_stack_call.cc +1157 -0
- data/src/core/lib/surface/filter_stack_call.h +369 -0
- data/src/core/lib/surface/init.cc +7 -6
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/legacy_channel.cc +40 -27
- data/src/core/lib/surface/legacy_channel.h +9 -18
- data/src/core/lib/surface/server_call.cc +222 -0
- data/src/core/lib/surface/server_call.h +167 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -5
- data/src/core/lib/transport/bdp_estimator.h +2 -4
- data/src/core/lib/transport/call_arena_allocator.h +9 -7
- data/src/core/lib/transport/call_destination.h +76 -0
- data/src/core/lib/transport/call_filters.cc +28 -10
- data/src/core/lib/transport/call_filters.h +128 -22
- data/src/core/lib/transport/call_spine.cc +5 -6
- data/src/core/lib/transport/call_spine.h +159 -334
- data/src/core/lib/transport/connectivity_state.cc +8 -10
- data/src/core/lib/transport/connectivity_state.h +0 -2
- data/src/core/lib/transport/interception_chain.cc +155 -0
- data/src/core/lib/transport/interception_chain.h +236 -0
- data/src/core/lib/transport/metadata_batch.h +10 -1
- data/src/core/lib/transport/metadata_info.h +1 -1
- data/src/core/lib/transport/transport.cc +3 -6
- data/src/core/lib/transport/transport.h +43 -40
- data/src/core/load_balancing/child_policy_handler.cc +8 -8
- data/src/core/load_balancing/endpoint_list.cc +5 -5
- data/src/core/load_balancing/endpoint_list.h +1 -1
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -0
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/load_balancing/grpclb/grpclb.cc +25 -29
- data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +3 -4
- data/src/core/load_balancing/health_check_client.cc +10 -13
- data/src/core/load_balancing/lb_policy.cc +5 -8
- data/src/core/load_balancing/lb_policy.h +19 -3
- data/src/core/load_balancing/lb_policy_factory.h +1 -1
- data/src/core/load_balancing/lb_policy_registry.cc +2 -3
- data/src/core/load_balancing/lb_policy_registry.h +1 -1
- data/src/core/load_balancing/oob_backend_metric.cc +2 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/load_balancing/outlier_detection/outlier_detection.h +3 -3
- data/src/core/load_balancing/pick_first/pick_first.cc +65 -65
- data/src/core/load_balancing/priority/priority.cc +26 -28
- data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -13
- data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
- data/src/core/load_balancing/rls/rls.cc +82 -82
- data/src/core/load_balancing/round_robin/round_robin.cc +17 -20
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +54 -43
- data/src/core/load_balancing/weighted_target/weighted_target.cc +21 -24
- data/src/core/load_balancing/xds/cds.cc +14 -16
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -18
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +15 -17
- data/src/core/load_balancing/xds/xds_override_host.cc +40 -41
- data/src/core/load_balancing/xds/xds_override_host.h +3 -3
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
- data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -1
- data/src/core/resolver/binder/binder_resolver.cc +3 -2
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +3 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +7 -14
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -5
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +4 -9
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +5 -5
- data/src/core/resolver/dns/native/dns_resolver.cc +8 -9
- data/src/core/resolver/endpoint_addresses.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.h +1 -1
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +13 -14
- data/src/core/resolver/polling_resolver.cc +30 -35
- data/src/core/resolver/resolver.cc +2 -6
- data/src/core/resolver/resolver.h +0 -2
- data/src/core/resolver/resolver_registry.cc +6 -8
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +3 -3
- data/src/core/resolver/xds/xds_dependency_manager.cc +22 -23
- data/src/core/resolver/xds/xds_resolver.cc +13 -15
- data/src/core/server/server.cc +269 -389
- data/src/core/server/server.h +37 -19
- data/src/core/server/server_call_tracer_filter.cc +7 -14
- data/src/core/server/server_config_selector.h +1 -1
- data/src/core/server/server_config_selector_filter.cc +3 -3
- data/src/core/server/server_interface.h +2 -0
- data/src/core/server/xds_channel_stack_modifier.cc +1 -1
- data/src/core/server/xds_channel_stack_modifier.h +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +1 -4
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_call_data.h +13 -11
- data/src/core/service_config/service_config_channel_arg_filter.cc +6 -4
- data/src/core/service_config/service_config_impl.cc +5 -5
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/service_config/service_config_parser.cc +3 -6
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/{lib/channel → telemetry}/call_tracer.cc +20 -30
- data/src/core/{lib/channel → telemetry}/call_tracer.h +32 -9
- data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
- data/src/core/{lib/debug → telemetry}/histogram_view.h +3 -3
- data/src/core/telemetry/metrics.cc +178 -0
- data/src/core/telemetry/metrics.h +562 -0
- data/src/core/{lib/debug → telemetry}/stats.cc +1 -1
- data/src/core/{lib/debug → telemetry}/stats.h +5 -5
- data/src/core/{lib/debug → telemetry}/stats_data.cc +1 -1
- data/src/core/{lib/debug → telemetry}/stats_data.h +4 -4
- data/src/core/{lib/channel → telemetry}/tcp_tracer.h +3 -3
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +12 -13
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +25 -27
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -33
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +5 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -3
- data/src/core/tsi/fake_transport_security.cc +14 -17
- data/src/core/tsi/local_transport_security.cc +6 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -4
- data/src/core/tsi/ssl_transport_security.cc +76 -81
- data/src/core/tsi/ssl_transport_security_utils.cc +74 -18
- data/src/core/tsi/ssl_transport_security_utils.h +11 -0
- data/src/core/tsi/transport_security.cc +0 -4
- data/src/core/tsi/transport_security.h +0 -2
- data/src/core/tsi/transport_security_interface.h +0 -4
- data/src/core/{lib/gpr → util}/alloc.h +3 -3
- data/src/core/{lib/gpr → util}/android/log.cc +0 -19
- data/src/core/{lib/gpr → util}/atm.cc +1 -1
- data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +25 -26
- data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +11 -11
- data/src/core/{lib/http → util/http_client}/format_request.cc +4 -3
- data/src/core/{lib/http → util/http_client}/format_request.h +6 -5
- data/src/core/{lib/http → util/http_client}/httpcli.cc +9 -10
- data/src/core/{lib/http → util/http_client}/httpcli.h +6 -5
- data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +9 -9
- data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +5 -4
- data/src/core/{lib/http → util/http_client}/parser.cc +4 -5
- data/src/core/{lib/http → util/http_client}/parser.h +5 -6
- data/src/core/{lib → util}/json/json.h +5 -4
- data/src/core/{lib → util}/json/json_args.h +5 -5
- data/src/core/{lib → util}/json/json_channel_args.h +6 -6
- data/src/core/{lib → util}/json/json_object_loader.cc +3 -2
- data/src/core/{lib → util}/json/json_object_loader.h +7 -7
- data/src/core/{lib → util}/json/json_reader.cc +3 -2
- data/src/core/{lib → util}/json/json_reader.h +6 -6
- data/src/core/{lib → util}/json/json_util.cc +4 -4
- data/src/core/{lib → util}/json/json_util.h +6 -6
- data/src/core/{lib → util}/json/json_writer.cc +3 -3
- data/src/core/{lib → util}/json/json_writer.h +6 -6
- data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
- data/src/core/util/log.cc +165 -0
- data/src/core/{lib/gpr → util}/msys/tmpfile.cc +2 -2
- data/src/core/{lib/gpr → util}/posix/cpu.cc +1 -1
- data/src/core/{lib/gpr → util}/posix/log.cc +0 -42
- data/src/core/{lib/gpr → util}/posix/time.cc +1 -1
- data/src/core/{lib/gpr → util}/posix/tmpfile.cc +2 -2
- data/src/core/{lib/gpr → util}/spinlock.h +3 -3
- data/src/core/{lib/gpr → util}/string.cc +2 -2
- data/src/core/{lib/gpr → util}/string.h +3 -3
- data/src/core/{lib/gpr → util}/time_precise.cc +1 -1
- data/src/core/{lib/gpr → util}/time_precise.h +3 -3
- data/src/core/{lib/gpr → util}/tmpfile.h +3 -3
- data/src/core/{lib/gpr → util}/useful.h +3 -3
- data/src/core/{lib/gpr → util}/windows/log.cc +1 -44
- data/src/core/{lib/gpr → util}/windows/string.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/string_util.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/time.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
- data/src/core/xds/grpc/certificate_provider_store.cc +3 -3
- data/src/core/xds/grpc/certificate_provider_store.h +4 -4
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +3 -3
- data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +5 -5
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +3 -3
- data/src/core/xds/grpc/xds_certificate_provider.h +1 -1
- data/src/core/xds/grpc/xds_client_grpc.cc +27 -23
- data/src/core/xds/grpc/xds_client_grpc.h +2 -2
- data/src/core/xds/grpc/xds_cluster.cc +4 -5
- data/src/core/xds/grpc/xds_cluster.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
- data/src/core/xds/grpc/xds_common_types.cc +1 -1
- data/src/core/xds/grpc/xds_common_types.h +1 -1
- data/src/core/xds/grpc/xds_endpoint.cc +4 -5
- data/src/core/xds/grpc/xds_http_fault_filter.cc +2 -2
- data/src/core/xds/grpc/xds_http_filters.h +2 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +2 -2
- data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
- data/src/core/xds/grpc/xds_listener.cc +4 -6
- data/src/core/xds/grpc/xds_route_config.cc +7 -8
- data/src/core/xds/grpc/xds_transport_grpc.cc +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.h +1 -1
- data/src/core/xds/xds_client/xds_api.cc +5 -9
- data/src/core/xds/xds_client/xds_bootstrap.cc +1 -1
- data/src/core/xds/xds_client/xds_bootstrap.h +1 -1
- data/src/core/xds/xds_client/xds_client.cc +39 -45
- data/src/core/xds/xds_client/xds_client.h +0 -3
- data/src/core/xds/xds_client/xds_client_stats.cc +6 -6
- data/src/core/xds/xds_client/xds_client_stats.h +2 -2
- data/src/ruby/bin/math_pb.rb +1 -22
- data/src/ruby/ext/grpc/rb_call.c +8 -1
- data/src/ruby/ext/grpc/rb_completion_queue.c +15 -32
- data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/ext/grpc/rb_server.c +39 -22
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +1 -22
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +5 -5
- data/src/ruby/pb/grpc/testing/metrics_pb.rb +10 -19
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +5 -5
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -22
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -22
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1497 -0
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -3
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +45 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +6 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +7 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +125 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -10
- metadata +103 -93
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
- data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
- data/src/core/handshaker/security/tsi_error.cc +0 -31
- data/src/core/handshaker/security/tsi_error.h +0 -30
- data/src/core/lib/channel/channel_stack_trace.cc +0 -19
- data/src/core/lib/channel/channel_stack_trace.h +0 -24
- data/src/core/lib/channel/context.h +0 -105
- data/src/core/lib/channel/metrics.cc +0 -334
- data/src/core/lib/channel/metrics.h +0 -365
- data/src/core/lib/event_engine/trace.cc +0 -25
- data/src/core/lib/gpr/log.cc +0 -166
- data/src/core/lib/iomgr/ev_windows.cc +0 -30
- data/src/core/lib/promise/trace.cc +0 -20
- data/src/core/lib/promise/trace.h +0 -24
- data/src/core/lib/resource_quota/trace.cc +0 -19
- data/src/core/lib/resource_quota/trace.h +0 -24
- data/src/core/lib/slice/slice_refcount.cc +0 -20
- data/src/core/lib/surface/api_trace.cc +0 -25
- data/src/core/lib/surface/call_trace.h +0 -24
- data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
- data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
- data/src/core/lib/transport/batch_builder.cc +0 -172
- data/src/core/lib/transport/batch_builder.h +0 -474
- data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
- data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
- /data/src/core/{lib/gpr → util}/alloc.cc +0 -0
- /data/src/core/{lib/gpr → util}/iphone/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/linux/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/posix/string.cc +0 -0
- /data/src/core/{lib/gpr → util}/posix/sync.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
- /data/src/core/{lib/gpr → util}/time.cc +0 -0
- /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/windows/sync.cc +0 -0
@@ -21,17 +21,24 @@
|
|
21
21
|
#include <atomic>
|
22
22
|
#include <new>
|
23
23
|
|
24
|
+
#include "absl/log/log.h"
|
25
|
+
|
24
26
|
#include <grpc/support/alloc.h>
|
25
27
|
#include <grpc/support/port_platform.h>
|
26
28
|
|
27
|
-
#include "src/core/lib/
|
29
|
+
#include "src/core/lib/resource_quota/resource_quota.h"
|
30
|
+
#include "src/core/util/alloc.h"
|
31
|
+
namespace grpc_core {
|
28
32
|
|
29
33
|
namespace {
|
30
34
|
|
31
|
-
void* ArenaStorage(size_t initial_size) {
|
35
|
+
void* ArenaStorage(size_t& initial_size) {
|
32
36
|
static constexpr size_t base_size =
|
33
|
-
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(
|
37
|
+
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(Arena));
|
34
38
|
initial_size = GPR_ROUND_UP_TO_ALIGNMENT_SIZE(initial_size);
|
39
|
+
initial_size = std::max(
|
40
|
+
initial_size, GPR_ROUND_UP_TO_ALIGNMENT_SIZE(
|
41
|
+
arena_detail::BaseArenaContextTraits::ContextSize()));
|
35
42
|
size_t alloc_size = base_size + initial_size;
|
36
43
|
static constexpr size_t alignment =
|
37
44
|
(GPR_CACHELINE_SIZE > GPR_MAX_ALIGNMENT &&
|
@@ -43,9 +50,15 @@ void* ArenaStorage(size_t initial_size) {
|
|
43
50
|
|
44
51
|
} // namespace
|
45
52
|
|
46
|
-
namespace grpc_core {
|
47
|
-
|
48
53
|
Arena::~Arena() {
|
54
|
+
for (size_t i = 0; i < arena_detail::BaseArenaContextTraits::NumContexts();
|
55
|
+
++i) {
|
56
|
+
arena_detail::BaseArenaContextTraits::Destroy(i, contexts()[i]);
|
57
|
+
}
|
58
|
+
DestroyManagedNewObjects();
|
59
|
+
arena_factory_->FinalizeArena(this);
|
60
|
+
arena_factory_->allocator().Release(
|
61
|
+
total_allocated_.load(std::memory_order_relaxed));
|
49
62
|
Zone* z = last_zone_;
|
50
63
|
while (z) {
|
51
64
|
Zone* prev_z = z->prev;
|
@@ -53,24 +66,26 @@ Arena::~Arena() {
|
|
53
66
|
gpr_free_aligned(z);
|
54
67
|
z = prev_z;
|
55
68
|
}
|
56
|
-
#ifdef GRPC_ARENA_TRACE_POOLED_ALLOCATIONS
|
57
|
-
gpr_log(GPR_ERROR, "DESTRUCT_ARENA %p", this);
|
58
|
-
#endif
|
59
69
|
}
|
60
70
|
|
61
|
-
Arena
|
62
|
-
|
63
|
-
|
71
|
+
RefCountedPtr<Arena> Arena::Create(size_t initial_size,
|
72
|
+
RefCountedPtr<ArenaFactory> arena_factory) {
|
73
|
+
void* p = ArenaStorage(initial_size);
|
74
|
+
return RefCountedPtr<Arena>(
|
75
|
+
new (p) Arena(initial_size, std::move(arena_factory)));
|
64
76
|
}
|
65
77
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
78
|
+
Arena::Arena(size_t initial_size, RefCountedPtr<ArenaFactory> arena_factory)
|
79
|
+
: initial_zone_size_(initial_size),
|
80
|
+
total_used_(GPR_ROUND_UP_TO_ALIGNMENT_SIZE(
|
81
|
+
arena_detail::BaseArenaContextTraits::ContextSize())),
|
82
|
+
arena_factory_(std::move(arena_factory)) {
|
83
|
+
for (size_t i = 0; i < arena_detail::BaseArenaContextTraits::NumContexts();
|
84
|
+
++i) {
|
85
|
+
contexts()[i] = nullptr;
|
86
|
+
}
|
87
|
+
CHECK_GE(initial_size, arena_detail::BaseArenaContextTraits::ContextSize());
|
88
|
+
arena_factory_->allocator().Reserve(initial_size);
|
74
89
|
}
|
75
90
|
|
76
91
|
void Arena::DestroyManagedNewObjects() {
|
@@ -86,11 +101,9 @@ void Arena::DestroyManagedNewObjects() {
|
|
86
101
|
}
|
87
102
|
}
|
88
103
|
|
89
|
-
void Arena::Destroy() {
|
90
|
-
DestroyManagedNewObjects();
|
91
|
-
memory_allocator_->Release(total_allocated_.load(std::memory_order_relaxed));
|
104
|
+
void Arena::Destroy() const {
|
92
105
|
this->~Arena();
|
93
|
-
gpr_free_aligned(this);
|
106
|
+
gpr_free_aligned(const_cast<Arena*>(this));
|
94
107
|
}
|
95
108
|
|
96
109
|
void* Arena::AllocZone(size_t size) {
|
@@ -102,7 +115,7 @@ void* Arena::AllocZone(size_t size) {
|
|
102
115
|
static constexpr size_t zone_base_size =
|
103
116
|
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(Zone));
|
104
117
|
size_t alloc_size = zone_base_size + size;
|
105
|
-
|
118
|
+
arena_factory_->allocator().Reserve(alloc_size);
|
106
119
|
total_allocated_.fetch_add(alloc_size, std::memory_order_relaxed);
|
107
120
|
Zone* z = new (gpr_malloc_aligned(alloc_size, GPR_MAX_ALIGNMENT)) Zone();
|
108
121
|
auto* prev = last_zone_.load(std::memory_order_relaxed);
|
@@ -120,63 +133,27 @@ void Arena::ManagedNewObject::Link(std::atomic<ManagedNewObject*>* head) {
|
|
120
133
|
}
|
121
134
|
}
|
122
135
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
// So we adopt an approach that is simple and fast for the single threaded
|
135
|
-
// case, and that is also correct in the multi threaded case.
|
136
|
-
|
137
|
-
// First, take ownership of the entire free list. At this point we know that
|
138
|
-
// no other thread can see free nodes and will be forced to allocate.
|
139
|
-
// We think we're mostly single threaded and so that's ok.
|
140
|
-
FreePoolNode* p = head->exchange(nullptr, std::memory_order_acquire);
|
141
|
-
// If there are no nodes in the free list, then go ahead and allocate from the
|
142
|
-
// arena.
|
143
|
-
if (p == nullptr) {
|
144
|
-
void* r = Alloc(alloc_size);
|
145
|
-
TracePoolAlloc(obj_size, r);
|
146
|
-
return r;
|
147
|
-
}
|
148
|
-
// We had a non-empty free list... but we own the *entire* free list.
|
149
|
-
// We only want one node, so if there are extras we'd better give them back.
|
150
|
-
if (p->next != nullptr) {
|
151
|
-
// We perform an exchange to do so, but if there were concurrent frees with
|
152
|
-
// this allocation then there'll be a free list that needs to be merged with
|
153
|
-
// ours.
|
154
|
-
FreePoolNode* extra = head->exchange(p->next, std::memory_order_acq_rel);
|
155
|
-
// If there was a free list concurrently created, we merge it into the
|
156
|
-
// overall free list here by simply freeing each node in turn. This is O(n),
|
157
|
-
// but only O(n) in the number of nodes that were freed concurrently, and
|
158
|
-
// again: we think real world use cases are going to see this as mostly
|
159
|
-
// single threaded.
|
160
|
-
while (extra != nullptr) {
|
161
|
-
FreePoolNode* next = extra->next;
|
162
|
-
FreePooled(extra, head);
|
163
|
-
extra = next;
|
136
|
+
RefCountedPtr<ArenaFactory> SimpleArenaAllocator(size_t initial_size) {
|
137
|
+
class Allocator : public ArenaFactory {
|
138
|
+
public:
|
139
|
+
explicit Allocator(size_t initial_size)
|
140
|
+
: ArenaFactory(
|
141
|
+
ResourceQuota::Default()->memory_quota()->CreateMemoryAllocator(
|
142
|
+
"simple-arena-allocator")),
|
143
|
+
initial_size_(initial_size) {}
|
144
|
+
|
145
|
+
RefCountedPtr<Arena> MakeArena() override {
|
146
|
+
return Arena::Create(initial_size_, Ref());
|
164
147
|
}
|
165
|
-
}
|
166
|
-
TracePoolAlloc(obj_size, p);
|
167
|
-
return p;
|
168
|
-
}
|
169
148
|
|
170
|
-
void Arena
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
}
|
149
|
+
void FinalizeArena(Arena*) override {
|
150
|
+
// No-op.
|
151
|
+
}
|
152
|
+
|
153
|
+
private:
|
154
|
+
size_t initial_size_;
|
155
|
+
};
|
156
|
+
return MakeRefCounted<Allocator>(initial_size);
|
179
157
|
}
|
180
|
-
#endif
|
181
158
|
|
182
159
|
} // namespace grpc_core
|
@@ -35,81 +35,73 @@
|
|
35
35
|
#include <grpc/event_engine/memory_allocator.h>
|
36
36
|
#include <grpc/support/port_platform.h>
|
37
37
|
|
38
|
-
#include "src/core/lib/gpr/alloc.h"
|
39
38
|
#include "src/core/lib/gprpp/construct_destruct.h"
|
40
39
|
#include "src/core/lib/promise/context.h"
|
41
40
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
42
|
-
|
43
|
-
#define GRPC_ARENA_POOLED_ALLOCATIONS_USE_MALLOC
|
44
|
-
// #define GRPC_ARENA_TRACE_POOLED_ALLOCATIONS
|
41
|
+
#include "src/core/util/alloc.h"
|
45
42
|
|
46
43
|
namespace grpc_core {
|
47
44
|
|
48
|
-
|
45
|
+
class Arena;
|
49
46
|
|
50
|
-
|
51
|
-
struct
|
52
|
-
size_t alloc_size;
|
53
|
-
size_t pool_index;
|
54
|
-
};
|
47
|
+
template <typename T>
|
48
|
+
struct ArenaContextType;
|
55
49
|
|
56
|
-
|
57
|
-
size_t... kBucketSize>
|
58
|
-
struct PoolIndexForSize;
|
59
|
-
|
60
|
-
template <size_t kObjectSize, size_t kIndex, size_t kSmallestRemainingBucket,
|
61
|
-
size_t... kBucketSizes>
|
62
|
-
struct PoolIndexForSize<
|
63
|
-
absl::enable_if_t<kObjectSize <= kSmallestRemainingBucket>, kIndex,
|
64
|
-
kObjectSize, kSmallestRemainingBucket, kBucketSizes...> {
|
65
|
-
static constexpr size_t kPool = kIndex;
|
66
|
-
static constexpr size_t kSize = kSmallestRemainingBucket;
|
67
|
-
};
|
50
|
+
namespace arena_detail {
|
68
51
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
52
|
+
// Tracks all registered arena context types (these should only be registered
|
53
|
+
// via ArenaContextTraits at static initialization time).
|
54
|
+
class BaseArenaContextTraits {
|
55
|
+
public:
|
56
|
+
// Count of number of contexts that have been allocated.
|
57
|
+
static uint16_t NumContexts() {
|
58
|
+
return static_cast<uint16_t>(RegisteredTraits().size());
|
59
|
+
}
|
76
60
|
|
77
|
-
|
78
|
-
|
79
|
-
absl::integer_sequence<size_t, kBucketSizes...>) {
|
80
|
-
return PoolIndexForSize<void, 0, kObjectSize, kBucketSizes...>::kPool;
|
81
|
-
}
|
61
|
+
// Number of bytes required to store the context pointers on an arena.
|
62
|
+
static size_t ContextSize() { return NumContexts() * sizeof(void*); }
|
82
63
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
}
|
64
|
+
// Call the registered destruction function for a context.
|
65
|
+
static void Destroy(uint16_t id, void* ptr) {
|
66
|
+
if (ptr == nullptr) return;
|
67
|
+
RegisteredTraits()[id](ptr);
|
68
|
+
}
|
88
69
|
|
89
|
-
|
90
|
-
|
70
|
+
protected:
|
71
|
+
// Allocate a new context id and register the destruction function.
|
72
|
+
static uint16_t MakeId(void (*destroy)(void* ptr)) {
|
73
|
+
auto& traits = RegisteredTraits();
|
74
|
+
const uint16_t id = static_cast<uint16_t>(traits.size());
|
75
|
+
traits.push_back(destroy);
|
76
|
+
return id;
|
77
|
+
}
|
91
78
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
return ChoosePoolForAllocationSizeImpl<kIndex + 1, kBucketSizes...>::Fn(n);
|
79
|
+
private:
|
80
|
+
static std::vector<void (*)(void*)>& RegisteredTraits() {
|
81
|
+
static NoDestruct<std::vector<void (*)(void*)>> registered_traits;
|
82
|
+
return *registered_traits;
|
97
83
|
}
|
98
84
|
};
|
99
85
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
}
|
86
|
+
// Traits for a specific context type.
|
87
|
+
template <typename T>
|
88
|
+
class ArenaContextTraits : public BaseArenaContextTraits {
|
89
|
+
public:
|
90
|
+
static uint16_t id() { return id_; }
|
91
|
+
|
92
|
+
private:
|
93
|
+
static const uint16_t id_;
|
105
94
|
};
|
106
95
|
|
107
|
-
template <
|
108
|
-
|
109
|
-
|
110
|
-
return ChoosePoolForAllocationSizeImpl<0, kBucketSizes...>::Fn(n);
|
96
|
+
template <typename T>
|
97
|
+
void DestroyArenaContext(void* p) {
|
98
|
+
ArenaContextType<T>::Destroy(static_cast<T*>(p));
|
111
99
|
}
|
112
|
-
|
100
|
+
|
101
|
+
template <typename T>
|
102
|
+
const uint16_t ArenaContextTraits<T>::id_ =
|
103
|
+
BaseArenaContextTraits::MakeId(DestroyArenaContext<T>);
|
104
|
+
|
113
105
|
template <typename T, typename A, typename B>
|
114
106
|
struct IfArray {
|
115
107
|
using Result = A;
|
@@ -119,30 +111,36 @@ template <typename T, typename A, typename B>
|
|
119
111
|
struct IfArray<T[], A, B> {
|
120
112
|
using Result = B;
|
121
113
|
};
|
122
|
-
|
114
|
+
|
115
|
+
struct UnrefDestroy {
|
116
|
+
void operator()(const Arena* arena) const;
|
117
|
+
};
|
123
118
|
|
124
119
|
} // namespace arena_detail
|
125
120
|
|
126
|
-
class
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
FreePoolNode* next;
|
133
|
-
};
|
134
|
-
#endif
|
121
|
+
class ArenaFactory : public RefCounted<ArenaFactory> {
|
122
|
+
public:
|
123
|
+
virtual RefCountedPtr<Arena> MakeArena() = 0;
|
124
|
+
virtual void FinalizeArena(Arena* arena) = 0;
|
125
|
+
|
126
|
+
MemoryAllocator& allocator() { return allocator_; }
|
135
127
|
|
128
|
+
protected:
|
129
|
+
explicit ArenaFactory(MemoryAllocator allocator)
|
130
|
+
: allocator_(std::move(allocator)) {}
|
131
|
+
|
132
|
+
private:
|
133
|
+
MemoryAllocator allocator_;
|
134
|
+
};
|
135
|
+
|
136
|
+
RefCountedPtr<ArenaFactory> SimpleArenaAllocator(size_t initial_size = 1024);
|
137
|
+
|
138
|
+
class Arena final : public RefCounted<Arena, NonPolymorphicRefCount,
|
139
|
+
arena_detail::UnrefDestroy> {
|
136
140
|
public:
|
137
141
|
// Create an arena, with \a initial_size bytes in the first allocated buffer.
|
138
|
-
static Arena
|
139
|
-
|
140
|
-
// Create an arena, with \a initial_size bytes in the first allocated buffer,
|
141
|
-
// and return both a void pointer to the returned arena and a void* with the
|
142
|
-
// first allocation.
|
143
|
-
static std::pair<Arena*, void*> CreateWithAlloc(
|
144
|
-
size_t initial_size, size_t alloc_size,
|
145
|
-
MemoryAllocator* memory_allocator);
|
142
|
+
static RefCountedPtr<Arena> Create(size_t initial_size,
|
143
|
+
RefCountedPtr<ArenaFactory> arena_factory);
|
146
144
|
|
147
145
|
// Destroy all `ManagedNew` allocated objects.
|
148
146
|
// Allows safe destruction of these objects even if they need context held by
|
@@ -151,9 +149,6 @@ class Arena {
|
|
151
149
|
// TODO(ctiller): eliminate ManagedNew.
|
152
150
|
void DestroyManagedNewObjects();
|
153
151
|
|
154
|
-
// Destroy an arena.
|
155
|
-
void Destroy();
|
156
|
-
|
157
152
|
// Return the total amount of memory allocated by this arena.
|
158
153
|
size_t TotalUsedBytes() const {
|
159
154
|
return total_used_.load(std::memory_order_relaxed);
|
@@ -194,95 +189,6 @@ class Arena {
|
|
194
189
|
return &p->t;
|
195
190
|
}
|
196
191
|
|
197
|
-
#ifndef GRPC_ARENA_POOLED_ALLOCATIONS_USE_MALLOC
|
198
|
-
class PooledDeleter {
|
199
|
-
public:
|
200
|
-
explicit PooledDeleter(std::atomic<FreePoolNode*>* free_list)
|
201
|
-
: free_list_(free_list) {}
|
202
|
-
PooledDeleter() = default;
|
203
|
-
template <typename T>
|
204
|
-
void operator()(T* p) {
|
205
|
-
// TODO(ctiller): promise based filter hijacks ownership of some pointers
|
206
|
-
// to make them appear as PoolPtr without really transferring ownership,
|
207
|
-
// by setting the arena to nullptr.
|
208
|
-
// This is a transitional hack and should be removed once promise based
|
209
|
-
// filter is removed.
|
210
|
-
if (free_list_ != nullptr) {
|
211
|
-
p->~T();
|
212
|
-
FreePooled(p, free_list_);
|
213
|
-
}
|
214
|
-
}
|
215
|
-
|
216
|
-
bool has_freelist() const { return free_list_ != nullptr; }
|
217
|
-
|
218
|
-
private:
|
219
|
-
std::atomic<FreePoolNode*>* free_list_;
|
220
|
-
};
|
221
|
-
|
222
|
-
template <typename T>
|
223
|
-
using PoolPtr = std::unique_ptr<T, PooledDeleter>;
|
224
|
-
|
225
|
-
// Make a unique_ptr to T that is allocated from the arena.
|
226
|
-
// When the pointer is released, the memory may be reused for other
|
227
|
-
// MakePooled(.*) calls.
|
228
|
-
// CAUTION: The amount of memory allocated is rounded up to the nearest
|
229
|
-
// value in Arena::PoolSizes, and so this may pessimize total
|
230
|
-
// arena size.
|
231
|
-
template <typename T, typename... Args>
|
232
|
-
PoolPtr<T> MakePooled(Args&&... args) {
|
233
|
-
auto* free_list =
|
234
|
-
&pools_[arena_detail::PoolFromObjectSize<sizeof(T)>(PoolSizes())];
|
235
|
-
return PoolPtr<T>(
|
236
|
-
new (AllocPooled(
|
237
|
-
sizeof(T),
|
238
|
-
arena_detail::AllocationSizeFromObjectSize<sizeof(T)>(PoolSizes()),
|
239
|
-
free_list)) T(std::forward<Args>(args)...),
|
240
|
-
PooledDeleter(free_list));
|
241
|
-
}
|
242
|
-
|
243
|
-
// Make a unique_ptr to an array of T that is allocated from the arena.
|
244
|
-
// When the pointer is released, the memory may be reused for other
|
245
|
-
// MakePooled(.*) calls.
|
246
|
-
// One can use MakePooledArray<char> to allocate a buffer of bytes.
|
247
|
-
// CAUTION: The amount of memory allocated is rounded up to the nearest
|
248
|
-
// value in Arena::PoolSizes, and so this may pessimize total
|
249
|
-
// arena size.
|
250
|
-
template <typename T>
|
251
|
-
PoolPtr<T[]> MakePooledArray(size_t n) {
|
252
|
-
auto where =
|
253
|
-
arena_detail::ChoosePoolForAllocationSize(n * sizeof(T), PoolSizes());
|
254
|
-
if (where.pool_index == std::numeric_limits<size_t>::max()) {
|
255
|
-
return PoolPtr<T[]>(new (Alloc(where.alloc_size)) T[n],
|
256
|
-
PooledDeleter(nullptr));
|
257
|
-
} else {
|
258
|
-
return PoolPtr<T[]>(new (AllocPooled(where.alloc_size, where.alloc_size,
|
259
|
-
&pools_[where.pool_index])) T[n],
|
260
|
-
PooledDeleter(&pools_[where.pool_index]));
|
261
|
-
}
|
262
|
-
}
|
263
|
-
|
264
|
-
// Like MakePooled, but with manual memory management.
|
265
|
-
// The caller is responsible for calling DeletePooled() on the returned
|
266
|
-
// pointer, and expected to call it with the same type T as was passed to this
|
267
|
-
// function (else the free list returned to the arena will be corrupted).
|
268
|
-
template <typename T, typename... Args>
|
269
|
-
T* NewPooled(Args&&... args) {
|
270
|
-
auto* free_list =
|
271
|
-
&pools_[arena_detail::PoolFromObjectSize<sizeof(T)>(PoolSizes())];
|
272
|
-
return new (AllocPooled(
|
273
|
-
sizeof(T),
|
274
|
-
arena_detail::AllocationSizeFromObjectSize<sizeof(T)>(PoolSizes()),
|
275
|
-
free_list)) T(std::forward<Args>(args)...);
|
276
|
-
}
|
277
|
-
|
278
|
-
template <typename T>
|
279
|
-
void DeletePooled(T* p) {
|
280
|
-
auto* free_list =
|
281
|
-
&pools_[arena_detail::PoolFromObjectSize<sizeof(T)>(PoolSizes())];
|
282
|
-
p->~T();
|
283
|
-
FreePooled(p, free_list);
|
284
|
-
}
|
285
|
-
#else
|
286
192
|
class PooledDeleter {
|
287
193
|
public:
|
288
194
|
PooledDeleter() = default;
|
@@ -364,9 +270,30 @@ class Arena {
|
|
364
270
|
void DeletePooled(T* p) {
|
365
271
|
delete p;
|
366
272
|
}
|
367
|
-
|
273
|
+
|
274
|
+
// Context accessors
|
275
|
+
// Prefer to use the free-standing `GetContext<>` and `SetContext<>` functions
|
276
|
+
// for modern promise-based code -- however legacy filter stack based code
|
277
|
+
// often needs to access these directly.
|
278
|
+
template <typename T>
|
279
|
+
T* GetContext() {
|
280
|
+
return static_cast<T*>(
|
281
|
+
contexts()[arena_detail::ArenaContextTraits<T>::id()]);
|
282
|
+
}
|
283
|
+
|
284
|
+
template <typename T>
|
285
|
+
void SetContext(T* context) {
|
286
|
+
void*& slot = contexts()[arena_detail::ArenaContextTraits<T>::id()];
|
287
|
+
if (slot != nullptr) {
|
288
|
+
ArenaContextType<T>::Destroy(static_cast<T*>(slot));
|
289
|
+
}
|
290
|
+
slot = context;
|
291
|
+
DCHECK_EQ(GetContext<T>(), context);
|
292
|
+
}
|
368
293
|
|
369
294
|
private:
|
295
|
+
friend struct arena_detail::UnrefDestroy;
|
296
|
+
|
370
297
|
struct Zone {
|
371
298
|
Zone* prev;
|
372
299
|
};
|
@@ -396,41 +323,20 @@ class Arena {
|
|
396
323
|
// quick optimization (avoiding an atomic fetch-add) for the common case
|
397
324
|
// where we wish to create an arena and then perform an immediate
|
398
325
|
// allocation.
|
399
|
-
explicit Arena(size_t initial_size,
|
400
|
-
|
401
|
-
: total_used_(GPR_ROUND_UP_TO_ALIGNMENT_SIZE(initial_alloc)),
|
402
|
-
initial_zone_size_(initial_size),
|
403
|
-
memory_allocator_(memory_allocator) {}
|
326
|
+
explicit Arena(size_t initial_size,
|
327
|
+
RefCountedPtr<ArenaFactory> arena_factory);
|
404
328
|
|
405
329
|
~Arena();
|
406
330
|
|
407
331
|
void* AllocZone(size_t size);
|
408
|
-
|
409
|
-
|
410
|
-
void* AllocPooled(size_t obj_size, size_t alloc_size,
|
411
|
-
std::atomic<FreePoolNode*>* head);
|
412
|
-
static void FreePooled(void* p, std::atomic<FreePoolNode*>* head);
|
413
|
-
#endif
|
414
|
-
|
415
|
-
void TracePoolAlloc(size_t size, void* ptr) {
|
416
|
-
(void)size;
|
417
|
-
(void)ptr;
|
418
|
-
#ifdef GRPC_ARENA_TRACE_POOLED_ALLOCATIONS
|
419
|
-
gpr_log(GPR_ERROR, "ARENA %p ALLOC %" PRIdPTR " @ %p", this, size, ptr);
|
420
|
-
#endif
|
421
|
-
}
|
422
|
-
static void TracePoolFree(void* ptr) {
|
423
|
-
(void)ptr;
|
424
|
-
#ifdef GRPC_ARENA_TRACE_POOLED_ALLOCATIONS
|
425
|
-
gpr_log(GPR_ERROR, "FREE %p", ptr);
|
426
|
-
#endif
|
427
|
-
}
|
332
|
+
void Destroy() const;
|
333
|
+
void** contexts() { return reinterpret_cast<void**>(this + 1); }
|
428
334
|
|
429
335
|
// Keep track of the total used size. We use this in our call sizing
|
430
336
|
// hysteresis.
|
431
|
-
std::atomic<size_t> total_used_{0};
|
432
|
-
std::atomic<size_t> total_allocated_{0};
|
433
337
|
const size_t initial_zone_size_;
|
338
|
+
std::atomic<size_t> total_used_;
|
339
|
+
std::atomic<size_t> total_allocated_{initial_zone_size_};
|
434
340
|
// If the initial arena allocation wasn't enough, we allocate additional zones
|
435
341
|
// in a reverse linked list. Each additional zone consists of (1) a pointer to
|
436
342
|
// the zone added before this zone (null if this is the first additional zone)
|
@@ -438,27 +344,30 @@ class Arena {
|
|
438
344
|
// last zone; the zone list is reverse-walked during arena destruction only.
|
439
345
|
std::atomic<Zone*> last_zone_{nullptr};
|
440
346
|
std::atomic<ManagedNewObject*> managed_new_head_{nullptr};
|
441
|
-
|
442
|
-
std::atomic<FreePoolNode*> pools_[PoolSizes::size()]{};
|
443
|
-
#endif
|
444
|
-
// The backing memory quota
|
445
|
-
MemoryAllocator* const memory_allocator_;
|
446
|
-
};
|
447
|
-
|
448
|
-
// Smart pointer for arenas when the final size is not required.
|
449
|
-
struct ScopedArenaDeleter {
|
450
|
-
void operator()(Arena* arena) { arena->Destroy(); }
|
347
|
+
RefCountedPtr<ArenaFactory> arena_factory_;
|
451
348
|
};
|
452
|
-
using ScopedArenaPtr = std::unique_ptr<Arena, ScopedArenaDeleter>;
|
453
|
-
inline ScopedArenaPtr MakeScopedArena(size_t initial_size,
|
454
|
-
MemoryAllocator* memory_allocator) {
|
455
|
-
return ScopedArenaPtr(Arena::Create(initial_size, memory_allocator));
|
456
|
-
}
|
457
349
|
|
458
350
|
// Arenas form a context for activities
|
459
351
|
template <>
|
460
352
|
struct ContextType<Arena> {};
|
461
353
|
|
354
|
+
namespace arena_detail {
|
355
|
+
inline void UnrefDestroy::operator()(const Arena* arena) const {
|
356
|
+
arena->Destroy();
|
357
|
+
}
|
358
|
+
} // namespace arena_detail
|
359
|
+
|
360
|
+
namespace promise_detail {
|
361
|
+
|
362
|
+
template <typename T>
|
363
|
+
class Context<T, absl::void_t<decltype(ArenaContextType<T>::Destroy)>> {
|
364
|
+
public:
|
365
|
+
static T* get() { return GetContext<Arena>()->GetContext<T>(); }
|
366
|
+
static void set(T* value) { GetContext<Arena>()->SetContext(value); }
|
367
|
+
};
|
368
|
+
|
369
|
+
} // namespace promise_detail
|
370
|
+
|
462
371
|
} // namespace grpc_core
|
463
372
|
|
464
373
|
#endif // GRPC_SRC_CORE_LIB_RESOURCE_QUOTA_ARENA_H
|