grpc 1.47.0 → 1.48.0.pre1
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 +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -13,60 +13,59 @@
|
|
13
13
|
// limitations under the License.
|
14
14
|
#include <grpc/support/port_platform.h>
|
15
15
|
|
16
|
-
#include "src/core/lib/event_engine/iomgr_engine.h"
|
16
|
+
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine.h"
|
17
17
|
|
18
|
+
#include <algorithm>
|
18
19
|
#include <string>
|
19
|
-
#include <type_traits>
|
20
20
|
#include <utility>
|
21
21
|
|
22
|
-
#include "absl/cleanup/cleanup.h"
|
23
22
|
#include "absl/container/flat_hash_set.h"
|
24
23
|
#include "absl/strings/str_cat.h"
|
25
|
-
#include "absl/time/clock.h"
|
26
24
|
|
27
25
|
#include <grpc/event_engine/event_engine.h>
|
28
26
|
#include <grpc/support/log.h>
|
29
27
|
|
30
28
|
#include "src/core/lib/debug/trace.h"
|
29
|
+
#include "src/core/lib/event_engine/iomgr_engine/timer.h"
|
31
30
|
#include "src/core/lib/event_engine/trace.h"
|
32
|
-
#include "src/core/lib/gprpp/match.h"
|
33
31
|
#include "src/core/lib/gprpp/time.h"
|
34
|
-
#include "src/core/lib/iomgr/closure.h"
|
35
|
-
#include "src/core/lib/iomgr/error.h"
|
36
|
-
#include "src/core/lib/iomgr/exec_ctx.h"
|
37
|
-
#include "src/core/lib/iomgr/executor.h"
|
38
|
-
#include "src/core/lib/iomgr/timer.h"
|
39
32
|
|
40
33
|
namespace grpc_event_engine {
|
41
34
|
namespace experimental {
|
42
35
|
|
43
36
|
namespace {
|
44
37
|
|
45
|
-
struct ClosureData {
|
46
|
-
grpc_timer timer;
|
47
|
-
grpc_closure closure;
|
48
|
-
absl::variant<std::function<void()>, EventEngine::Closure*> cb;
|
49
|
-
IomgrEventEngine* engine;
|
50
|
-
EventEngine::TaskHandle handle;
|
51
|
-
};
|
52
|
-
|
53
|
-
// Timer limits due to quirks in the iomgr implementation.
|
54
|
-
// If deadline <= Now, the callback will be run inline, which can result in lock
|
55
|
-
// issues. And absl::InfiniteFuture yields UB.
|
56
|
-
absl::Time Clamp(absl::Time when) {
|
57
|
-
absl::Time max = absl::Now() + absl::Hours(8766);
|
58
|
-
absl::Time min = absl::Now() + absl::Milliseconds(2);
|
59
|
-
if (when > max) return max;
|
60
|
-
if (when < min) return min;
|
61
|
-
return when;
|
62
|
-
}
|
63
|
-
|
64
38
|
std::string HandleToString(EventEngine::TaskHandle handle) {
|
65
39
|
return absl::StrCat("{", handle.keys[0], ",", handle.keys[1], "}");
|
66
40
|
}
|
67
41
|
|
68
42
|
} // namespace
|
69
43
|
|
44
|
+
grpc_core::Timestamp IomgrEventEngine::ToTimestamp(EventEngine::Duration when) {
|
45
|
+
return timer_manager_.Now() +
|
46
|
+
std::max(grpc_core::Duration::Milliseconds(1),
|
47
|
+
grpc_core::Duration::NanosecondsRoundUp(when.count())) +
|
48
|
+
grpc_core::Duration::Milliseconds(1);
|
49
|
+
}
|
50
|
+
|
51
|
+
struct IomgrEventEngine::ClosureData final : public EventEngine::Closure {
|
52
|
+
std::function<void()> cb;
|
53
|
+
iomgr_engine::Timer timer;
|
54
|
+
IomgrEventEngine* engine;
|
55
|
+
EventEngine::TaskHandle handle;
|
56
|
+
|
57
|
+
void Run() override {
|
58
|
+
GRPC_EVENT_ENGINE_TRACE("IomgrEventEngine:%p executing callback:%s", engine,
|
59
|
+
HandleToString(handle).c_str());
|
60
|
+
{
|
61
|
+
grpc_core::MutexLock lock(&engine->mu_);
|
62
|
+
engine->known_handles_.erase(handle);
|
63
|
+
}
|
64
|
+
cb();
|
65
|
+
delete this;
|
66
|
+
}
|
67
|
+
};
|
68
|
+
|
70
69
|
IomgrEventEngine::IomgrEventEngine() {}
|
71
70
|
|
72
71
|
IomgrEventEngine::~IomgrEventEngine() {
|
@@ -83,66 +82,39 @@ IomgrEventEngine::~IomgrEventEngine() {
|
|
83
82
|
}
|
84
83
|
|
85
84
|
bool IomgrEventEngine::Cancel(EventEngine::TaskHandle handle) {
|
86
|
-
grpc_core::ExecCtx ctx;
|
87
85
|
grpc_core::MutexLock lock(&mu_);
|
88
86
|
if (!known_handles_.contains(handle)) return false;
|
89
87
|
auto* cd = reinterpret_cast<ClosureData*>(handle.keys[0]);
|
90
|
-
|
88
|
+
bool r = timer_manager_.TimerCancel(&cd->timer);
|
91
89
|
known_handles_.erase(handle);
|
92
|
-
|
90
|
+
if (r) delete cd;
|
91
|
+
return r;
|
93
92
|
}
|
94
93
|
|
95
|
-
EventEngine::TaskHandle IomgrEventEngine::
|
96
|
-
|
97
|
-
return
|
94
|
+
EventEngine::TaskHandle IomgrEventEngine::RunAfter(
|
95
|
+
Duration when, std::function<void()> closure) {
|
96
|
+
return RunAfterInternal(when, std::move(closure));
|
98
97
|
}
|
99
98
|
|
100
|
-
EventEngine::TaskHandle IomgrEventEngine::
|
101
|
-
|
102
|
-
return
|
99
|
+
EventEngine::TaskHandle IomgrEventEngine::RunAfter(
|
100
|
+
Duration when, EventEngine::Closure* closure) {
|
101
|
+
return RunAfterInternal(when, [closure]() { closure->Run(); });
|
103
102
|
}
|
104
103
|
|
105
104
|
void IomgrEventEngine::Run(std::function<void()> closure) {
|
106
|
-
|
105
|
+
thread_pool_.Add(closure);
|
107
106
|
}
|
108
107
|
|
109
108
|
void IomgrEventEngine::Run(EventEngine::Closure* closure) {
|
110
|
-
|
109
|
+
thread_pool_.Add([closure]() { closure->Run(); });
|
111
110
|
}
|
112
111
|
|
113
|
-
EventEngine::TaskHandle IomgrEventEngine::
|
114
|
-
|
115
|
-
|
116
|
-
when = Clamp(when);
|
117
|
-
grpc_core::ExecCtx ctx;
|
112
|
+
EventEngine::TaskHandle IomgrEventEngine::RunAfterInternal(
|
113
|
+
Duration when, std::function<void()> cb) {
|
114
|
+
auto when_ts = ToTimestamp(when);
|
118
115
|
auto* cd = new ClosureData;
|
119
116
|
cd->cb = std::move(cb);
|
120
117
|
cd->engine = this;
|
121
|
-
GRPC_CLOSURE_INIT(
|
122
|
-
&cd->closure,
|
123
|
-
[](void* arg, grpc_error_handle error) {
|
124
|
-
auto* cd = static_cast<ClosureData*>(arg);
|
125
|
-
GRPC_EVENT_ENGINE_TRACE("IomgrEventEngine:%p executing callback:%s",
|
126
|
-
cd->engine, HandleToString(cd->handle).c_str());
|
127
|
-
{
|
128
|
-
grpc_core::MutexLock lock(&cd->engine->mu_);
|
129
|
-
cd->engine->known_handles_.erase(cd->handle);
|
130
|
-
}
|
131
|
-
auto cleaner = absl::MakeCleanup([cd] { delete cd; });
|
132
|
-
if (error == GRPC_ERROR_CANCELLED) return;
|
133
|
-
grpc_core::Match(
|
134
|
-
cd->cb, [](EventEngine::Closure* cb) { cb->Run(); },
|
135
|
-
[](std::function<void()> fn) { fn(); });
|
136
|
-
},
|
137
|
-
cd, nullptr);
|
138
|
-
// kludge to deal with realtime/monotonic clock conversion
|
139
|
-
absl::Time absl_now = absl::Now();
|
140
|
-
grpc_core::Duration duration = grpc_core::Duration::Milliseconds(
|
141
|
-
absl::ToInt64Milliseconds(when - absl_now) + 1);
|
142
|
-
grpc_core::ExecCtx::Get()->InvalidateNow();
|
143
|
-
grpc_core::Timestamp when_internal = grpc_core::ExecCtx::Get()->Now() +
|
144
|
-
duration +
|
145
|
-
grpc_core::Duration::Milliseconds(1);
|
146
118
|
EventEngine::TaskHandle handle{reinterpret_cast<intptr_t>(cd),
|
147
119
|
aba_token_.fetch_add(1)};
|
148
120
|
grpc_core::MutexLock lock(&mu_);
|
@@ -150,29 +122,10 @@ EventEngine::TaskHandle IomgrEventEngine::RunAtInternal(
|
|
150
122
|
cd->handle = handle;
|
151
123
|
GRPC_EVENT_ENGINE_TRACE("IomgrEventEngine:%p scheduling callback:%s", this,
|
152
124
|
HandleToString(handle).c_str());
|
153
|
-
|
125
|
+
timer_manager_.TimerInit(&cd->timer, when_ts, cd);
|
154
126
|
return handle;
|
155
127
|
}
|
156
128
|
|
157
|
-
void IomgrEventEngine::RunInternal(
|
158
|
-
absl::variant<std::function<void()>, EventEngine::Closure*> cb) {
|
159
|
-
auto* cd = new ClosureData;
|
160
|
-
cd->cb = std::move(cb);
|
161
|
-
cd->engine = this;
|
162
|
-
GRPC_CLOSURE_INIT(
|
163
|
-
&cd->closure,
|
164
|
-
[](void* arg, grpc_error_handle /*error*/) {
|
165
|
-
auto* cd = static_cast<ClosureData*>(arg);
|
166
|
-
auto cleaner = absl::MakeCleanup([cd] { delete cd; });
|
167
|
-
grpc_core::Match(
|
168
|
-
cd->cb, [](EventEngine::Closure* cb) { cb->Run(); },
|
169
|
-
[](std::function<void()> fn) { fn(); });
|
170
|
-
},
|
171
|
-
cd, nullptr);
|
172
|
-
// TODO(hork): have the EE spawn dedicated closure thread(s)
|
173
|
-
grpc_core::Executor::Run(&cd->closure, GRPC_ERROR_NONE);
|
174
|
-
}
|
175
|
-
|
176
129
|
std::unique_ptr<EventEngine::DNSResolver> IomgrEventEngine::GetDNSResolver(
|
177
130
|
EventEngine::DNSResolver::ResolverOptions const& /*options*/) {
|
178
131
|
GPR_ASSERT(false && "unimplemented");
|
@@ -189,7 +142,7 @@ bool IomgrEventEngine::CancelConnect(EventEngine::ConnectionHandle /*handle*/) {
|
|
189
142
|
EventEngine::ConnectionHandle IomgrEventEngine::Connect(
|
190
143
|
OnConnectCallback /*on_connect*/, const ResolvedAddress& /*addr*/,
|
191
144
|
const EndpointConfig& /*args*/, MemoryAllocator /*memory_allocator*/,
|
192
|
-
|
145
|
+
Duration /*deadline*/) {
|
193
146
|
GPR_ASSERT(false && "unimplemented");
|
194
147
|
}
|
195
148
|
|
@@ -11,8 +11,8 @@
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
12
|
// See the License for the specific language governing permissions and
|
13
13
|
// limitations under the License.
|
14
|
-
#ifndef
|
15
|
-
#define
|
14
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_IOMGR_ENGINE_H
|
15
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_IOMGR_ENGINE_H
|
16
16
|
#include <grpc/support/port_platform.h>
|
17
17
|
|
18
18
|
#include <stdint.h>
|
@@ -25,8 +25,6 @@
|
|
25
25
|
#include "absl/status/status.h"
|
26
26
|
#include "absl/status/statusor.h"
|
27
27
|
#include "absl/strings/string_view.h"
|
28
|
-
#include "absl/time/time.h"
|
29
|
-
#include "absl/types/variant.h"
|
30
28
|
|
31
29
|
#include <grpc/event_engine/endpoint_config.h>
|
32
30
|
#include <grpc/event_engine/event_engine.h>
|
@@ -34,11 +32,16 @@
|
|
34
32
|
#include <grpc/event_engine/slice_buffer.h>
|
35
33
|
|
36
34
|
#include "src/core/lib/event_engine/handle_containers.h"
|
35
|
+
#include "src/core/lib/event_engine/iomgr_engine/thread_pool.h"
|
36
|
+
#include "src/core/lib/event_engine/iomgr_engine/timer_manager.h"
|
37
37
|
#include "src/core/lib/gprpp/sync.h"
|
38
|
+
#include "src/core/lib/gprpp/time.h"
|
38
39
|
|
39
40
|
namespace grpc_event_engine {
|
40
41
|
namespace experimental {
|
41
42
|
|
43
|
+
// An iomgr-based EventEngine implementation.
|
44
|
+
// All methods require an ExecCtx to already exist on the thread's stack.
|
42
45
|
class IomgrEventEngine final : public EventEngine {
|
43
46
|
public:
|
44
47
|
class IomgrEndpoint : public EventEngine::Endpoint {
|
@@ -63,13 +66,13 @@ class IomgrEventEngine final : public EventEngine {
|
|
63
66
|
LookupTaskHandle LookupHostname(LookupHostnameCallback on_resolve,
|
64
67
|
absl::string_view name,
|
65
68
|
absl::string_view default_port,
|
66
|
-
|
69
|
+
Duration timeout) override;
|
67
70
|
LookupTaskHandle LookupSRV(LookupSRVCallback on_resolve,
|
68
71
|
absl::string_view name,
|
69
|
-
|
72
|
+
Duration timeout) override;
|
70
73
|
LookupTaskHandle LookupTXT(LookupTXTCallback on_resolve,
|
71
74
|
absl::string_view name,
|
72
|
-
|
75
|
+
Duration timeout) override;
|
73
76
|
bool CancelLookup(LookupTaskHandle handle) override;
|
74
77
|
};
|
75
78
|
|
@@ -87,7 +90,7 @@ class IomgrEventEngine final : public EventEngine {
|
|
87
90
|
const ResolvedAddress& addr,
|
88
91
|
const EndpointConfig& args,
|
89
92
|
MemoryAllocator memory_allocator,
|
90
|
-
|
93
|
+
Duration timeout) override;
|
91
94
|
|
92
95
|
bool CancelConnect(ConnectionHandle handle) override;
|
93
96
|
bool IsWorkerThread() override;
|
@@ -95,17 +98,18 @@ class IomgrEventEngine final : public EventEngine {
|
|
95
98
|
const DNSResolver::ResolverOptions& options) override;
|
96
99
|
void Run(Closure* closure) override;
|
97
100
|
void Run(std::function<void()> closure) override;
|
98
|
-
TaskHandle
|
99
|
-
TaskHandle
|
101
|
+
TaskHandle RunAfter(Duration when, Closure* closure) override;
|
102
|
+
TaskHandle RunAfter(Duration when, std::function<void()> closure) override;
|
100
103
|
bool Cancel(TaskHandle handle) override;
|
101
104
|
|
102
105
|
private:
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
+
struct ClosureData;
|
107
|
+
EventEngine::TaskHandle RunAfterInternal(Duration when,
|
108
|
+
std::function<void()> cb);
|
109
|
+
grpc_core::Timestamp ToTimestamp(EventEngine::Duration when);
|
106
110
|
|
107
|
-
|
108
|
-
|
111
|
+
iomgr_engine::TimerManager timer_manager_;
|
112
|
+
iomgr_engine::ThreadPool thread_pool_{2};
|
109
113
|
|
110
114
|
grpc_core::Mutex mu_;
|
111
115
|
TaskHandleSet known_handles_ ABSL_GUARDED_BY(mu_);
|
@@ -115,4 +119,4 @@ class IomgrEventEngine final : public EventEngine {
|
|
115
119
|
} // namespace experimental
|
116
120
|
} // namespace grpc_event_engine
|
117
121
|
|
118
|
-
#endif //
|
122
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_IOMGR_ENGINE_H
|
@@ -0,0 +1,123 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include "src/core/lib/event_engine/iomgr_engine/thread_pool.h"
|
22
|
+
|
23
|
+
#include "src/core/lib/gprpp/thd.h"
|
24
|
+
|
25
|
+
namespace grpc_event_engine {
|
26
|
+
namespace iomgr_engine {
|
27
|
+
|
28
|
+
ThreadPool::Thread::Thread(ThreadPool* pool)
|
29
|
+
: pool_(pool),
|
30
|
+
thd_(
|
31
|
+
"iomgr_eventengine_pool",
|
32
|
+
[](void* th) { static_cast<ThreadPool::Thread*>(th)->ThreadFunc(); },
|
33
|
+
this) {
|
34
|
+
thd_.Start();
|
35
|
+
}
|
36
|
+
ThreadPool::Thread::~Thread() { thd_.Join(); }
|
37
|
+
|
38
|
+
void ThreadPool::Thread::ThreadFunc() {
|
39
|
+
pool_->ThreadFunc();
|
40
|
+
// Now that we have killed ourselves, we should reduce the thread count
|
41
|
+
grpc_core::MutexLock lock(&pool_->mu_);
|
42
|
+
pool_->nthreads_--;
|
43
|
+
// Move ourselves to dead list
|
44
|
+
pool_->dead_threads_.push_back(this);
|
45
|
+
|
46
|
+
if ((pool_->shutdown_) && (pool_->nthreads_ == 0)) {
|
47
|
+
pool_->shutdown_cv_.Signal();
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
void ThreadPool::ThreadFunc() {
|
52
|
+
for (;;) {
|
53
|
+
// Wait until work is available or we are shutting down.
|
54
|
+
grpc_core::ReleasableMutexLock lock(&mu_);
|
55
|
+
if (!shutdown_ && callbacks_.empty()) {
|
56
|
+
// If there are too many threads waiting, then quit this thread
|
57
|
+
if (threads_waiting_ >= reserve_threads_) {
|
58
|
+
break;
|
59
|
+
}
|
60
|
+
threads_waiting_++;
|
61
|
+
cv_.Wait(&mu_);
|
62
|
+
threads_waiting_--;
|
63
|
+
}
|
64
|
+
// Drain callbacks before considering shutdown to ensure all work
|
65
|
+
// gets completed.
|
66
|
+
if (!callbacks_.empty()) {
|
67
|
+
auto cb = callbacks_.front();
|
68
|
+
callbacks_.pop();
|
69
|
+
lock.Release();
|
70
|
+
cb();
|
71
|
+
} else if (shutdown_) {
|
72
|
+
break;
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
ThreadPool::ThreadPool(int reserve_threads)
|
78
|
+
: shutdown_(false),
|
79
|
+
reserve_threads_(reserve_threads),
|
80
|
+
nthreads_(0),
|
81
|
+
threads_waiting_(0) {
|
82
|
+
for (int i = 0; i < reserve_threads_; i++) {
|
83
|
+
grpc_core::MutexLock lock(&mu_);
|
84
|
+
nthreads_++;
|
85
|
+
new Thread(this);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
void ThreadPool::ReapThreads(std::vector<Thread*>* tlist) {
|
90
|
+
for (auto* t : *tlist) delete t;
|
91
|
+
tlist->clear();
|
92
|
+
}
|
93
|
+
|
94
|
+
ThreadPool::~ThreadPool() {
|
95
|
+
grpc_core::MutexLock lock(&mu_);
|
96
|
+
shutdown_ = true;
|
97
|
+
cv_.SignalAll();
|
98
|
+
while (nthreads_ != 0) {
|
99
|
+
shutdown_cv_.Wait(&mu_);
|
100
|
+
}
|
101
|
+
ReapThreads(&dead_threads_);
|
102
|
+
}
|
103
|
+
|
104
|
+
void ThreadPool::Add(const std::function<void()>& callback) {
|
105
|
+
grpc_core::MutexLock lock(&mu_);
|
106
|
+
// Add works to the callbacks list
|
107
|
+
callbacks_.push(callback);
|
108
|
+
// Increase pool size or notify as needed
|
109
|
+
if (threads_waiting_ == 0) {
|
110
|
+
// Kick off a new thread
|
111
|
+
nthreads_++;
|
112
|
+
new Thread(this);
|
113
|
+
} else {
|
114
|
+
cv_.Signal();
|
115
|
+
}
|
116
|
+
// Also use this chance to harvest dead threads
|
117
|
+
if (!dead_threads_.empty()) {
|
118
|
+
ReapThreads(&dead_threads_);
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
} // namespace iomgr_engine
|
123
|
+
} // namespace grpc_event_engine
|
@@ -0,0 +1,70 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_THREAD_POOL_H
|
20
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_THREAD_POOL_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include <functional>
|
25
|
+
#include <queue>
|
26
|
+
#include <vector>
|
27
|
+
|
28
|
+
#include "src/core/lib/gprpp/sync.h"
|
29
|
+
#include "src/core/lib/gprpp/thd.h"
|
30
|
+
|
31
|
+
namespace grpc_event_engine {
|
32
|
+
namespace iomgr_engine {
|
33
|
+
|
34
|
+
class ThreadPool final {
|
35
|
+
public:
|
36
|
+
explicit ThreadPool(int reserve_threads);
|
37
|
+
~ThreadPool();
|
38
|
+
|
39
|
+
void Add(const std::function<void()>& callback);
|
40
|
+
|
41
|
+
private:
|
42
|
+
class Thread {
|
43
|
+
public:
|
44
|
+
explicit Thread(ThreadPool* pool);
|
45
|
+
~Thread();
|
46
|
+
|
47
|
+
private:
|
48
|
+
ThreadPool* pool_;
|
49
|
+
grpc_core::Thread thd_;
|
50
|
+
void ThreadFunc();
|
51
|
+
};
|
52
|
+
|
53
|
+
void ThreadFunc();
|
54
|
+
static void ReapThreads(std::vector<Thread*>* tlist);
|
55
|
+
|
56
|
+
grpc_core::Mutex mu_;
|
57
|
+
grpc_core::CondVar cv_;
|
58
|
+
grpc_core::CondVar shutdown_cv_;
|
59
|
+
bool shutdown_;
|
60
|
+
std::queue<std::function<void()>> callbacks_;
|
61
|
+
int reserve_threads_;
|
62
|
+
int nthreads_;
|
63
|
+
int threads_waiting_;
|
64
|
+
std::vector<Thread*> dead_threads_;
|
65
|
+
};
|
66
|
+
|
67
|
+
} // namespace iomgr_engine
|
68
|
+
} // namespace grpc_event_engine
|
69
|
+
|
70
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_THREAD_POOL_H
|
@@ -0,0 +1,62 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include "src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h"
|
22
|
+
|
23
|
+
namespace grpc_event_engine {
|
24
|
+
namespace iomgr_engine {
|
25
|
+
|
26
|
+
TimeAveragedStats::TimeAveragedStats(double init_avg, double regress_weight,
|
27
|
+
double persistence_factor)
|
28
|
+
: init_avg_(init_avg),
|
29
|
+
regress_weight_(regress_weight),
|
30
|
+
persistence_factor_(persistence_factor) {}
|
31
|
+
|
32
|
+
void TimeAveragedStats::AddSample(double value) {
|
33
|
+
batch_total_value_ += value;
|
34
|
+
++batch_num_samples_;
|
35
|
+
}
|
36
|
+
|
37
|
+
double TimeAveragedStats::UpdateAverage() {
|
38
|
+
/* Start with the current batch: */
|
39
|
+
double weighted_sum = batch_total_value_;
|
40
|
+
double total_weight = batch_num_samples_;
|
41
|
+
if (regress_weight_ > 0) {
|
42
|
+
/* Add in the regression towards init_avg_: */
|
43
|
+
weighted_sum += regress_weight_ * init_avg_;
|
44
|
+
total_weight += regress_weight_;
|
45
|
+
}
|
46
|
+
if (persistence_factor_ > 0) {
|
47
|
+
/* Add in the persistence: */
|
48
|
+
const double prev_sample_weight =
|
49
|
+
persistence_factor_ * aggregate_total_weight_;
|
50
|
+
weighted_sum += prev_sample_weight * aggregate_weighted_avg_;
|
51
|
+
total_weight += prev_sample_weight;
|
52
|
+
}
|
53
|
+
aggregate_weighted_avg_ =
|
54
|
+
(total_weight > 0) ? (weighted_sum / total_weight) : init_avg_;
|
55
|
+
aggregate_total_weight_ = total_weight;
|
56
|
+
batch_num_samples_ = 0;
|
57
|
+
batch_total_value_ = 0;
|
58
|
+
return aggregate_weighted_avg_;
|
59
|
+
}
|
60
|
+
|
61
|
+
} // namespace iomgr_engine
|
62
|
+
} // namespace grpc_event_engine
|
@@ -0,0 +1,81 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIME_AVERAGED_STATS_H
|
20
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIME_AVERAGED_STATS_H
|
21
|
+
|
22
|
+
namespace grpc_event_engine {
|
23
|
+
namespace iomgr_engine {
|
24
|
+
|
25
|
+
/* This tracks a time-decaying weighted average. It works by collecting
|
26
|
+
batches of samples and then mixing their average into a time-decaying
|
27
|
+
weighted mean. It is designed for batch operations where we do many adds
|
28
|
+
before updating the average. */
|
29
|
+
|
30
|
+
class TimeAveragedStats {
|
31
|
+
public:
|
32
|
+
TimeAveragedStats(double init_avg, double regress_weight,
|
33
|
+
double persistence_factor);
|
34
|
+
|
35
|
+
/* Add a sample to the current batch. */
|
36
|
+
void AddSample(double value);
|
37
|
+
/* Complete a batch and compute the new estimate of the average sample
|
38
|
+
value. */
|
39
|
+
double UpdateAverage();
|
40
|
+
|
41
|
+
double aggregate_weighted_avg() const { return aggregate_weighted_avg_; }
|
42
|
+
double aggregate_total_weight() const { return aggregate_total_weight_; }
|
43
|
+
|
44
|
+
private:
|
45
|
+
/* The initial average value. This is the reported average until the first
|
46
|
+
grpc_time_averaged_stats_update_average call. If a positive regress_weight
|
47
|
+
is used, we also regress towards this value on each update. */
|
48
|
+
const double init_avg_;
|
49
|
+
/* The sample weight of "init_avg" that is mixed in with each call to
|
50
|
+
grpc_time_averaged_stats_update_average. If the calls to
|
51
|
+
grpc_time_averaged_stats_add_sample stop, this will cause the average to
|
52
|
+
regress back to the mean. This should be non-negative. Set it to 0 to
|
53
|
+
disable the bias. A value of 1 has the effect of adding in 1 bonus sample
|
54
|
+
with value init_avg to each sample period. */
|
55
|
+
const double regress_weight_;
|
56
|
+
/* This determines the rate of decay of the time-averaging from one period
|
57
|
+
to the next by scaling the aggregate_total_weight of samples from prior
|
58
|
+
periods when combining with the latest period. It should be in the range
|
59
|
+
[0,1]. A higher value adapts more slowly. With a value of 0.5, if the
|
60
|
+
batches each have k samples, the samples_in_avg_ will grow to 2 k, so the
|
61
|
+
weighting of the time average will eventually be 1/3 new batch and 2/3
|
62
|
+
old average. */
|
63
|
+
const double persistence_factor_;
|
64
|
+
|
65
|
+
/* The total value of samples since the last UpdateAverage(). */
|
66
|
+
double batch_total_value_ = 0;
|
67
|
+
/* The number of samples since the last UpdateAverage(). */
|
68
|
+
double batch_num_samples_ = 0;
|
69
|
+
/* The time-decayed sum of batch_num_samples_ over previous batches. This is
|
70
|
+
the "weight" of the old aggregate_weighted_avg_ when updating the
|
71
|
+
average. */
|
72
|
+
double aggregate_total_weight_ = 0;
|
73
|
+
/* A time-decayed average of the (batch_total_value_ / batch_num_samples_),
|
74
|
+
computed by decaying the samples_in_avg_ weight in the weighted average. */
|
75
|
+
double aggregate_weighted_avg_ = init_avg_;
|
76
|
+
};
|
77
|
+
|
78
|
+
} // namespace iomgr_engine
|
79
|
+
} // namespace grpc_event_engine
|
80
|
+
|
81
|
+
#endif /* GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIME_AVERAGED_STATS_H */
|