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
@@ -60,7 +60,7 @@ grpc_error_handle grpc_tcp_set_non_block(SOCKET sock) {
|
|
60
60
|
status = WSAIoctl(sock, GRPC_FIONBIO, ¶m, sizeof(param), NULL, 0, &ret,
|
61
61
|
NULL, NULL);
|
62
62
|
return status == 0
|
63
|
-
?
|
63
|
+
? absl::OkStatus()
|
64
64
|
: GRPC_WSA_ERROR(WSAGetLastError(), "WSAIoctl(GRPC_FIONBIO)");
|
65
65
|
}
|
66
66
|
|
@@ -70,7 +70,7 @@ static grpc_error_handle set_dualstack(SOCKET sock) {
|
|
70
70
|
status = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)¶m,
|
71
71
|
sizeof(param));
|
72
72
|
return status == 0
|
73
|
-
?
|
73
|
+
? absl::OkStatus()
|
74
74
|
: GRPC_WSA_ERROR(WSAGetLastError(), "setsockopt(IPV6_V6ONLY)");
|
75
75
|
}
|
76
76
|
|
@@ -82,19 +82,19 @@ static grpc_error_handle enable_socket_low_latency(SOCKET sock) {
|
|
82
82
|
if (status == SOCKET_ERROR) {
|
83
83
|
status = WSAGetLastError();
|
84
84
|
}
|
85
|
-
return status == 0 ?
|
85
|
+
return status == 0 ? absl::OkStatus()
|
86
86
|
: GRPC_WSA_ERROR(status, "setsockopt(TCP_NODELAY)");
|
87
87
|
}
|
88
88
|
|
89
89
|
grpc_error_handle grpc_tcp_prepare_socket(SOCKET sock) {
|
90
90
|
grpc_error_handle err;
|
91
91
|
err = grpc_tcp_set_non_block(sock);
|
92
|
-
if (!
|
92
|
+
if (!err.ok()) return err;
|
93
93
|
err = set_dualstack(sock);
|
94
|
-
if (!
|
94
|
+
if (!err.ok()) return err;
|
95
95
|
err = enable_socket_low_latency(sock);
|
96
|
-
if (!
|
97
|
-
return
|
96
|
+
if (!err.ok()) return err;
|
97
|
+
return absl::OkStatus();
|
98
98
|
}
|
99
99
|
|
100
100
|
typedef struct grpc_tcp {
|
@@ -130,8 +130,7 @@ typedef struct grpc_tcp {
|
|
130
130
|
static void tcp_free(grpc_tcp* tcp) {
|
131
131
|
grpc_winsocket_destroy(tcp->socket);
|
132
132
|
gpr_mu_destroy(&tcp->mu);
|
133
|
-
|
134
|
-
if (tcp->shutting_down) GRPC_ERROR_UNREF(tcp->shutdown_error);
|
133
|
+
grpc_slice_buffer_destroy(&tcp->last_read_buffer);
|
135
134
|
delete tcp;
|
136
135
|
}
|
137
136
|
|
@@ -184,14 +183,12 @@ static void on_read(void* tcpp, grpc_error_handle error) {
|
|
184
183
|
gpr_log(GPR_INFO, "TCP:%p on_read", tcp);
|
185
184
|
}
|
186
185
|
|
187
|
-
(
|
188
|
-
|
189
|
-
if (GRPC_ERROR_IS_NONE(error)) {
|
186
|
+
if (error.ok()) {
|
190
187
|
if (info->wsa_error != 0 && !tcp->shutting_down) {
|
191
188
|
char* utf8_message = gpr_format_message(info->wsa_error);
|
192
|
-
error =
|
189
|
+
error = GRPC_ERROR_CREATE(utf8_message);
|
193
190
|
gpr_free(utf8_message);
|
194
|
-
|
191
|
+
grpc_slice_buffer_reset_and_unref(tcp->read_slices);
|
195
192
|
} else {
|
196
193
|
if (info->bytes_transferred != 0 && !tcp->shutting_down) {
|
197
194
|
GPR_ASSERT((size_t)info->bytes_transferred <= tcp->read_slices->length);
|
@@ -219,13 +216,13 @@ static void on_read(void* tcpp, grpc_error_handle error) {
|
|
219
216
|
if (grpc_tcp_trace.enabled()) {
|
220
217
|
gpr_log(GPR_INFO, "TCP:%p unref read_slice", tcp);
|
221
218
|
}
|
222
|
-
|
219
|
+
grpc_slice_buffer_reset_and_unref(tcp->read_slices);
|
223
220
|
error = grpc_error_set_int(
|
224
221
|
tcp->shutting_down
|
225
|
-
?
|
226
|
-
|
227
|
-
:
|
228
|
-
|
222
|
+
? GRPC_ERROR_CREATE_REFERENCING("TCP stream shutting down",
|
223
|
+
&tcp->shutdown_error, 1)
|
224
|
+
: GRPC_ERROR_CREATE("End of TCP stream"),
|
225
|
+
grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE);
|
229
226
|
}
|
230
227
|
}
|
231
228
|
}
|
@@ -256,15 +253,15 @@ static void win_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
|
|
256
253
|
grpc_core::ExecCtx::Run(
|
257
254
|
DEBUG_LOCATION, cb,
|
258
255
|
grpc_error_set_int(
|
259
|
-
|
260
|
-
|
261
|
-
|
256
|
+
GRPC_ERROR_CREATE_REFERENCING("TCP socket is shutting down",
|
257
|
+
&tcp->shutdown_error, 1),
|
258
|
+
grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE));
|
262
259
|
return;
|
263
260
|
}
|
264
261
|
|
265
262
|
tcp->read_cb = cb;
|
266
263
|
tcp->read_slices = read_slices;
|
267
|
-
|
264
|
+
grpc_slice_buffer_reset_and_unref(read_slices);
|
268
265
|
grpc_slice_buffer_swap(read_slices, &tcp->last_read_buffer);
|
269
266
|
|
270
267
|
if (tcp->read_slices->length < DEFAULT_TARGET_READ_SIZE / 2 &&
|
@@ -291,7 +288,7 @@ static void win_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
|
|
291
288
|
/* Did we get data immediately ? Yay. */
|
292
289
|
if (info->wsa_error != WSAEWOULDBLOCK) {
|
293
290
|
info->bytes_transferred = bytes_read;
|
294
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, &tcp->on_read,
|
291
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, &tcp->on_read, absl::OkStatus());
|
295
292
|
return;
|
296
293
|
}
|
297
294
|
|
@@ -324,14 +321,12 @@ static void on_write(void* tcpp, grpc_error_handle error) {
|
|
324
321
|
gpr_log(GPR_INFO, "TCP:%p on_write", tcp);
|
325
322
|
}
|
326
323
|
|
327
|
-
(void)GRPC_ERROR_REF(error);
|
328
|
-
|
329
324
|
gpr_mu_lock(&tcp->mu);
|
330
325
|
cb = tcp->write_cb;
|
331
326
|
tcp->write_cb = NULL;
|
332
327
|
gpr_mu_unlock(&tcp->mu);
|
333
328
|
|
334
|
-
if (
|
329
|
+
if (error.ok()) {
|
335
330
|
if (info->wsa_error != 0) {
|
336
331
|
error = GRPC_WSA_ERROR(info->wsa_error, "WSASend");
|
337
332
|
} else {
|
@@ -372,9 +367,9 @@ static void win_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
|
372
367
|
grpc_core::ExecCtx::Run(
|
373
368
|
DEBUG_LOCATION, cb,
|
374
369
|
grpc_error_set_int(
|
375
|
-
|
376
|
-
|
377
|
-
|
370
|
+
GRPC_ERROR_CREATE_REFERENCING("TCP socket is shutting down",
|
371
|
+
&tcp->shutdown_error, 1),
|
372
|
+
grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE));
|
378
373
|
return;
|
379
374
|
}
|
380
375
|
|
@@ -403,7 +398,7 @@ static void win_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
|
403
398
|
avoid doing an async write operation at all. */
|
404
399
|
if (info->wsa_error != WSAEWOULDBLOCK) {
|
405
400
|
grpc_error_handle error = status == 0
|
406
|
-
?
|
401
|
+
? absl::OkStatus()
|
407
402
|
: GRPC_WSA_ERROR(info->wsa_error, "WSASend");
|
408
403
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, error);
|
409
404
|
if (allocated) gpr_free(allocated);
|
@@ -465,8 +460,6 @@ static void win_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
|
|
465
460
|
if (!tcp->shutting_down) {
|
466
461
|
tcp->shutting_down = 1;
|
467
462
|
tcp->shutdown_error = why;
|
468
|
-
} else {
|
469
|
-
GRPC_ERROR_UNREF(why);
|
470
463
|
}
|
471
464
|
grpc_winsocket_shutdown(tcp->socket);
|
472
465
|
gpr_mu_unlock(&tcp->mu);
|
@@ -474,7 +467,7 @@ static void win_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
|
|
474
467
|
|
475
468
|
static void win_destroy(grpc_endpoint* ep) {
|
476
469
|
grpc_tcp* tcp = (grpc_tcp*)ep;
|
477
|
-
|
470
|
+
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
478
471
|
TCP_UNREF(tcp, "destroy");
|
479
472
|
}
|
480
473
|
|
data/src/core/lib/iomgr/timer.h
CHANGED
@@ -70,12 +70,12 @@ typedef struct grpc_timer_vtable {
|
|
70
70
|
} grpc_timer_vtable;
|
71
71
|
|
72
72
|
/* Initialize *timer. When expired or canceled, closure will be called with
|
73
|
-
error set to indicate if it expired (
|
74
|
-
(
|
75
|
-
application code should check the error to determine how it was invoked.
|
76
|
-
application callback is also responsible for maintaining information
|
77
|
-
when to free up any user-level state. Behavior is undefined for a
|
78
|
-
grpc_core::Timestamp::InfFuture(). */
|
73
|
+
error set to indicate if it expired (absl::OkStatus()) or was canceled
|
74
|
+
(absl::CancelledError()). *closure is guaranteed to be called exactly once,
|
75
|
+
and application code should check the error to determine how it was invoked.
|
76
|
+
The application callback is also responsible for maintaining information
|
77
|
+
about when to free up any user-level state. Behavior is undefined for a
|
78
|
+
deadline of grpc_core::Timestamp::InfFuture(). */
|
79
79
|
void grpc_timer_init(grpc_timer* timer, grpc_core::Timestamp deadline,
|
80
80
|
grpc_closure* closure);
|
81
81
|
|
@@ -99,8 +99,8 @@ void grpc_timer_init_unset(grpc_timer* timer);
|
|
99
99
|
|
100
100
|
In all of these cases, the cancellation is still considered successful.
|
101
101
|
They are essentially distinguished in that the timer_cb will be run
|
102
|
-
exactly once from either the cancellation (with error
|
103
|
-
or from the activation (with error
|
102
|
+
exactly once from either the cancellation (with error absl::CancelledError())
|
103
|
+
or from the activation (with error absl::OkStatus()).
|
104
104
|
|
105
105
|
Note carefully that the callback function MAY occur in the same callstack
|
106
106
|
as grpc_timer_cancel. It's expected that most timers will be cancelled (their
|
@@ -31,7 +31,6 @@
|
|
31
31
|
|
32
32
|
#include "src/core/lib/debug/trace.h"
|
33
33
|
#include "src/core/lib/gpr/spinlock.h"
|
34
|
-
#include "src/core/lib/gpr/tls.h"
|
35
34
|
#include "src/core/lib/gpr/useful.h"
|
36
35
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
37
36
|
#include "src/core/lib/gprpp/time.h"
|
@@ -216,7 +215,7 @@ static void validate_non_pending_timer(grpc_timer* t) {
|
|
216
215
|
* has last-seen. This is an optimization to prevent the thread from checking
|
217
216
|
* shared_mutables.min_timer (which requires acquiring shared_mutables.mu lock,
|
218
217
|
* an expensive operation) */
|
219
|
-
static
|
218
|
+
static thread_local int64_t g_last_seen_min_timer;
|
220
219
|
|
221
220
|
struct shared_mutables {
|
222
221
|
/* The deadline of the next timer due across all timer shards */
|
@@ -274,9 +273,8 @@ static void timer_list_init() {
|
|
274
273
|
|
275
274
|
static void timer_list_shutdown() {
|
276
275
|
size_t i;
|
277
|
-
run_some_expired_timers(
|
278
|
-
|
279
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Timer list shutdown"));
|
276
|
+
run_some_expired_timers(grpc_core::Timestamp::InfFuture(), nullptr,
|
277
|
+
GRPC_ERROR_CREATE("Timer list shutdown"));
|
280
278
|
for (i = 0; i < g_num_shards; i++) {
|
281
279
|
timer_shard* shard = &g_shards[i];
|
282
280
|
gpr_mu_destroy(&shard->mu);
|
@@ -351,8 +349,7 @@ static void timer_init(grpc_timer* timer, grpc_core::Timestamp deadline,
|
|
351
349
|
timer->pending = false;
|
352
350
|
grpc_core::ExecCtx::Run(
|
353
351
|
DEBUG_LOCATION, timer->closure,
|
354
|
-
|
355
|
-
"Attempt to create timer before initialization"));
|
352
|
+
GRPC_ERROR_CREATE("Attempt to create timer before initialization"));
|
356
353
|
return;
|
357
354
|
}
|
358
355
|
|
@@ -361,7 +358,7 @@ static void timer_init(grpc_timer* timer, grpc_core::Timestamp deadline,
|
|
361
358
|
grpc_core::Timestamp now = grpc_core::Timestamp::Now();
|
362
359
|
if (deadline <= now) {
|
363
360
|
timer->pending = false;
|
364
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure,
|
361
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure, absl::OkStatus());
|
365
362
|
gpr_mu_unlock(&shard->mu);
|
366
363
|
/* early out */
|
367
364
|
return;
|
@@ -451,7 +448,7 @@ static void timer_cancel(grpc_timer* timer) {
|
|
451
448
|
REMOVE_FROM_HASH_TABLE(timer);
|
452
449
|
|
453
450
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure,
|
454
|
-
|
451
|
+
absl::CancelledError());
|
455
452
|
timer->pending = false;
|
456
453
|
if (timer->heap_index == INVALID_HEAP_INDEX) {
|
457
454
|
list_remove(timer);
|
@@ -551,8 +548,7 @@ static size_t pop_timers(timer_shard* shard, grpc_core::Timestamp now,
|
|
551
548
|
gpr_mu_lock(&shard->mu);
|
552
549
|
while ((timer = pop_one(shard, now))) {
|
553
550
|
REMOVE_FROM_HASH_TABLE(timer);
|
554
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure,
|
555
|
-
GRPC_ERROR_REF(error));
|
551
|
+
grpc_core::ExecCtx::Run(DEBUG_LOCATION, timer->closure, error);
|
556
552
|
n++;
|
557
553
|
}
|
558
554
|
*new_min_deadline = compute_min_deadline(shard);
|
@@ -658,8 +654,6 @@ static grpc_timer_check_result run_some_expired_timers(
|
|
658
654
|
gpr_spinlock_unlock(&g_shared_mutables.checker_mu);
|
659
655
|
}
|
660
656
|
|
661
|
-
GRPC_ERROR_UNREF(error);
|
662
|
-
|
663
657
|
return result;
|
664
658
|
}
|
665
659
|
|
@@ -687,8 +681,8 @@ static grpc_timer_check_result timer_check(grpc_core::Timestamp* next) {
|
|
687
681
|
|
688
682
|
grpc_error_handle shutdown_error =
|
689
683
|
now != grpc_core::Timestamp::InfFuture()
|
690
|
-
?
|
691
|
-
:
|
684
|
+
? absl::OkStatus()
|
685
|
+
: GRPC_ERROR_CREATE("Shutting down timer system");
|
692
686
|
|
693
687
|
// tracing
|
694
688
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
|
@@ -45,11 +45,10 @@ absl::StatusOr<std::vector<grpc_resolved_address>>
|
|
45
45
|
grpc_resolve_unix_domain_address(absl::string_view name) {
|
46
46
|
grpc_resolved_address addr;
|
47
47
|
grpc_error_handle error = grpc_core::UnixSockaddrPopulate(name, &addr);
|
48
|
-
if (
|
48
|
+
if (error.ok()) {
|
49
49
|
return std::vector<grpc_resolved_address>({addr});
|
50
50
|
}
|
51
51
|
auto result = grpc_error_to_absl_status(error);
|
52
|
-
GRPC_ERROR_UNREF(error);
|
53
52
|
return result;
|
54
53
|
}
|
55
54
|
|
@@ -58,11 +57,10 @@ grpc_resolve_unix_abstract_domain_address(const absl::string_view name) {
|
|
58
57
|
grpc_resolved_address addr;
|
59
58
|
grpc_error_handle error =
|
60
59
|
grpc_core::UnixAbstractSockaddrPopulate(name, &addr);
|
61
|
-
if (
|
60
|
+
if (error.ok()) {
|
62
61
|
return std::vector<grpc_resolved_address>({addr});
|
63
62
|
}
|
64
63
|
auto result = grpc_error_to_absl_status(error);
|
65
|
-
GRPC_ERROR_UNREF(error);
|
66
64
|
return result;
|
67
65
|
}
|
68
66
|
|
@@ -28,6 +28,7 @@
|
|
28
28
|
|
29
29
|
#include <grpc/support/log.h>
|
30
30
|
|
31
|
+
#include "src/core/lib/gprpp/strerror.h"
|
31
32
|
#include "src/core/lib/iomgr/wakeup_fd_posix.h"
|
32
33
|
|
33
34
|
static grpc_error_handle eventfd_create(grpc_wakeup_fd* fd_info) {
|
@@ -36,7 +37,7 @@ static grpc_error_handle eventfd_create(grpc_wakeup_fd* fd_info) {
|
|
36
37
|
if (fd_info->read_fd < 0) {
|
37
38
|
return GRPC_OS_ERROR(errno, "eventfd");
|
38
39
|
}
|
39
|
-
return
|
40
|
+
return absl::OkStatus();
|
40
41
|
}
|
41
42
|
|
42
43
|
static grpc_error_handle eventfd_consume(grpc_wakeup_fd* fd_info) {
|
@@ -48,7 +49,7 @@ static grpc_error_handle eventfd_consume(grpc_wakeup_fd* fd_info) {
|
|
48
49
|
if (err < 0 && errno != EAGAIN) {
|
49
50
|
return GRPC_OS_ERROR(errno, "eventfd_read");
|
50
51
|
}
|
51
|
-
return
|
52
|
+
return absl::OkStatus();
|
52
53
|
}
|
53
54
|
|
54
55
|
static grpc_error_handle eventfd_wakeup(grpc_wakeup_fd* fd_info) {
|
@@ -59,7 +60,7 @@ static grpc_error_handle eventfd_wakeup(grpc_wakeup_fd* fd_info) {
|
|
59
60
|
if (err < 0) {
|
60
61
|
return GRPC_OS_ERROR(errno, "eventfd_write");
|
61
62
|
}
|
62
|
-
return
|
63
|
+
return absl::OkStatus();
|
63
64
|
}
|
64
65
|
|
65
66
|
static void eventfd_destroy(grpc_wakeup_fd* fd_info) {
|
@@ -28,6 +28,7 @@
|
|
28
28
|
|
29
29
|
#include <grpc/support/log.h>
|
30
30
|
|
31
|
+
#include "src/core/lib/gprpp/strerror.h"
|
31
32
|
#include "src/core/lib/iomgr/socket_utils_posix.h"
|
32
33
|
#include "src/core/lib/iomgr/wakeup_fd_pipe.h"
|
33
34
|
#include "src/core/lib/iomgr/wakeup_fd_posix.h"
|
@@ -36,17 +37,18 @@ static grpc_error_handle pipe_init(grpc_wakeup_fd* fd_info) {
|
|
36
37
|
int pipefd[2];
|
37
38
|
int r = pipe(pipefd);
|
38
39
|
if (0 != r) {
|
39
|
-
gpr_log(GPR_ERROR, "pipe creation failed (%d): %s", errno,
|
40
|
+
gpr_log(GPR_ERROR, "pipe creation failed (%d): %s", errno,
|
41
|
+
grpc_core::StrError(errno).c_str());
|
40
42
|
return GRPC_OS_ERROR(errno, "pipe");
|
41
43
|
}
|
42
44
|
grpc_error_handle err;
|
43
45
|
err = grpc_set_socket_nonblocking(pipefd[0], 1);
|
44
|
-
if (!
|
46
|
+
if (!err.ok()) return err;
|
45
47
|
err = grpc_set_socket_nonblocking(pipefd[1], 1);
|
46
|
-
if (!
|
48
|
+
if (!err.ok()) return err;
|
47
49
|
fd_info->read_fd = pipefd[0];
|
48
50
|
fd_info->write_fd = pipefd[1];
|
49
|
-
return
|
51
|
+
return absl::OkStatus();
|
50
52
|
}
|
51
53
|
|
52
54
|
static grpc_error_handle pipe_consume(grpc_wakeup_fd* fd_info) {
|
@@ -56,10 +58,10 @@ static grpc_error_handle pipe_consume(grpc_wakeup_fd* fd_info) {
|
|
56
58
|
for (;;) {
|
57
59
|
r = read(fd_info->read_fd, buf, sizeof(buf));
|
58
60
|
if (r > 0) continue;
|
59
|
-
if (r == 0) return
|
61
|
+
if (r == 0) return absl::OkStatus();
|
60
62
|
switch (errno) {
|
61
63
|
case EAGAIN:
|
62
|
-
return
|
64
|
+
return absl::OkStatus();
|
63
65
|
case EINTR:
|
64
66
|
continue;
|
65
67
|
default:
|
@@ -72,7 +74,7 @@ static grpc_error_handle pipe_wakeup(grpc_wakeup_fd* fd_info) {
|
|
72
74
|
char c = 0;
|
73
75
|
while (write(fd_info->write_fd, &c, 1) != 1 && errno == EINTR) {
|
74
76
|
}
|
75
|
-
return
|
77
|
+
return absl::OkStatus();
|
76
78
|
}
|
77
79
|
|
78
80
|
static void pipe_destroy(grpc_wakeup_fd* fd_info) {
|
@@ -84,7 +86,7 @@ static int pipe_check_availability(void) {
|
|
84
86
|
grpc_wakeup_fd fd;
|
85
87
|
fd.read_fd = fd.write_fd = -1;
|
86
88
|
|
87
|
-
if (pipe_init(&fd) ==
|
89
|
+
if (pipe_init(&fd) == absl::OkStatus()) {
|
88
90
|
pipe_destroy(&fd);
|
89
91
|
return 1;
|
90
92
|
} else {
|
@@ -0,0 +1,42 @@
|
|
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_JSON_JSON_CHANNEL_ARGS_H
|
16
|
+
#define GRPC_CORE_LIB_JSON_JSON_CHANNEL_ARGS_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include "absl/strings/string_view.h"
|
21
|
+
#include "absl/types/optional.h"
|
22
|
+
|
23
|
+
#include "src/core/lib/channel/channel_args.h"
|
24
|
+
#include "src/core/lib/json/json_args.h"
|
25
|
+
|
26
|
+
namespace grpc_core {
|
27
|
+
|
28
|
+
class JsonChannelArgs : public JsonArgs {
|
29
|
+
public:
|
30
|
+
explicit JsonChannelArgs(const ChannelArgs& args) : args_(args) {}
|
31
|
+
|
32
|
+
bool IsEnabled(absl::string_view key) const override {
|
33
|
+
return args_.GetBool(key).value_or(false);
|
34
|
+
}
|
35
|
+
|
36
|
+
private:
|
37
|
+
ChannelArgs args_;
|
38
|
+
};
|
39
|
+
|
40
|
+
} // namespace grpc_core
|
41
|
+
|
42
|
+
#endif // GRPC_CORE_LIB_JSON_JSON_CHANNEL_ARGS_H
|
@@ -56,7 +56,7 @@ void LoadDuration::LoadInto(const std::string& value, void* dst,
|
|
56
56
|
}
|
57
57
|
buf = absl::StripAsciiWhitespace(buf);
|
58
58
|
auto decimal_point = buf.find('.');
|
59
|
-
|
59
|
+
int32_t nanos = 0;
|
60
60
|
if (decimal_point != absl::string_view::npos) {
|
61
61
|
absl::string_view after_decimal = buf.substr(decimal_point + 1);
|
62
62
|
buf = buf.substr(0, decimal_point);
|
@@ -73,11 +73,16 @@ void LoadDuration::LoadInto(const std::string& value, void* dst,
|
|
73
73
|
nanos *= 10;
|
74
74
|
}
|
75
75
|
}
|
76
|
-
|
76
|
+
int64_t seconds;
|
77
77
|
if (!absl::SimpleAtoi(buf, &seconds)) {
|
78
78
|
errors->AddError("Not a duration (not a number of seconds)");
|
79
79
|
return;
|
80
80
|
}
|
81
|
+
// Acceptable range for seconds documented at
|
82
|
+
// https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration
|
83
|
+
if (seconds < 0 || seconds > 315576000000) {
|
84
|
+
errors->AddError("seconds must be in the range [0, 315576000000]");
|
85
|
+
}
|
81
86
|
*static_cast<Duration*>(dst) =
|
82
87
|
Duration::FromSecondsAndNanoseconds(seconds, nanos);
|
83
88
|
}
|
@@ -20,7 +20,9 @@
|
|
20
20
|
#include <cstdint>
|
21
21
|
#include <cstring>
|
22
22
|
#include <map>
|
23
|
+
#include <memory>
|
23
24
|
#include <string>
|
25
|
+
#include <utility>
|
24
26
|
#include <vector>
|
25
27
|
|
26
28
|
#include "absl/meta/type_traits.h"
|
@@ -391,6 +393,26 @@ class AutoLoader<absl::optional<T>> final : public LoadOptional {
|
|
391
393
|
~AutoLoader() = default;
|
392
394
|
};
|
393
395
|
|
396
|
+
// Specializations of AutoLoader for std::unique_ptr<>.
|
397
|
+
template <typename T>
|
398
|
+
class AutoLoader<std::unique_ptr<T>> final : public LoadOptional {
|
399
|
+
public:
|
400
|
+
void* Emplace(void* dst) const final {
|
401
|
+
auto& p = *static_cast<std::unique_ptr<T>*>(dst);
|
402
|
+
p = std::make_unique<T>();
|
403
|
+
return p.get();
|
404
|
+
}
|
405
|
+
void Reset(void* dst) const final {
|
406
|
+
static_cast<std::unique_ptr<T>*>(dst)->reset();
|
407
|
+
}
|
408
|
+
const LoaderInterface* ElementLoader() const final {
|
409
|
+
return LoaderForType<T>();
|
410
|
+
}
|
411
|
+
|
412
|
+
private:
|
413
|
+
~AutoLoader() = default;
|
414
|
+
};
|
415
|
+
|
394
416
|
// Implementation of aforementioned LoaderForType.
|
395
417
|
// Simply keeps a static AutoLoader<T> and returns a pointer to that.
|
396
418
|
template <typename T>
|
@@ -45,7 +45,7 @@ bool ExtractJsonBool(const Json& json, absl::string_view field_name,
|
|
45
45
|
*output = false;
|
46
46
|
return true;
|
47
47
|
default:
|
48
|
-
error_list->push_back(
|
48
|
+
error_list->push_back(GRPC_ERROR_CREATE(
|
49
49
|
absl::StrCat("field:", field_name, " error:type should be BOOLEAN")));
|
50
50
|
return false;
|
51
51
|
}
|
@@ -56,7 +56,7 @@ bool ExtractJsonArray(const Json& json, absl::string_view field_name,
|
|
56
56
|
std::vector<grpc_error_handle>* error_list) {
|
57
57
|
if (json.type() != Json::Type::ARRAY) {
|
58
58
|
*output = nullptr;
|
59
|
-
error_list->push_back(
|
59
|
+
error_list->push_back(GRPC_ERROR_CREATE(
|
60
60
|
absl::StrCat("field:", field_name, " error:type should be ARRAY")));
|
61
61
|
return false;
|
62
62
|
}
|
@@ -69,7 +69,7 @@ bool ExtractJsonObject(const Json& json, absl::string_view field_name,
|
|
69
69
|
std::vector<grpc_error_handle>* error_list) {
|
70
70
|
if (json.type() != Json::Type::OBJECT) {
|
71
71
|
*output = nullptr;
|
72
|
-
error_list->push_back(
|
72
|
+
error_list->push_back(GRPC_ERROR_CREATE(
|
73
73
|
absl::StrCat("field:", field_name, " error:type should be OBJECT")));
|
74
74
|
return false;
|
75
75
|
}
|
@@ -87,14 +87,14 @@ bool ParseJsonObjectFieldAsDuration(const Json::Object& object,
|
|
87
87
|
auto it = object.find(std::string(field_name));
|
88
88
|
if (it == object.end()) {
|
89
89
|
if (required) {
|
90
|
-
error_list->push_back(
|
90
|
+
error_list->push_back(GRPC_ERROR_CREATE(
|
91
91
|
absl::StrCat("field:", field_name, " error:does not exist.")));
|
92
92
|
}
|
93
93
|
return false;
|
94
94
|
}
|
95
95
|
if (!ParseDurationFromJson(it->second, output)) {
|
96
96
|
*output = Duration::NegativeInfinity();
|
97
|
-
error_list->push_back(
|
97
|
+
error_list->push_back(GRPC_ERROR_CREATE(
|
98
98
|
absl::StrCat("field:", field_name,
|
99
99
|
" error:type should be STRING of the form given by "
|
100
100
|
"google.proto.Duration.")));
|
@@ -55,12 +55,12 @@ bool ExtractJsonNumber(const Json& json, absl::string_view field_name,
|
|
55
55
|
std::vector<grpc_error_handle>* error_list) {
|
56
56
|
static_assert(std::is_integral<NumericType>::value, "Integral required");
|
57
57
|
if (json.type() != Json::Type::NUMBER && json.type() != Json::Type::STRING) {
|
58
|
-
error_list->push_back(
|
58
|
+
error_list->push_back(GRPC_ERROR_CREATE(absl::StrCat(
|
59
59
|
"field:", field_name, " error:type should be NUMBER or STRING")));
|
60
60
|
return false;
|
61
61
|
}
|
62
62
|
if (!absl::SimpleAtoi(json.string_value(), output)) {
|
63
|
-
error_list->push_back(
|
63
|
+
error_list->push_back(GRPC_ERROR_CREATE(
|
64
64
|
absl::StrCat("field:", field_name, " error:failed to parse.")));
|
65
65
|
return false;
|
66
66
|
}
|
@@ -77,7 +77,7 @@ bool ExtractJsonString(const Json& json, absl::string_view field_name,
|
|
77
77
|
std::vector<grpc_error_handle>* error_list) {
|
78
78
|
if (json.type() != Json::Type::STRING) {
|
79
79
|
*output = "";
|
80
|
-
error_list->push_back(
|
80
|
+
error_list->push_back(GRPC_ERROR_CREATE(
|
81
81
|
absl::StrCat("field:", field_name, " error:type should be STRING")));
|
82
82
|
return false;
|
83
83
|
}
|
@@ -142,7 +142,7 @@ bool ParseJsonObjectField(const Json::Object& object,
|
|
142
142
|
auto it = object.find(std::string(field_name));
|
143
143
|
if (it == object.end()) {
|
144
144
|
if (required) {
|
145
|
-
error_list->push_back(
|
145
|
+
error_list->push_back(GRPC_ERROR_CREATE(
|
146
146
|
absl::StrCat("field:", field_name, " error:does not exist.")));
|
147
147
|
}
|
148
148
|
return false;
|
@@ -33,6 +33,7 @@
|
|
33
33
|
#include "absl/types/optional.h"
|
34
34
|
#include "absl/types/variant.h"
|
35
35
|
|
36
|
+
#include <grpc/event_engine/event_engine.h>
|
36
37
|
#include <grpc/impl/codegen/connectivity_state.h>
|
37
38
|
|
38
39
|
#include "src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h"
|
@@ -291,6 +292,9 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
|
|
291
292
|
/// Returns the channel authority.
|
292
293
|
virtual absl::string_view GetAuthority() = 0;
|
293
294
|
|
295
|
+
/// Returns the EventEngine to use for timers and async work.
|
296
|
+
virtual grpc_event_engine::experimental::EventEngine* GetEventEngine() = 0;
|
297
|
+
|
294
298
|
/// Adds a trace message associated with the channel.
|
295
299
|
enum TraceSeverity { TRACE_INFO, TRACE_WARNING, TRACE_ERROR };
|
296
300
|
virtual void AddTraceEvent(TraceSeverity severity,
|
@@ -26,7 +26,6 @@
|
|
26
26
|
|
27
27
|
#include <grpc/impl/codegen/connectivity_state.h>
|
28
28
|
|
29
|
-
#include "src/core/lib/channel/channel_args.h"
|
30
29
|
#include "src/core/lib/gprpp/ref_counted.h"
|
31
30
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
32
31
|
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
@@ -96,9 +95,6 @@ class SubchannelInterface : public RefCounted<SubchannelInterface> {
|
|
96
95
|
// Registers a new data watcher.
|
97
96
|
virtual void AddDataWatcher(
|
98
97
|
std::unique_ptr<DataWatcherInterface> watcher) = 0;
|
99
|
-
|
100
|
-
// TODO(roth): Need a better non-grpc-specific abstraction here.
|
101
|
-
virtual ChannelArgs channel_args() = 0;
|
102
98
|
};
|
103
99
|
|
104
100
|
// A class that delegates to another subchannel, to be used in cases
|
@@ -124,9 +120,6 @@ class DelegatingSubchannel : public SubchannelInterface {
|
|
124
120
|
wrapped_subchannel_->RequestConnection();
|
125
121
|
}
|
126
122
|
void ResetBackoff() override { wrapped_subchannel_->ResetBackoff(); }
|
127
|
-
ChannelArgs channel_args() override {
|
128
|
-
return wrapped_subchannel_->channel_args();
|
129
|
-
}
|
130
123
|
void AddDataWatcher(std::unique_ptr<DataWatcherInterface> watcher) override {
|
131
124
|
wrapped_subchannel_->AddDataWatcher(std::move(watcher));
|
132
125
|
}
|