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
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
-
#include <
|
19
|
+
#include <string.h>
|
20
20
|
|
21
21
|
#include <algorithm>
|
22
22
|
#include <cstdint>
|
@@ -26,7 +26,7 @@
|
|
26
26
|
#include <utility>
|
27
27
|
#include <vector>
|
28
28
|
|
29
|
-
#include "absl/
|
29
|
+
#include "absl/random/random.h"
|
30
30
|
#include "absl/status/status.h"
|
31
31
|
#include "absl/status/statusor.h"
|
32
32
|
#include "absl/strings/str_cat.h"
|
@@ -43,7 +43,6 @@
|
|
43
43
|
#include "src/core/lib/channel/channel_args.h"
|
44
44
|
#include "src/core/lib/config/core_configuration.h"
|
45
45
|
#include "src/core/lib/debug/trace.h"
|
46
|
-
#include "src/core/lib/event_engine/default_event_engine.h"
|
47
46
|
#include "src/core/lib/gprpp/debug_location.h"
|
48
47
|
#include "src/core/lib/gprpp/orphanable.h"
|
49
48
|
#include "src/core/lib/gprpp/ref_counted.h"
|
@@ -72,7 +71,6 @@ TraceFlag grpc_lb_weighted_target_trace(false, "weighted_target_lb");
|
|
72
71
|
namespace {
|
73
72
|
|
74
73
|
using ::grpc_event_engine::experimental::EventEngine;
|
75
|
-
using ::grpc_event_engine::experimental::GetDefaultEventEngine;
|
76
74
|
|
77
75
|
constexpr absl::string_view kWeightedTarget = "weighted_target_experimental";
|
78
76
|
|
@@ -143,7 +141,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
|
|
143
141
|
// range proportional to the child's weight. The start of the range
|
144
142
|
// is the previous value in the vector and is 0 for the first element.
|
145
143
|
using PickerList =
|
146
|
-
std::vector<std::pair<
|
144
|
+
std::vector<std::pair<uint64_t, RefCountedPtr<ChildPickerWrapper>>>;
|
147
145
|
|
148
146
|
explicit WeightedPicker(PickerList pickers)
|
149
147
|
: pickers_(std::move(pickers)) {}
|
@@ -152,6 +150,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
|
|
152
150
|
|
153
151
|
private:
|
154
152
|
PickerList pickers_;
|
153
|
+
absl::BitGen bit_gen_;
|
155
154
|
};
|
156
155
|
|
157
156
|
// Each WeightedChild holds a ref to its parent WeightedTargetLb.
|
@@ -193,6 +192,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
|
|
193
192
|
std::unique_ptr<SubchannelPicker> picker) override;
|
194
193
|
void RequestReresolution() override;
|
195
194
|
absl::string_view GetAuthority() override;
|
195
|
+
grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
|
196
196
|
void AddTraceEvent(TraceSeverity severity,
|
197
197
|
absl::string_view message) override;
|
198
198
|
|
@@ -227,7 +227,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
|
|
227
227
|
|
228
228
|
const std::string name_;
|
229
229
|
|
230
|
-
uint32_t weight_;
|
230
|
+
uint32_t weight_ = 0;
|
231
231
|
|
232
232
|
OrphanablePtr<LoadBalancingPolicy> child_policy_;
|
233
233
|
|
@@ -261,7 +261,8 @@ class WeightedTargetLb : public LoadBalancingPolicy {
|
|
261
261
|
WeightedTargetLb::PickResult WeightedTargetLb::WeightedPicker::Pick(
|
262
262
|
PickArgs args) {
|
263
263
|
// Generate a random number in [0, total weight).
|
264
|
-
const
|
264
|
+
const uint64_t key =
|
265
|
+
absl::Uniform<uint64_t>(bit_gen_, 0, pickers_.back().first);
|
265
266
|
// Find the index in pickers_ corresponding to key.
|
266
267
|
size_t mid = 0;
|
267
268
|
size_t start_index = 0;
|
@@ -363,7 +364,7 @@ absl::Status WeightedTargetLb::UpdateLocked(UpdateArgs args) {
|
|
363
364
|
"no children in weighted_target policy: ", args.resolution_note));
|
364
365
|
channel_control_helper()->UpdateState(
|
365
366
|
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
366
|
-
|
367
|
+
std::make_unique<TransientFailurePicker>(status));
|
367
368
|
return absl::OkStatus();
|
368
369
|
}
|
369
370
|
UpdateStateLocked();
|
@@ -394,9 +395,9 @@ void WeightedTargetLb::UpdateStateLocked() {
|
|
394
395
|
// the range proportional to its weight, such that the total range is the
|
395
396
|
// sum of the weights of all children.
|
396
397
|
WeightedPicker::PickerList ready_picker_list;
|
397
|
-
|
398
|
+
uint64_t ready_end = 0;
|
398
399
|
WeightedPicker::PickerList tf_picker_list;
|
399
|
-
|
400
|
+
uint64_t tf_end = 0;
|
400
401
|
// Also count the number of children in CONNECTING and IDLE, to determine
|
401
402
|
// the aggregated state.
|
402
403
|
size_t num_connecting = 0;
|
@@ -410,7 +411,7 @@ void WeightedTargetLb::UpdateStateLocked() {
|
|
410
411
|
}
|
411
412
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_weighted_target_trace)) {
|
412
413
|
gpr_log(GPR_INFO,
|
413
|
-
"[weighted_target_lb %p] child=%s state=%s weight=%
|
414
|
+
"[weighted_target_lb %p] child=%s state=%s weight=%u picker=%p",
|
414
415
|
this, child_name.c_str(),
|
415
416
|
ConnectivityStateName(child->connectivity_state()),
|
416
417
|
child->weight(), child->picker_wrapper().get());
|
@@ -437,7 +438,7 @@ void WeightedTargetLb::UpdateStateLocked() {
|
|
437
438
|
break;
|
438
439
|
}
|
439
440
|
default:
|
440
|
-
GPR_UNREACHABLE_CODE(return
|
441
|
+
GPR_UNREACHABLE_CODE(return);
|
441
442
|
}
|
442
443
|
}
|
443
444
|
// Determine aggregated connectivity state.
|
@@ -459,15 +460,15 @@ void WeightedTargetLb::UpdateStateLocked() {
|
|
459
460
|
absl::Status status;
|
460
461
|
switch (connectivity_state) {
|
461
462
|
case GRPC_CHANNEL_READY:
|
462
|
-
picker =
|
463
|
+
picker = std::make_unique<WeightedPicker>(std::move(ready_picker_list));
|
463
464
|
break;
|
464
465
|
case GRPC_CHANNEL_CONNECTING:
|
465
466
|
case GRPC_CHANNEL_IDLE:
|
466
467
|
picker =
|
467
|
-
|
468
|
+
std::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
|
468
469
|
break;
|
469
470
|
default:
|
470
|
-
picker =
|
471
|
+
picker = std::make_unique<WeightedPicker>(std::move(tf_picker_list));
|
471
472
|
}
|
472
473
|
channel_control_helper()->UpdateState(connectivity_state, status,
|
473
474
|
std::move(picker));
|
@@ -480,14 +481,18 @@ void WeightedTargetLb::UpdateStateLocked() {
|
|
480
481
|
WeightedTargetLb::WeightedChild::DelayedRemovalTimer::DelayedRemovalTimer(
|
481
482
|
RefCountedPtr<WeightedTargetLb::WeightedChild> weighted_child)
|
482
483
|
: weighted_child_(std::move(weighted_child)) {
|
483
|
-
timer_handle_ =
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
484
|
+
timer_handle_ =
|
485
|
+
weighted_child_->weighted_target_policy_->channel_control_helper()
|
486
|
+
->GetEventEngine()
|
487
|
+
->RunAfter(kChildRetentionInterval, [self = Ref()]() mutable {
|
488
|
+
ApplicationCallbackExecCtx app_exec_ctx;
|
489
|
+
ExecCtx exec_ctx;
|
490
|
+
auto* self_ptr = self.get(); // Avoid use-after-move problem.
|
491
|
+
self_ptr->weighted_child_->weighted_target_policy_
|
492
|
+
->work_serializer()
|
493
|
+
->Run([self = std::move(self)] { self->OnTimerLocked(); },
|
494
|
+
DEBUG_LOCATION);
|
495
|
+
});
|
491
496
|
}
|
492
497
|
|
493
498
|
void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::Orphan() {
|
@@ -499,7 +504,9 @@ void WeightedTargetLb::WeightedChild::DelayedRemovalTimer::Orphan() {
|
|
499
504
|
weighted_child_->weighted_target_policy_.get(),
|
500
505
|
weighted_child_.get(), weighted_child_->name_.c_str());
|
501
506
|
}
|
502
|
-
|
507
|
+
weighted_child_->weighted_target_policy_->channel_control_helper()
|
508
|
+
->GetEventEngine()
|
509
|
+
->Cancel(*timer_handle_);
|
503
510
|
}
|
504
511
|
Unref();
|
505
512
|
}
|
@@ -560,7 +567,7 @@ WeightedTargetLb::WeightedChild::CreateChildPolicyLocked(
|
|
560
567
|
lb_policy_args.work_serializer = weighted_target_policy_->work_serializer();
|
561
568
|
lb_policy_args.args = args;
|
562
569
|
lb_policy_args.channel_control_helper =
|
563
|
-
|
570
|
+
std::make_unique<Helper>(this->Ref(DEBUG_LOCATION, "Helper"));
|
564
571
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
565
572
|
MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
|
566
573
|
&grpc_lb_weighted_target_trace);
|
@@ -586,6 +593,11 @@ absl::Status WeightedTargetLb::WeightedChild::UpdateLocked(
|
|
586
593
|
const std::string& resolution_note, const ChannelArgs& args) {
|
587
594
|
if (weighted_target_policy_->shutting_down_) return absl::OkStatus();
|
588
595
|
// Update child weight.
|
596
|
+
if (weight_ != config.weight &&
|
597
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_lb_weighted_target_trace)) {
|
598
|
+
gpr_log(GPR_INFO, "[weighted_target_lb %p] WeightedChild %p %s: weight=%u",
|
599
|
+
weighted_target_policy_.get(), this, name_.c_str(), config.weight);
|
600
|
+
}
|
589
601
|
weight_ = config.weight;
|
590
602
|
// Reactivate if needed.
|
591
603
|
if (delayed_removal_timer_ != nullptr) {
|
@@ -693,6 +705,12 @@ absl::string_view WeightedTargetLb::WeightedChild::Helper::GetAuthority() {
|
|
693
705
|
->GetAuthority();
|
694
706
|
}
|
695
707
|
|
708
|
+
grpc_event_engine::experimental::EventEngine*
|
709
|
+
WeightedTargetLb::WeightedChild::Helper::GetEventEngine() {
|
710
|
+
return weighted_child_->weighted_target_policy_->channel_control_helper()
|
711
|
+
->GetEventEngine();
|
712
|
+
}
|
713
|
+
|
696
714
|
void WeightedTargetLb::WeightedChild::Helper::AddTraceEvent(
|
697
715
|
TraceSeverity severity, absl::string_view message) {
|
698
716
|
if (weighted_child_->weighted_target_policy_->shutting_down_) return;
|
@@ -769,7 +787,7 @@ class WeightedTargetLbFactory : public LoadBalancingPolicyFactory {
|
|
769
787
|
|
770
788
|
void RegisterWeightedTargetLbPolicy(CoreConfiguration::Builder* builder) {
|
771
789
|
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
772
|
-
|
790
|
+
std::make_unique<WeightedTargetLbFactory>());
|
773
791
|
}
|
774
792
|
|
775
793
|
} // namespace grpc_core
|
@@ -24,13 +24,13 @@
|
|
24
24
|
#include <utility>
|
25
25
|
#include <vector>
|
26
26
|
|
27
|
-
#include "absl/memory/memory.h"
|
28
27
|
#include "absl/status/status.h"
|
29
28
|
#include "absl/status/statusor.h"
|
30
29
|
#include "absl/strings/str_cat.h"
|
31
30
|
#include "absl/strings/string_view.h"
|
32
31
|
#include "absl/types/optional.h"
|
33
32
|
|
33
|
+
#include <grpc/event_engine/event_engine.h>
|
34
34
|
#include <grpc/grpc.h>
|
35
35
|
#include <grpc/grpc_security.h>
|
36
36
|
#include <grpc/impl/codegen/connectivity_state.h>
|
@@ -38,13 +38,10 @@
|
|
38
38
|
|
39
39
|
#include "src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h"
|
40
40
|
#include "src/core/ext/xds/certificate_provider_store.h"
|
41
|
-
#include "src/core/ext/xds/xds_bootstrap_grpc.h"
|
42
41
|
#include "src/core/ext/xds/xds_certificate_provider.h"
|
43
|
-
#include "src/core/ext/xds/xds_client.h"
|
44
42
|
#include "src/core/ext/xds/xds_client_grpc.h"
|
45
43
|
#include "src/core/ext/xds/xds_cluster.h"
|
46
44
|
#include "src/core/ext/xds/xds_common_types.h"
|
47
|
-
#include "src/core/ext/xds/xds_resource_type_impl.h"
|
48
45
|
#include "src/core/lib/channel/channel_args.h"
|
49
46
|
#include "src/core/lib/config/core_configuration.h"
|
50
47
|
#include "src/core/lib/debug/trace.h"
|
@@ -177,6 +174,7 @@ class CdsLb : public LoadBalancingPolicy {
|
|
177
174
|
std::unique_ptr<SubchannelPicker> picker) override;
|
178
175
|
void RequestReresolution() override;
|
179
176
|
absl::string_view GetAuthority() override;
|
177
|
+
grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
|
180
178
|
void AddTraceEvent(TraceSeverity severity,
|
181
179
|
absl::string_view message) override;
|
182
180
|
|
@@ -264,6 +262,10 @@ absl::string_view CdsLb::Helper::GetAuthority() {
|
|
264
262
|
return parent_->channel_control_helper()->GetAuthority();
|
265
263
|
}
|
266
264
|
|
265
|
+
grpc_event_engine::experimental::EventEngine* CdsLb::Helper::GetEventEngine() {
|
266
|
+
return parent_->channel_control_helper()->GetEventEngine();
|
267
|
+
}
|
268
|
+
|
267
269
|
void CdsLb::Helper::AddTraceEvent(TraceSeverity severity,
|
268
270
|
absl::string_view message) {
|
269
271
|
if (parent_->shutting_down_) return;
|
@@ -505,27 +507,15 @@ void CdsLb::OnClusterChanged(const std::string& name,
|
|
505
507
|
// underlying cluster that we may be processing an update for.
|
506
508
|
auto it = watchers_.find(config_->cluster());
|
507
509
|
GPR_ASSERT(it != watchers_.end());
|
508
|
-
const std::string& lb_policy = it->second.update->lb_policy;
|
509
510
|
// Construct config for child policy.
|
510
|
-
Json::Object xds_lb_policy;
|
511
|
-
if (lb_policy == "RING_HASH") {
|
512
|
-
xds_lb_policy["RING_HASH"] = Json::Object{
|
513
|
-
{"min_ring_size", cluster_data.min_ring_size},
|
514
|
-
{"max_ring_size", cluster_data.max_ring_size},
|
515
|
-
};
|
516
|
-
} else {
|
517
|
-
xds_lb_policy["ROUND_ROBIN"] = Json::Object();
|
518
|
-
}
|
519
|
-
Json::Object child_config = {
|
520
|
-
{"xdsLbPolicy",
|
521
|
-
Json::Array{
|
522
|
-
xds_lb_policy,
|
523
|
-
}},
|
524
|
-
{"discoveryMechanisms", std::move(discovery_mechanisms)},
|
525
|
-
};
|
526
511
|
Json json = Json::Array{
|
527
512
|
Json::Object{
|
528
|
-
{"xds_cluster_resolver_experimental",
|
513
|
+
{"xds_cluster_resolver_experimental",
|
514
|
+
Json::Object{
|
515
|
+
{"xdsLbPolicy",
|
516
|
+
std::move(it->second.update->lb_policy_config)},
|
517
|
+
{"discoveryMechanisms", std::move(discovery_mechanisms)},
|
518
|
+
}},
|
529
519
|
},
|
530
520
|
};
|
531
521
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
|
@@ -533,7 +523,7 @@ void CdsLb::OnClusterChanged(const std::string& name,
|
|
533
523
|
gpr_log(GPR_INFO, "[cdslb %p] generated config for child policy: %s",
|
534
524
|
this, json_str.c_str());
|
535
525
|
}
|
536
|
-
grpc_error_handle error
|
526
|
+
grpc_error_handle error;
|
537
527
|
auto config =
|
538
528
|
CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
|
539
529
|
json);
|
@@ -546,7 +536,7 @@ void CdsLb::OnClusterChanged(const std::string& name,
|
|
546
536
|
LoadBalancingPolicy::Args args;
|
547
537
|
args.work_serializer = work_serializer();
|
548
538
|
args.args = args_;
|
549
|
-
args.channel_control_helper =
|
539
|
+
args.channel_control_helper = std::make_unique<Helper>(Ref());
|
550
540
|
child_policy_ =
|
551
541
|
CoreConfiguration::Get()
|
552
542
|
.lb_policy_registry()
|
@@ -600,7 +590,7 @@ void CdsLb::OnError(const std::string& name, absl::Status status) {
|
|
600
590
|
if (child_policy_ == nullptr) {
|
601
591
|
channel_control_helper()->UpdateState(
|
602
592
|
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
603
|
-
|
593
|
+
std::make_unique<TransientFailurePicker>(absl::UnavailableError(
|
604
594
|
absl::StrCat(name, ": ", status.ToString()))));
|
605
595
|
}
|
606
596
|
}
|
@@ -614,7 +604,7 @@ void CdsLb::OnResourceDoesNotExist(const std::string& name) {
|
|
614
604
|
absl::StrCat("CDS resource \"", config_->cluster(), "\" does not exist"));
|
615
605
|
channel_control_helper()->UpdateState(
|
616
606
|
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
617
|
-
|
607
|
+
std::make_unique<TransientFailurePicker>(status));
|
618
608
|
MaybeDestroyChildPolicyLocked();
|
619
609
|
}
|
620
610
|
|
@@ -766,7 +756,7 @@ class CdsLbFactory : public LoadBalancingPolicyFactory {
|
|
766
756
|
|
767
757
|
void RegisterCdsLbPolicy(CoreConfiguration::Builder* builder) {
|
768
758
|
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
769
|
-
|
759
|
+
std::make_unique<CdsLbFactory>());
|
770
760
|
}
|
771
761
|
|
772
762
|
} // namespace grpc_core
|
@@ -0,0 +1,42 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2018 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 "src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h"
|
20
|
+
|
21
|
+
#include "absl/strings/str_cat.h"
|
22
|
+
|
23
|
+
#include "src/core/lib/gpr/useful.h"
|
24
|
+
|
25
|
+
namespace grpc_core {
|
26
|
+
|
27
|
+
const char* kXdsLocalityNameAttributeKey = "xds_locality_name";
|
28
|
+
|
29
|
+
int XdsLocalityAttribute::Cmp(const AttributeInterface* other) const {
|
30
|
+
const auto* other_locality_attr =
|
31
|
+
static_cast<const XdsLocalityAttribute*>(other);
|
32
|
+
int r = locality_name_->Compare(*other_locality_attr->locality_name_);
|
33
|
+
if (r != 0) return r;
|
34
|
+
return QsortCompare(weight_, other_locality_attr->weight_);
|
35
|
+
}
|
36
|
+
|
37
|
+
std::string XdsLocalityAttribute::ToString() const {
|
38
|
+
return absl::StrCat("{name=", locality_name_->AsHumanReadableString(),
|
39
|
+
", weight=", weight_, "}");
|
40
|
+
}
|
41
|
+
|
42
|
+
} // namespace grpc_core
|
@@ -14,53 +14,51 @@
|
|
14
14
|
// limitations under the License.
|
15
15
|
//
|
16
16
|
|
17
|
-
#ifndef
|
18
|
-
#define
|
17
|
+
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_ATTRIBUTES_H
|
18
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_ATTRIBUTES_H
|
19
19
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
22
|
+
#include <stdint.h>
|
23
|
+
|
22
24
|
#include <memory>
|
23
25
|
#include <string>
|
24
26
|
#include <utility>
|
25
27
|
|
26
|
-
#include "absl/memory/memory.h"
|
27
|
-
|
28
28
|
#include "src/core/ext/xds/xds_client_stats.h"
|
29
29
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
30
30
|
#include "src/core/lib/resolver/server_address.h"
|
31
31
|
|
32
32
|
namespace grpc_core {
|
33
33
|
|
34
|
-
// Defined in the EDS policy.
|
35
34
|
extern const char* kXdsLocalityNameAttributeKey;
|
36
35
|
|
37
36
|
class XdsLocalityAttribute : public ServerAddress::AttributeInterface {
|
38
37
|
public:
|
39
|
-
|
40
|
-
|
38
|
+
XdsLocalityAttribute(RefCountedPtr<XdsLocalityName> locality_name,
|
39
|
+
uint32_t weight)
|
40
|
+
: locality_name_(std::move(locality_name)), weight_(weight) {}
|
41
41
|
|
42
42
|
RefCountedPtr<XdsLocalityName> locality_name() const {
|
43
43
|
return locality_name_;
|
44
44
|
}
|
45
45
|
|
46
|
+
uint32_t weight() const { return weight_; }
|
47
|
+
|
46
48
|
std::unique_ptr<AttributeInterface> Copy() const override {
|
47
|
-
return
|
49
|
+
return std::make_unique<XdsLocalityAttribute>(locality_name_->Ref(),
|
50
|
+
weight_);
|
48
51
|
}
|
49
52
|
|
50
|
-
int Cmp(const AttributeInterface* other) const override
|
51
|
-
const auto* other_locality_attr =
|
52
|
-
static_cast<const XdsLocalityAttribute*>(other);
|
53
|
-
return locality_name_->Compare(*other_locality_attr->locality_name_);
|
54
|
-
}
|
53
|
+
int Cmp(const AttributeInterface* other) const override;
|
55
54
|
|
56
|
-
std::string ToString() const override
|
57
|
-
return locality_name_->AsHumanReadableString();
|
58
|
-
}
|
55
|
+
std::string ToString() const override;
|
59
56
|
|
60
57
|
private:
|
61
58
|
RefCountedPtr<XdsLocalityName> locality_name_;
|
59
|
+
uint32_t weight_;
|
62
60
|
};
|
63
61
|
|
64
62
|
} // namespace grpc_core
|
65
63
|
|
66
|
-
#endif
|
64
|
+
#endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_ATTRIBUTES_H
|
@@ -27,7 +27,6 @@
|
|
27
27
|
#include <vector>
|
28
28
|
|
29
29
|
#include "absl/base/thread_annotations.h"
|
30
|
-
#include "absl/memory/memory.h"
|
31
30
|
#include "absl/status/status.h"
|
32
31
|
#include "absl/status/statusor.h"
|
33
32
|
#include "absl/strings/str_cat.h"
|
@@ -35,11 +34,12 @@
|
|
35
34
|
#include "absl/types/optional.h"
|
36
35
|
#include "absl/types/variant.h"
|
37
36
|
|
37
|
+
#include <grpc/event_engine/event_engine.h>
|
38
38
|
#include <grpc/impl/codegen/connectivity_state.h>
|
39
39
|
#include <grpc/support/log.h>
|
40
40
|
|
41
41
|
#include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
|
42
|
-
#include "src/core/ext/filters/client_channel/lb_policy/xds/
|
42
|
+
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h"
|
43
43
|
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
|
44
44
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
45
45
|
#include "src/core/ext/xds/xds_bootstrap_grpc.h"
|
@@ -254,6 +254,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
|
|
254
254
|
std::unique_ptr<SubchannelPicker> picker) override;
|
255
255
|
void RequestReresolution() override;
|
256
256
|
absl::string_view GetAuthority() override;
|
257
|
+
grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
|
257
258
|
void AddTraceEvent(TraceSeverity severity,
|
258
259
|
absl::string_view message) override;
|
259
260
|
|
@@ -418,7 +419,7 @@ LoadBalancingPolicy::PickResult XdsClusterImplLb::Picker::Pick(
|
|
418
419
|
}
|
419
420
|
// Inject subchannel call tracker to record call completion.
|
420
421
|
complete_pick->subchannel_call_tracker =
|
421
|
-
|
422
|
+
std::make_unique<SubchannelCallTracker>(
|
422
423
|
std::move(complete_pick->subchannel_call_tracker),
|
423
424
|
std::move(locality_stats),
|
424
425
|
call_counter_->Ref(DEBUG_LOCATION, "SubchannelCallTracker"));
|
@@ -531,7 +532,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
|
|
531
532
|
// If we're dropping all calls, report READY, regardless of what (or
|
532
533
|
// whether) the child has reported.
|
533
534
|
if (config_->drop_config() != nullptr && config_->drop_config()->drop_all()) {
|
534
|
-
auto drop_picker =
|
535
|
+
auto drop_picker = std::make_unique<Picker>(this, picker_);
|
535
536
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
|
536
537
|
gpr_log(GPR_INFO,
|
537
538
|
"[xds_cluster_impl_lb %p] updating connectivity (drop all): "
|
@@ -544,7 +545,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
|
|
544
545
|
}
|
545
546
|
// Otherwise, update only if we have a child picker.
|
546
547
|
if (picker_ != nullptr) {
|
547
|
-
auto drop_picker =
|
548
|
+
auto drop_picker = std::make_unique<Picker>(this, picker_);
|
548
549
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
|
549
550
|
gpr_log(GPR_INFO,
|
550
551
|
"[xds_cluster_impl_lb %p] updating connectivity: state=%s "
|
@@ -563,7 +564,7 @@ OrphanablePtr<LoadBalancingPolicy> XdsClusterImplLb::CreateChildPolicyLocked(
|
|
563
564
|
lb_policy_args.work_serializer = work_serializer();
|
564
565
|
lb_policy_args.args = args;
|
565
566
|
lb_policy_args.channel_control_helper =
|
566
|
-
|
567
|
+
std::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
|
567
568
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
568
569
|
MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
|
569
570
|
&grpc_xds_cluster_impl_lb_trace);
|
@@ -680,6 +681,11 @@ absl::string_view XdsClusterImplLb::Helper::GetAuthority() {
|
|
680
681
|
return xds_cluster_impl_policy_->channel_control_helper()->GetAuthority();
|
681
682
|
}
|
682
683
|
|
684
|
+
grpc_event_engine::experimental::EventEngine*
|
685
|
+
XdsClusterImplLb::Helper::GetEventEngine() {
|
686
|
+
return xds_cluster_impl_policy_->channel_control_helper()->GetEventEngine();
|
687
|
+
}
|
688
|
+
|
683
689
|
void XdsClusterImplLb::Helper::AddTraceEvent(TraceSeverity severity,
|
684
690
|
absl::string_view message) {
|
685
691
|
if (xds_cluster_impl_policy_->shutting_down_) return;
|
@@ -794,7 +800,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
|
|
794
800
|
|
795
801
|
void RegisterXdsClusterImplLbPolicy(CoreConfiguration::Builder* builder) {
|
796
802
|
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
797
|
-
|
803
|
+
std::make_unique<XdsClusterImplLbFactory>());
|
798
804
|
}
|
799
805
|
|
800
806
|
} // namespace grpc_core
|