grpc 1.46.3-x86_64-linux → 1.47.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 +49 -97
- data/include/grpc/event_engine/event_engine.h +42 -7
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +112 -0
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +100 -36
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
- data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
- data/src/core/ext/filters/client_channel/client_channel.h +26 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +7 -5
- data/src/core/ext/filters/client_channel/connector.h +8 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
- data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
- data/src/core/ext/filters/client_channel/subchannel.h +80 -20
- data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
- data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
- data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -2
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
- data/src/core/ext/xds/xds_client.cc +46 -22
- data/src/core/ext/xds/xds_cluster.cc +106 -16
- data/src/core/ext/xds/xds_cluster.h +3 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
- data/src/core/ext/xds/xds_listener.cc +19 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
- data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
- data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
- data/src/core/lib/avl/avl.h +3 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +8 -2
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +33 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_stack.cc +41 -3
- data/src/core/lib/channel/channel_stack.h +49 -3
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +15 -27
- data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +8 -13
- data/src/core/lib/channel/channelz.h +13 -4
- data/src/core/lib/channel/channelz_registry.cc +7 -14
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +21 -31
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +444 -189
- data/src/core/lib/channel/promise_based_filter.h +160 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression_internal.cc +45 -10
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +12 -2
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
- data/src/core/lib/event_engine/iomgr_engine.h +118 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +8 -4
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +6 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +29 -0
- data/src/core/lib/http/format_request.h +2 -0
- data/src/core/lib/http/httpcli.cc +88 -81
- data/src/core/lib/http/httpcli.h +39 -7
- data/src/core/lib/http/httpcli_security_connector.cc +3 -4
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +6 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/ev_posix.cc +1 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +0 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- data/src/core/lib/iomgr/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
- data/src/core/lib/iomgr/tcp_posix.cc +9 -27
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
- data/src/core/lib/iomgr/tcp_windows.cc +7 -4
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +2 -0
- data/src/core/lib/promise/sleep.h +10 -0
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver_factory.h +1 -2
- data/src/core/lib/resolver/server_address.cc +9 -3
- data/src/core/lib/resolver/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +47 -5
- data/src/core/lib/resource_quota/memory_quota.h +24 -5
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
- data/src/core/lib/security/credentials/credentials.h +17 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
- data/src/core/lib/security/transport/security_handshaker.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +4 -1
- data/src/core/lib/service_config/service_config_impl.cc +7 -0
- data/src/core/lib/service_config/service_config_impl.h +9 -2
- data/src/core/lib/service_config/service_config_parser.cc +8 -0
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +50 -23
- data/src/core/lib/slice/slice_buffer.h +106 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_split.cc +3 -0
- data/src/core/lib/slice/slice_split.h +0 -4
- data/src/core/lib/slice/slice_string_helpers.cc +4 -0
- data/src/core/lib/slice/slice_string_helpers.h +1 -4
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +41 -26
- data/src/core/lib/surface/call.h +16 -2
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +94 -57
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +14 -6
- data/src/core/lib/surface/completion_queue.h +5 -1
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -45
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +64 -110
- data/src/core/lib/surface/lame_client.h +40 -2
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +69 -56
- data/src/core/lib/surface/server.h +39 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -5
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/byte_stream.cc +4 -3
- data/src/core/lib/transport/byte_stream.h +5 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +4 -2
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -17
- data/src/core/lib/transport/transport.h +28 -2
- data/src/core/lib/transport/transport_impl.h +10 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -10
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +2 -2
- data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
- 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/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/abseil-cpp/absl/container/flat_hash_set.h +504 -0
- metadata +36 -29
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/promise.h +0 -51
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -26,8 +26,10 @@
|
|
26
26
|
|
27
27
|
#include <string>
|
28
28
|
|
29
|
+
#include "absl/status/status.h"
|
29
30
|
#include "absl/strings/str_cat.h"
|
30
31
|
#include "absl/strings/str_format.h"
|
32
|
+
#include "absl/strings/str_replace.h"
|
31
33
|
|
32
34
|
#include <grpc/support/alloc.h>
|
33
35
|
#include <grpc/support/log.h>
|
@@ -36,33 +38,41 @@
|
|
36
38
|
#include "src/core/lib/gprpp/host_port.h"
|
37
39
|
#include "src/core/lib/iomgr/sockaddr.h"
|
38
40
|
#include "src/core/lib/iomgr/socket_utils.h"
|
41
|
+
#include "src/core/lib/uri/uri_parser.h"
|
39
42
|
|
40
43
|
#ifdef GRPC_HAVE_UNIX_SOCKET
|
41
44
|
#include <sys/un.h>
|
42
45
|
#endif
|
43
46
|
|
44
47
|
#ifdef GRPC_HAVE_UNIX_SOCKET
|
45
|
-
static std::string grpc_sockaddr_to_uri_unix_if_possible(
|
48
|
+
static absl::StatusOr<std::string> grpc_sockaddr_to_uri_unix_if_possible(
|
46
49
|
const grpc_resolved_address* resolved_addr) {
|
47
50
|
const grpc_sockaddr* addr =
|
48
51
|
reinterpret_cast<const grpc_sockaddr*>(resolved_addr->addr);
|
49
52
|
if (addr->sa_family != AF_UNIX) {
|
50
|
-
return
|
53
|
+
return absl::InvalidArgumentError(
|
54
|
+
absl::StrCat("Socket family is not AF_UNIX: ", addr->sa_family));
|
51
55
|
}
|
52
56
|
const auto* unix_addr = reinterpret_cast<const struct sockaddr_un*>(addr);
|
57
|
+
std::string scheme, path;
|
53
58
|
if (unix_addr->sun_path[0] == '\0' && unix_addr->sun_path[1] != '\0') {
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
+
scheme = "unix-abstract";
|
60
|
+
path = std::string(unix_addr->sun_path + 1,
|
61
|
+
resolved_addr->len - sizeof(unix_addr->sun_family) - 1);
|
62
|
+
} else {
|
63
|
+
scheme = "unix";
|
64
|
+
path = unix_addr->sun_path;
|
59
65
|
}
|
60
|
-
|
66
|
+
absl::StatusOr<grpc_core::URI> uri = grpc_core::URI::Create(
|
67
|
+
std::move(scheme), /*authority=*/"", std::move(path),
|
68
|
+
/*query_parameter_pairs=*/{}, /*fragment=*/"");
|
69
|
+
if (!uri.ok()) return uri.status();
|
70
|
+
return uri->ToString();
|
61
71
|
}
|
62
72
|
#else
|
63
|
-
static std::string grpc_sockaddr_to_uri_unix_if_possible(
|
73
|
+
static absl::StatusOr<std::string> grpc_sockaddr_to_uri_unix_if_possible(
|
64
74
|
const grpc_resolved_address* /* addr */) {
|
65
|
-
return "";
|
75
|
+
return absl::InvalidArgumentError("Unix socket is not supported.");
|
66
76
|
}
|
67
77
|
#endif
|
68
78
|
|
@@ -182,8 +192,8 @@ void grpc_sockaddr_make_wildcard6(int port,
|
|
182
192
|
resolved_wild_out->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
|
183
193
|
}
|
184
194
|
|
185
|
-
std::string grpc_sockaddr_to_string(
|
186
|
-
|
195
|
+
absl::StatusOr<std::string> grpc_sockaddr_to_string(
|
196
|
+
const grpc_resolved_address* resolved_addr, bool normalize) {
|
187
197
|
const int save_errno = errno;
|
188
198
|
grpc_resolved_address addr_normalized;
|
189
199
|
if (normalize && grpc_sockaddr_is_v4mapped(resolved_addr, &addr_normalized)) {
|
@@ -191,6 +201,28 @@ std::string grpc_sockaddr_to_string(const grpc_resolved_address* resolved_addr,
|
|
191
201
|
}
|
192
202
|
const grpc_sockaddr* addr =
|
193
203
|
reinterpret_cast<const grpc_sockaddr*>(resolved_addr->addr);
|
204
|
+
std::string out;
|
205
|
+
#ifdef GRPC_HAVE_UNIX_SOCKET
|
206
|
+
if (addr->sa_family == GRPC_AF_UNIX) {
|
207
|
+
const sockaddr_un* addr_un = reinterpret_cast<const sockaddr_un*>(addr);
|
208
|
+
bool abstract = addr_un->sun_path[0] == '\0';
|
209
|
+
if (abstract) {
|
210
|
+
int len = resolved_addr->len - sizeof(addr->sa_family);
|
211
|
+
if (len <= 0) {
|
212
|
+
return absl::InvalidArgumentError("empty UDS abstract path");
|
213
|
+
}
|
214
|
+
out = std::string(addr_un->sun_path, len);
|
215
|
+
} else {
|
216
|
+
size_t maxlen = sizeof(addr_un->sun_path);
|
217
|
+
if (strnlen(addr_un->sun_path, maxlen) == maxlen) {
|
218
|
+
return absl::InvalidArgumentError("UDS path is not null-terminated");
|
219
|
+
}
|
220
|
+
out = std::string(addr_un->sun_path);
|
221
|
+
}
|
222
|
+
return out;
|
223
|
+
}
|
224
|
+
#endif
|
225
|
+
|
194
226
|
const void* ip = nullptr;
|
195
227
|
int port = 0;
|
196
228
|
uint32_t sin6_scope_id = 0;
|
@@ -207,7 +239,6 @@ std::string grpc_sockaddr_to_string(const grpc_resolved_address* resolved_addr,
|
|
207
239
|
sin6_scope_id = addr6->sin6_scope_id;
|
208
240
|
}
|
209
241
|
char ntop_buf[GRPC_INET6_ADDRSTRLEN];
|
210
|
-
std::string out;
|
211
242
|
if (ip != nullptr && grpc_inet_ntop(addr->sa_family, ip, ntop_buf,
|
212
243
|
sizeof(ntop_buf)) != nullptr) {
|
213
244
|
if (sin6_scope_id != 0) {
|
@@ -219,15 +250,19 @@ std::string grpc_sockaddr_to_string(const grpc_resolved_address* resolved_addr,
|
|
219
250
|
out = grpc_core::JoinHostPort(ntop_buf, port);
|
220
251
|
}
|
221
252
|
} else {
|
222
|
-
|
253
|
+
return absl::InvalidArgumentError(
|
254
|
+
absl::StrCat("Unknown sockaddr family: ", addr->sa_family));
|
223
255
|
}
|
224
256
|
/* This is probably redundant, but we wouldn't want to log the wrong error. */
|
225
257
|
errno = save_errno;
|
226
258
|
return out;
|
227
259
|
}
|
228
260
|
|
229
|
-
std::string grpc_sockaddr_to_uri(
|
230
|
-
|
261
|
+
absl::StatusOr<std::string> grpc_sockaddr_to_uri(
|
262
|
+
const grpc_resolved_address* resolved_addr) {
|
263
|
+
if (resolved_addr->len == 0) {
|
264
|
+
return absl::InvalidArgumentError("Empty address");
|
265
|
+
}
|
231
266
|
grpc_resolved_address addr_normalized;
|
232
267
|
if (grpc_sockaddr_is_v4mapped(resolved_addr, &addr_normalized)) {
|
233
268
|
resolved_addr = &addr_normalized;
|
@@ -236,13 +271,11 @@ std::string grpc_sockaddr_to_uri(const grpc_resolved_address* resolved_addr) {
|
|
236
271
|
if (scheme == nullptr || strcmp("unix", scheme) == 0) {
|
237
272
|
return grpc_sockaddr_to_uri_unix_if_possible(resolved_addr);
|
238
273
|
}
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
if (
|
243
|
-
|
244
|
-
}
|
245
|
-
return uri_str;
|
274
|
+
// TODO(anramach): Encode the string using URI::Create() and URI::ToString()
|
275
|
+
// before returning.
|
276
|
+
auto path = grpc_sockaddr_to_string(resolved_addr, false /* normalize */);
|
277
|
+
if (!path.ok()) return path;
|
278
|
+
return absl::StrCat(scheme, ":", path.value());
|
246
279
|
}
|
247
280
|
|
248
281
|
const char* grpc_sockaddr_get_uri_scheme(
|
@@ -23,6 +23,8 @@
|
|
23
23
|
|
24
24
|
#include <string>
|
25
25
|
|
26
|
+
#include "absl/status/statusor.h"
|
27
|
+
|
26
28
|
#include "src/core/lib/iomgr/resolved_address.h"
|
27
29
|
|
28
30
|
/* Returns true if addr is an IPv4-mapped IPv6 address within the
|
@@ -60,14 +62,15 @@ int grpc_sockaddr_set_port(grpc_resolved_address* addr, int port);
|
|
60
62
|
|
61
63
|
// Converts a sockaddr into a newly-allocated human-readable string.
|
62
64
|
//
|
63
|
-
// Currently, only the AF_INET and
|
65
|
+
// Currently, only the AF_INET, AF_INET6, and AF_UNIX families are recognized.
|
64
66
|
// If the normalize flag is enabled, ::ffff:0.0.0.0/96 IPv6 addresses are
|
65
67
|
// displayed as plain IPv4.
|
66
|
-
std::string grpc_sockaddr_to_string(
|
67
|
-
|
68
|
+
absl::StatusOr<std::string> grpc_sockaddr_to_string(
|
69
|
+
const grpc_resolved_address* addr, bool normalize) GRPC_MUST_USE_RESULT;
|
68
70
|
|
69
71
|
/* Returns the URI string corresponding to \a addr */
|
70
|
-
std::string grpc_sockaddr_to_uri(
|
72
|
+
absl::StatusOr<std::string> grpc_sockaddr_to_uri(
|
73
|
+
const grpc_resolved_address* addr);
|
71
74
|
|
72
75
|
/* Returns the URI scheme corresponding to \a addr */
|
73
76
|
const char* grpc_sockaddr_get_uri_scheme(const grpc_resolved_address* addr);
|
data/src/core/lib/avl/avl.h
CHANGED
@@ -19,8 +19,8 @@
|
|
19
19
|
|
20
20
|
#include <stdlib.h>
|
21
21
|
|
22
|
-
#include <algorithm>
|
23
22
|
#include <memory>
|
23
|
+
#include <utility>
|
24
24
|
|
25
25
|
#include "absl/container/inlined_vector.h"
|
26
26
|
|
@@ -89,6 +89,7 @@ class AVL {
|
|
89
89
|
|
90
90
|
private:
|
91
91
|
struct Node;
|
92
|
+
|
92
93
|
typedef std::shared_ptr<Node> NodePtr;
|
93
94
|
struct Node : public std::enable_shared_from_this<Node> {
|
94
95
|
Node(K k, V v, NodePtr l, NodePtr r, long h)
|
@@ -309,6 +310,7 @@ class AVL<K, void> {
|
|
309
310
|
|
310
311
|
private:
|
311
312
|
struct Node;
|
313
|
+
|
312
314
|
typedef std::shared_ptr<Node> NodePtr;
|
313
315
|
struct Node : public std::enable_shared_from_this<Node> {
|
314
316
|
Node(K k, NodePtr l, NodePtr r, long h)
|
@@ -17,6 +17,10 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
+
#include <utility>
|
21
|
+
|
22
|
+
#include "absl/utility/utility.h"
|
23
|
+
|
20
24
|
#include "src/core/lib/channel/channel_stack.h"
|
21
25
|
#include "src/core/lib/promise/context.h"
|
22
26
|
#include "src/core/lib/resource_quota/arena.h"
|
@@ -21,11 +21,17 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include
|
24
|
+
#include <stdint.h>
|
25
25
|
|
26
|
-
#include "
|
26
|
+
#include "absl/status/status.h"
|
27
|
+
|
28
|
+
#include <grpc/impl/codegen/gpr_types.h>
|
29
|
+
#include <grpc/support/atm.h>
|
30
|
+
|
31
|
+
#include "src/core/lib/iomgr/error.h"
|
27
32
|
#include "src/core/lib/transport/byte_stream.h"
|
28
33
|
#include "src/core/lib/transport/metadata_batch.h"
|
34
|
+
#include "src/core/lib/transport/transport.h"
|
29
35
|
|
30
36
|
namespace grpc_core {
|
31
37
|
|
@@ -21,12 +21,15 @@
|
|
21
21
|
#include "src/core/lib/channel/channel_args.h"
|
22
22
|
|
23
23
|
#include <limits.h>
|
24
|
+
#include <stdlib.h>
|
24
25
|
#include <string.h>
|
25
26
|
|
27
|
+
#include <algorithm>
|
26
28
|
#include <map>
|
27
29
|
#include <vector>
|
28
30
|
|
29
31
|
#include "absl/strings/match.h"
|
32
|
+
#include "absl/strings/str_cat.h"
|
30
33
|
#include "absl/strings/str_format.h"
|
31
34
|
#include "absl/strings/str_join.h"
|
32
35
|
|
@@ -35,7 +38,6 @@
|
|
35
38
|
#include <grpc/support/log.h>
|
36
39
|
#include <grpc/support/string_util.h>
|
37
40
|
|
38
|
-
#include "src/core/lib/gpr/string.h"
|
39
41
|
#include "src/core/lib/gpr/useful.h"
|
40
42
|
#include "src/core/lib/gprpp/match.h"
|
41
43
|
|
@@ -160,6 +162,43 @@ void* ChannelArgs::GetVoidPointer(absl::string_view name) const {
|
|
160
162
|
return absl::get<Pointer>(*v).c_pointer();
|
161
163
|
}
|
162
164
|
|
165
|
+
absl::optional<bool> ChannelArgs::GetBool(absl::string_view name) const {
|
166
|
+
auto* v = Get(name);
|
167
|
+
if (v == nullptr) return absl::nullopt;
|
168
|
+
auto* i = absl::get_if<int>(v);
|
169
|
+
if (i == nullptr) {
|
170
|
+
gpr_log(GPR_ERROR, "%s ignored: it must be an integer",
|
171
|
+
std::string(name).c_str());
|
172
|
+
return absl::nullopt;
|
173
|
+
}
|
174
|
+
switch (*i) {
|
175
|
+
case 0:
|
176
|
+
return false;
|
177
|
+
case 1:
|
178
|
+
return true;
|
179
|
+
default:
|
180
|
+
gpr_log(GPR_ERROR, "%s treated as bool but set to %d (assuming true)",
|
181
|
+
std::string(name).c_str(), *i);
|
182
|
+
return true;
|
183
|
+
}
|
184
|
+
}
|
185
|
+
|
186
|
+
std::string ChannelArgs::ToString() const {
|
187
|
+
std::vector<std::string> arg_strings;
|
188
|
+
args_.ForEach([&arg_strings](const std::string& key, const Value& value) {
|
189
|
+
std::string value_str;
|
190
|
+
if (auto* i = absl::get_if<int>(&value)) {
|
191
|
+
value_str = std::to_string(*i);
|
192
|
+
} else if (auto* s = absl::get_if<std::string>(&value)) {
|
193
|
+
value_str = *s;
|
194
|
+
} else if (auto* p = absl::get_if<Pointer>(&value)) {
|
195
|
+
value_str = absl::StrFormat("%p", p->c_pointer());
|
196
|
+
}
|
197
|
+
arg_strings.push_back(absl::StrCat(key, "=", value_str));
|
198
|
+
});
|
199
|
+
return absl::StrCat("{", absl::StrJoin(arg_strings, ", "), "}");
|
200
|
+
}
|
201
|
+
|
163
202
|
} // namespace grpc_core
|
164
203
|
|
165
204
|
static grpc_arg copy_arg(const grpc_arg* src) {
|
@@ -461,27 +500,7 @@ grpc_arg grpc_channel_arg_pointer_create(
|
|
461
500
|
}
|
462
501
|
|
463
502
|
std::string grpc_channel_args_string(const grpc_channel_args* args) {
|
464
|
-
|
465
|
-
std::vector<std::string> arg_strings;
|
466
|
-
for (size_t i = 0; i < args->num_args; ++i) {
|
467
|
-
const grpc_arg& arg = args->args[i];
|
468
|
-
std::string arg_string;
|
469
|
-
switch (arg.type) {
|
470
|
-
case GRPC_ARG_INTEGER:
|
471
|
-
arg_string = absl::StrFormat("%s=%d", arg.key, arg.value.integer);
|
472
|
-
break;
|
473
|
-
case GRPC_ARG_STRING:
|
474
|
-
arg_string = absl::StrFormat("%s=%s", arg.key, arg.value.string);
|
475
|
-
break;
|
476
|
-
case GRPC_ARG_POINTER:
|
477
|
-
arg_string = absl::StrFormat("%s=%p", arg.key, arg.value.pointer.p);
|
478
|
-
break;
|
479
|
-
default:
|
480
|
-
arg_string = "arg with unknown type";
|
481
|
-
}
|
482
|
-
arg_strings.push_back(arg_string);
|
483
|
-
}
|
484
|
-
return absl::StrJoin(arg_strings, ", ");
|
503
|
+
return grpc_core::ChannelArgs::FromC(args).ToString();
|
485
504
|
}
|
486
505
|
|
487
506
|
namespace grpc_core {
|
@@ -21,12 +21,16 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include <stddef.h>
|
25
|
+
|
24
26
|
#include <string>
|
27
|
+
#include <type_traits>
|
28
|
+
#include <utility>
|
25
29
|
|
30
|
+
#include "absl/meta/type_traits.h"
|
26
31
|
#include "absl/strings/string_view.h"
|
27
32
|
#include "absl/types/optional.h"
|
28
33
|
#include "absl/types/variant.h"
|
29
|
-
#include "absl/utility/utility.h"
|
30
34
|
|
31
35
|
#include <grpc/impl/codegen/grpc_types.h>
|
32
36
|
|
@@ -81,6 +85,11 @@ struct ChannelArgTypeTraits<
|
|
81
85
|
};
|
82
86
|
};
|
83
87
|
|
88
|
+
// If a type declares some member 'struct RawPointerChannelArgTag {}' then
|
89
|
+
// we automatically generate a vtable for it that does not do any ownership
|
90
|
+
// management and compares the type by pointer identity.
|
91
|
+
// This is intended to be relatively ugly because *most types should worry about
|
92
|
+
// ownership*.
|
84
93
|
template <typename T>
|
85
94
|
struct ChannelArgTypeTraits<T,
|
86
95
|
absl::void_t<typename T::RawPointerChannelArgTag>> {
|
@@ -191,6 +200,11 @@ class ChannelArgs {
|
|
191
200
|
ChannelArgTypeTraits<
|
192
201
|
absl::remove_cvref_t<decltype(*store_value)>>::VTable()));
|
193
202
|
}
|
203
|
+
template <typename T>
|
204
|
+
GRPC_MUST_USE_RESULT ChannelArgs SetIfUnset(absl::string_view name, T value) {
|
205
|
+
if (Contains(name)) return *this;
|
206
|
+
return Set(name, std::move(value));
|
207
|
+
}
|
194
208
|
GRPC_MUST_USE_RESULT ChannelArgs Remove(absl::string_view name) const;
|
195
209
|
bool Contains(absl::string_view name) const { return Get(name) != nullptr; }
|
196
210
|
|
@@ -203,6 +217,7 @@ class ChannelArgs {
|
|
203
217
|
}
|
204
218
|
absl::optional<Duration> GetDurationFromIntMillis(
|
205
219
|
absl::string_view name) const;
|
220
|
+
absl::optional<bool> GetBool(absl::string_view name) const;
|
206
221
|
|
207
222
|
// Object based get/set.
|
208
223
|
// Deal with the common case that we set a pointer to an object under
|
@@ -221,12 +236,26 @@ class ChannelArgs {
|
|
221
236
|
T* GetObject() {
|
222
237
|
return GetPointer<T>(T::ChannelArgName());
|
223
238
|
}
|
239
|
+
template <typename T>
|
240
|
+
RefCountedPtr<T> GetObjectRef() {
|
241
|
+
auto* p = GetObject<T>();
|
242
|
+
if (p == nullptr) return nullptr;
|
243
|
+
return p->Ref();
|
244
|
+
}
|
224
245
|
|
225
246
|
bool operator<(const ChannelArgs& other) const { return args_ < other.args_; }
|
226
247
|
bool operator==(const ChannelArgs& other) const {
|
227
248
|
return args_ == other.args_;
|
228
249
|
}
|
229
250
|
|
251
|
+
// Helpers for commonly accessed things
|
252
|
+
|
253
|
+
bool WantMinimalStack() const {
|
254
|
+
return GetBool(GRPC_ARG_MINIMAL_STACK).value_or(false);
|
255
|
+
}
|
256
|
+
|
257
|
+
std::string ToString() const;
|
258
|
+
|
230
259
|
private:
|
231
260
|
explicit ChannelArgs(AVL<std::string, Value> args) : args_(std::move(args)) {}
|
232
261
|
|
@@ -333,8 +362,9 @@ ChannelArgs ChannelArgsBuiltinPrecondition(const grpc_channel_args* src);
|
|
333
362
|
} // namespace grpc_core
|
334
363
|
|
335
364
|
// Takes ownership of the old_args
|
336
|
-
typedef
|
337
|
-
|
365
|
+
typedef grpc_core::ChannelArgs (
|
366
|
+
*grpc_channel_args_client_channel_creation_mutator)(
|
367
|
+
const char* target, grpc_core::ChannelArgs old_args,
|
338
368
|
grpc_channel_stack_type type);
|
339
369
|
|
340
370
|
// Should be called only once globaly before grpc is init'ed.
|
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
#include "src/core/lib/channel/channel_args_preconditioning.h"
|
18
18
|
|
19
|
-
#include <
|
19
|
+
#include <utility>
|
20
20
|
|
21
21
|
namespace grpc_core {
|
22
22
|
|
@@ -30,13 +30,13 @@ ChannelArgsPreconditioning ChannelArgsPreconditioning::Builder::Build() {
|
|
30
30
|
return preconditioning;
|
31
31
|
}
|
32
32
|
|
33
|
-
|
33
|
+
ChannelArgs ChannelArgsPreconditioning::PreconditionChannelArgs(
|
34
34
|
const grpc_channel_args* args) const {
|
35
35
|
ChannelArgs channel_args = ChannelArgsBuiltinPrecondition(args);
|
36
36
|
for (auto& stage : stages_) {
|
37
37
|
channel_args = stage(std::move(channel_args));
|
38
38
|
}
|
39
|
-
return channel_args
|
39
|
+
return channel_args;
|
40
40
|
}
|
41
41
|
|
42
42
|
} // namespace grpc_core
|
@@ -20,6 +20,8 @@
|
|
20
20
|
#include <functional>
|
21
21
|
#include <vector>
|
22
22
|
|
23
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
24
|
+
|
23
25
|
#include "src/core/lib/channel/channel_args.h"
|
24
26
|
|
25
27
|
namespace grpc_core {
|
@@ -49,8 +51,7 @@ class ChannelArgsPreconditioning {
|
|
49
51
|
// Take channel args and precondition them.
|
50
52
|
// Does not take ownership of the channel args passed in.
|
51
53
|
// Returns a new channel args object that is owned by the caller.
|
52
|
-
const grpc_channel_args*
|
53
|
-
const grpc_channel_args* args) const;
|
54
|
+
ChannelArgs PreconditionChannelArgs(const grpc_channel_args* args) const;
|
54
55
|
|
55
56
|
private:
|
56
57
|
std::vector<Stage> stages_;
|
@@ -20,13 +20,14 @@
|
|
20
20
|
|
21
21
|
#include "src/core/lib/channel/channel_stack.h"
|
22
22
|
|
23
|
-
#include <
|
24
|
-
|
23
|
+
#include <stdint.h>
|
24
|
+
|
25
|
+
#include <utility>
|
25
26
|
|
26
|
-
#include <grpc/support/alloc.h>
|
27
27
|
#include <grpc/support/log.h>
|
28
28
|
|
29
29
|
#include "src/core/lib/gpr/alloc.h"
|
30
|
+
#include "src/core/lib/promise/poll.h"
|
30
31
|
|
31
32
|
grpc_core::TraceFlag grpc_trace_channel(false, "channel");
|
32
33
|
grpc_core::TraceFlag grpc_trace_channel_stack(false, "channel_stack");
|
@@ -113,6 +114,8 @@ grpc_error_handle grpc_channel_stack_init(
|
|
113
114
|
}
|
114
115
|
}
|
115
116
|
|
117
|
+
stack->on_destroy.Init([]() {});
|
118
|
+
|
116
119
|
size_t call_size =
|
117
120
|
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call_stack)) +
|
118
121
|
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(filter_count * sizeof(grpc_call_element));
|
@@ -169,6 +172,9 @@ void grpc_channel_stack_destroy(grpc_channel_stack* stack) {
|
|
169
172
|
for (i = 0; i < count; i++) {
|
170
173
|
channel_elems[i].filter->destroy_channel_elem(&channel_elems[i]);
|
171
174
|
}
|
175
|
+
|
176
|
+
(*stack->on_destroy)();
|
177
|
+
stack->on_destroy.Destroy();
|
172
178
|
}
|
173
179
|
|
174
180
|
grpc_error_handle grpc_call_stack_init(
|
@@ -272,3 +278,35 @@ grpc_call_stack* grpc_call_stack_from_top_element(grpc_call_element* elem) {
|
|
272
278
|
reinterpret_cast<char*>(elem) -
|
273
279
|
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call_stack)));
|
274
280
|
}
|
281
|
+
|
282
|
+
void grpc_channel_stack_no_post_init(grpc_channel_stack*,
|
283
|
+
grpc_channel_element*) {}
|
284
|
+
|
285
|
+
namespace {
|
286
|
+
|
287
|
+
grpc_core::NextPromiseFactory ClientNext(grpc_channel_element* elem) {
|
288
|
+
return [elem](grpc_core::CallArgs args) {
|
289
|
+
return elem->filter->make_call_promise(elem, std::move(args),
|
290
|
+
ClientNext(elem + 1));
|
291
|
+
};
|
292
|
+
}
|
293
|
+
|
294
|
+
grpc_core::NextPromiseFactory ServerNext(grpc_channel_element* elem) {
|
295
|
+
return [elem](grpc_core::CallArgs args) {
|
296
|
+
return elem->filter->make_call_promise(elem, std::move(args),
|
297
|
+
ServerNext(elem - 1));
|
298
|
+
};
|
299
|
+
}
|
300
|
+
|
301
|
+
} // namespace
|
302
|
+
|
303
|
+
grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle>
|
304
|
+
grpc_channel_stack::MakeCallPromise(grpc_core::CallArgs call_args) {
|
305
|
+
if (is_client) {
|
306
|
+
return ClientNext(grpc_channel_stack_element(this, 0))(
|
307
|
+
std::move(call_args));
|
308
|
+
} else {
|
309
|
+
return ServerNext(grpc_channel_stack_element(this, this->count - 1))(
|
310
|
+
std::move(call_args));
|
311
|
+
}
|
312
|
+
}
|
@@ -50,19 +50,31 @@
|
|
50
50
|
|
51
51
|
#include <functional>
|
52
52
|
|
53
|
-
#include <grpc/
|
53
|
+
#include <grpc/impl/codegen/gpr_types.h>
|
54
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
55
|
+
#include <grpc/slice.h>
|
56
|
+
#include <grpc/status.h>
|
54
57
|
#include <grpc/support/log.h>
|
55
|
-
#include <grpc/support/time.h>
|
56
58
|
|
59
|
+
#include "src/core/lib/channel/context.h"
|
57
60
|
#include "src/core/lib/debug/trace.h"
|
58
61
|
#include "src/core/lib/gpr/time_precise.h"
|
62
|
+
#include "src/core/lib/gprpp/manual_constructor.h"
|
59
63
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
64
|
+
#include "src/core/lib/gprpp/time.h"
|
60
65
|
#include "src/core/lib/iomgr/call_combiner.h"
|
66
|
+
#include "src/core/lib/iomgr/closure.h"
|
67
|
+
#include "src/core/lib/iomgr/error.h"
|
61
68
|
#include "src/core/lib/iomgr/polling_entity.h"
|
69
|
+
#include "src/core/lib/promise/arena_promise.h"
|
62
70
|
#include "src/core/lib/resource_quota/arena.h"
|
63
|
-
#include "src/core/lib/transport/metadata_batch.h"
|
64
71
|
#include "src/core/lib/transport/transport.h"
|
65
72
|
|
73
|
+
struct grpc_call_element;
|
74
|
+
struct grpc_call_stack;
|
75
|
+
struct grpc_channel_element;
|
76
|
+
struct grpc_channel_stack;
|
77
|
+
|
66
78
|
typedef struct grpc_channel_element grpc_channel_element;
|
67
79
|
typedef struct grpc_call_element grpc_call_element;
|
68
80
|
|
@@ -164,6 +176,10 @@ struct grpc_channel_filter {
|
|
164
176
|
Implementations may assume that elem->channel_data is all zeros. */
|
165
177
|
grpc_error_handle (*init_channel_elem)(grpc_channel_element* elem,
|
166
178
|
grpc_channel_element_args* args);
|
179
|
+
/* Post init per-channel data.
|
180
|
+
Called after all channel elements have been successfully created. */
|
181
|
+
void (*post_init_channel_elem)(grpc_channel_stack* stk,
|
182
|
+
grpc_channel_element* elem);
|
167
183
|
/* Destroy per channel data.
|
168
184
|
The filter does not need to do any chaining */
|
169
185
|
void (*destroy_channel_elem)(grpc_channel_element* elem);
|
@@ -195,10 +211,16 @@ struct grpc_call_element {
|
|
195
211
|
guarantees they live within a single malloc() allocation */
|
196
212
|
struct grpc_channel_stack {
|
197
213
|
grpc_stream_refcount refcount;
|
214
|
+
bool is_client;
|
198
215
|
size_t count;
|
199
216
|
/* Memory required for a call stack (computed at channel stack
|
200
217
|
initialization) */
|
201
218
|
size_t call_stack_size;
|
219
|
+
// TODO(ctiller): remove this mechanism... it's a hack to allow
|
220
|
+
// Channel to be separated from grpc_channel_stack's allocation. As the
|
221
|
+
// promise conversion continues, we'll reconsider what grpc_channel_stack
|
222
|
+
// should look like and this can go.
|
223
|
+
grpc_core::ManualConstructor<std::function<void()>> on_destroy;
|
202
224
|
|
203
225
|
// Minimal infrastructure to act like a RefCounted thing without converting
|
204
226
|
// everything.
|
@@ -211,6 +233,9 @@ struct grpc_channel_stack {
|
|
211
233
|
IncrementRefCount();
|
212
234
|
return grpc_core::RefCountedPtr<grpc_channel_stack>(this);
|
213
235
|
}
|
236
|
+
|
237
|
+
grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle> MakeCallPromise(
|
238
|
+
grpc_core::CallArgs call_args);
|
214
239
|
};
|
215
240
|
|
216
241
|
/* A call stack tracks a set of related filters for one call, and guarantees
|
@@ -222,6 +247,16 @@ struct grpc_call_stack {
|
|
222
247
|
about the address of the call stack itself. */
|
223
248
|
grpc_stream_refcount refcount;
|
224
249
|
size_t count;
|
250
|
+
|
251
|
+
// Minimal infrastructure to act like a RefCounted thing without converting
|
252
|
+
// everything.
|
253
|
+
// grpc_call_stack will be eliminated once the promise conversion completes.
|
254
|
+
void IncrementRefCount();
|
255
|
+
void Unref();
|
256
|
+
grpc_core::RefCountedPtr<grpc_call_stack> Ref() {
|
257
|
+
IncrementRefCount();
|
258
|
+
return grpc_core::RefCountedPtr<grpc_call_stack>(this);
|
259
|
+
}
|
225
260
|
};
|
226
261
|
|
227
262
|
/* Get a channel element given a channel stack and its index */
|
@@ -304,6 +339,14 @@ inline void grpc_channel_stack::Unref() {
|
|
304
339
|
GRPC_CHANNEL_STACK_UNREF(this, "smart_pointer");
|
305
340
|
}
|
306
341
|
|
342
|
+
inline void grpc_call_stack::IncrementRefCount() {
|
343
|
+
GRPC_CALL_STACK_REF(this, "smart_pointer");
|
344
|
+
}
|
345
|
+
|
346
|
+
inline void grpc_call_stack::Unref() {
|
347
|
+
GRPC_CALL_STACK_UNREF(this, "smart_pointer");
|
348
|
+
}
|
349
|
+
|
307
350
|
/* Destroy a call stack */
|
308
351
|
void grpc_call_stack_destroy(grpc_call_stack* stack,
|
309
352
|
const grpc_call_final_info* final_info,
|
@@ -333,6 +376,9 @@ void grpc_call_log_op(const char* file, int line, gpr_log_severity severity,
|
|
333
376
|
grpc_call_element* elem,
|
334
377
|
grpc_transport_stream_op_batch* op);
|
335
378
|
|
379
|
+
void grpc_channel_stack_no_post_init(grpc_channel_stack* stk,
|
380
|
+
grpc_channel_element* elem);
|
381
|
+
|
336
382
|
extern grpc_core::TraceFlag grpc_trace_channel;
|
337
383
|
|
338
384
|
#define GRPC_CALL_LOG_OP(sev, elem, op) \
|