grpc 1.50.0-x86_64-linux → 1.51.0-x86_64-linux
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/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- 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 +55 -18
- 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
@@ -0,0 +1,364 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2022 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include <cstdint>
|
20
|
+
#include <map>
|
21
|
+
#include <memory>
|
22
|
+
#include <string>
|
23
|
+
#include <utility>
|
24
|
+
#include <vector>
|
25
|
+
|
26
|
+
#include "absl/status/status.h"
|
27
|
+
#include "absl/status/statusor.h"
|
28
|
+
#include "absl/strings/str_cat.h"
|
29
|
+
#include "absl/strings/string_view.h"
|
30
|
+
|
31
|
+
#include <grpc/event_engine/event_engine.h>
|
32
|
+
#include <grpc/impl/codegen/connectivity_state.h>
|
33
|
+
#include <grpc/support/log.h>
|
34
|
+
|
35
|
+
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h"
|
36
|
+
#include "src/core/ext/xds/xds_client_stats.h"
|
37
|
+
#include "src/core/lib/channel/channel_args.h"
|
38
|
+
#include "src/core/lib/config/core_configuration.h"
|
39
|
+
#include "src/core/lib/debug/trace.h"
|
40
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
41
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
42
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
43
|
+
#include "src/core/lib/gprpp/validation_errors.h"
|
44
|
+
#include "src/core/lib/iomgr/pollset_set.h"
|
45
|
+
#include "src/core/lib/json/json.h"
|
46
|
+
#include "src/core/lib/json/json_args.h"
|
47
|
+
#include "src/core/lib/json/json_object_loader.h"
|
48
|
+
#include "src/core/lib/load_balancing/lb_policy.h"
|
49
|
+
#include "src/core/lib/load_balancing/lb_policy_factory.h"
|
50
|
+
#include "src/core/lib/load_balancing/lb_policy_registry.h"
|
51
|
+
#include "src/core/lib/load_balancing/subchannel_interface.h"
|
52
|
+
#include "src/core/lib/resolver/server_address.h"
|
53
|
+
#include "src/core/lib/transport/connectivity_state.h"
|
54
|
+
|
55
|
+
namespace grpc_core {
|
56
|
+
|
57
|
+
TraceFlag grpc_xds_wrr_locality_lb_trace(false, "xds_wrr_locality_lb");
|
58
|
+
|
59
|
+
namespace {
|
60
|
+
|
61
|
+
constexpr absl::string_view kXdsWrrLocality = "xds_wrr_locality_experimental";
|
62
|
+
|
63
|
+
// Config for xds_wrr_locality LB policy.
|
64
|
+
class XdsWrrLocalityLbConfig : public LoadBalancingPolicy::Config {
|
65
|
+
public:
|
66
|
+
XdsWrrLocalityLbConfig() = default;
|
67
|
+
|
68
|
+
XdsWrrLocalityLbConfig(const XdsWrrLocalityLbConfig&) = delete;
|
69
|
+
XdsWrrLocalityLbConfig& operator=(const XdsWrrLocalityLbConfig&) = delete;
|
70
|
+
|
71
|
+
XdsWrrLocalityLbConfig(XdsWrrLocalityLbConfig&& other) = delete;
|
72
|
+
XdsWrrLocalityLbConfig& operator=(XdsWrrLocalityLbConfig&& other) = delete;
|
73
|
+
|
74
|
+
absl::string_view name() const override { return kXdsWrrLocality; }
|
75
|
+
|
76
|
+
const Json& child_config() const { return child_config_; }
|
77
|
+
|
78
|
+
static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
|
79
|
+
// Note: The "childPolicy" field requires custom processing, so
|
80
|
+
// it's handled in JsonPostLoad() instead.
|
81
|
+
static const auto* loader =
|
82
|
+
JsonObjectLoader<XdsWrrLocalityLbConfig>().Finish();
|
83
|
+
return loader;
|
84
|
+
}
|
85
|
+
|
86
|
+
void JsonPostLoad(const Json& json, const JsonArgs&,
|
87
|
+
ValidationErrors* errors) {
|
88
|
+
ValidationErrors::ScopedField field(errors, ".childPolicy");
|
89
|
+
auto it = json.object_value().find("childPolicy");
|
90
|
+
if (it == json.object_value().end()) {
|
91
|
+
errors->AddError("field not present");
|
92
|
+
return;
|
93
|
+
}
|
94
|
+
auto lb_config =
|
95
|
+
CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
|
96
|
+
it->second);
|
97
|
+
if (!lb_config.ok()) {
|
98
|
+
errors->AddError(lb_config.status().message());
|
99
|
+
return;
|
100
|
+
}
|
101
|
+
child_config_ = it->second;
|
102
|
+
}
|
103
|
+
|
104
|
+
private:
|
105
|
+
Json child_config_;
|
106
|
+
};
|
107
|
+
|
108
|
+
// xds_wrr_locality LB policy.
|
109
|
+
class XdsWrrLocalityLb : public LoadBalancingPolicy {
|
110
|
+
public:
|
111
|
+
explicit XdsWrrLocalityLb(Args args);
|
112
|
+
|
113
|
+
absl::string_view name() const override { return kXdsWrrLocality; }
|
114
|
+
|
115
|
+
absl::Status UpdateLocked(UpdateArgs args) override;
|
116
|
+
void ExitIdleLocked() override;
|
117
|
+
void ResetBackoffLocked() override;
|
118
|
+
|
119
|
+
private:
|
120
|
+
class Helper : public ChannelControlHelper {
|
121
|
+
public:
|
122
|
+
explicit Helper(RefCountedPtr<XdsWrrLocalityLb> xds_wrr_locality)
|
123
|
+
: xds_wrr_locality_(std::move(xds_wrr_locality)) {}
|
124
|
+
|
125
|
+
~Helper() override { xds_wrr_locality_.reset(DEBUG_LOCATION, "Helper"); }
|
126
|
+
|
127
|
+
RefCountedPtr<SubchannelInterface> CreateSubchannel(
|
128
|
+
ServerAddress address, const ChannelArgs& args) override;
|
129
|
+
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
|
130
|
+
std::unique_ptr<SubchannelPicker> picker) override;
|
131
|
+
void RequestReresolution() override;
|
132
|
+
absl::string_view GetAuthority() override;
|
133
|
+
grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
|
134
|
+
void AddTraceEvent(TraceSeverity severity,
|
135
|
+
absl::string_view message) override;
|
136
|
+
|
137
|
+
private:
|
138
|
+
RefCountedPtr<XdsWrrLocalityLb> xds_wrr_locality_;
|
139
|
+
};
|
140
|
+
|
141
|
+
~XdsWrrLocalityLb() override;
|
142
|
+
|
143
|
+
void ShutdownLocked() override;
|
144
|
+
|
145
|
+
OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
|
146
|
+
const ChannelArgs& args);
|
147
|
+
|
148
|
+
OrphanablePtr<LoadBalancingPolicy> child_policy_;
|
149
|
+
};
|
150
|
+
|
151
|
+
//
|
152
|
+
// XdsWrrLocalityLb
|
153
|
+
//
|
154
|
+
|
155
|
+
XdsWrrLocalityLb::XdsWrrLocalityLb(Args args)
|
156
|
+
: LoadBalancingPolicy(std::move(args)) {}
|
157
|
+
|
158
|
+
XdsWrrLocalityLb::~XdsWrrLocalityLb() {
|
159
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_wrr_locality_lb_trace)) {
|
160
|
+
gpr_log(GPR_INFO, "[xds_wrr_locality_lb %p] destroying", this);
|
161
|
+
}
|
162
|
+
}
|
163
|
+
|
164
|
+
void XdsWrrLocalityLb::ShutdownLocked() {
|
165
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_wrr_locality_lb_trace)) {
|
166
|
+
gpr_log(GPR_INFO, "[xds_wrr_locality_lb %p] shutting down", this);
|
167
|
+
}
|
168
|
+
if (child_policy_ != nullptr) {
|
169
|
+
grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
|
170
|
+
interested_parties());
|
171
|
+
child_policy_.reset();
|
172
|
+
}
|
173
|
+
}
|
174
|
+
|
175
|
+
void XdsWrrLocalityLb::ExitIdleLocked() {
|
176
|
+
if (child_policy_ != nullptr) child_policy_->ExitIdleLocked();
|
177
|
+
}
|
178
|
+
|
179
|
+
void XdsWrrLocalityLb::ResetBackoffLocked() {
|
180
|
+
if (child_policy_ != nullptr) child_policy_->ResetBackoffLocked();
|
181
|
+
}
|
182
|
+
|
183
|
+
absl::Status XdsWrrLocalityLb::UpdateLocked(UpdateArgs args) {
|
184
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_wrr_locality_lb_trace)) {
|
185
|
+
gpr_log(GPR_INFO, "[xds_wrr_locality_lb %p] Received update", this);
|
186
|
+
}
|
187
|
+
RefCountedPtr<XdsWrrLocalityLbConfig> config = std::move(args.config);
|
188
|
+
// Scan the addresses to find the weight for each locality.
|
189
|
+
std::map<std::string, uint32_t> locality_weights;
|
190
|
+
if (args.addresses.ok()) {
|
191
|
+
for (const auto& address : *args.addresses) {
|
192
|
+
auto* attribute = static_cast<const XdsLocalityAttribute*>(
|
193
|
+
address.GetAttribute(kXdsLocalityNameAttributeKey));
|
194
|
+
if (attribute != nullptr) {
|
195
|
+
auto p = locality_weights.emplace(
|
196
|
+
attribute->locality_name()->AsHumanReadableString(),
|
197
|
+
attribute->weight());
|
198
|
+
if (!p.second && p.first->second != attribute->weight()) {
|
199
|
+
gpr_log(GPR_ERROR,
|
200
|
+
"INTERNAL ERROR: xds_wrr_locality found different weights "
|
201
|
+
"for locality %s (%d vs %d); using first value",
|
202
|
+
p.first->first.c_str(), p.first->second, attribute->weight());
|
203
|
+
}
|
204
|
+
}
|
205
|
+
}
|
206
|
+
}
|
207
|
+
// Construct the config for the weighted_target policy.
|
208
|
+
Json::Object weighted_targets;
|
209
|
+
for (const auto& p : locality_weights) {
|
210
|
+
const std::string& locality_name = p.first;
|
211
|
+
uint32_t weight = p.second;
|
212
|
+
// Add weighted target entry.
|
213
|
+
weighted_targets[locality_name] = Json::Object{
|
214
|
+
{"weight", weight},
|
215
|
+
{"childPolicy", config->child_config()},
|
216
|
+
};
|
217
|
+
}
|
218
|
+
Json child_config_json = Json::Array{
|
219
|
+
Json::Object{
|
220
|
+
{"weighted_target_experimental",
|
221
|
+
Json::Object{
|
222
|
+
{"targets", std::move(weighted_targets)},
|
223
|
+
}},
|
224
|
+
},
|
225
|
+
};
|
226
|
+
// Parse config.
|
227
|
+
auto child_config =
|
228
|
+
CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
|
229
|
+
child_config_json);
|
230
|
+
if (!child_config.ok()) {
|
231
|
+
// This should never happen, but if it does, we basically have no
|
232
|
+
// way to fix it, so we put the channel in TRANSIENT_FAILURE.
|
233
|
+
gpr_log(GPR_ERROR,
|
234
|
+
"[xds_wrr_locality %p] error parsing generated child policy "
|
235
|
+
"config -- putting channel in TRANSIENT_FAILURE: %s",
|
236
|
+
this, child_config.status().ToString().c_str());
|
237
|
+
absl::Status status = absl::InternalError(absl::StrCat(
|
238
|
+
"xds_wrr_locality LB policy: error parsing generated child policy "
|
239
|
+
"config: ",
|
240
|
+
child_config.status().ToString()));
|
241
|
+
channel_control_helper()->UpdateState(
|
242
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
243
|
+
std::make_unique<TransientFailurePicker>(status));
|
244
|
+
return status;
|
245
|
+
}
|
246
|
+
// Create child policy if needed (i.e., on first update).
|
247
|
+
if (child_policy_ == nullptr) {
|
248
|
+
child_policy_ = CreateChildPolicyLocked(args.args);
|
249
|
+
}
|
250
|
+
// Construct update args.
|
251
|
+
UpdateArgs update_args;
|
252
|
+
update_args.addresses = std::move(args.addresses);
|
253
|
+
update_args.config = std::move(*child_config);
|
254
|
+
update_args.resolution_note = std::move(args.resolution_note);
|
255
|
+
update_args.args = std::move(args.args);
|
256
|
+
// Update the policy.
|
257
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_wrr_locality_lb_trace)) {
|
258
|
+
gpr_log(GPR_INFO, "[xds_wrr_locality_lb %p] updating child policy %p", this,
|
259
|
+
child_policy_.get());
|
260
|
+
}
|
261
|
+
return child_policy_->UpdateLocked(std::move(update_args));
|
262
|
+
}
|
263
|
+
|
264
|
+
OrphanablePtr<LoadBalancingPolicy> XdsWrrLocalityLb::CreateChildPolicyLocked(
|
265
|
+
const ChannelArgs& args) {
|
266
|
+
LoadBalancingPolicy::Args lb_policy_args;
|
267
|
+
lb_policy_args.work_serializer = work_serializer();
|
268
|
+
lb_policy_args.args = args;
|
269
|
+
lb_policy_args.channel_control_helper =
|
270
|
+
std::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
|
271
|
+
auto lb_policy =
|
272
|
+
CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy(
|
273
|
+
"weighted_target_experimental", std::move(lb_policy_args));
|
274
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_wrr_locality_lb_trace)) {
|
275
|
+
gpr_log(GPR_INFO, "[xds_wrr_locality_lb %p] created new child policy %p",
|
276
|
+
this, lb_policy.get());
|
277
|
+
}
|
278
|
+
// Add our interested_parties pollset_set to that of the newly created
|
279
|
+
// child policy. This will make the child policy progress upon activity on
|
280
|
+
// this LB policy, which in turn is tied to the application's call.
|
281
|
+
grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
|
282
|
+
interested_parties());
|
283
|
+
return lb_policy;
|
284
|
+
}
|
285
|
+
|
286
|
+
//
|
287
|
+
// XdsWrrLocalityLb::Helper
|
288
|
+
//
|
289
|
+
|
290
|
+
RefCountedPtr<SubchannelInterface> XdsWrrLocalityLb::Helper::CreateSubchannel(
|
291
|
+
ServerAddress address, const ChannelArgs& args) {
|
292
|
+
return xds_wrr_locality_->channel_control_helper()->CreateSubchannel(
|
293
|
+
std::move(address), args);
|
294
|
+
}
|
295
|
+
|
296
|
+
void XdsWrrLocalityLb::Helper::UpdateState(
|
297
|
+
grpc_connectivity_state state, const absl::Status& status,
|
298
|
+
std::unique_ptr<SubchannelPicker> picker) {
|
299
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_wrr_locality_lb_trace)) {
|
300
|
+
gpr_log(
|
301
|
+
GPR_INFO,
|
302
|
+
"[xds_wrr_locality_lb %p] update from child: state=%s (%s) picker=%p",
|
303
|
+
xds_wrr_locality_.get(), ConnectivityStateName(state),
|
304
|
+
status.ToString().c_str(), picker.get());
|
305
|
+
}
|
306
|
+
xds_wrr_locality_->channel_control_helper()->UpdateState(state, status,
|
307
|
+
std::move(picker));
|
308
|
+
}
|
309
|
+
|
310
|
+
void XdsWrrLocalityLb::Helper::RequestReresolution() {
|
311
|
+
xds_wrr_locality_->channel_control_helper()->RequestReresolution();
|
312
|
+
}
|
313
|
+
|
314
|
+
absl::string_view XdsWrrLocalityLb::Helper::GetAuthority() {
|
315
|
+
return xds_wrr_locality_->channel_control_helper()->GetAuthority();
|
316
|
+
}
|
317
|
+
|
318
|
+
grpc_event_engine::experimental::EventEngine*
|
319
|
+
XdsWrrLocalityLb::Helper::GetEventEngine() {
|
320
|
+
return xds_wrr_locality_->channel_control_helper()->GetEventEngine();
|
321
|
+
}
|
322
|
+
|
323
|
+
void XdsWrrLocalityLb::Helper::AddTraceEvent(TraceSeverity severity,
|
324
|
+
absl::string_view message) {
|
325
|
+
xds_wrr_locality_->channel_control_helper()->AddTraceEvent(severity, message);
|
326
|
+
}
|
327
|
+
|
328
|
+
//
|
329
|
+
// factory
|
330
|
+
//
|
331
|
+
|
332
|
+
class XdsWrrLocalityLbFactory : public LoadBalancingPolicyFactory {
|
333
|
+
public:
|
334
|
+
OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
|
335
|
+
LoadBalancingPolicy::Args args) const override {
|
336
|
+
return MakeOrphanable<XdsWrrLocalityLb>(std::move(args));
|
337
|
+
}
|
338
|
+
|
339
|
+
absl::string_view name() const override { return kXdsWrrLocality; }
|
340
|
+
|
341
|
+
absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
|
342
|
+
ParseLoadBalancingConfig(const Json& json) const override {
|
343
|
+
if (json.type() == Json::Type::JSON_NULL) {
|
344
|
+
// xds_wrr_locality was mentioned as a policy in the deprecated
|
345
|
+
// loadBalancingPolicy field or in the client API.
|
346
|
+
return absl::InvalidArgumentError(
|
347
|
+
"field:loadBalancingPolicy error:xds_wrr_locality policy requires "
|
348
|
+
"configuration. Please use loadBalancingConfig field of service "
|
349
|
+
"config instead.");
|
350
|
+
}
|
351
|
+
return LoadRefCountedFromJson<XdsWrrLocalityLbConfig>(
|
352
|
+
json, JsonArgs(),
|
353
|
+
"errors validating xds_wrr_locality LB policy config");
|
354
|
+
}
|
355
|
+
};
|
356
|
+
|
357
|
+
} // namespace
|
358
|
+
|
359
|
+
void RegisterXdsWrrLocalityLbPolicy(CoreConfiguration::Builder* builder) {
|
360
|
+
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
361
|
+
std::make_unique<XdsWrrLocalityLbFactory>());
|
362
|
+
}
|
363
|
+
|
364
|
+
} // namespace grpc_core
|
@@ -16,6 +16,9 @@
|
|
16
16
|
|
17
17
|
#include <algorithm>
|
18
18
|
|
19
|
+
#include "absl/status/status.h"
|
20
|
+
|
21
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
19
22
|
#include "src/core/lib/iomgr/port.h" // IWYU pragma: keep
|
20
23
|
|
21
24
|
#ifdef GRPC_HAVE_UNIX_SOCKET
|
@@ -28,7 +31,6 @@
|
|
28
31
|
#include <string>
|
29
32
|
#include <utility>
|
30
33
|
|
31
|
-
#include "absl/memory/memory.h"
|
32
34
|
#include "absl/status/statusor.h"
|
33
35
|
#include "absl/strings/str_cat.h"
|
34
36
|
#include "absl/strings/string_view.h"
|
@@ -44,7 +46,6 @@
|
|
44
46
|
#include "src/core/lib/iomgr/resolved_address.h"
|
45
47
|
#include "src/core/lib/resolver/resolver.h"
|
46
48
|
#include "src/core/lib/resolver/resolver_factory.h"
|
47
|
-
#include "src/core/lib/resolver/resolver_registry.h"
|
48
49
|
#include "src/core/lib/resolver/server_address.h"
|
49
50
|
#include "src/core/lib/uri/uri_parser.h"
|
50
51
|
|
@@ -94,7 +95,7 @@ class BinderResolverFactory : public ResolverFactory {
|
|
94
95
|
absl::string_view path, grpc_resolved_address* resolved_addr) {
|
95
96
|
path = absl::StripPrefix(path, "/");
|
96
97
|
if (path.empty()) {
|
97
|
-
return
|
98
|
+
return GRPC_ERROR_CREATE("path is empty");
|
98
99
|
}
|
99
100
|
// Store parsed path in a unix socket so it can be reinterpreted as
|
100
101
|
// sockaddr. An invalid address family (AF_MAX) is set to make sure it won't
|
@@ -106,14 +107,14 @@ class BinderResolverFactory : public ResolverFactory {
|
|
106
107
|
static_assert(sizeof(un->sun_path) >= 101,
|
107
108
|
"unix socket path size is unexpectedly short");
|
108
109
|
if (path.size() + 1 > sizeof(un->sun_path)) {
|
109
|
-
return
|
110
|
+
return GRPC_ERROR_CREATE(
|
110
111
|
absl::StrCat(path, " is too long to be handled"));
|
111
112
|
}
|
112
113
|
// `un` has already be set to zero, no need to append null after the string
|
113
114
|
memcpy(un->sun_path, path.data(), path.size());
|
114
115
|
resolved_addr->len =
|
115
116
|
static_cast<socklen_t>(sizeof(un->sun_family) + path.size() + 1);
|
116
|
-
return
|
117
|
+
return absl::OkStatus();
|
117
118
|
}
|
118
119
|
|
119
120
|
static bool ParseUri(const URI& uri, ServerAddressList* addresses) {
|
@@ -124,9 +125,8 @@ class BinderResolverFactory : public ResolverFactory {
|
|
124
125
|
return false;
|
125
126
|
}
|
126
127
|
grpc_error_handle error = BinderAddrPopulate(uri.path(), &addr);
|
127
|
-
if (!
|
128
|
-
gpr_log(GPR_ERROR, "%s",
|
129
|
-
GRPC_ERROR_UNREF(error);
|
128
|
+
if (!error.ok()) {
|
129
|
+
gpr_log(GPR_ERROR, "%s", StatusToString(error).c_str());
|
130
130
|
return false;
|
131
131
|
}
|
132
132
|
}
|
@@ -141,7 +141,7 @@ class BinderResolverFactory : public ResolverFactory {
|
|
141
141
|
|
142
142
|
void RegisterBinderResolver(CoreConfiguration::Builder* builder) {
|
143
143
|
builder->resolver_registry()->RegisterResolverFactory(
|
144
|
-
|
144
|
+
std::make_unique<BinderResolverFactory>());
|
145
145
|
}
|
146
146
|
|
147
147
|
} // namespace grpc_core
|
@@ -28,14 +28,12 @@
|
|
28
28
|
#include <vector>
|
29
29
|
|
30
30
|
#include "absl/base/thread_annotations.h"
|
31
|
-
#include "absl/memory/memory.h"
|
32
31
|
#include "absl/status/status.h"
|
33
32
|
#include "absl/status/statusor.h"
|
34
33
|
#include "absl/strings/string_view.h"
|
35
34
|
#include "absl/strings/strip.h"
|
36
35
|
#include "absl/types/optional.h"
|
37
36
|
|
38
|
-
#include <grpc/event_engine/event_engine.h>
|
39
37
|
#include <grpc/impl/codegen/grpc_types.h>
|
40
38
|
#include <grpc/support/alloc.h>
|
41
39
|
#include <grpc/support/log.h>
|
@@ -47,6 +45,7 @@
|
|
47
45
|
#include "src/core/lib/gprpp/memory.h"
|
48
46
|
#include "src/core/lib/gprpp/orphanable.h"
|
49
47
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
48
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
50
49
|
#include "src/core/lib/gprpp/sync.h"
|
51
50
|
#include "src/core/lib/gprpp/time.h"
|
52
51
|
#include "src/core/lib/iomgr/closure.h"
|
@@ -80,7 +79,6 @@
|
|
80
79
|
#include "src/core/lib/iomgr/gethostname.h"
|
81
80
|
#include "src/core/lib/iomgr/resolve_address.h"
|
82
81
|
#include "src/core/lib/json/json.h"
|
83
|
-
#include "src/core/lib/resolver/resolver_registry.h"
|
84
82
|
#include "src/core/lib/resolver/server_address.h"
|
85
83
|
#include "src/core/lib/service_config/service_config_impl.h"
|
86
84
|
#include "src/core/lib/transport/error_utils.h"
|
@@ -142,7 +140,7 @@ class AresClientChannelDNSResolver : public PollingResolver {
|
|
142
140
|
&service_config_json_, resolver_->query_timeout_ms_));
|
143
141
|
GRPC_CARES_TRACE_LOG(
|
144
142
|
"resolver:%p Started resolving TXT records. txt_request_:%p",
|
145
|
-
resolver_.get(),
|
143
|
+
resolver_.get(), txt_request_.get());
|
146
144
|
}
|
147
145
|
}
|
148
146
|
|
@@ -259,7 +257,7 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
|
|
259
257
|
return "";
|
260
258
|
}
|
261
259
|
if (json->type() != Json::Type::ARRAY) {
|
262
|
-
*error =
|
260
|
+
*error = GRPC_ERROR_CREATE(
|
263
261
|
"Service Config Choices, error: should be of type array");
|
264
262
|
return "";
|
265
263
|
}
|
@@ -267,7 +265,7 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
|
|
267
265
|
std::vector<grpc_error_handle> error_list;
|
268
266
|
for (const Json& choice : json->array_value()) {
|
269
267
|
if (choice.type() != Json::Type::OBJECT) {
|
270
|
-
error_list.push_back(
|
268
|
+
error_list.push_back(GRPC_ERROR_CREATE(
|
271
269
|
"Service Config Choice, error: should be of type object"));
|
272
270
|
continue;
|
273
271
|
}
|
@@ -275,7 +273,7 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
|
|
275
273
|
auto it = choice.object_value().find("clientLanguage");
|
276
274
|
if (it != choice.object_value().end()) {
|
277
275
|
if (it->second.type() != Json::Type::ARRAY) {
|
278
|
-
error_list.push_back(
|
276
|
+
error_list.push_back(GRPC_ERROR_CREATE(
|
279
277
|
"field:clientLanguage error:should be of type array"));
|
280
278
|
} else if (!ValueInJsonArray(it->second.array_value(), "c++")) {
|
281
279
|
continue;
|
@@ -285,7 +283,7 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
|
|
285
283
|
it = choice.object_value().find("clientHostname");
|
286
284
|
if (it != choice.object_value().end()) {
|
287
285
|
if (it->second.type() != Json::Type::ARRAY) {
|
288
|
-
error_list.push_back(
|
286
|
+
error_list.push_back(GRPC_ERROR_CREATE(
|
289
287
|
"field:clientHostname error:should be of type array"));
|
290
288
|
} else {
|
291
289
|
char* hostname = grpc_gethostname();
|
@@ -299,13 +297,13 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
|
|
299
297
|
it = choice.object_value().find("percentage");
|
300
298
|
if (it != choice.object_value().end()) {
|
301
299
|
if (it->second.type() != Json::Type::NUMBER) {
|
302
|
-
error_list.push_back(
|
300
|
+
error_list.push_back(GRPC_ERROR_CREATE(
|
303
301
|
"field:percentage error:should be of type number"));
|
304
302
|
} else {
|
305
303
|
int random_pct = rand() % 100;
|
306
304
|
int percentage;
|
307
305
|
if (sscanf(it->second.string_value().c_str(), "%d", &percentage) != 1) {
|
308
|
-
error_list.push_back(
|
306
|
+
error_list.push_back(GRPC_ERROR_CREATE(
|
309
307
|
"field:percentage error:should be of type integer"));
|
310
308
|
} else if (random_pct > percentage || percentage == 0) {
|
311
309
|
continue;
|
@@ -315,10 +313,10 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
|
|
315
313
|
// Found service config.
|
316
314
|
it = choice.object_value().find("serviceConfig");
|
317
315
|
if (it == choice.object_value().end()) {
|
318
|
-
error_list.push_back(
|
316
|
+
error_list.push_back(GRPC_ERROR_CREATE(
|
319
317
|
"field:serviceConfig error:required field missing"));
|
320
318
|
} else if (it->second.type() != Json::Type::OBJECT) {
|
321
|
-
error_list.push_back(
|
319
|
+
error_list.push_back(GRPC_ERROR_CREATE(
|
322
320
|
"field:serviceConfig error:should be of type object"));
|
323
321
|
} else if (service_config == nullptr) {
|
324
322
|
service_config = &it->second;
|
@@ -407,14 +405,13 @@ AresClientChannelDNSResolver::AresRequestWrapper::OnResolvedLocked(
|
|
407
405
|
result.addresses = ServerAddressList();
|
408
406
|
}
|
409
407
|
if (service_config_json_ != nullptr) {
|
410
|
-
grpc_error_handle service_config_error
|
408
|
+
grpc_error_handle service_config_error;
|
411
409
|
std::string service_config_string =
|
412
410
|
ChooseServiceConfig(service_config_json_, &service_config_error);
|
413
|
-
if (!
|
411
|
+
if (!service_config_error.ok()) {
|
414
412
|
result.service_config = absl::UnavailableError(
|
415
413
|
absl::StrCat("failed to parse service config: ",
|
416
|
-
|
417
|
-
GRPC_ERROR_UNREF(service_config_error);
|
414
|
+
StatusToString(service_config_error)));
|
418
415
|
} else if (!service_config_string.empty()) {
|
419
416
|
GRPC_CARES_TRACE_LOG("resolver:%p selected service config choice: %s",
|
420
417
|
this, service_config_string.c_str());
|
@@ -433,9 +430,9 @@ AresClientChannelDNSResolver::AresRequestWrapper::OnResolvedLocked(
|
|
433
430
|
}
|
434
431
|
} else {
|
435
432
|
GRPC_CARES_TRACE_LOG("resolver:%p dns resolution failed: %s", this,
|
436
|
-
|
433
|
+
StatusToString(error).c_str());
|
437
434
|
std::string error_message;
|
438
|
-
grpc_error_get_str(error,
|
435
|
+
grpc_error_get_str(error, StatusStrProperty::kDescription, &error_message);
|
439
436
|
absl::Status status = absl::UnavailableError(
|
440
437
|
absl::StrCat("DNS resolution failed for ", resolver_->name_to_resolve(),
|
441
438
|
": ", error_message));
|
@@ -508,7 +505,7 @@ class AresDNSResolver : public DNSResolver {
|
|
508
505
|
grpc_cancel_ares_request(grpc_ares_request_.get());
|
509
506
|
} else {
|
510
507
|
completed_ = true;
|
511
|
-
OnDnsLookupDone(this,
|
508
|
+
OnDnsLookupDone(this, absl::CancelledError());
|
512
509
|
}
|
513
510
|
grpc_pollset_set_del_pollset_set(pollset_set_, interested_parties_);
|
514
511
|
return true;
|
@@ -618,7 +615,7 @@ class AresDNSResolver : public DNSResolver {
|
|
618
615
|
|
619
616
|
void OnComplete(grpc_error_handle error) override {
|
620
617
|
GRPC_CARES_TRACE_LOG("AresHostnameRequest:%p OnComplete", this);
|
621
|
-
if (!
|
618
|
+
if (!error.ok()) {
|
622
619
|
on_resolve_address_done_(grpc_error_to_absl_status(error));
|
623
620
|
return;
|
624
621
|
}
|
@@ -668,7 +665,7 @@ class AresDNSResolver : public DNSResolver {
|
|
668
665
|
|
669
666
|
void OnComplete(grpc_error_handle error) override {
|
670
667
|
GRPC_CARES_TRACE_LOG("AresSRVRequest:%p OnComplete", this);
|
671
|
-
if (!
|
668
|
+
if (!error.ok()) {
|
672
669
|
on_resolve_address_done_(grpc_error_to_absl_status(error));
|
673
670
|
return;
|
674
671
|
}
|
@@ -716,7 +713,7 @@ class AresDNSResolver : public DNSResolver {
|
|
716
713
|
|
717
714
|
void OnComplete(grpc_error_handle error) override {
|
718
715
|
GRPC_CARES_TRACE_LOG("AresSRVRequest:%p OnComplete", this);
|
719
|
-
if (!
|
716
|
+
if (!error.ok()) {
|
720
717
|
on_resolved_(grpc_error_to_absl_status(error));
|
721
718
|
return;
|
722
719
|
}
|
@@ -729,12 +726,6 @@ class AresDNSResolver : public DNSResolver {
|
|
729
726
|
const std::function<void(absl::StatusOr<std::string>)> on_resolved_;
|
730
727
|
};
|
731
728
|
|
732
|
-
// gets the singleton instance, possibly creating it first
|
733
|
-
static AresDNSResolver* GetOrCreate() {
|
734
|
-
static AresDNSResolver* instance = new AresDNSResolver();
|
735
|
-
return instance;
|
736
|
-
}
|
737
|
-
|
738
729
|
TaskHandle LookupHostname(
|
739
730
|
std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
|
740
731
|
on_resolved,
|
@@ -812,7 +803,7 @@ class AresDNSResolver : public DNSResolver {
|
|
812
803
|
}
|
813
804
|
|
814
805
|
// the previous default DNS resolver, used to delegate blocking DNS calls to
|
815
|
-
DNSResolver
|
806
|
+
std::shared_ptr<DNSResolver> default_resolver_ = GetDNSResolver();
|
816
807
|
Mutex mu_;
|
817
808
|
grpc_event_engine::experimental::LookupTaskHandleSet open_requests_
|
818
809
|
ABSL_GUARDED_BY(mu_);
|
@@ -839,7 +830,7 @@ bool UseAresDnsResolver() {
|
|
839
830
|
void RegisterAresDnsResolver(CoreConfiguration::Builder* builder) {
|
840
831
|
if (UseAresDnsResolver()) {
|
841
832
|
builder->resolver_registry()->RegisterResolverFactory(
|
842
|
-
|
833
|
+
std::make_unique<AresClientChannelDNSResolverFactory>());
|
843
834
|
}
|
844
835
|
}
|
845
836
|
|
@@ -849,11 +840,11 @@ void grpc_resolver_dns_ares_init() {
|
|
849
840
|
if (grpc_core::UseAresDnsResolver()) {
|
850
841
|
address_sorting_init();
|
851
842
|
grpc_error_handle error = grpc_ares_init();
|
852
|
-
if (!
|
843
|
+
if (!error.ok()) {
|
853
844
|
GRPC_LOG_IF_ERROR("grpc_ares_init() failed", error);
|
854
845
|
return;
|
855
846
|
}
|
856
|
-
grpc_core::
|
847
|
+
grpc_core::ResetDNSResolver(std::make_unique<grpc_core::AresDNSResolver>());
|
857
848
|
}
|
858
849
|
}
|
859
850
|
|
@@ -21,7 +21,6 @@
|
|
21
21
|
#include <string>
|
22
22
|
|
23
23
|
#include "absl/base/thread_annotations.h"
|
24
|
-
#include "absl/memory/memory.h"
|
25
24
|
|
26
25
|
#include "src/core/lib/gprpp/sync.h"
|
27
26
|
#include "src/core/lib/iomgr/closure.h"
|
@@ -108,7 +107,7 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
|
|
108
107
|
};
|
109
108
|
|
110
109
|
std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(Mutex* /* mu */) {
|
111
|
-
return
|
110
|
+
return std::make_unique<GrpcPolledFdFactoryPosix>();
|
112
111
|
}
|
113
112
|
|
114
113
|
} // namespace grpc_core
|