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
@@ -21,233 +21,197 @@
|
|
21
21
|
#include "src/core/lib/surface/channel.h"
|
22
22
|
|
23
23
|
#include <inttypes.h>
|
24
|
-
#include <limits.h>
|
25
|
-
#include <stdlib.h>
|
26
24
|
#include <string.h>
|
27
25
|
|
26
|
+
#include <algorithm>
|
27
|
+
#include <atomic>
|
28
|
+
#include <functional>
|
29
|
+
#include <memory>
|
30
|
+
|
31
|
+
#include "absl/status/status.h"
|
32
|
+
|
28
33
|
#include <grpc/compression.h>
|
34
|
+
#include <grpc/grpc.h>
|
35
|
+
#include <grpc/impl/codegen/gpr_types.h>
|
29
36
|
#include <grpc/support/alloc.h>
|
30
37
|
#include <grpc/support/log.h>
|
31
|
-
#include <grpc/support/string_util.h>
|
32
38
|
|
33
39
|
#include "src/core/lib/channel/channel_args.h"
|
40
|
+
#include "src/core/lib/channel/channel_stack.h"
|
34
41
|
#include "src/core/lib/channel/channel_stack_builder_impl.h"
|
35
42
|
#include "src/core/lib/channel/channel_trace.h"
|
36
43
|
#include "src/core/lib/channel/channelz.h"
|
37
|
-
#include "src/core/lib/channel/channelz_registry.h"
|
38
44
|
#include "src/core/lib/config/core_configuration.h"
|
39
45
|
#include "src/core/lib/debug/stats.h"
|
40
|
-
#include "src/core/lib/
|
46
|
+
#include "src/core/lib/debug/trace.h"
|
47
|
+
#include "src/core/lib/gpr/useful.h"
|
41
48
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
42
|
-
#include "src/core/lib/gprpp/memory.h"
|
43
49
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
44
|
-
#include "src/core/lib/iomgr/
|
45
|
-
#include "src/core/lib/
|
50
|
+
#include "src/core/lib/iomgr/error.h"
|
51
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
46
52
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
47
|
-
#include "src/core/lib/
|
53
|
+
#include "src/core/lib/resource_quota/resource_quota.h"
|
54
|
+
#include "src/core/lib/slice/slice_refcount.h"
|
48
55
|
#include "src/core/lib/surface/api_trace.h"
|
49
56
|
#include "src/core/lib/surface/call.h"
|
57
|
+
#include "src/core/lib/surface/channel_init.h"
|
50
58
|
#include "src/core/lib/surface/channel_stack_type.h"
|
59
|
+
#include "src/core/lib/transport/transport.h"
|
51
60
|
|
52
|
-
|
53
|
-
* Avoids needing to take a metadata context lock for sending status
|
54
|
-
* if the status code is <= NUM_CACHED_STATUS_ELEMS.
|
55
|
-
* Sized to allow the most commonly used codes to fit in
|
56
|
-
* (OK, Cancelled, Unknown). */
|
57
|
-
#define NUM_CACHED_STATUS_ELEMS 3
|
61
|
+
// IWYU pragma: no_include <type_traits>
|
58
62
|
|
59
|
-
|
63
|
+
namespace grpc_core {
|
60
64
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
65
|
+
Channel::Channel(bool is_client, std::string target, ChannelArgs channel_args,
|
66
|
+
grpc_compression_options compression_options,
|
67
|
+
RefCountedPtr<grpc_channel_stack> channel_stack)
|
68
|
+
: is_client_(is_client),
|
69
|
+
compression_options_(compression_options),
|
70
|
+
call_size_estimate_(channel_stack->call_stack_size +
|
71
|
+
grpc_call_get_initial_size_estimate()),
|
72
|
+
channelz_node_(channel_args.GetObjectRef<channelz::ChannelNode>()),
|
73
|
+
allocator_(channel_args.GetObject<ResourceQuota>()
|
74
|
+
->memory_quota()
|
75
|
+
->CreateMemoryOwner(target)),
|
76
|
+
target_(std::move(target)),
|
77
|
+
channel_stack_(std::move(channel_stack)) {
|
78
|
+
// We need to make sure that grpc_shutdown() does not shut things down
|
79
|
+
// until after the channel is destroyed. However, the channel may not
|
80
|
+
// actually be destroyed by the time grpc_channel_destroy() returns,
|
81
|
+
// since there may be other existing refs to the channel. If those
|
82
|
+
// refs are held by things that are visible to the wrapped language
|
83
|
+
// (such as outstanding calls on the channel), then the wrapped
|
84
|
+
// language can be responsible for making sure that grpc_shutdown()
|
85
|
+
// does not run until after those refs are released. However, the
|
86
|
+
// channel may also have refs to itself held internally for various
|
87
|
+
// things that need to be cleaned up at channel destruction (e.g.,
|
88
|
+
// LB policies, subchannels, etc), and because these refs are not
|
89
|
+
// visible to the wrapped language, it cannot be responsible for
|
90
|
+
// deferring grpc_shutdown() until after they are released. To
|
91
|
+
// accommodate that, we call grpc_init() here and then call
|
92
|
+
// grpc_shutdown() when the channel is actually destroyed, thus
|
93
|
+
// ensuring that shutdown is deferred until that point.
|
94
|
+
grpc_init();
|
95
|
+
auto channelz_node = channelz_node_;
|
96
|
+
*channel_stack_->on_destroy = [channelz_node]() {
|
97
|
+
if (channelz_node != nullptr) {
|
98
|
+
channelz_node->AddTraceEvent(
|
99
|
+
channelz::ChannelTrace::Severity::Info,
|
100
|
+
grpc_slice_from_static_string("Channel destroyed"));
|
101
|
+
}
|
102
|
+
grpc_shutdown();
|
103
|
+
};
|
104
|
+
}
|
105
|
+
|
106
|
+
absl::StatusOr<RefCountedPtr<Channel>> Channel::CreateWithBuilder(
|
107
|
+
ChannelStackBuilder* builder) {
|
108
|
+
auto channel_args = builder->channel_args();
|
109
|
+
if (builder->channel_stack_type() == GRPC_SERVER_CHANNEL) {
|
68
110
|
GRPC_STATS_INC_SERVER_CHANNELS_CREATED();
|
69
111
|
} else {
|
70
112
|
GRPC_STATS_INC_CLIENT_CHANNELS_CREATED();
|
71
113
|
}
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
reinterpret_cast<void**>(&channel));
|
76
|
-
if (builder_error != GRPC_ERROR_NONE) {
|
114
|
+
absl::StatusOr<RefCountedPtr<grpc_channel_stack>> r = builder->Build();
|
115
|
+
if (!r.ok()) {
|
116
|
+
auto status = r.status();
|
77
117
|
gpr_log(GPR_ERROR, "channel stack builder failed: %s",
|
78
|
-
|
79
|
-
|
80
|
-
if (error != nullptr) {
|
81
|
-
*error = builder_error;
|
82
|
-
} else {
|
83
|
-
GRPC_ERROR_UNREF(builder_error);
|
84
|
-
}
|
85
|
-
grpc_channel_args_destroy(args);
|
86
|
-
return nullptr;
|
118
|
+
status.ToString().c_str());
|
119
|
+
return status;
|
87
120
|
}
|
88
|
-
channel->target.Init(std::move(target));
|
89
|
-
channel->is_client = grpc_channel_stack_type_is_client(channel_stack_type);
|
90
|
-
channel->registration_table.Init();
|
91
|
-
channel->allocator.Init(grpc_core::ResourceQuotaFromChannelArgs(args)
|
92
|
-
->memory_quota()
|
93
|
-
->CreateMemoryOwner(name));
|
94
|
-
|
95
|
-
gpr_atm_no_barrier_store(
|
96
|
-
&channel->call_size_estimate,
|
97
|
-
(gpr_atm)CHANNEL_STACK_FROM_CHANNEL(channel)->call_stack_size +
|
98
|
-
grpc_call_get_initial_size_estimate());
|
99
|
-
|
100
|
-
grpc_compression_options_init(&channel->compression_options);
|
101
|
-
for (size_t i = 0; i < args->num_args; i++) {
|
102
|
-
if (0 ==
|
103
|
-
strcmp(args->args[i].key, GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL)) {
|
104
|
-
channel->compression_options.default_level.is_set = true;
|
105
|
-
channel->compression_options.default_level.level =
|
106
|
-
static_cast<grpc_compression_level>(grpc_channel_arg_get_integer(
|
107
|
-
&args->args[i],
|
108
|
-
{GRPC_COMPRESS_LEVEL_NONE, GRPC_COMPRESS_LEVEL_NONE,
|
109
|
-
GRPC_COMPRESS_LEVEL_COUNT - 1}));
|
110
|
-
} else if (0 == strcmp(args->args[i].key,
|
111
|
-
GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM)) {
|
112
|
-
channel->compression_options.default_algorithm.is_set = true;
|
113
|
-
channel->compression_options.default_algorithm.algorithm =
|
114
|
-
static_cast<grpc_compression_algorithm>(grpc_channel_arg_get_integer(
|
115
|
-
&args->args[i], {GRPC_COMPRESS_NONE, GRPC_COMPRESS_NONE,
|
116
|
-
GRPC_COMPRESS_ALGORITHMS_COUNT - 1}));
|
117
|
-
} else if (0 ==
|
118
|
-
strcmp(args->args[i].key,
|
119
|
-
GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET)) {
|
120
|
-
channel->compression_options.enabled_algorithms_bitset =
|
121
|
-
static_cast<uint32_t>(args->args[i].value.integer) |
|
122
|
-
0x1; /* always support no compression */
|
123
|
-
} else if (0 == strcmp(args->args[i].key, GRPC_ARG_CHANNELZ_CHANNEL_NODE)) {
|
124
|
-
if (args->args[i].type == GRPC_ARG_POINTER) {
|
125
|
-
GPR_ASSERT(args->args[i].value.pointer.p != nullptr);
|
126
|
-
channel->channelz_node = static_cast<grpc_core::channelz::ChannelNode*>(
|
127
|
-
args->args[i].value.pointer.p)
|
128
|
-
->Ref();
|
129
|
-
} else {
|
130
|
-
gpr_log(GPR_DEBUG,
|
131
|
-
GRPC_ARG_CHANNELZ_CHANNEL_NODE " should be a pointer");
|
132
|
-
}
|
133
|
-
}
|
134
|
-
}
|
135
|
-
|
136
|
-
grpc_channel_args_destroy(args);
|
137
|
-
return channel;
|
138
|
-
}
|
139
121
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
GRPC_SSL_TARGET_NAME_OVERRIDE_ARG)) {
|
151
|
-
ssl_override = grpc_channel_arg_get_string(&input_args->args[i]);
|
152
|
-
}
|
122
|
+
grpc_compression_options compression_options;
|
123
|
+
grpc_compression_options_init(&compression_options);
|
124
|
+
auto default_level =
|
125
|
+
channel_args.GetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL);
|
126
|
+
if (default_level.has_value()) {
|
127
|
+
compression_options.default_level.is_set = true;
|
128
|
+
compression_options.default_level.level = Clamp(
|
129
|
+
static_cast<grpc_compression_level>(*default_level),
|
130
|
+
GRPC_COMPRESS_LEVEL_NONE,
|
131
|
+
static_cast<grpc_compression_level>(GRPC_COMPRESS_LEVEL_COUNT - 1));
|
153
132
|
}
|
154
|
-
|
155
|
-
|
133
|
+
auto default_algorithm =
|
134
|
+
channel_args.GetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM);
|
135
|
+
if (default_algorithm.has_value()) {
|
136
|
+
compression_options.default_algorithm.is_set = true;
|
137
|
+
compression_options.default_algorithm.algorithm =
|
138
|
+
Clamp(static_cast<grpc_compression_algorithm>(*default_algorithm),
|
139
|
+
GRPC_COMPRESS_NONE,
|
140
|
+
static_cast<grpc_compression_algorithm>(
|
141
|
+
GRPC_COMPRESS_ALGORITHMS_COUNT - 1));
|
156
142
|
}
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
grpc_arg new_args[1];
|
163
|
-
size_t num_new_args = 0;
|
164
|
-
if (default_authority != nullptr) {
|
165
|
-
new_args[num_new_args++] = grpc_channel_arg_string_create(
|
166
|
-
const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY), default_authority);
|
143
|
+
auto enabled_algorithms_bitset =
|
144
|
+
channel_args.GetInt(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET);
|
145
|
+
if (enabled_algorithms_bitset.has_value()) {
|
146
|
+
compression_options.enabled_algorithms_bitset =
|
147
|
+
*enabled_algorithms_bitset | 1 /* always support no compression */;
|
167
148
|
}
|
168
|
-
|
149
|
+
|
150
|
+
return RefCountedPtr<Channel>(new Channel(
|
151
|
+
grpc_channel_stack_type_is_client(builder->channel_stack_type()),
|
152
|
+
std::string(builder->target()), std::move(channel_args),
|
153
|
+
compression_options, std::move(*r)));
|
169
154
|
}
|
170
155
|
|
171
156
|
namespace {
|
172
157
|
|
173
158
|
void* channelz_node_copy(void* p) {
|
174
|
-
|
175
|
-
static_cast<grpc_core::channelz::ChannelNode*>(p);
|
159
|
+
channelz::ChannelNode* node = static_cast<channelz::ChannelNode*>(p);
|
176
160
|
node->Ref().release();
|
177
161
|
return p;
|
178
162
|
}
|
179
163
|
void channelz_node_destroy(void* p) {
|
180
|
-
|
181
|
-
static_cast<grpc_core::channelz::ChannelNode*>(p);
|
164
|
+
channelz::ChannelNode* node = static_cast<channelz::ChannelNode*>(p);
|
182
165
|
node->Unref();
|
183
166
|
}
|
184
|
-
int channelz_node_cmp(void* p1, void* p2) {
|
185
|
-
return grpc_core::QsortCompare(p1, p2);
|
186
|
-
}
|
167
|
+
int channelz_node_cmp(void* p1, void* p2) { return QsortCompare(p1, p2); }
|
187
168
|
const grpc_arg_pointer_vtable channelz_node_arg_vtable = {
|
188
169
|
channelz_node_copy, channelz_node_destroy, channelz_node_cmp};
|
189
170
|
|
190
|
-
void CreateChannelzNode(
|
191
|
-
|
171
|
+
void CreateChannelzNode(ChannelStackBuilder* builder) {
|
172
|
+
auto args = builder->channel_args();
|
192
173
|
// Check whether channelz is enabled.
|
193
|
-
const bool channelz_enabled =
|
194
|
-
|
174
|
+
const bool channelz_enabled = args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
|
175
|
+
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT);
|
195
176
|
if (!channelz_enabled) return;
|
196
177
|
// Get parameters needed to create the channelz node.
|
197
|
-
const size_t channel_tracer_max_memory =
|
198
|
-
|
199
|
-
|
200
|
-
const bool is_internal_channel =
|
201
|
-
args
|
178
|
+
const size_t channel_tracer_max_memory = std::max(
|
179
|
+
0, args.GetInt(GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE)
|
180
|
+
.value_or(GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT));
|
181
|
+
const bool is_internal_channel =
|
182
|
+
args.GetBool(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL).value_or(false);
|
202
183
|
// Create the channelz node.
|
203
184
|
std::string target(builder->target());
|
204
|
-
|
205
|
-
|
185
|
+
RefCountedPtr<channelz::ChannelNode> channelz_node =
|
186
|
+
MakeRefCounted<channelz::ChannelNode>(
|
206
187
|
target.c_str(), channel_tracer_max_memory, is_internal_channel);
|
207
188
|
channelz_node->AddTraceEvent(
|
208
|
-
|
189
|
+
channelz::ChannelTrace::Severity::Info,
|
209
190
|
grpc_slice_from_static_string("Channel created"));
|
210
191
|
// Add channelz node to channel args.
|
211
192
|
// We remove the is_internal_channel arg, since we no longer need it.
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
|
218
|
-
builder->SetChannelArgs(new_args);
|
219
|
-
grpc_channel_args_destroy(new_args);
|
193
|
+
builder->SetChannelArgs(
|
194
|
+
args.Remove(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL)
|
195
|
+
.Set(GRPC_ARG_CHANNELZ_CHANNEL_NODE,
|
196
|
+
ChannelArgs::Pointer(channelz_node.release(),
|
197
|
+
&channelz_node_arg_vtable)));
|
220
198
|
}
|
221
199
|
|
222
200
|
} // namespace
|
223
201
|
|
224
|
-
|
225
|
-
const char* target,
|
202
|
+
absl::StatusOr<RefCountedPtr<Channel>> Channel::Create(
|
203
|
+
const char* target, ChannelArgs args,
|
226
204
|
grpc_channel_stack_type channel_stack_type,
|
227
|
-
grpc_transport* optional_transport
|
228
|
-
|
229
|
-
// until after the channel is destroyed. However, the channel may not
|
230
|
-
// actually be destroyed by the time grpc_channel_destroy() returns,
|
231
|
-
// since there may be other existing refs to the channel. If those
|
232
|
-
// refs are held by things that are visible to the wrapped language
|
233
|
-
// (such as outstanding calls on the channel), then the wrapped
|
234
|
-
// language can be responsible for making sure that grpc_shutdown()
|
235
|
-
// does not run until after those refs are released. However, the
|
236
|
-
// channel may also have refs to itself held internally for various
|
237
|
-
// things that need to be cleaned up at channel destruction (e.g.,
|
238
|
-
// LB policies, subchannels, etc), and because these refs are not
|
239
|
-
// visible to the wrapped language, it cannot be responsible for
|
240
|
-
// deferring grpc_shutdown() until after they are released. To
|
241
|
-
// accommodate that, we call grpc_init() here and then call
|
242
|
-
// grpc_shutdown() when the channel is actually destroyed, thus
|
243
|
-
// ensuring that shutdown is deferred until that point.
|
244
|
-
grpc_init();
|
245
|
-
grpc_core::ChannelStackBuilderImpl builder(
|
205
|
+
grpc_transport* optional_transport) {
|
206
|
+
ChannelStackBuilderImpl builder(
|
246
207
|
grpc_channel_stack_type_string(channel_stack_type), channel_stack_type);
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
208
|
+
if (!args.GetString(GRPC_ARG_DEFAULT_AUTHORITY).has_value()) {
|
209
|
+
auto ssl_override = args.GetString(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG);
|
210
|
+
if (ssl_override.has_value()) {
|
211
|
+
args = args.Set(GRPC_ARG_DEFAULT_AUTHORITY,
|
212
|
+
std::string(ssl_override.value()));
|
213
|
+
}
|
214
|
+
}
|
251
215
|
if (grpc_channel_stack_type_is_client(channel_stack_type)) {
|
252
216
|
auto channel_args_mutator =
|
253
217
|
grpc_channel_args_get_client_channel_creation_mutator();
|
@@ -255,12 +219,10 @@ grpc_channel* grpc_channel_create_internal(
|
|
255
219
|
args = channel_args_mutator(target, args, channel_stack_type);
|
256
220
|
}
|
257
221
|
}
|
258
|
-
builder.SetChannelArgs(args)
|
259
|
-
|
260
|
-
|
261
|
-
if (!
|
262
|
-
&builder)) {
|
263
|
-
grpc_shutdown(); // Since we won't call destroy_channel().
|
222
|
+
builder.SetChannelArgs(std::move(args))
|
223
|
+
.SetTarget(target)
|
224
|
+
.SetTransport(optional_transport);
|
225
|
+
if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
|
264
226
|
return nullptr;
|
265
227
|
}
|
266
228
|
// We only need to do this for clients here. For servers, this will be
|
@@ -268,60 +230,43 @@ grpc_channel* grpc_channel_create_internal(
|
|
268
230
|
if (grpc_channel_stack_type_is_client(channel_stack_type)) {
|
269
231
|
CreateChannelzNode(&builder);
|
270
232
|
}
|
271
|
-
|
272
|
-
grpc_channel_create_with_builder(&builder, channel_stack_type, error);
|
273
|
-
if (channel == nullptr) {
|
274
|
-
grpc_shutdown(); // Since we won't call destroy_channel().
|
275
|
-
}
|
276
|
-
return channel;
|
233
|
+
return CreateWithBuilder(&builder);
|
277
234
|
}
|
278
235
|
|
279
|
-
|
280
|
-
|
281
|
-
/* We round up our current estimate to the NEXT value of ROUND_UP_SIZE.
|
282
|
-
This ensures:
|
283
|
-
1. a consistent size allocation when our estimate is drifting slowly
|
284
|
-
(which is common) - which tends to help most allocators reuse memory
|
285
|
-
2. a small amount of allowed growth over the estimate without hitting
|
286
|
-
the arena size doubling case, reducing overall memory usage */
|
287
|
-
return (static_cast<size_t>(
|
288
|
-
gpr_atm_no_barrier_load(&channel->call_size_estimate)) +
|
289
|
-
2 * ROUND_UP_SIZE) &
|
290
|
-
~static_cast<size_t>(ROUND_UP_SIZE - 1);
|
291
|
-
}
|
292
|
-
|
293
|
-
void grpc_channel_update_call_size_estimate(grpc_channel* channel,
|
294
|
-
size_t size) {
|
295
|
-
size_t cur = static_cast<size_t>(
|
296
|
-
gpr_atm_no_barrier_load(&channel->call_size_estimate));
|
236
|
+
void Channel::UpdateCallSizeEstimate(size_t size) {
|
237
|
+
size_t cur = call_size_estimate_.load(std::memory_order_relaxed);
|
297
238
|
if (cur < size) {
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
/* if we lose: never mind, something else will likely update soon enough */
|
239
|
+
// size grew: update estimate
|
240
|
+
call_size_estimate_.compare_exchange_weak(
|
241
|
+
cur, size, std::memory_order_relaxed, std::memory_order_relaxed);
|
242
|
+
// if we lose: never mind, something else will likely update soon enough
|
303
243
|
} else if (cur == size) {
|
304
|
-
|
244
|
+
// no change: holding pattern
|
305
245
|
} else if (cur > 0) {
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
246
|
+
// size shrank: decrease estimate
|
247
|
+
call_size_estimate_.compare_exchange_weak(
|
248
|
+
cur, std::min(cur - 1, (255 * cur + size) / 256),
|
249
|
+
std::memory_order_relaxed, std::memory_order_relaxed);
|
250
|
+
// if we lose: never mind, something else will likely update soon enough
|
311
251
|
}
|
312
252
|
}
|
313
253
|
|
254
|
+
} // namespace grpc_core
|
255
|
+
|
314
256
|
char* grpc_channel_get_target(grpc_channel* channel) {
|
315
257
|
GRPC_API_TRACE("grpc_channel_get_target(channel=%p)", 1, (channel));
|
316
|
-
|
258
|
+
auto target = grpc_core::Channel::FromC(channel)->target();
|
259
|
+
char* buffer = static_cast<char*>(gpr_zalloc(target.size() + 1));
|
260
|
+
memcpy(buffer, target.data(), target.size());
|
261
|
+
return buffer;
|
317
262
|
}
|
318
263
|
|
319
264
|
void grpc_channel_get_info(grpc_channel* channel,
|
320
265
|
const grpc_channel_info* channel_info) {
|
321
266
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
322
267
|
grpc_core::ExecCtx exec_ctx;
|
323
|
-
grpc_channel_element* elem =
|
324
|
-
|
268
|
+
grpc_channel_element* elem = grpc_channel_stack_element(
|
269
|
+
grpc_core::Channel::FromC(channel)->channel_stack(), 0);
|
325
270
|
elem->filter->get_channel_info(elem, channel_info);
|
326
271
|
}
|
327
272
|
|
@@ -332,21 +277,22 @@ void grpc_channel_reset_connect_backoff(grpc_channel* channel) {
|
|
332
277
|
(channel));
|
333
278
|
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
334
279
|
op->reset_connect_backoff = true;
|
335
|
-
grpc_channel_element* elem =
|
336
|
-
|
280
|
+
grpc_channel_element* elem = grpc_channel_stack_element(
|
281
|
+
grpc_core::Channel::FromC(channel)->channel_stack(), 0);
|
337
282
|
elem->filter->start_transport_op(elem, op);
|
338
283
|
}
|
339
284
|
|
340
285
|
static grpc_call* grpc_channel_create_call_internal(
|
341
|
-
grpc_channel*
|
286
|
+
grpc_channel* c_channel, grpc_call* parent_call, uint32_t propagation_mask,
|
342
287
|
grpc_completion_queue* cq, grpc_pollset_set* pollset_set_alternative,
|
343
288
|
grpc_core::Slice path, absl::optional<grpc_core::Slice> authority,
|
344
289
|
grpc_core::Timestamp deadline) {
|
345
|
-
|
290
|
+
auto channel = grpc_core::Channel::FromC(c_channel)->Ref();
|
291
|
+
GPR_ASSERT(channel->is_client());
|
346
292
|
GPR_ASSERT(!(cq != nullptr && pollset_set_alternative != nullptr));
|
347
293
|
|
348
294
|
grpc_call_create_args args;
|
349
|
-
args.channel = channel;
|
295
|
+
args.channel = std::move(channel);
|
350
296
|
args.server = nullptr;
|
351
297
|
args.parent = parent_call;
|
352
298
|
args.propagation_mask = propagation_mask;
|
@@ -424,20 +370,27 @@ void* grpc_channel_register_call(grpc_channel* channel, const char* method,
|
|
424
370
|
GPR_ASSERT(!reserved);
|
425
371
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
426
372
|
grpc_core::ExecCtx exec_ctx;
|
373
|
+
return grpc_core::Channel::FromC(channel)->RegisterCall(method, host);
|
374
|
+
}
|
375
|
+
|
376
|
+
namespace grpc_core {
|
427
377
|
|
428
|
-
|
429
|
-
|
378
|
+
RegisteredCall* Channel::RegisterCall(const char* method, const char* host) {
|
379
|
+
MutexLock lock(®istration_table_.mu);
|
380
|
+
registration_table_.method_registration_attempts++;
|
430
381
|
auto key = std::make_pair(std::string(host != nullptr ? host : ""),
|
431
382
|
std::string(method != nullptr ? method : ""));
|
432
|
-
auto rc_posn =
|
433
|
-
if (rc_posn !=
|
383
|
+
auto rc_posn = registration_table_.map.find(key);
|
384
|
+
if (rc_posn != registration_table_.map.end()) {
|
434
385
|
return &rc_posn->second;
|
435
386
|
}
|
436
|
-
auto insertion_result =
|
437
|
-
{std::move(key),
|
387
|
+
auto insertion_result = registration_table_.map.insert(
|
388
|
+
{std::move(key), RegisteredCall(method, host)});
|
438
389
|
return &insertion_result.first->second;
|
439
390
|
}
|
440
391
|
|
392
|
+
} // namespace grpc_core
|
393
|
+
|
441
394
|
grpc_call* grpc_channel_create_registered_call(
|
442
395
|
grpc_channel* channel, grpc_call* parent_call, uint32_t propagation_mask,
|
443
396
|
grpc_completion_queue* completion_queue, void* registered_call_handle,
|
@@ -469,32 +422,16 @@ grpc_call* grpc_channel_create_registered_call(
|
|
469
422
|
return call;
|
470
423
|
}
|
471
424
|
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
channel->channelz_node->AddTraceEvent(
|
476
|
-
grpc_core::channelz::ChannelTrace::Severity::Info,
|
477
|
-
grpc_slice_from_static_string("Channel destroyed"));
|
478
|
-
channel->channelz_node.reset();
|
479
|
-
}
|
480
|
-
grpc_channel_stack_destroy(CHANNEL_STACK_FROM_CHANNEL(channel));
|
481
|
-
channel->registration_table.Destroy();
|
482
|
-
channel->allocator.Destroy();
|
483
|
-
channel->target.Destroy();
|
484
|
-
gpr_free(channel);
|
485
|
-
// See comment in grpc_channel_create_internal() for why we do this.
|
486
|
-
grpc_shutdown();
|
487
|
-
}
|
488
|
-
|
489
|
-
void grpc_channel_destroy_internal(grpc_channel* channel) {
|
425
|
+
void grpc_channel_destroy_internal(grpc_channel* c_channel) {
|
426
|
+
grpc_core::RefCountedPtr<grpc_core::Channel> channel(
|
427
|
+
grpc_core::Channel::FromC(c_channel));
|
490
428
|
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
491
429
|
grpc_channel_element* elem;
|
492
|
-
GRPC_API_TRACE("grpc_channel_destroy(channel=%p)", 1, (
|
430
|
+
GRPC_API_TRACE("grpc_channel_destroy(channel=%p)", 1, (c_channel));
|
493
431
|
op->disconnect_with_error =
|
494
432
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel Destroyed");
|
495
|
-
elem = grpc_channel_stack_element(
|
433
|
+
elem = grpc_channel_stack_element(channel->channel_stack(), 0);
|
496
434
|
elem->filter->start_transport_op(elem, op);
|
497
|
-
GRPC_CHANNEL_INTERNAL_UNREF(channel, "channel");
|
498
435
|
}
|
499
436
|
|
500
437
|
void grpc_channel_destroy(grpc_channel* channel) {
|