grpc 1.47.0 → 1.48.0.pre1
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 +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -54,7 +54,7 @@ namespace {
|
|
54
54
|
|
55
55
|
absl::optional<std::string> ParseHealthCheckConfig(const Json& field,
|
56
56
|
grpc_error_handle* error) {
|
57
|
-
GPR_DEBUG_ASSERT(error != nullptr && *error
|
57
|
+
GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
|
58
58
|
if (field.type() != Json::Type::OBJECT) {
|
59
59
|
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
60
60
|
"field:healthCheckConfig error:should be of type object");
|
@@ -82,7 +82,7 @@ std::unique_ptr<ServiceConfigParser::ParsedConfig>
|
|
82
82
|
ClientChannelServiceConfigParser::ParseGlobalParams(
|
83
83
|
const grpc_channel_args* /*args*/, const Json& json,
|
84
84
|
grpc_error_handle* error) {
|
85
|
-
GPR_DEBUG_ASSERT(error != nullptr && *error
|
85
|
+
GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
|
86
86
|
std::vector<grpc_error_handle> error_list;
|
87
87
|
// Parse LB config.
|
88
88
|
RefCountedPtr<LoadBalancingPolicy::Config> parsed_lb_config;
|
@@ -91,7 +91,7 @@ ClientChannelServiceConfigParser::ParseGlobalParams(
|
|
91
91
|
grpc_error_handle parse_error = GRPC_ERROR_NONE;
|
92
92
|
parsed_lb_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
|
93
93
|
it->second, &parse_error);
|
94
|
-
if (parse_error
|
94
|
+
if (!GRPC_ERROR_IS_NONE(parse_error)) {
|
95
95
|
std::vector<grpc_error_handle> lb_errors;
|
96
96
|
lb_errors.push_back(parse_error);
|
97
97
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_VECTOR(
|
@@ -130,13 +130,13 @@ ClientChannelServiceConfigParser::ParseGlobalParams(
|
|
130
130
|
grpc_error_handle parsing_error = GRPC_ERROR_NONE;
|
131
131
|
health_check_service_name =
|
132
132
|
ParseHealthCheckConfig(it->second, &parsing_error);
|
133
|
-
if (parsing_error
|
133
|
+
if (!GRPC_ERROR_IS_NONE(parsing_error)) {
|
134
134
|
error_list.push_back(parsing_error);
|
135
135
|
}
|
136
136
|
}
|
137
137
|
*error = GRPC_ERROR_CREATE_FROM_VECTOR("Client channel global parser",
|
138
138
|
&error_list);
|
139
|
-
if (*error
|
139
|
+
if (GRPC_ERROR_IS_NONE(*error)) {
|
140
140
|
return absl::make_unique<ClientChannelGlobalParsedConfig>(
|
141
141
|
std::move(parsed_lb_config), std::move(lb_policy_name),
|
142
142
|
std::move(health_check_service_name));
|
@@ -148,7 +148,7 @@ std::unique_ptr<ServiceConfigParser::ParsedConfig>
|
|
148
148
|
ClientChannelServiceConfigParser::ParsePerMethodParams(
|
149
149
|
const grpc_channel_args* /*args*/, const Json& json,
|
150
150
|
grpc_error_handle* error) {
|
151
|
-
GPR_DEBUG_ASSERT(error != nullptr && *error
|
151
|
+
GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
|
152
152
|
std::vector<grpc_error_handle> error_list;
|
153
153
|
// Parse waitForReady.
|
154
154
|
absl::optional<bool> wait_for_ready;
|
@@ -169,7 +169,7 @@ ClientChannelServiceConfigParser::ParsePerMethodParams(
|
|
169
169
|
&error_list, false);
|
170
170
|
// Return result.
|
171
171
|
*error = GRPC_ERROR_CREATE_FROM_VECTOR("Client channel parser", &error_list);
|
172
|
-
if (*error
|
172
|
+
if (GRPC_ERROR_IS_NONE(*error)) {
|
173
173
|
return absl::make_unique<ClientChannelMethodParsedConfig>(timeout,
|
174
174
|
wait_for_ready);
|
175
175
|
}
|
@@ -33,6 +33,7 @@
|
|
33
33
|
#include "absl/strings/string_view.h"
|
34
34
|
#include "absl/strings/strip.h"
|
35
35
|
#include "absl/types/optional.h"
|
36
|
+
#include "absl/utility/utility.h"
|
36
37
|
|
37
38
|
#include <grpc/impl/codegen/grpc_types.h>
|
38
39
|
#include <grpc/slice.h>
|
@@ -47,13 +48,12 @@
|
|
47
48
|
#include "src/core/lib/backoff/backoff.h"
|
48
49
|
#include "src/core/lib/channel/channel_args.h"
|
49
50
|
#include "src/core/lib/channel/channel_stack.h"
|
50
|
-
#include "src/core/lib/channel/channel_stack_builder.h"
|
51
51
|
#include "src/core/lib/channel/context.h"
|
52
52
|
#include "src/core/lib/channel/status_util.h"
|
53
53
|
#include "src/core/lib/debug/trace.h"
|
54
54
|
#include "src/core/lib/gpr/useful.h"
|
55
|
+
#include "src/core/lib/gprpp/construct_destruct.h"
|
55
56
|
#include "src/core/lib/gprpp/debug_location.h"
|
56
|
-
#include "src/core/lib/gprpp/manual_constructor.h"
|
57
57
|
#include "src/core/lib/gprpp/orphanable.h"
|
58
58
|
#include "src/core/lib/gprpp/ref_counted.h"
|
59
59
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
@@ -67,8 +67,8 @@
|
|
67
67
|
#include "src/core/lib/resource_quota/arena.h"
|
68
68
|
#include "src/core/lib/service_config/service_config.h"
|
69
69
|
#include "src/core/lib/service_config/service_config_call_data.h"
|
70
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
70
71
|
#include "src/core/lib/slice/slice_refcount.h"
|
71
|
-
#include "src/core/lib/transport/byte_stream.h"
|
72
72
|
#include "src/core/lib/transport/error_utils.h"
|
73
73
|
#include "src/core/lib/transport/metadata_batch.h"
|
74
74
|
#include "src/core/lib/transport/transport.h"
|
@@ -457,9 +457,6 @@ class RetryFilter::CallData {
|
|
457
457
|
grpc_transport_stream_op_batch_payload batch_payload_;
|
458
458
|
// For send_initial_metadata.
|
459
459
|
grpc_metadata_batch send_initial_metadata_{calld_->arena_};
|
460
|
-
// For send_message.
|
461
|
-
// TODO(roth): Restructure this to eliminate use of ManualConstructor.
|
462
|
-
ManualConstructor<ByteStreamCache::CachingByteStream> send_message_;
|
463
460
|
// For send_trailing_metadata.
|
464
461
|
grpc_metadata_batch send_trailing_metadata_{calld_->arena_};
|
465
462
|
// For intercepting recv_initial_metadata.
|
@@ -468,7 +465,8 @@ class RetryFilter::CallData {
|
|
468
465
|
bool trailing_metadata_available_ = false;
|
469
466
|
// For intercepting recv_message.
|
470
467
|
grpc_closure recv_message_ready_;
|
471
|
-
|
468
|
+
absl::optional<SliceBuffer> recv_message_;
|
469
|
+
uint32_t recv_message_flags_;
|
472
470
|
// For intercepting recv_trailing_metadata.
|
473
471
|
grpc_metadata_batch recv_trailing_metadata_{calld_->arena_};
|
474
472
|
grpc_transport_stream_stats collect_stats_;
|
@@ -629,11 +627,11 @@ class RetryFilter::CallData {
|
|
629
627
|
// Note: We inline the cache for the first 3 send_message ops and use
|
630
628
|
// dynamic allocation after that. This number was essentially picked
|
631
629
|
// at random; it could be changed in the future to tune performance.
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
absl::InlinedVector<
|
630
|
+
struct CachedSendMessage {
|
631
|
+
SliceBuffer* slices;
|
632
|
+
uint32_t flags;
|
633
|
+
};
|
634
|
+
absl::InlinedVector<CachedSendMessage, 3> send_messages_;
|
637
635
|
// send_trailing_metadata
|
638
636
|
bool seen_send_trailing_metadata_ = false;
|
639
637
|
grpc_metadata_batch send_trailing_metadata_{arena_};
|
@@ -1282,7 +1280,7 @@ void RetryFilter::CallData::CallAttempt::OnPerAttemptRecvTimerLocked(
|
|
1282
1280
|
call_attempt->per_attempt_recv_timer_pending_);
|
1283
1281
|
}
|
1284
1282
|
CallCombinerClosureList closures;
|
1285
|
-
if (error
|
1283
|
+
if (GRPC_ERROR_IS_NONE(error) &&
|
1286
1284
|
call_attempt->per_attempt_recv_timer_pending_) {
|
1287
1285
|
call_attempt->per_attempt_recv_timer_pending_ = false;
|
1288
1286
|
// Cancel this attempt.
|
@@ -1454,7 +1452,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
|
|
1454
1452
|
// callback back to the surface. We can evaluate whether to retry when
|
1455
1453
|
// recv_trailing_metadata comes back.
|
1456
1454
|
if (GPR_UNLIKELY((call_attempt->trailing_metadata_available_ ||
|
1457
|
-
error
|
1455
|
+
!GRPC_ERROR_IS_NONE(error)) &&
|
1458
1456
|
!call_attempt->completed_recv_trailing_metadata_)) {
|
1459
1457
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
1460
1458
|
gpr_log(GPR_INFO,
|
@@ -1466,7 +1464,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvInitialMetadataReady(
|
|
1466
1464
|
std::move(batch_data);
|
1467
1465
|
call_attempt->recv_initial_metadata_error_ = GRPC_ERROR_REF(error);
|
1468
1466
|
CallCombinerClosureList closures;
|
1469
|
-
if (error
|
1467
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
1470
1468
|
call_attempt->MaybeAddBatchForCancelOp(GRPC_ERROR_REF(error),
|
1471
1469
|
&closures);
|
1472
1470
|
}
|
@@ -1512,6 +1510,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
1512
1510
|
// Return payload.
|
1513
1511
|
*pending->batch->payload->recv_message.recv_message =
|
1514
1512
|
std::move(call_attempt_->recv_message_);
|
1513
|
+
*pending->batch->payload->recv_message.flags =
|
1514
|
+
call_attempt_->recv_message_flags_;
|
1515
1515
|
// Update bookkeeping.
|
1516
1516
|
// Note: Need to do this before invoking the callback, since invoking
|
1517
1517
|
// the callback will result in yielding the call combiner.
|
@@ -1556,8 +1556,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
|
|
1556
1556
|
// the recv_trailing_metadata_ready callback, then defer propagating this
|
1557
1557
|
// callback back to the surface. We can evaluate whether to retry when
|
1558
1558
|
// recv_trailing_metadata comes back.
|
1559
|
-
if (GPR_UNLIKELY((call_attempt->recv_message_
|
1560
|
-
error
|
1559
|
+
if (GPR_UNLIKELY((!call_attempt->recv_message_.has_value() ||
|
1560
|
+
!GRPC_ERROR_IS_NONE(error)) &&
|
1561
1561
|
!call_attempt->completed_recv_trailing_metadata_)) {
|
1562
1562
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
1563
1563
|
gpr_log(GPR_INFO,
|
@@ -1568,7 +1568,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvMessageReady(
|
|
1568
1568
|
call_attempt->recv_message_ready_deferred_batch_ = std::move(batch_data);
|
1569
1569
|
call_attempt->recv_message_error_ = GRPC_ERROR_REF(error);
|
1570
1570
|
CallCombinerClosureList closures;
|
1571
|
-
if (error
|
1571
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
1572
1572
|
call_attempt->MaybeAddBatchForCancelOp(GRPC_ERROR_REF(error),
|
1573
1573
|
&closures);
|
1574
1574
|
}
|
@@ -1606,7 +1606,7 @@ void GetCallStatus(
|
|
1606
1606
|
grpc_status_code* status, absl::optional<Duration>* server_pushback,
|
1607
1607
|
bool* is_lb_drop,
|
1608
1608
|
absl::optional<GrpcStreamNetworkState::ValueType>* stream_network_state) {
|
1609
|
-
if (error
|
1609
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
1610
1610
|
grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
|
1611
1611
|
intptr_t value = 0;
|
1612
1612
|
if (grpc_error_get_int(error, GRPC_ERROR_INT_LB_POLICY_DROP, &value) &&
|
@@ -1801,7 +1801,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::RecvTrailingMetadataReady(
|
|
1801
1801
|
CallCombinerClosureList closures;
|
1802
1802
|
// Cancel call attempt.
|
1803
1803
|
call_attempt->MaybeAddBatchForCancelOp(
|
1804
|
-
error
|
1804
|
+
GRPC_ERROR_IS_NONE(error)
|
1805
1805
|
? grpc_error_set_int(
|
1806
1806
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("call attempt failed"),
|
1807
1807
|
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_CANCELLED)
|
@@ -1919,7 +1919,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::OnComplete(
|
|
1919
1919
|
// recv_trailing_metadata_ready callback, then defer propagating this
|
1920
1920
|
// callback back to the surface. We can evaluate whether to retry when
|
1921
1921
|
// recv_trailing_metadata comes back.
|
1922
|
-
if (GPR_UNLIKELY(!calld->retry_committed_ && error
|
1922
|
+
if (GPR_UNLIKELY(!calld->retry_committed_ && !GRPC_ERROR_IS_NONE(error) &&
|
1923
1923
|
!call_attempt->completed_recv_trailing_metadata_)) {
|
1924
1924
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
1925
1925
|
gpr_log(GPR_INFO, "chand=%p calld=%p attempt=%p: deferring on_complete",
|
@@ -2030,13 +2030,12 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
2030
2030
|
calld->chand_, calld, call_attempt_.get(),
|
2031
2031
|
call_attempt_->started_send_message_count_);
|
2032
2032
|
}
|
2033
|
-
|
2033
|
+
CachedSendMessage cache =
|
2034
2034
|
calld->send_messages_[call_attempt_->started_send_message_count_];
|
2035
2035
|
++call_attempt_->started_send_message_count_;
|
2036
|
-
call_attempt_->send_message_.Init(cache);
|
2037
2036
|
batch_.send_message = true;
|
2038
|
-
batch_.payload->send_message.send_message.
|
2039
|
-
|
2037
|
+
batch_.payload->send_message.send_message = cache.slices;
|
2038
|
+
batch_.payload->send_message.flags = cache.flags;
|
2040
2039
|
}
|
2041
2040
|
|
2042
2041
|
void RetryFilter::CallData::CallAttempt::BatchData::
|
@@ -2073,6 +2072,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
|
|
2073
2072
|
++call_attempt_->started_recv_message_count_;
|
2074
2073
|
batch_.recv_message = true;
|
2075
2074
|
batch_.payload->recv_message.recv_message = &call_attempt_->recv_message_;
|
2075
|
+
batch_.payload->recv_message.flags = &call_attempt_->recv_message_flags_;
|
2076
2076
|
batch_.payload->recv_message.call_failed_before_recv_message = nullptr;
|
2077
2077
|
GRPC_CLOSURE_INIT(&call_attempt_->recv_message_ready_, RecvMessageReady, this,
|
2078
2078
|
grpc_schedule_on_exec_ctx);
|
@@ -2219,7 +2219,7 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
|
|
2219
2219
|
}
|
2220
2220
|
// If we were previously cancelled from the surface, fail this
|
2221
2221
|
// batch immediately.
|
2222
|
-
if (cancelled_from_surface_
|
2222
|
+
if (!GRPC_ERROR_IS_NONE(cancelled_from_surface_)) {
|
2223
2223
|
// Note: This will release the call combiner.
|
2224
2224
|
grpc_transport_stream_op_batch_finish_with_failure(
|
2225
2225
|
batch, GRPC_ERROR_REF(cancelled_from_surface_), call_combiner_);
|
@@ -2373,9 +2373,9 @@ void RetryFilter::CallData::MaybeCacheSendOpsForBatch(PendingBatch* pending) {
|
|
2373
2373
|
}
|
2374
2374
|
// Set up cache for send_message ops.
|
2375
2375
|
if (batch->send_message) {
|
2376
|
-
|
2377
|
-
|
2378
|
-
send_messages_.push_back(cache);
|
2376
|
+
SliceBuffer* cache = arena_->New<SliceBuffer>(std::move(
|
2377
|
+
*absl::exchange(batch->payload->send_message.send_message, nullptr)));
|
2378
|
+
send_messages_.push_back({cache, batch->payload->send_message.flags});
|
2379
2379
|
}
|
2380
2380
|
// Save metadata batch for send_trailing_metadata ops.
|
2381
2381
|
if (batch->send_trailing_metadata) {
|
@@ -2395,14 +2395,13 @@ void RetryFilter::CallData::FreeCachedSendInitialMetadata() {
|
|
2395
2395
|
}
|
2396
2396
|
|
2397
2397
|
void RetryFilter::CallData::FreeCachedSendMessage(size_t idx) {
|
2398
|
-
if (send_messages_[idx] != nullptr) {
|
2398
|
+
if (send_messages_[idx].slices != nullptr) {
|
2399
2399
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
2400
2400
|
gpr_log(GPR_INFO,
|
2401
2401
|
"chand=%p calld=%p: destroying send_messages[%" PRIuPTR "]",
|
2402
2402
|
chand_, this, idx);
|
2403
2403
|
}
|
2404
|
-
send_messages_[idx]
|
2405
|
-
send_messages_[idx] = nullptr;
|
2404
|
+
Destruct(absl::exchange(send_messages_[idx].slices, nullptr));
|
2406
2405
|
}
|
2407
2406
|
}
|
2408
2407
|
|
@@ -2466,7 +2465,7 @@ RetryFilter::CallData::PendingBatch* RetryFilter::CallData::PendingBatchesAdd(
|
|
2466
2465
|
if (batch->send_message) {
|
2467
2466
|
pending_send_message_ = true;
|
2468
2467
|
bytes_buffered_for_retry_ +=
|
2469
|
-
batch->payload->send_message.send_message->
|
2468
|
+
batch->payload->send_message.send_message->Length();
|
2470
2469
|
}
|
2471
2470
|
if (batch->send_trailing_metadata) {
|
2472
2471
|
pending_send_trailing_metadata_ = true;
|
@@ -2533,7 +2532,7 @@ void RetryFilter::CallData::FailPendingBatchInCallCombiner(
|
|
2533
2532
|
|
2534
2533
|
// This is called via the call combiner, so access to calld is synchronized.
|
2535
2534
|
void RetryFilter::CallData::PendingBatchesFail(grpc_error_handle error) {
|
2536
|
-
GPR_ASSERT(error
|
2535
|
+
GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
|
2537
2536
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
|
2538
2537
|
size_t num_batches = 0;
|
2539
2538
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2642,7 +2641,7 @@ void RetryFilter::CallData::OnRetryTimer(void* arg, grpc_error_handle error) {
|
|
2642
2641
|
void RetryFilter::CallData::OnRetryTimerLocked(void* arg,
|
2643
2642
|
grpc_error_handle error) {
|
2644
2643
|
auto* calld = static_cast<CallData*>(arg);
|
2645
|
-
if (error
|
2644
|
+
if (GRPC_ERROR_IS_NONE(error) && calld->retry_timer_pending_) {
|
2646
2645
|
calld->retry_timer_pending_ = false;
|
2647
2646
|
calld->CreateCallAttempt(/*is_transparent_retry=*/false);
|
2648
2647
|
} else {
|
@@ -2665,7 +2664,7 @@ void RetryFilter::CallData::AddClosureToStartTransparentRetry(
|
|
2665
2664
|
void RetryFilter::CallData::StartTransparentRetry(void* arg,
|
2666
2665
|
grpc_error_handle /*error*/) {
|
2667
2666
|
auto* calld = static_cast<CallData*>(arg);
|
2668
|
-
if (calld->cancelled_from_surface_
|
2667
|
+
if (GRPC_ERROR_IS_NONE(calld->cancelled_from_surface_)) {
|
2669
2668
|
calld->CreateCallAttempt(/*is_transparent_retry=*/true);
|
2670
2669
|
} else {
|
2671
2670
|
GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
|
@@ -141,14 +141,14 @@ std::unique_ptr<ServiceConfigParser::ParsedConfig>
|
|
141
141
|
RetryServiceConfigParser::ParseGlobalParams(const grpc_channel_args* /*args*/,
|
142
142
|
const Json& json,
|
143
143
|
grpc_error_handle* error) {
|
144
|
-
GPR_DEBUG_ASSERT(error != nullptr && *error
|
144
|
+
GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
|
145
145
|
auto it = json.object_value().find("retryThrottling");
|
146
146
|
if (it == json.object_value().end()) return nullptr;
|
147
147
|
intptr_t max_milli_tokens = 0;
|
148
148
|
intptr_t milli_token_ratio = 0;
|
149
149
|
*error =
|
150
150
|
ParseRetryThrottling(it->second, &max_milli_tokens, &milli_token_ratio);
|
151
|
-
if (*error
|
151
|
+
if (!GRPC_ERROR_IS_NONE(*error)) return nullptr;
|
152
152
|
return absl::make_unique<RetryGlobalConfig>(max_milli_tokens,
|
153
153
|
milli_token_ratio);
|
154
154
|
}
|
@@ -290,7 +290,7 @@ std::unique_ptr<ServiceConfigParser::ParsedConfig>
|
|
290
290
|
RetryServiceConfigParser::ParsePerMethodParams(const grpc_channel_args* args,
|
291
291
|
const Json& json,
|
292
292
|
grpc_error_handle* error) {
|
293
|
-
GPR_DEBUG_ASSERT(error != nullptr && *error
|
293
|
+
GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
|
294
294
|
// Parse retry policy.
|
295
295
|
auto it = json.object_value().find("retryPolicy");
|
296
296
|
if (it == json.object_value().end()) return nullptr;
|
@@ -303,7 +303,7 @@ RetryServiceConfigParser::ParsePerMethodParams(const grpc_channel_args* args,
|
|
303
303
|
*error = ParseRetryPolicy(args, it->second, &max_attempts, &initial_backoff,
|
304
304
|
&max_backoff, &backoff_multiplier,
|
305
305
|
&retryable_status_codes, &per_attempt_recv_timeout);
|
306
|
-
if (*error
|
306
|
+
if (!GRPC_ERROR_IS_NONE(*error)) return nullptr;
|
307
307
|
return absl::make_unique<RetryMethodConfig>(
|
308
308
|
max_attempts, initial_backoff, max_backoff, backoff_multiplier,
|
309
309
|
retryable_status_codes, per_attempt_recv_timeout);
|
@@ -29,6 +29,7 @@
|
|
29
29
|
#include <grpc/support/log.h>
|
30
30
|
|
31
31
|
#include "src/core/lib/channel/channel_args.h"
|
32
|
+
#include "src/core/lib/channel/channel_fwd.h"
|
32
33
|
#include "src/core/lib/channel/channel_stack.h"
|
33
34
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
34
35
|
#include "src/core/lib/channel/context.h"
|
@@ -57,7 +58,7 @@ class ServiceConfigChannelArgChannelData {
|
|
57
58
|
grpc_error_handle service_config_error = GRPC_ERROR_NONE;
|
58
59
|
auto service_config = ServiceConfigImpl::Create(
|
59
60
|
args->channel_args, service_config_str, &service_config_error);
|
60
|
-
if (service_config_error
|
61
|
+
if (GRPC_ERROR_IS_NONE(service_config_error)) {
|
61
62
|
service_config_ = std::move(service_config);
|
62
63
|
} else {
|
63
64
|
gpr_log(GPR_ERROR, "%s",
|
@@ -30,6 +30,7 @@
|
|
30
30
|
|
31
31
|
#include "absl/status/statusor.h"
|
32
32
|
|
33
|
+
#include <grpc/grpc.h>
|
33
34
|
#include <grpc/slice.h>
|
34
35
|
#include <grpc/status.h>
|
35
36
|
#include <grpc/support/alloc.h>
|
@@ -42,6 +43,7 @@
|
|
42
43
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
43
44
|
#include "src/core/lib/backoff/backoff.h"
|
44
45
|
#include "src/core/lib/channel/channel_args.h"
|
46
|
+
#include "src/core/lib/channel/channel_stack.h"
|
45
47
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
46
48
|
#include "src/core/lib/channel/channel_stack_builder_impl.h"
|
47
49
|
#include "src/core/lib/channel/channel_trace.h"
|
@@ -49,6 +51,7 @@
|
|
49
51
|
#include "src/core/lib/config/core_configuration.h"
|
50
52
|
#include "src/core/lib/debug/stats.h"
|
51
53
|
#include "src/core/lib/debug/trace.h"
|
54
|
+
#include "src/core/lib/event_engine/event_engine_factory.h"
|
52
55
|
#include "src/core/lib/gpr/alloc.h"
|
53
56
|
#include "src/core/lib/gprpp/debug_location.h"
|
54
57
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
@@ -81,6 +84,7 @@
|
|
81
84
|
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(SubchannelCall)))
|
82
85
|
|
83
86
|
namespace grpc_core {
|
87
|
+
using ::grpc_event_engine::experimental::GetDefaultEventEngine;
|
84
88
|
|
85
89
|
TraceFlag grpc_trace_subchannel(false, "subchannel");
|
86
90
|
DebugOnlyTraceFlag grpc_trace_subchannel_refcount(false, "subchannel_refcount");
|
@@ -160,7 +164,7 @@ SubchannelCall::SubchannelCall(Args args, grpc_error_handle* error)
|
|
160
164
|
};
|
161
165
|
*error = grpc_call_stack_init(connected_subchannel_->channel_stack(), 1,
|
162
166
|
SubchannelCall::Destroy, this, &call_args);
|
163
|
-
if (GPR_UNLIKELY(*error
|
167
|
+
if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(*error))) {
|
164
168
|
gpr_log(GPR_ERROR, "error: %s", grpc_error_std_string(*error).c_str());
|
165
169
|
return;
|
166
170
|
}
|
@@ -257,7 +261,7 @@ namespace {
|
|
257
261
|
// Sets *status based on the rest of the parameters.
|
258
262
|
void GetCallStatus(grpc_status_code* status, Timestamp deadline,
|
259
263
|
grpc_metadata_batch* md_batch, grpc_error_handle error) {
|
260
|
-
if (error
|
264
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
261
265
|
grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
|
262
266
|
} else {
|
263
267
|
*status = md_batch->get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
|
@@ -427,11 +431,8 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
427
431
|
grpc_connectivity_state state() const { return state_; }
|
428
432
|
|
429
433
|
void AddWatcherLocked(
|
430
|
-
grpc_connectivity_state initial_state,
|
431
434
|
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface> watcher) {
|
432
|
-
|
433
|
-
new AsyncWatcherNotifierLocked(watcher, state_, status_);
|
434
|
-
}
|
435
|
+
new AsyncWatcherNotifierLocked(watcher, state_, status_);
|
435
436
|
watcher_list_.AddWatcherLocked(std::move(watcher));
|
436
437
|
}
|
437
438
|
|
@@ -504,7 +505,6 @@ class Subchannel::HealthWatcherMap::HealthWatcher
|
|
504
505
|
|
505
506
|
void Subchannel::HealthWatcherMap::AddWatcherLocked(
|
506
507
|
WeakRefCountedPtr<Subchannel> subchannel,
|
507
|
-
grpc_connectivity_state initial_state,
|
508
508
|
const std::string& health_check_service_name,
|
509
509
|
RefCountedPtr<ConnectivityStateWatcherInterface> watcher) {
|
510
510
|
// If the health check service name is not already present in the map,
|
@@ -520,7 +520,7 @@ void Subchannel::HealthWatcherMap::AddWatcherLocked(
|
|
520
520
|
health_watcher = it->second.get();
|
521
521
|
}
|
522
522
|
// Add the watcher to the entry.
|
523
|
-
health_watcher->AddWatcherLocked(
|
523
|
+
health_watcher->AddWatcherLocked(std::move(watcher));
|
524
524
|
}
|
525
525
|
|
526
526
|
void Subchannel::HealthWatcherMap::RemoveWatcherLocked(
|
@@ -648,10 +648,18 @@ Subchannel::Subchannel(SubchannelKey key,
|
|
648
648
|
pollset_set_(grpc_pollset_set_create()),
|
649
649
|
connector_(std::move(connector)),
|
650
650
|
backoff_(ParseArgsForBackoffValues(args, &min_connect_timeout_)) {
|
651
|
+
// A grpc_init is added here to ensure that grpc_shutdown does not happen
|
652
|
+
// until the subchannel is destroyed. Subchannels can persist longer than
|
653
|
+
// channels because they maybe reused/shared among multiple channels. As a
|
654
|
+
// result the subchannel destruction happens asynchronously to channel
|
655
|
+
// destruction. If the last channel destruction triggers a grpc_shutdown
|
656
|
+
// before the last subchannel destruction, then there maybe race conditions
|
657
|
+
// triggering segmentation faults. To prevent this issue, we call a grpc_init
|
658
|
+
// here and a grpc_shutdown in the subchannel destructor.
|
659
|
+
grpc_init();
|
651
660
|
GRPC_STATS_INC_CLIENT_SUBCHANNELS_CREATED();
|
652
661
|
GRPC_CLOSURE_INIT(&on_connecting_finished_, OnConnectingFinished, this,
|
653
662
|
grpc_schedule_on_exec_ctx);
|
654
|
-
GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this, nullptr);
|
655
663
|
// Check proxy mapper to determine address to connect to and channel
|
656
664
|
// args to use.
|
657
665
|
address_for_connect_ = key_.address();
|
@@ -697,6 +705,8 @@ Subchannel::~Subchannel() {
|
|
697
705
|
grpc_channel_args_destroy(args_);
|
698
706
|
connector_.reset();
|
699
707
|
grpc_pollset_set_destroy(pollset_set_);
|
708
|
+
// grpc_shutdown is called here because grpc_init is called in the ctor.
|
709
|
+
grpc_shutdown();
|
700
710
|
}
|
701
711
|
|
702
712
|
RefCountedPtr<Subchannel> Subchannel::Create(
|
@@ -744,18 +754,7 @@ channelz::SubchannelNode* Subchannel::channelz_node() {
|
|
744
754
|
return channelz_node_.get();
|
745
755
|
}
|
746
756
|
|
747
|
-
grpc_connectivity_state Subchannel::CheckConnectivityState(
|
748
|
-
const absl::optional<std::string>& health_check_service_name) {
|
749
|
-
MutexLock lock(&mu_);
|
750
|
-
if (health_check_service_name.has_value()) {
|
751
|
-
return health_watcher_map_.CheckConnectivityStateLocked(
|
752
|
-
this, *health_check_service_name);
|
753
|
-
}
|
754
|
-
return state_;
|
755
|
-
}
|
756
|
-
|
757
757
|
void Subchannel::WatchConnectivityState(
|
758
|
-
grpc_connectivity_state initial_state,
|
759
758
|
const absl::optional<std::string>& health_check_service_name,
|
760
759
|
RefCountedPtr<ConnectivityStateWatcherInterface> watcher) {
|
761
760
|
MutexLock lock(&mu_);
|
@@ -764,14 +763,12 @@ void Subchannel::WatchConnectivityState(
|
|
764
763
|
grpc_pollset_set_add_pollset_set(pollset_set_, interested_parties);
|
765
764
|
}
|
766
765
|
if (!health_check_service_name.has_value()) {
|
767
|
-
|
768
|
-
new AsyncWatcherNotifierLocked(watcher, state_, status_);
|
769
|
-
}
|
766
|
+
new AsyncWatcherNotifierLocked(watcher, state_, status_);
|
770
767
|
watcher_list_.AddWatcherLocked(std::move(watcher));
|
771
768
|
} else {
|
772
769
|
health_watcher_map_.AddWatcherLocked(
|
773
|
-
WeakRef(DEBUG_LOCATION, "health_watcher"),
|
774
|
-
|
770
|
+
WeakRef(DEBUG_LOCATION, "health_watcher"), *health_check_service_name,
|
771
|
+
std::move(watcher));
|
775
772
|
}
|
776
773
|
}
|
777
774
|
|
@@ -795,16 +792,21 @@ void Subchannel::RequestConnection() {
|
|
795
792
|
MutexLock lock(&mu_);
|
796
793
|
if (state_ == GRPC_CHANNEL_IDLE) {
|
797
794
|
StartConnectingLocked();
|
798
|
-
} else if (state_ == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
799
|
-
connection_requested_ = true;
|
800
795
|
}
|
801
796
|
}
|
802
797
|
|
803
798
|
void Subchannel::ResetBackoff() {
|
799
|
+
// Hold a ref to ensure cancellation and subsequent deletion of the closure
|
800
|
+
// does not eliminate the last ref and destroy the Subchannel before the
|
801
|
+
// method returns.
|
802
|
+
auto self = WeakRef(DEBUG_LOCATION, "ResetBackoff");
|
804
803
|
MutexLock lock(&mu_);
|
805
804
|
backoff_.Reset();
|
806
|
-
if (state_ == GRPC_CHANNEL_TRANSIENT_FAILURE
|
807
|
-
|
805
|
+
if (state_ == GRPC_CHANNEL_TRANSIENT_FAILURE &&
|
806
|
+
GetDefaultEventEngine()->Cancel(retry_timer_handle_)) {
|
807
|
+
OnRetryTimerLocked();
|
808
|
+
} else if (state_ == GRPC_CHANNEL_CONNECTING) {
|
809
|
+
next_attempt_time_ = ExecCtx::Get()->Now();
|
808
810
|
}
|
809
811
|
}
|
810
812
|
|
@@ -887,29 +889,16 @@ void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state,
|
|
887
889
|
health_watcher_map_.NotifyLocked(state, status);
|
888
890
|
}
|
889
891
|
|
890
|
-
void Subchannel::OnRetryTimer(
|
891
|
-
|
892
|
-
|
893
|
-
MutexLock lock(&c->mu_);
|
894
|
-
c->OnRetryTimerLocked();
|
895
|
-
}
|
896
|
-
c.reset(DEBUG_LOCATION, "RetryTimer");
|
892
|
+
void Subchannel::OnRetryTimer() {
|
893
|
+
MutexLock lock(&mu_);
|
894
|
+
OnRetryTimerLocked();
|
897
895
|
}
|
898
896
|
|
899
897
|
void Subchannel::OnRetryTimerLocked() {
|
900
898
|
if (shutdown_) return;
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
"timer was pending, retrying now",
|
905
|
-
this, key_.ToString().c_str());
|
906
|
-
connection_requested_ = false;
|
907
|
-
StartConnectingLocked();
|
908
|
-
} else {
|
909
|
-
gpr_log(GPR_INFO, "subchannel %p %s: backoff delay elapsed, reporting IDLE",
|
910
|
-
this, key_.ToString().c_str());
|
911
|
-
SetConnectivityStateLocked(GRPC_CHANNEL_IDLE, absl::OkStatus());
|
912
|
-
}
|
899
|
+
gpr_log(GPR_INFO, "subchannel %p %s: backoff delay elapsed, reporting IDLE",
|
900
|
+
this, key_.ToString().c_str());
|
901
|
+
SetConnectivityStateLocked(GRPC_CHANNEL_IDLE, absl::OkStatus());
|
913
902
|
}
|
914
903
|
|
915
904
|
void Subchannel::StartConnectingLocked() {
|
@@ -960,8 +949,22 @@ void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
|
|
960
949
|
time_until_next_attempt.millis());
|
961
950
|
SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
|
962
951
|
grpc_error_to_absl_status(error));
|
963
|
-
|
964
|
-
|
952
|
+
retry_timer_handle_ = GetDefaultEventEngine()->RunAfter(
|
953
|
+
time_until_next_attempt,
|
954
|
+
[self = WeakRef(DEBUG_LOCATION, "RetryTimer")]() mutable {
|
955
|
+
{
|
956
|
+
ApplicationCallbackExecCtx callback_exec_ctx;
|
957
|
+
ExecCtx exec_ctx;
|
958
|
+
self->OnRetryTimer();
|
959
|
+
// Subchannel deletion might require an active ExecCtx. So if
|
960
|
+
// self.reset() is not called here, the WeakRefCountedPtr destructor
|
961
|
+
// may run after the ExecCtx declared in the callback is destroyed.
|
962
|
+
// Since subchannel may get destroyed when the WeakRefCountedPtr
|
963
|
+
// destructor runs, it may not have an active ExecCtx - thus leading
|
964
|
+
// to crashes.
|
965
|
+
self.reset();
|
966
|
+
}
|
967
|
+
});
|
965
968
|
}
|
966
969
|
(void)GRPC_ERROR_UNREF(error);
|
967
970
|
}
|