grpc 1.50.0.pre1 → 1.51.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +131 -42
- data/include/grpc/event_engine/event_engine.h +10 -3
- data/include/grpc/event_engine/slice_buffer.h +17 -0
- data/include/grpc/grpc.h +0 -10
- data/include/grpc/impl/codegen/grpc_types.h +1 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -3
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
- data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
- data/src/core/ext/filters/client_channel/client_channel.h +3 -4
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
- data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
- data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
- data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
- data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
- data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
- data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
- data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
- data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
- data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
- data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
- data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
- data/src/core/ext/xds/certificate_provider_store.cc +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
- data/src/core/ext/xds/xds_api.cc +15 -68
- data/src/core/ext/xds/xds_api.h +3 -7
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
- data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
- data/src/core/ext/xds/xds_client.cc +122 -90
- data/src/core/ext/xds/xds_client.h +7 -2
- data/src/core/ext/xds/xds_client_grpc.cc +5 -24
- data/src/core/ext/xds/xds_cluster.cc +291 -183
- data/src/core/ext/xds/xds_cluster.h +11 -15
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
- data/src/core/ext/xds/xds_common_types.cc +208 -141
- data/src/core/ext/xds/xds_common_types.h +19 -13
- data/src/core/ext/xds/xds_endpoint.cc +214 -129
- data/src/core/ext/xds/xds_endpoint.h +4 -7
- data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
- data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
- data/src/core/ext/xds/xds_http_filters.cc +60 -73
- data/src/core/ext/xds/xds_http_filters.h +67 -19
- data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
- data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
- data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
- data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
- data/src/core/ext/xds/xds_listener.cc +459 -417
- data/src/core/ext/xds/xds_listener.h +43 -47
- data/src/core/ext/xds/xds_resource_type.h +3 -11
- data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
- data/src/core/ext/xds/xds_route_config.cc +94 -80
- data/src/core/ext/xds/xds_route_config.h +10 -10
- data/src/core/ext/xds/xds_routing.cc +2 -1
- data/src/core/ext/xds/xds_routing.h +2 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
- data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
- data/src/core/lib/address_utils/parse_address.cc +11 -10
- data/src/core/lib/channel/channel_args.h +16 -1
- data/src/core/lib/channel/channel_stack.cc +23 -20
- data/src/core/lib/channel/channel_stack.h +17 -4
- data/src/core/lib/channel/channel_stack_builder.cc +4 -7
- data/src/core/lib/channel/channel_stack_builder.h +14 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
- data/src/core/lib/channel/channel_trace.cc +4 -5
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/channel/connected_channel.cc +695 -35
- data/src/core/lib/channel/connected_channel.h +0 -4
- data/src/core/lib/channel/promise_based_filter.cc +1004 -140
- data/src/core/lib/channel/promise_based_filter.h +364 -87
- data/src/core/lib/compression/message_compress.cc +5 -5
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
- data/src/core/lib/debug/stats.cc +22 -119
- data/src/core/lib/debug/stats.h +29 -35
- data/src/core/lib/debug/stats_data.cc +224 -73
- data/src/core/lib/debug/stats_data.h +263 -122
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +38 -15
- data/src/core/lib/event_engine/default_event_engine.h +15 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/poller.h +10 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/slice.cc +7 -6
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/thread_pool.cc +106 -25
- data/src/core/lib/event_engine/thread_pool.h +32 -9
- data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
- data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
- data/src/core/lib/experiments/config.cc +1 -1
- data/src/core/lib/experiments/experiments.cc +13 -2
- data/src/core/lib/experiments/experiments.h +8 -1
- data/src/core/lib/gpr/cpu_linux.cc +6 -2
- data/src/core/lib/gpr/log_linux.cc +3 -4
- data/src/core/lib/gpr/string.h +1 -1
- data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/stat_posix.cc +5 -4
- data/src/core/lib/gprpp/stat_windows.cc +3 -2
- data/src/core/lib/gprpp/status_helper.h +1 -3
- data/src/core/lib/gprpp/strerror.cc +41 -0
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
- data/src/core/lib/gprpp/thd_windows.cc +1 -2
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +13 -2
- data/src/core/lib/gprpp/validation_errors.h +18 -1
- data/src/core/lib/http/httpcli.cc +40 -44
- data/src/core/lib/http/httpcli.h +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +4 -6
- data/src/core/lib/http/parser.cc +54 -65
- data/src/core/lib/iomgr/buffer_list.cc +105 -116
- data/src/core/lib/iomgr/buffer_list.h +60 -44
- data/src/core/lib/iomgr/call_combiner.cc +11 -10
- data/src/core/lib/iomgr/call_combiner.h +3 -4
- data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
- data/src/core/lib/iomgr/closure.h +49 -5
- data/src/core/lib/iomgr/combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +27 -42
- data/src/core/lib/iomgr/error.h +22 -152
- data/src/core/lib/iomgr/ev_apple.cc +4 -4
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
- data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
- data/src/core/lib/iomgr/exec_ctx.cc +3 -4
- data/src/core/lib/iomgr/exec_ctx.h +2 -3
- data/src/core/lib/iomgr/executor.cc +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
- data/src/core/lib/iomgr/load_file.cc +5 -9
- data/src/core/lib/iomgr/lockfree_event.cc +10 -10
- data/src/core/lib/iomgr/pollset_windows.cc +4 -4
- data/src/core/lib/iomgr/python_util.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +8 -3
- data/src/core/lib/iomgr/resolve_address.h +3 -4
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
- data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
- data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
- data/src/core/lib/iomgr/tcp_posix.cc +92 -108
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
- data/src/core/lib/iomgr/tcp_windows.cc +27 -34
- data/src/core/lib/iomgr/timer.h +8 -8
- data/src/core/lib/iomgr/timer_generic.cc +9 -15
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +7 -2
- data/src/core/lib/json/json_object_loader.h +22 -0
- data/src/core/lib/json/json_util.cc +5 -5
- data/src/core/lib/json/json_util.h +4 -4
- data/src/core/lib/load_balancing/lb_policy.cc +1 -1
- data/src/core/lib/load_balancing/lb_policy.h +4 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/promise/activity.cc +16 -2
- data/src/core/lib/promise/activity.h +38 -15
- data/src/core/lib/promise/arena_promise.h +80 -51
- data/src/core/lib/promise/context.h +13 -6
- data/src/core/lib/promise/detail/basic_seq.h +9 -28
- data/src/core/lib/promise/detail/promise_factory.h +58 -10
- data/src/core/lib/promise/detail/status.h +28 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
- data/src/core/lib/promise/for_each.h +129 -0
- data/src/core/lib/promise/loop.h +7 -5
- data/src/core/lib/promise/map_pipe.h +87 -0
- data/src/core/lib/promise/pipe.cc +19 -0
- data/src/core/lib/promise/pipe.h +505 -0
- data/src/core/lib/promise/poll.h +13 -0
- data/src/core/lib/promise/seq.h +3 -5
- data/src/core/lib/promise/sleep.cc +5 -4
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/try_concurrently.h +341 -0
- data/src/core/lib/promise/try_seq.h +10 -13
- data/src/core/lib/resolver/server_address.cc +1 -0
- data/src/core/lib/resolver/server_address.h +1 -3
- data/src/core/lib/resource_quota/api.cc +0 -1
- data/src/core/lib/resource_quota/arena.cc +19 -0
- data/src/core/lib/resource_quota/arena.h +89 -0
- data/src/core/lib/resource_quota/memory_quota.cc +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
- data/src/core/lib/security/authorization/matchers.cc +25 -22
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
- data/src/core/lib/security/context/security_context.h +10 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
- data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
- data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
- data/src/core/lib/security/transport/security_handshaker.cc +53 -53
- data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
- data/src/core/lib/security/transport/tsi_error.cc +6 -3
- data/src/core/lib/security/util/json_util.cc +4 -5
- data/src/core/lib/service_config/service_config.h +1 -1
- data/src/core/lib/service_config/service_config_impl.cc +111 -158
- data/src/core/lib/service_config/service_config_impl.h +14 -17
- data/src/core/lib/service_config/service_config_parser.cc +14 -31
- data/src/core/lib/service_config/service_config_parser.h +14 -10
- data/src/core/lib/slice/b64.cc +2 -2
- data/src/core/lib/slice/slice.cc +7 -1
- data/src/core/lib/slice/slice.h +19 -6
- data/src/core/lib/slice/slice_buffer.cc +13 -14
- data/src/core/lib/slice/slice_internal.h +13 -21
- data/src/core/lib/slice/slice_refcount.h +34 -19
- data/src/core/lib/surface/byte_buffer.cc +3 -4
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +1366 -239
- data/src/core/lib/surface/call.h +44 -0
- data/src/core/lib/surface/call_details.cc +3 -3
- data/src/core/lib/surface/call_trace.cc +113 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +44 -49
- data/src/core/lib/surface/channel.h +9 -1
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/channel_stack_type.cc +4 -0
- data/src/core/lib/surface/channel_stack_type.h +2 -0
- data/src/core/lib/surface/completion_queue.cc +38 -52
- data/src/core/lib/surface/init.cc +8 -39
- data/src/core/lib/surface/init_internally.h +8 -0
- data/src/core/lib/surface/lame_client.cc +10 -8
- data/src/core/lib/surface/server.cc +48 -70
- data/src/core/lib/surface/server.h +3 -4
- data/src/core/lib/surface/validate_metadata.cc +11 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/connectivity_state.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +34 -28
- data/src/core/lib/transport/error_utils.h +3 -3
- data/src/core/lib/transport/handshaker.cc +14 -14
- data/src/core/lib/transport/handshaker.h +1 -1
- data/src/core/lib/transport/handshaker_factory.h +26 -0
- data/src/core/lib/transport/handshaker_registry.cc +8 -2
- data/src/core/lib/transport/handshaker_registry.h +3 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
- data/src/core/lib/transport/metadata_batch.h +17 -1
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
- data/src/core/lib/transport/transport.cc +63 -17
- data/src/core/lib/transport/transport.h +64 -68
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +7 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
- 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 +5 -5
- data/src/core/tsi/fake_transport_security.cc +3 -3
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +0 -43
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +57 -20
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -29,7 +29,7 @@
|
|
29
29
|
#include <grpc/support/alloc.h>
|
30
30
|
#include <grpc/support/log.h>
|
31
31
|
|
32
|
-
#include "src/core/lib/slice/
|
32
|
+
#include "src/core/lib/slice/slice.h"
|
33
33
|
|
34
34
|
#define OUTPUT_BLOCK_SIZE 1024
|
35
35
|
|
@@ -82,7 +82,7 @@ static int zlib_body(z_stream* zs, grpc_slice_buffer* input,
|
|
82
82
|
return 1;
|
83
83
|
|
84
84
|
error:
|
85
|
-
|
85
|
+
grpc_core::CSliceUnref(outbuf);
|
86
86
|
return 0;
|
87
87
|
}
|
88
88
|
|
@@ -109,7 +109,7 @@ static int zlib_compress(grpc_slice_buffer* input, grpc_slice_buffer* output,
|
|
109
109
|
r = zlib_body(&zs, input, output, deflate) && output->length < input->length;
|
110
110
|
if (!r) {
|
111
111
|
for (i = count_before; i < output->count; i++) {
|
112
|
-
|
112
|
+
grpc_core::CSliceUnref(output->slices[i]);
|
113
113
|
}
|
114
114
|
output->count = count_before;
|
115
115
|
output->length = length_before;
|
@@ -133,7 +133,7 @@ static int zlib_decompress(grpc_slice_buffer* input, grpc_slice_buffer* output,
|
|
133
133
|
r = zlib_body(&zs, input, output, inflate);
|
134
134
|
if (!r) {
|
135
135
|
for (i = count_before; i < output->count; i++) {
|
136
|
-
|
136
|
+
grpc_core::CSliceUnref(output->slices[i]);
|
137
137
|
}
|
138
138
|
output->count = count_before;
|
139
139
|
output->length = length_before;
|
@@ -145,7 +145,7 @@ static int zlib_decompress(grpc_slice_buffer* input, grpc_slice_buffer* output,
|
|
145
145
|
static int copy(grpc_slice_buffer* input, grpc_slice_buffer* output) {
|
146
146
|
size_t i;
|
147
147
|
for (i = 0; i < input->count; i++) {
|
148
|
-
grpc_slice_buffer_add(output,
|
148
|
+
grpc_slice_buffer_add(output, grpc_core::CSliceRef(input->slices[i]));
|
149
149
|
}
|
150
150
|
return 1;
|
151
151
|
}
|
@@ -0,0 +1,88 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "src/core/lib/debug/event_log.h"
|
18
|
+
|
19
|
+
#include <algorithm>
|
20
|
+
#include <atomic>
|
21
|
+
|
22
|
+
#include "absl/strings/str_cat.h"
|
23
|
+
#include "absl/strings/str_join.h"
|
24
|
+
|
25
|
+
#include <grpc/support/log.h>
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
std::atomic<EventLog*> EventLog::g_instance_{nullptr};
|
30
|
+
|
31
|
+
EventLog::~EventLog() {
|
32
|
+
GPR_ASSERT(g_instance_.load(std::memory_order_acquire) != this);
|
33
|
+
}
|
34
|
+
|
35
|
+
void EventLog::BeginCollection() {
|
36
|
+
for (auto& fragment : fragments_) {
|
37
|
+
MutexLock lock(&fragment.mu);
|
38
|
+
fragment.entries.clear();
|
39
|
+
}
|
40
|
+
collection_begin_ = gpr_get_cycle_counter();
|
41
|
+
g_instance_.store(this, std::memory_order_release);
|
42
|
+
Append("logging", 1);
|
43
|
+
}
|
44
|
+
|
45
|
+
std::vector<EventLog::Entry> EventLog::EndCollection(
|
46
|
+
absl::Span<const absl::string_view> wanted_events) {
|
47
|
+
Append("logging", -1);
|
48
|
+
g_instance_.store(nullptr, std::memory_order_release);
|
49
|
+
std::vector<Entry> result;
|
50
|
+
for (auto& fragment : fragments_) {
|
51
|
+
MutexLock lock(&fragment.mu);
|
52
|
+
for (const auto& entry : fragment.entries) {
|
53
|
+
if (std::find(wanted_events.begin(), wanted_events.end(), entry.event) !=
|
54
|
+
wanted_events.end()) {
|
55
|
+
result.push_back(entry);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
fragment.entries.clear();
|
59
|
+
}
|
60
|
+
std::stable_sort(
|
61
|
+
result.begin(), result.end(),
|
62
|
+
[](const Entry& a, const Entry& b) { return a.when < b.when; });
|
63
|
+
return result;
|
64
|
+
}
|
65
|
+
|
66
|
+
void EventLog::AppendInternal(absl::string_view event, int64_t delta) {
|
67
|
+
auto& fragment = fragments_.this_cpu();
|
68
|
+
MutexLock lock(&fragment.mu);
|
69
|
+
fragment.entries.push_back({gpr_get_cycle_counter(), event, delta});
|
70
|
+
}
|
71
|
+
|
72
|
+
std::string EventLog::EndCollectionAndReportCsv(
|
73
|
+
absl::Span<const absl::string_view> columns) {
|
74
|
+
auto events = EndCollection(columns);
|
75
|
+
std::vector<int64_t> values(columns.size(), 0);
|
76
|
+
std::string result =
|
77
|
+
absl::StrCat("timestamp,", absl::StrJoin(columns, ","), "\n");
|
78
|
+
for (const auto& entry : events) {
|
79
|
+
auto idx = std::find(columns.begin(), columns.end(), entry.event) -
|
80
|
+
columns.begin();
|
81
|
+
values[idx] += entry.delta;
|
82
|
+
absl::StrAppend(&result, entry.when - collection_begin_, ",",
|
83
|
+
absl::StrJoin(values, ","), "\n");
|
84
|
+
}
|
85
|
+
return result;
|
86
|
+
}
|
87
|
+
|
88
|
+
} // namespace grpc_core
|
@@ -0,0 +1,81 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_CORE_LIB_DEBUG_EVENT_LOG_H
|
16
|
+
#define GRPC_CORE_LIB_DEBUG_EVENT_LOG_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <stdint.h>
|
21
|
+
|
22
|
+
#include <atomic>
|
23
|
+
#include <string>
|
24
|
+
#include <vector>
|
25
|
+
|
26
|
+
#include "absl/base/thread_annotations.h"
|
27
|
+
#include "absl/strings/string_view.h"
|
28
|
+
#include "absl/types/span.h"
|
29
|
+
|
30
|
+
#include "src/core/lib/gpr/time_precise.h"
|
31
|
+
#include "src/core/lib/gprpp/per_cpu.h"
|
32
|
+
#include "src/core/lib/gprpp/sync.h"
|
33
|
+
|
34
|
+
namespace grpc_core {
|
35
|
+
|
36
|
+
// Debug utility to collect a burst of events and then later log them as a
|
37
|
+
// detailed sequence.
|
38
|
+
// Collects (timestamp, counter-name, delta) and gives back a csv with
|
39
|
+
// timestamps and accumulated values for each counter in separate columns.
|
40
|
+
class EventLog {
|
41
|
+
public:
|
42
|
+
EventLog() = default;
|
43
|
+
~EventLog();
|
44
|
+
|
45
|
+
EventLog(const EventLog&) = delete;
|
46
|
+
EventLog& operator=(const EventLog&) = delete;
|
47
|
+
|
48
|
+
void BeginCollection();
|
49
|
+
std::string EndCollectionAndReportCsv(
|
50
|
+
absl::Span<const absl::string_view> columns);
|
51
|
+
|
52
|
+
static void Append(absl::string_view event, int64_t delta) {
|
53
|
+
EventLog* log = g_instance_.load(std::memory_order_acquire);
|
54
|
+
if (log == nullptr) return;
|
55
|
+
log->AppendInternal(event, delta);
|
56
|
+
}
|
57
|
+
|
58
|
+
private:
|
59
|
+
struct Entry {
|
60
|
+
gpr_cycle_counter when;
|
61
|
+
absl::string_view event;
|
62
|
+
int64_t delta;
|
63
|
+
};
|
64
|
+
|
65
|
+
struct Fragment {
|
66
|
+
Mutex mu;
|
67
|
+
std::vector<Entry> entries ABSL_GUARDED_BY(mu);
|
68
|
+
};
|
69
|
+
|
70
|
+
void AppendInternal(absl::string_view event, int64_t delta);
|
71
|
+
std::vector<Entry> EndCollection(
|
72
|
+
absl::Span<const absl::string_view> wanted_events);
|
73
|
+
|
74
|
+
PerCpu<Fragment> fragments_;
|
75
|
+
gpr_cycle_counter collection_begin_;
|
76
|
+
static std::atomic<EventLog*> g_instance_;
|
77
|
+
};
|
78
|
+
|
79
|
+
} // namespace grpc_core
|
80
|
+
|
81
|
+
#endif // GRPC_CORE_LIB_DEBUG_EVENT_LOG_H
|
@@ -0,0 +1,69 @@
|
|
1
|
+
// Copyright 2021 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "src/core/lib/debug/histogram_view.h"
|
18
|
+
|
19
|
+
namespace grpc_core {
|
20
|
+
|
21
|
+
double HistogramView::Count() const {
|
22
|
+
double sum = 0;
|
23
|
+
for (int i = 0; i < num_buckets; i++) {
|
24
|
+
sum += buckets[i];
|
25
|
+
}
|
26
|
+
return sum;
|
27
|
+
}
|
28
|
+
|
29
|
+
double HistogramView::ThresholdForCountBelow(double count_below) const {
|
30
|
+
double lower_bound;
|
31
|
+
double upper_bound;
|
32
|
+
int upper_idx;
|
33
|
+
|
34
|
+
// find the lowest bucket that gets us above count_below
|
35
|
+
double count_so_far = 0.0;
|
36
|
+
int lower_idx = 0;
|
37
|
+
for (; lower_idx < num_buckets; lower_idx++) {
|
38
|
+
count_so_far += static_cast<double>(buckets[lower_idx]);
|
39
|
+
if (count_so_far >= count_below) {
|
40
|
+
break;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
if (count_so_far == count_below) {
|
44
|
+
// this bucket hits the threshold exactly... we should be midway through
|
45
|
+
// any run of zero values following the bucket
|
46
|
+
for (upper_idx = lower_idx + 1; upper_idx < num_buckets; upper_idx++) {
|
47
|
+
if (buckets[upper_idx]) {
|
48
|
+
break;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
return (bucket_boundaries[lower_idx] + bucket_boundaries[upper_idx]) / 2.0;
|
52
|
+
} else {
|
53
|
+
// treat values as uniform throughout the bucket, and find where this value
|
54
|
+
// should lie
|
55
|
+
lower_bound = bucket_boundaries[lower_idx];
|
56
|
+
upper_bound = bucket_boundaries[lower_idx + 1];
|
57
|
+
return upper_bound - (upper_bound - lower_bound) *
|
58
|
+
(count_so_far - count_below) /
|
59
|
+
static_cast<double>(buckets[lower_idx]);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
double HistogramView::Percentile(double p) const {
|
64
|
+
const double count = Count();
|
65
|
+
if (count == 0) return 0.0;
|
66
|
+
return ThresholdForCountBelow(count * p / 100.0);
|
67
|
+
}
|
68
|
+
|
69
|
+
} // namespace grpc_core
|
@@ -12,24 +12,26 @@
|
|
12
12
|
// See the License for the specific language governing permissions and
|
13
13
|
// limitations under the License.
|
14
14
|
|
15
|
-
#
|
15
|
+
#ifndef GRPC_CORE_LIB_DEBUG_HISTOGRAM_VIEW_H
|
16
|
+
#define GRPC_CORE_LIB_DEBUG_HISTOGRAM_VIEW_H
|
16
17
|
|
17
|
-
#include
|
18
|
+
#include <grpc/support/port_platform.h>
|
18
19
|
|
19
|
-
#include <
|
20
|
+
#include <stdint.h>
|
20
21
|
|
21
22
|
namespace grpc_core {
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
struct HistogramView {
|
25
|
+
int (*bucket_for)(int value);
|
26
|
+
const int* bucket_boundaries;
|
27
|
+
int num_buckets;
|
28
|
+
const uint64_t* buckets;
|
29
|
+
|
30
|
+
double Percentile(double p) const;
|
31
|
+
double Count() const;
|
32
|
+
double ThresholdForCountBelow(double count_below) const;
|
33
|
+
};
|
30
34
|
|
31
35
|
} // namespace grpc_core
|
32
36
|
|
33
|
-
|
34
|
-
grpc_core::g_hash_seed = seed;
|
35
|
-
}
|
37
|
+
#endif // GRPC_CORE_LIB_DEBUG_HISTOGRAM_VIEW_H
|
data/src/core/lib/debug/stats.cc
CHANGED
@@ -20,146 +20,49 @@
|
|
20
20
|
|
21
21
|
#include "src/core/lib/debug/stats.h"
|
22
22
|
|
23
|
-
#include <
|
24
|
-
#include <string.h>
|
23
|
+
#include <stddef.h>
|
25
24
|
|
26
25
|
#include <algorithm>
|
27
26
|
#include <vector>
|
28
27
|
|
29
28
|
#include "absl/strings/str_cat.h"
|
30
|
-
#include "absl/strings/str_format.h"
|
31
29
|
#include "absl/strings/str_join.h"
|
32
30
|
|
33
|
-
#include <grpc/support/alloc.h>
|
34
|
-
#include <grpc/support/cpu.h>
|
35
|
-
|
36
31
|
namespace grpc_core {
|
37
|
-
Stats* const g_stats_data = [] {
|
38
|
-
size_t num_cores = gpr_cpu_num_cores();
|
39
|
-
Stats* stats = static_cast<Stats*>(
|
40
|
-
gpr_zalloc(sizeof(Stats) + num_cores * sizeof(grpc_stats_data)));
|
41
|
-
stats->num_cores = num_cores;
|
42
|
-
return stats;
|
43
|
-
}();
|
44
|
-
} // namespace grpc_core
|
45
|
-
|
46
|
-
void grpc_stats_collect(grpc_stats_data* output) {
|
47
|
-
memset(output, 0, sizeof(*output));
|
48
|
-
for (size_t core = 0; core < grpc_core::g_stats_data->num_cores; core++) {
|
49
|
-
for (size_t i = 0; i < GRPC_STATS_COUNTER_COUNT; i++) {
|
50
|
-
output->counters[i] += gpr_atm_no_barrier_load(
|
51
|
-
&grpc_core::g_stats_data->per_cpu[core].counters[i]);
|
52
|
-
}
|
53
|
-
for (size_t i = 0; i < GRPC_STATS_HISTOGRAM_BUCKETS; i++) {
|
54
|
-
output->histograms[i] += gpr_atm_no_barrier_load(
|
55
|
-
&grpc_core::g_stats_data->per_cpu[core].histograms[i]);
|
56
|
-
}
|
57
|
-
}
|
58
|
-
}
|
59
|
-
|
60
|
-
void grpc_stats_diff(const grpc_stats_data* b, const grpc_stats_data* a,
|
61
|
-
grpc_stats_data* c) {
|
62
|
-
for (size_t i = 0; i < GRPC_STATS_COUNTER_COUNT; i++) {
|
63
|
-
c->counters[i] = b->counters[i] - a->counters[i];
|
64
|
-
}
|
65
|
-
for (size_t i = 0; i < GRPC_STATS_HISTOGRAM_BUCKETS; i++) {
|
66
|
-
c->histograms[i] = b->histograms[i] - a->histograms[i];
|
67
|
-
}
|
68
|
-
}
|
69
|
-
|
70
|
-
void grpc_stats_inc_histogram_value(int histogram, int value) {
|
71
|
-
const int bucket = grpc_stats_get_bucket[histogram](value);
|
72
|
-
gpr_atm_no_barrier_fetch_add(
|
73
|
-
&GRPC_THREAD_STATS_DATA()
|
74
|
-
->histograms[grpc_stats_histo_start[histogram] + bucket],
|
75
|
-
1);
|
76
|
-
}
|
77
32
|
|
78
|
-
|
79
|
-
grpc_stats_histograms histogram) {
|
80
|
-
size_t sum = 0;
|
81
|
-
for (int i = 0; i < grpc_stats_histo_buckets[histogram]; i++) {
|
82
|
-
sum += static_cast<size_t>(
|
83
|
-
stats->histograms[grpc_stats_histo_start[histogram] + i]);
|
84
|
-
}
|
85
|
-
return sum;
|
86
|
-
}
|
87
|
-
|
88
|
-
static double threshold_for_count_below(const gpr_atm* bucket_counts,
|
89
|
-
const int* bucket_boundaries,
|
90
|
-
int num_buckets, double count_below) {
|
91
|
-
double count_so_far;
|
92
|
-
double lower_bound;
|
93
|
-
double upper_bound;
|
94
|
-
int lower_idx;
|
95
|
-
int upper_idx;
|
96
|
-
|
97
|
-
/* find the lowest bucket that gets us above count_below */
|
98
|
-
count_so_far = 0.0;
|
99
|
-
for (lower_idx = 0; lower_idx < num_buckets; lower_idx++) {
|
100
|
-
count_so_far += static_cast<double>(bucket_counts[lower_idx]);
|
101
|
-
if (count_so_far >= count_below) {
|
102
|
-
break;
|
103
|
-
}
|
104
|
-
}
|
105
|
-
if (count_so_far == count_below) {
|
106
|
-
/* this bucket hits the threshold exactly... we should be midway through
|
107
|
-
any run of zero values following the bucket */
|
108
|
-
for (upper_idx = lower_idx + 1; upper_idx < num_buckets; upper_idx++) {
|
109
|
-
if (bucket_counts[upper_idx]) {
|
110
|
-
break;
|
111
|
-
}
|
112
|
-
}
|
113
|
-
return (bucket_boundaries[lower_idx] + bucket_boundaries[upper_idx]) / 2.0;
|
114
|
-
} else {
|
115
|
-
/* treat values as uniform throughout the bucket, and find where this value
|
116
|
-
should lie */
|
117
|
-
lower_bound = bucket_boundaries[lower_idx];
|
118
|
-
upper_bound = bucket_boundaries[lower_idx + 1];
|
119
|
-
return upper_bound - (upper_bound - lower_bound) *
|
120
|
-
(count_so_far - count_below) /
|
121
|
-
static_cast<double>(bucket_counts[lower_idx]);
|
122
|
-
}
|
123
|
-
}
|
124
|
-
|
125
|
-
double grpc_stats_histo_percentile(const grpc_stats_data* stats,
|
126
|
-
grpc_stats_histograms histogram,
|
127
|
-
double percentile) {
|
128
|
-
size_t count = grpc_stats_histo_count(stats, histogram);
|
129
|
-
if (count == 0) return 0.0;
|
130
|
-
return threshold_for_count_below(
|
131
|
-
stats->histograms + grpc_stats_histo_start[histogram],
|
132
|
-
grpc_stats_histo_bucket_boundaries[histogram],
|
133
|
-
grpc_stats_histo_buckets[histogram],
|
134
|
-
static_cast<double>(count) * percentile / 100.0);
|
135
|
-
}
|
33
|
+
namespace stats_detail {
|
136
34
|
|
137
35
|
namespace {
|
138
36
|
template <typename I>
|
139
|
-
std::string ArrayToJson(const I
|
37
|
+
std::string ArrayToJson(absl::Span<const I> values) {
|
140
38
|
std::vector<std::string> parts;
|
141
|
-
for (
|
142
|
-
parts.push_back(absl::
|
39
|
+
for (auto value : values) {
|
40
|
+
parts.push_back(absl::StrCat(value));
|
143
41
|
}
|
144
42
|
return absl::StrCat("[", absl::StrJoin(parts, ","), "]");
|
145
43
|
}
|
146
44
|
} // namespace
|
147
45
|
|
148
|
-
std::string
|
46
|
+
std::string StatsAsJson(absl::Span<const uint64_t> counters,
|
47
|
+
absl::Span<const absl::string_view> counter_name,
|
48
|
+
absl::Span<const HistogramView> histograms,
|
49
|
+
absl::Span<const absl::string_view> histogram_name) {
|
149
50
|
std::vector<std::string> parts;
|
150
|
-
for (size_t i = 0; i <
|
151
|
-
parts.push_back(absl::
|
152
|
-
"\"%s\": %" PRIdPTR, grpc_stats_counter_name[i], data->counters[i]));
|
51
|
+
for (size_t i = 0; i < counters.size(); i++) {
|
52
|
+
parts.push_back(absl::StrCat("\"", counter_name[i], "\": ", counters[i]));
|
153
53
|
}
|
154
|
-
for (size_t i = 0; i <
|
155
|
-
parts.push_back(absl::StrFormat(
|
156
|
-
"\"%s\": %s", grpc_stats_histogram_name[i],
|
157
|
-
ArrayToJson(data->histograms + grpc_stats_histo_start[i],
|
158
|
-
grpc_stats_histo_buckets[i])));
|
54
|
+
for (size_t i = 0; i < histograms.size(); i++) {
|
159
55
|
parts.push_back(
|
160
|
-
absl::
|
161
|
-
|
162
|
-
|
56
|
+
absl::StrCat("\"", histogram_name[i], "\": ",
|
57
|
+
ArrayToJson(absl::Span<const uint64_t>(
|
58
|
+
histograms[i].buckets, histograms[i].num_buckets))));
|
59
|
+
parts.push_back(absl::StrCat(
|
60
|
+
"\"", histogram_name[i], "_bkt\": ",
|
61
|
+
ArrayToJson(absl::Span<const int>(histograms[i].bucket_boundaries,
|
62
|
+
histograms[i].num_buckets))));
|
163
63
|
}
|
164
64
|
return absl::StrCat("{", absl::StrJoin(parts, ", "), "}");
|
165
65
|
}
|
66
|
+
|
67
|
+
} // namespace stats_detail
|
68
|
+
} // namespace grpc_core
|
data/src/core/lib/debug/stats.h
CHANGED
@@ -21,50 +21,44 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include <
|
24
|
+
#include <stdint.h>
|
25
25
|
|
26
26
|
#include <string>
|
27
|
+
#include <vector>
|
27
28
|
|
28
|
-
#include
|
29
|
+
#include "absl/strings/string_view.h"
|
30
|
+
#include "absl/types/span.h"
|
29
31
|
|
30
|
-
#include "src/core/lib/debug/
|
31
|
-
#include "src/core/lib/
|
32
|
-
|
33
|
-
typedef struct grpc_stats_data {
|
34
|
-
gpr_atm counters[GRPC_STATS_COUNTER_COUNT];
|
35
|
-
gpr_atm histograms[GRPC_STATS_HISTOGRAM_BUCKETS];
|
36
|
-
} grpc_stats_data;
|
32
|
+
#include "src/core/lib/debug/histogram_view.h"
|
33
|
+
#include "src/core/lib/debug/stats_data.h"
|
34
|
+
#include "src/core/lib/gprpp/no_destruct.h"
|
37
35
|
|
38
36
|
namespace grpc_core {
|
39
|
-
struct Stats {
|
40
|
-
size_t num_cores;
|
41
|
-
grpc_stats_data per_cpu[0];
|
42
|
-
};
|
43
|
-
extern Stats* const g_stats_data;
|
44
|
-
} // namespace grpc_core
|
45
37
|
|
46
|
-
|
47
|
-
(
|
48
|
-
|
38
|
+
inline GlobalStatsCollector& global_stats() {
|
39
|
+
return *NoDestructSingleton<GlobalStatsCollector>::Get();
|
40
|
+
}
|
49
41
|
|
50
|
-
|
51
|
-
|
42
|
+
namespace stats_detail {
|
43
|
+
std::string StatsAsJson(absl::Span<const uint64_t> counters,
|
44
|
+
absl::Span<const absl::string_view> counter_name,
|
45
|
+
absl::Span<const HistogramView> histograms,
|
46
|
+
absl::Span<const absl::string_view> histogram_name);
|
47
|
+
}
|
52
48
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
49
|
+
template <typename T>
|
50
|
+
std::string StatsAsJson(T* data) {
|
51
|
+
std::vector<HistogramView> histograms;
|
52
|
+
for (int i = 0; i < static_cast<int>(T::Histogram::COUNT); i++) {
|
53
|
+
histograms.push_back(
|
54
|
+
data->histogram(static_cast<typename T::Histogram>(i)));
|
55
|
+
}
|
56
|
+
return stats_detail::StatsAsJson(
|
57
|
+
absl::Span<const uint64_t>(data->counters,
|
58
|
+
static_cast<int>(T::Counter::COUNT)),
|
59
|
+
T::counter_name, histograms, T::histogram_name);
|
60
|
+
}
|
57
61
|
|
58
|
-
|
59
|
-
// c = b-a
|
60
|
-
void grpc_stats_diff(const grpc_stats_data* b, const grpc_stats_data* a,
|
61
|
-
grpc_stats_data* c);
|
62
|
-
std::string grpc_stats_data_as_json(const grpc_stats_data* data);
|
63
|
-
double grpc_stats_histo_percentile(const grpc_stats_data* stats,
|
64
|
-
grpc_stats_histograms histogram,
|
65
|
-
double percentile);
|
66
|
-
size_t grpc_stats_histo_count(const grpc_stats_data* stats,
|
67
|
-
grpc_stats_histograms histogram);
|
68
|
-
void grpc_stats_inc_histogram_value(int histogram, int value);
|
62
|
+
} // namespace grpc_core
|
69
63
|
|
70
64
|
#endif // GRPC_CORE_LIB_DEBUG_STATS_H
|