grpc 1.57.0 → 1.58.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +534 -284
- data/include/grpc/event_engine/event_engine.h +0 -1
- data/include/grpc/event_engine/memory_allocator.h +2 -2
- data/include/grpc/impl/channel_arg_names.h +371 -0
- data/include/grpc/impl/grpc_types.h +1 -353
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +7 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +10 -5
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +115 -109
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.h +0 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +7 -2
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +11 -3
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +8 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +102 -11
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +9 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +6 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +41 -14
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +9 -5
- data/src/core/ext/filters/client_channel/subchannel.h +8 -2
- data/src/core/ext/filters/deadline/deadline_filter.cc +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +1 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +4 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +8 -12
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +357 -358
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -18
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +63 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +7 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +30 -57
- data/src/core/ext/transport/chttp2/transport/parsing.cc +16 -7
- data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +80 -0
- data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.h +55 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +98 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +73 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +81 -89
- data/src/core/ext/transport/inproc/inproc_transport.cc +1 -0
- data/src/core/ext/xds/xds_client_grpc.cc +1 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +1 -2
- data/src/core/ext/xds/xds_http_fault_filter.h +1 -2
- data/src/core/ext/xds/xds_http_filters.h +2 -4
- data/src/core/ext/xds/xds_http_rbac_filter.cc +3 -8
- data/src/core/ext/xds/xds_http_rbac_filter.h +1 -2
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +1 -2
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +1 -2
- data/src/core/ext/xds/xds_lb_policy_registry.cc +3 -6
- data/src/core/ext/xds/xds_routing.cc +2 -2
- data/src/core/ext/xds/xds_transport_grpc.cc +1 -0
- data/src/core/lib/avl/avl.h +10 -173
- data/src/core/lib/channel/call_tracer.cc +289 -0
- data/src/core/lib/channel/call_tracer.h +35 -0
- data/src/core/lib/channel/channel_args.cc +84 -79
- data/src/core/lib/channel/channel_args.h +29 -17
- data/src/core/lib/channel/connected_channel.cc +0 -1
- data/src/core/lib/channel/promise_based_filter.cc +4 -1
- data/src/core/lib/compression/compression_internal.cc +8 -4
- data/src/core/lib/debug/stats_data.cc +93 -21
- data/src/core/lib/debug/stats_data.h +41 -0
- data/src/core/lib/event_engine/ares_resolver.cc +712 -0
- data/src/core/lib/event_engine/ares_resolver.h +150 -0
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +229 -0
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +117 -0
- data/src/core/lib/event_engine/forkable.cc +15 -1
- data/src/core/lib/event_engine/forkable.h +15 -0
- data/src/core/lib/event_engine/grpc_polled_fd.h +73 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +25 -3
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +10 -1
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +197 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +47 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +12 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -0
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +58 -0
- data/src/core/lib/event_engine/thread_pool/thread_count.h +161 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +7 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +86 -111
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +15 -61
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +3 -4
- data/src/core/lib/experiments/config.cc +14 -0
- data/src/core/lib/experiments/experiments.cc +141 -304
- data/src/core/lib/experiments/experiments.h +16 -17
- data/src/core/lib/gprpp/ref_counted.h +3 -1
- data/src/core/lib/gprpp/ref_counted_string.cc +44 -0
- data/src/core/lib/gprpp/ref_counted_string.h +146 -0
- data/src/core/lib/gprpp/time.h +2 -2
- data/src/core/lib/gprpp/work_serializer.cc +36 -0
- data/src/core/lib/gprpp/work_serializer.h +5 -0
- data/src/core/lib/http/httpcli_security_connector.cc +1 -0
- data/src/core/lib/iomgr/buffer_list.cc +2 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +7 -22
- data/src/core/lib/iomgr/tcp_posix.cc +3 -3
- data/src/core/lib/promise/detail/basic_seq.h +1 -372
- data/src/core/lib/promise/detail/seq_state.h +2076 -0
- data/src/core/lib/promise/seq.h +19 -2
- data/src/core/lib/promise/sleep.h +5 -10
- data/src/core/lib/promise/try_seq.h +34 -2
- data/src/core/lib/resource_quota/api.cc +1 -0
- data/src/core/lib/resource_quota/arena.cc +2 -0
- data/src/core/lib/resource_quota/arena.h +42 -8
- data/src/core/lib/resource_quota/memory_quota.cc +0 -1
- data/src/core/lib/resource_quota/resource_quota.h +1 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/rbac_policy.h +1 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +8 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +17 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +4 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +42 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +8 -5
- data/src/core/lib/security/transport/security_handshaker.cc +1 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +2 -0
- data/src/core/lib/surface/call.cc +32 -8
- data/src/core/lib/surface/channel.cc +1 -0
- data/src/core/lib/surface/completion_queue.cc +10 -0
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/server.cc +67 -64
- data/src/core/lib/surface/server.h +1 -15
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/tsi/alts/crypt/aes_gcm.cc +27 -2
- data/src/core/tsi/ssl_transport_security.cc +11 -0
- data/src/ruby/lib/grpc/generic/active_call.rb +9 -14
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/test/client.rb +16 -0
- data/src/ruby/spec/generic/rpc_server_spec.rb +3 -3
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -2
- data/third_party/abseil-cpp/absl/base/attributes.h +58 -5
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
- data/third_party/abseil-cpp/absl/base/casts.h +8 -8
- data/third_party/abseil-cpp/absl/base/config.h +89 -106
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +26 -1
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +50 -39
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +2 -1
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +17 -18
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +32 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +24 -4
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +31 -73
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -8
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +23 -32
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +2 -3
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/policy_checks.h +3 -3
- data/third_party/abseil-cpp/absl/base/prefetch.h +198 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +54 -29
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -1
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +167 -79
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +3 -21
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +46 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -0
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +85 -26
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -18
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +70 -29
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +437 -236
- data/third_party/abseil-cpp/absl/crc/crc32c.h +8 -1
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +14 -8
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -35
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +2 -10
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +1 -1
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +1 -1
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +4 -4
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +8 -10
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +17 -19
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +8 -8
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +59 -23
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +43 -19
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -0
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +1 -1
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +1 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +16 -15
- data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +1 -1
- data/third_party/abseil-cpp/absl/flags/marshalling.cc +43 -2
- data/third_party/abseil-cpp/absl/flags/marshalling.h +5 -0
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +9 -1
- data/third_party/abseil-cpp/absl/functional/bind_front.h +1 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +3 -3
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +37 -24
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +19 -9
- data/third_party/abseil-cpp/absl/hash/hash.h +7 -4
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +38 -15
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +6 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +48 -373
- data/third_party/abseil-cpp/absl/numeric/bits.h +4 -4
- data/third_party/abseil-cpp/absl/numeric/int128.cc +20 -8
- data/third_party/abseil-cpp/absl/numeric/int128.h +36 -39
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +0 -3
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +47 -30
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -3
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/platform.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +4 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +1 -1
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +4 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +12 -24
- data/third_party/abseil-cpp/absl/status/status.cc +11 -7
- data/third_party/abseil-cpp/absl/status/status.h +11 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +22 -8
- data/third_party/abseil-cpp/absl/strings/ascii.cc +54 -6
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -4
- data/third_party/abseil-cpp/absl/strings/charconv.h +2 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +1 -2
- data/third_party/abseil-cpp/absl/strings/cord.h +32 -5
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +23 -1
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +18 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +2 -5
- data/third_party/abseil-cpp/absl/strings/escaping.cc +10 -32
- data/third_party/abseil-cpp/absl/strings/escaping.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +2 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +0 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +15 -13
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +13 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +4 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +46 -20
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +1 -34
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +23 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +2 -77
- data/third_party/abseil-cpp/absl/strings/internal/memutil.h +4 -112
- data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +10 -31
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -8
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +5 -20
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +56 -6
- data/third_party/abseil-cpp/absl/strings/match.cc +87 -0
- data/third_party/abseil-cpp/absl/strings/match.h +19 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +154 -122
- data/third_party/abseil-cpp/absl/strings/numbers.h +1 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +7 -50
- data/third_party/abseil-cpp/absl/strings/str_cat.h +83 -15
- data/third_party/abseil-cpp/absl/strings/str_format.h +6 -3
- data/third_party/abseil-cpp/absl/strings/str_split.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +26 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +5 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +63 -43
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +111 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.h +63 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +11 -7
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +225 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +122 -114
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +12 -8
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +10 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +167 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +122 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.h +65 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +91 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +56 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +19 -113
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +42 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.h +90 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +151 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.h +70 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +407 -411
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +152 -118
- data/third_party/abseil-cpp/absl/time/clock.cc +6 -7
- data/third_party/abseil-cpp/absl/time/duration.cc +24 -26
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +3 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +8 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +6 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +4 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +4 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +322 -295
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +8 -17
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +51 -33
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +7 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +128 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +5 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +34 -34
- data/third_party/abseil-cpp/absl/time/time.cc +9 -2
- data/third_party/abseil-cpp/absl/time/time.h +115 -15
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -52
- data/third_party/abseil-cpp/absl/types/internal/span.h +2 -2
- data/third_party/abseil-cpp/absl/types/internal/variant.h +2 -2
- data/third_party/abseil-cpp/absl/types/optional.h +15 -13
- data/third_party/abseil-cpp/absl/types/span.h +1 -2
- data/third_party/boringssl-with-bazel/err_data.c +15 -14
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/errno.c +92 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +4 -48
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +11 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +16 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +3 -7
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_fuchsia.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_linux.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_sysreg.c +93 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_win.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +9 -14
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +37 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +38 -19
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +39 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +13 -21
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +6 -23
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getentropy.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +2 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +11 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +7 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +6 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +22 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +20 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/target.h +50 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +4 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -0
- metadata +41 -33
- data/src/core/lib/promise/detail/basic_join.h +0 -197
- data/src/core/lib/promise/detail/switch.h +0 -1455
- data/src/core/lib/promise/try_join.h +0 -82
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -403
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +0 -62
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm.c +0 -38
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +0 -31
- data/third_party/re2/util/benchmark.h +0 -156
- data/third_party/re2/util/flags.h +0 -26
- data/third_party/re2/util/malloc_counter.h +0 -19
- data/third_party/re2/util/pcre.cc +0 -1025
- data/third_party/re2/util/pcre.h +0 -681
- data/third_party/re2/util/test.h +0 -50
- data/third_party/upb/upb/mini_table.h +0 -36
- data/third_party/zlib/gzclose.c +0 -25
- data/third_party/zlib/gzlib.c +0 -639
- data/third_party/zlib/gzread.c +0 -650
- data/third_party/zlib/gzwrite.c +0 -677
@@ -0,0 +1,150 @@
|
|
1
|
+
// Copyright 2023 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_ARES_RESOLVER_H
|
15
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_ARES_RESOLVER_H
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include "src/core/lib/debug/trace.h"
|
20
|
+
|
21
|
+
#if GRPC_ARES == 1
|
22
|
+
|
23
|
+
#include <list>
|
24
|
+
#include <memory>
|
25
|
+
|
26
|
+
#include <ares.h>
|
27
|
+
|
28
|
+
#include "absl/base/thread_annotations.h"
|
29
|
+
#include "absl/container/flat_hash_map.h"
|
30
|
+
#include "absl/status/status.h"
|
31
|
+
#include "absl/status/statusor.h"
|
32
|
+
#include "absl/strings/string_view.h"
|
33
|
+
#include "absl/types/optional.h"
|
34
|
+
#include "absl/types/variant.h"
|
35
|
+
|
36
|
+
#include <grpc/event_engine/event_engine.h>
|
37
|
+
#include <grpc/support/log.h>
|
38
|
+
|
39
|
+
#include "src/core/lib/event_engine/grpc_polled_fd.h"
|
40
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
41
|
+
#include "src/core/lib/gprpp/sync.h"
|
42
|
+
|
43
|
+
namespace grpc_event_engine {
|
44
|
+
namespace experimental {
|
45
|
+
|
46
|
+
extern grpc_core::TraceFlag grpc_trace_ares_resolver;
|
47
|
+
|
48
|
+
#define GRPC_ARES_RESOLVER_TRACE_LOG(format, ...) \
|
49
|
+
do { \
|
50
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_ares_resolver)) { \
|
51
|
+
gpr_log(GPR_INFO, "(EventEngine c-ares resolver) " format, __VA_ARGS__); \
|
52
|
+
} \
|
53
|
+
} while (0)
|
54
|
+
|
55
|
+
class AresResolver : public grpc_core::InternallyRefCounted<AresResolver> {
|
56
|
+
public:
|
57
|
+
static absl::StatusOr<grpc_core::OrphanablePtr<AresResolver>>
|
58
|
+
CreateAresResolver(absl::string_view dns_server,
|
59
|
+
std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory,
|
60
|
+
std::shared_ptr<EventEngine> event_engine);
|
61
|
+
|
62
|
+
// Do not instantiate directly -- use CreateAresResolver() instead.
|
63
|
+
AresResolver(std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory,
|
64
|
+
std::shared_ptr<EventEngine> event_engine, ares_channel channel);
|
65
|
+
~AresResolver() override;
|
66
|
+
void Orphan() override ABSL_LOCKS_EXCLUDED(mutex_);
|
67
|
+
|
68
|
+
void LookupHostname(absl::string_view name, absl::string_view default_port,
|
69
|
+
EventEngine::DNSResolver::LookupHostnameCallback callback)
|
70
|
+
ABSL_LOCKS_EXCLUDED(mutex_);
|
71
|
+
void LookupSRV(absl::string_view name,
|
72
|
+
EventEngine::DNSResolver::LookupSRVCallback callback)
|
73
|
+
ABSL_LOCKS_EXCLUDED(mutex_);
|
74
|
+
void LookupTXT(absl::string_view name,
|
75
|
+
EventEngine::DNSResolver::LookupTXTCallback callback)
|
76
|
+
ABSL_LOCKS_EXCLUDED(mutex_);
|
77
|
+
|
78
|
+
private:
|
79
|
+
// A FdNode saves (not owns) a live socket/fd which c-ares creates, and owns a
|
80
|
+
// GrpcPolledFd object which has a platform-agnostic interface to interact
|
81
|
+
// with the poller. The liveness of the socket means that c-ares needs us to
|
82
|
+
// monitor r/w events on this socket and notifies c-ares when such events have
|
83
|
+
// happened which we achieve through the GrpcPolledFd object. FdNode also
|
84
|
+
// handles the shutdown (maybe due to socket no longer used, finished request,
|
85
|
+
// cancel or timeout) and the destruction of the poller handle. Note that
|
86
|
+
// FdNode does not own the socket and it's the c-ares' responsibility to
|
87
|
+
// close the socket (possibly through ares_destroy).
|
88
|
+
struct FdNode {
|
89
|
+
FdNode() = default;
|
90
|
+
FdNode(ares_socket_t as, GrpcPolledFd* polled_fd)
|
91
|
+
: as(as), polled_fd(polled_fd) {}
|
92
|
+
ares_socket_t as;
|
93
|
+
std::unique_ptr<GrpcPolledFd> polled_fd;
|
94
|
+
// true if the readable closure has been registered
|
95
|
+
bool readable_registered = false;
|
96
|
+
// true if the writable closure has been registered
|
97
|
+
bool writable_registered = false;
|
98
|
+
bool already_shutdown = false;
|
99
|
+
};
|
100
|
+
using FdNodeList = std::list<std::unique_ptr<FdNode>>;
|
101
|
+
|
102
|
+
using CallbackType =
|
103
|
+
absl::variant<EventEngine::DNSResolver::LookupHostnameCallback,
|
104
|
+
EventEngine::DNSResolver::LookupSRVCallback,
|
105
|
+
EventEngine::DNSResolver::LookupTXTCallback>;
|
106
|
+
|
107
|
+
void CheckSocketsLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
|
108
|
+
void MaybeStartTimerLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
|
109
|
+
void OnReadable(FdNode* fd_node, absl::Status status)
|
110
|
+
ABSL_LOCKS_EXCLUDED(mutex_);
|
111
|
+
void OnWritable(FdNode* fd_node, absl::Status status)
|
112
|
+
ABSL_LOCKS_EXCLUDED(mutex_);
|
113
|
+
void OnAresBackupPollAlarm() ABSL_LOCKS_EXCLUDED(mutex_);
|
114
|
+
|
115
|
+
// These callbacks are invoked from the c-ares library, so disable thread
|
116
|
+
// safety analysis. We are guaranteed to be holding mutex_.
|
117
|
+
static void OnHostbynameDoneLocked(void* arg, int status, int /*timeouts*/,
|
118
|
+
struct hostent* hostent)
|
119
|
+
ABSL_NO_THREAD_SAFETY_ANALYSIS;
|
120
|
+
static void OnSRVQueryDoneLocked(void* arg, int status, int /*timeouts*/,
|
121
|
+
unsigned char* abuf,
|
122
|
+
int alen) ABSL_NO_THREAD_SAFETY_ANALYSIS;
|
123
|
+
static void OnTXTDoneLocked(void* arg, int status, int /*timeouts*/,
|
124
|
+
unsigned char* buf,
|
125
|
+
int len) ABSL_NO_THREAD_SAFETY_ANALYSIS;
|
126
|
+
|
127
|
+
grpc_core::Mutex mutex_;
|
128
|
+
bool shutting_down_ ABSL_GUARDED_BY(mutex_) = false;
|
129
|
+
ares_channel channel_ ABSL_GUARDED_BY(mutex_);
|
130
|
+
FdNodeList fd_node_list_ ABSL_GUARDED_BY(mutex_);
|
131
|
+
int id_ ABSL_GUARDED_BY(mutex_) = 0;
|
132
|
+
absl::flat_hash_map<int, CallbackType> callback_map_ ABSL_GUARDED_BY(mutex_);
|
133
|
+
absl::optional<EventEngine::TaskHandle> ares_backup_poll_alarm_handle_
|
134
|
+
ABSL_GUARDED_BY(mutex_);
|
135
|
+
std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory_;
|
136
|
+
std::shared_ptr<EventEngine> event_engine_;
|
137
|
+
};
|
138
|
+
|
139
|
+
} // namespace experimental
|
140
|
+
} // namespace grpc_event_engine
|
141
|
+
|
142
|
+
// Exposed in this header for C-core tests only
|
143
|
+
extern void (*event_engine_grpc_ares_test_only_inject_config)(
|
144
|
+
ares_channel* channel);
|
145
|
+
|
146
|
+
// Exposed in this header for C-core tests only
|
147
|
+
extern bool g_event_engine_grpc_ares_test_only_force_tcp;
|
148
|
+
|
149
|
+
#endif // GRPC_ARES == 1
|
150
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_ARES_RESOLVER_H
|
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
#include "src/core/lib/event_engine/cf_engine/cf_engine.h"
|
24
24
|
#include "src/core/lib/event_engine/cf_engine/cfstream_endpoint.h"
|
25
|
+
#include "src/core/lib/event_engine/cf_engine/dns_service_resolver.h"
|
25
26
|
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
|
26
27
|
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
27
28
|
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
|
@@ -156,9 +157,14 @@ bool CFEventEngine::CancelConnectInternal(ConnectionHandle handle,
|
|
156
157
|
bool CFEventEngine::IsWorkerThread() { grpc_core::Crash("unimplemented"); }
|
157
158
|
|
158
159
|
absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>>
|
159
|
-
CFEventEngine::GetDNSResolver(
|
160
|
-
|
161
|
-
|
160
|
+
CFEventEngine::GetDNSResolver(const DNSResolver::ResolverOptions& options) {
|
161
|
+
if (!options.dns_server.empty()) {
|
162
|
+
return absl::InvalidArgumentError(
|
163
|
+
"CFEventEngine does not support custom DNS servers");
|
164
|
+
}
|
165
|
+
|
166
|
+
return std::make_unique<DNSServiceResolver>(
|
167
|
+
std::static_pointer_cast<CFEventEngine>(shared_from_this()));
|
162
168
|
}
|
163
169
|
|
164
170
|
void CFEventEngine::Run(EventEngine::Closure* closure) {
|
@@ -96,8 +96,8 @@ void CFStreamEndpointImpl::Connect(
|
|
96
96
|
std::string host_string;
|
97
97
|
std::string port_string;
|
98
98
|
grpc_core::SplitHostPort(host_port.value(), &host_string, &port_string);
|
99
|
-
CFStringRef host = CFStringCreateWithCString(
|
100
|
-
|
99
|
+
CFTypeUniqueRef<CFStringRef> host = CFStringCreateWithCString(
|
100
|
+
NULL, host_string.c_str(), kCFStringEncodingUTF8);
|
101
101
|
int port = ResolvedAddressGetPort(peer_address_);
|
102
102
|
CFStreamCreatePairWithSocketToHost(NULL, host, port, &cf_read_stream_,
|
103
103
|
&cf_write_stream_);
|
@@ -0,0 +1,229 @@
|
|
1
|
+
// Copyright 2023 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#ifdef GPR_APPLE
|
18
|
+
|
19
|
+
#include "absl/strings/str_format.h"
|
20
|
+
|
21
|
+
#include "src/core/lib/address_utils/parse_address.h"
|
22
|
+
#include "src/core/lib/event_engine/cf_engine/dns_service_resolver.h"
|
23
|
+
#include "src/core/lib/event_engine/posix_engine/lockfree_event.h"
|
24
|
+
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
25
|
+
#include "src/core/lib/event_engine/trace.h"
|
26
|
+
#include "src/core/lib/gprpp/host_port.h"
|
27
|
+
|
28
|
+
namespace grpc_event_engine {
|
29
|
+
namespace experimental {
|
30
|
+
|
31
|
+
void DNSServiceResolverImpl::LookupHostname(
|
32
|
+
EventEngine::DNSResolver::LookupHostnameCallback on_resolve,
|
33
|
+
absl::string_view name, absl::string_view default_port) {
|
34
|
+
GRPC_EVENT_ENGINE_DNS_TRACE(
|
35
|
+
"DNSServiceResolverImpl::LookupHostname: name: %.*s, default_port: %.*s, "
|
36
|
+
"this: %p",
|
37
|
+
static_cast<int>(name.length()), name.data(),
|
38
|
+
static_cast<int>(default_port.length()), default_port.data(), this);
|
39
|
+
|
40
|
+
absl::string_view host;
|
41
|
+
absl::string_view port_string;
|
42
|
+
if (!grpc_core::SplitHostPort(name, &host, &port_string)) {
|
43
|
+
engine_->Run([on_resolve = std::move(on_resolve),
|
44
|
+
status = absl::InvalidArgumentError(
|
45
|
+
absl::StrCat("Unparseable name: ", name))]() mutable {
|
46
|
+
on_resolve(status);
|
47
|
+
});
|
48
|
+
return;
|
49
|
+
}
|
50
|
+
GPR_ASSERT(!host.empty());
|
51
|
+
if (port_string.empty()) {
|
52
|
+
if (default_port.empty()) {
|
53
|
+
engine_->Run([on_resolve = std::move(on_resolve),
|
54
|
+
status = absl::InvalidArgumentError(absl::StrFormat(
|
55
|
+
"No port in name %s or default_port argument",
|
56
|
+
name))]() mutable { on_resolve(std::move(status)); });
|
57
|
+
return;
|
58
|
+
}
|
59
|
+
port_string = default_port;
|
60
|
+
}
|
61
|
+
|
62
|
+
int port = 0;
|
63
|
+
if (port_string == "http") {
|
64
|
+
port = 80;
|
65
|
+
} else if (port_string == "https") {
|
66
|
+
port = 443;
|
67
|
+
} else if (!absl::SimpleAtoi(port_string, &port)) {
|
68
|
+
engine_->Run([on_resolve = std::move(on_resolve),
|
69
|
+
status = absl::InvalidArgumentError(absl::StrCat(
|
70
|
+
"Failed to parse port in name: ", name))]() mutable {
|
71
|
+
on_resolve(std::move(status));
|
72
|
+
});
|
73
|
+
return;
|
74
|
+
}
|
75
|
+
|
76
|
+
// TODO(yijiem): Change this when refactoring code in
|
77
|
+
// src/core/lib/address_utils to use EventEngine::ResolvedAddress.
|
78
|
+
grpc_resolved_address addr;
|
79
|
+
const std::string hostport = grpc_core::JoinHostPort(host, port);
|
80
|
+
if (grpc_parse_ipv4_hostport(hostport.c_str(), &addr,
|
81
|
+
/*log_errors=*/false) ||
|
82
|
+
grpc_parse_ipv6_hostport(hostport.c_str(), &addr,
|
83
|
+
/*log_errors=*/false)) {
|
84
|
+
// Early out if the target is an ipv4 or ipv6 literal, otherwise dns service
|
85
|
+
// responses with kDNSServiceErr_NoSuchRecord
|
86
|
+
std::vector<EventEngine::ResolvedAddress> result;
|
87
|
+
result.emplace_back(reinterpret_cast<sockaddr*>(addr.addr), addr.len);
|
88
|
+
engine_->Run([on_resolve = std::move(on_resolve),
|
89
|
+
result = std::move(result)]() mutable {
|
90
|
+
on_resolve(std::move(result));
|
91
|
+
});
|
92
|
+
return;
|
93
|
+
}
|
94
|
+
|
95
|
+
DNSServiceRef sdRef;
|
96
|
+
auto host_string = std::string{host};
|
97
|
+
auto error = DNSServiceGetAddrInfo(
|
98
|
+
&sdRef, kDNSServiceFlagsTimeout | kDNSServiceFlagsReturnIntermediates, 0,
|
99
|
+
kDNSServiceProtocol_IPv4 | kDNSServiceProtocol_IPv6, host_string.c_str(),
|
100
|
+
&DNSServiceResolverImpl::ResolveCallback, this /* do not Ref */);
|
101
|
+
|
102
|
+
if (error != kDNSServiceErr_NoError) {
|
103
|
+
engine_->Run([on_resolve = std::move(on_resolve),
|
104
|
+
status = absl::UnknownError(absl::StrFormat(
|
105
|
+
"DNSServiceGetAddrInfo failed with error:%d",
|
106
|
+
error))]() mutable { on_resolve(std::move(status)); });
|
107
|
+
return;
|
108
|
+
}
|
109
|
+
|
110
|
+
grpc_core::ReleasableMutexLock lock(&request_mu_);
|
111
|
+
|
112
|
+
error = DNSServiceSetDispatchQueue(sdRef, queue_);
|
113
|
+
if (error != kDNSServiceErr_NoError) {
|
114
|
+
engine_->Run([on_resolve = std::move(on_resolve),
|
115
|
+
status = absl::UnknownError(absl::StrFormat(
|
116
|
+
"DNSServiceSetDispatchQueue failed with error:%d",
|
117
|
+
error))]() mutable { on_resolve(std::move(status)); });
|
118
|
+
return;
|
119
|
+
}
|
120
|
+
|
121
|
+
requests_.try_emplace(
|
122
|
+
sdRef, DNSServiceRequest{
|
123
|
+
std::move(on_resolve), static_cast<uint16_t>(port), {}});
|
124
|
+
}
|
125
|
+
|
126
|
+
/* static */
|
127
|
+
void DNSServiceResolverImpl::ResolveCallback(
|
128
|
+
DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex,
|
129
|
+
DNSServiceErrorType errorCode, const char* hostname,
|
130
|
+
const struct sockaddr* address, uint32_t ttl, void* context) {
|
131
|
+
GRPC_EVENT_ENGINE_DNS_TRACE(
|
132
|
+
"DNSServiceResolverImpl::ResolveCallback: sdRef: %p, flags: %x, "
|
133
|
+
"interface: %d, errorCode: %d, hostname: %s, addressFamily: %d, ttl: "
|
134
|
+
"%d, "
|
135
|
+
"this: %p",
|
136
|
+
sdRef, flags, interfaceIndex, errorCode, hostname, address->sa_family,
|
137
|
+
ttl, context);
|
138
|
+
|
139
|
+
// no need to increase refcount here, since ResolveCallback and Shutdown is
|
140
|
+
// called from the serial queue and it is guarenteed that it won't be called
|
141
|
+
// after the sdRef is deallocated
|
142
|
+
auto that = static_cast<DNSServiceResolverImpl*>(context);
|
143
|
+
|
144
|
+
grpc_core::ReleasableMutexLock lock(&that->request_mu_);
|
145
|
+
auto request_it = that->requests_.find(sdRef);
|
146
|
+
GPR_ASSERT(request_it != that->requests_.end());
|
147
|
+
auto& request = request_it->second;
|
148
|
+
|
149
|
+
if (errorCode != kDNSServiceErr_NoError &&
|
150
|
+
errorCode != kDNSServiceErr_NoSuchRecord) {
|
151
|
+
request.on_resolve(absl::UnknownError(absl::StrFormat(
|
152
|
+
"address lookup failed for %s: errorCode: %d", hostname, errorCode)));
|
153
|
+
that->requests_.erase(request_it);
|
154
|
+
DNSServiceRefDeallocate(sdRef);
|
155
|
+
return;
|
156
|
+
}
|
157
|
+
|
158
|
+
// set received ipv4 or ipv6 response, even for kDNSServiceErr_NoSuchRecord to
|
159
|
+
// mark that the response for the stack is received, it is possible that the
|
160
|
+
// one stack receives some results and the other stack gets
|
161
|
+
// kDNSServiceErr_NoSuchRecord error.
|
162
|
+
if (address->sa_family == AF_INET) {
|
163
|
+
request.has_ipv4_response = true;
|
164
|
+
} else if (address->sa_family == AF_INET6) {
|
165
|
+
request.has_ipv6_response = true;
|
166
|
+
}
|
167
|
+
|
168
|
+
// collect results if there is no error (not kDNSServiceErr_NoSuchRecord)
|
169
|
+
if (errorCode == kDNSServiceErr_NoError) {
|
170
|
+
request.result.emplace_back(address, address->sa_len);
|
171
|
+
auto& resolved_address = request.result.back();
|
172
|
+
if (address->sa_family == AF_INET) {
|
173
|
+
(const_cast<sockaddr_in*>(
|
174
|
+
reinterpret_cast<const sockaddr_in*>(resolved_address.address())))
|
175
|
+
->sin_port = htons(request.port);
|
176
|
+
} else if (address->sa_family == AF_INET6) {
|
177
|
+
(const_cast<sockaddr_in6*>(
|
178
|
+
reinterpret_cast<const sockaddr_in6*>(resolved_address.address())))
|
179
|
+
->sin6_port = htons(request.port);
|
180
|
+
}
|
181
|
+
|
182
|
+
GRPC_EVENT_ENGINE_DNS_TRACE(
|
183
|
+
"DNSServiceResolverImpl::ResolveCallback: "
|
184
|
+
"sdRef: %p, hostname: %s, addressPort: %s, this: %p",
|
185
|
+
sdRef, hostname,
|
186
|
+
ResolvedAddressToString(resolved_address).value_or("ERROR").c_str(),
|
187
|
+
context);
|
188
|
+
}
|
189
|
+
|
190
|
+
// received both ipv4 and ipv6 responses, and no more responses (e.g. multiple
|
191
|
+
// IP addresses for a domain name) are coming, finish `LookupHostname` resolve
|
192
|
+
// with the collected results.
|
193
|
+
if (!(flags & kDNSServiceFlagsMoreComing) && request.has_ipv4_response &&
|
194
|
+
request.has_ipv6_response) {
|
195
|
+
if (request.result.empty()) {
|
196
|
+
request.on_resolve(absl::NotFoundError(absl::StrFormat(
|
197
|
+
"address lookup failed for %s: Domain name not found", hostname)));
|
198
|
+
} else {
|
199
|
+
request.on_resolve(std::move(request.result));
|
200
|
+
}
|
201
|
+
that->requests_.erase(request_it);
|
202
|
+
DNSServiceRefDeallocate(sdRef);
|
203
|
+
}
|
204
|
+
}
|
205
|
+
|
206
|
+
void DNSServiceResolverImpl::Shutdown() {
|
207
|
+
dispatch_async_f(queue_, Ref().release(), [](void* thatPtr) {
|
208
|
+
grpc_core::RefCountedPtr<DNSServiceResolverImpl> that{
|
209
|
+
static_cast<DNSServiceResolverImpl*>(thatPtr)};
|
210
|
+
grpc_core::MutexLock lock(&that->request_mu_);
|
211
|
+
for (auto& kv : that->requests_) {
|
212
|
+
auto& sdRef = kv.first;
|
213
|
+
auto& request = kv.second;
|
214
|
+
GRPC_EVENT_ENGINE_DNS_TRACE(
|
215
|
+
"DNSServiceResolverImpl::Shutdown sdRef: %p, this: %p", sdRef,
|
216
|
+
thatPtr);
|
217
|
+
|
218
|
+
request.on_resolve(
|
219
|
+
absl::CancelledError("DNSServiceResolverImpl::Shutdown"));
|
220
|
+
DNSServiceRefDeallocate(static_cast<DNSServiceRef>(sdRef));
|
221
|
+
}
|
222
|
+
that->requests_.clear();
|
223
|
+
});
|
224
|
+
}
|
225
|
+
|
226
|
+
} // namespace experimental
|
227
|
+
} // namespace grpc_event_engine
|
228
|
+
|
229
|
+
#endif // GPR_APPLE
|
@@ -0,0 +1,117 @@
|
|
1
|
+
// Copyright 2023 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_CF_ENGINE_DNS_SERVICE_RESOLVER_H
|
15
|
+
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_CF_ENGINE_DNS_SERVICE_RESOLVER_H
|
16
|
+
#include <grpc/support/port_platform.h>
|
17
|
+
|
18
|
+
#ifdef GPR_APPLE
|
19
|
+
|
20
|
+
#include <CoreFoundation/CoreFoundation.h>
|
21
|
+
#include <dns_sd.h>
|
22
|
+
|
23
|
+
#include "absl/container/flat_hash_map.h"
|
24
|
+
|
25
|
+
#include <grpc/event_engine/event_engine.h>
|
26
|
+
|
27
|
+
#include "src/core/lib/event_engine/cf_engine/cf_engine.h"
|
28
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
29
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
30
|
+
|
31
|
+
namespace grpc_event_engine {
|
32
|
+
namespace experimental {
|
33
|
+
|
34
|
+
class DNSServiceResolverImpl
|
35
|
+
: public grpc_core::RefCounted<DNSServiceResolverImpl> {
|
36
|
+
struct DNSServiceRequest {
|
37
|
+
EventEngine::DNSResolver::LookupHostnameCallback on_resolve;
|
38
|
+
uint16_t port;
|
39
|
+
std::vector<EventEngine::ResolvedAddress> result;
|
40
|
+
bool has_ipv4_response = false;
|
41
|
+
bool has_ipv6_response = false;
|
42
|
+
};
|
43
|
+
|
44
|
+
public:
|
45
|
+
explicit DNSServiceResolverImpl(std::shared_ptr<CFEventEngine> engine)
|
46
|
+
: engine_(std::move((engine))) {}
|
47
|
+
~DNSServiceResolverImpl() override {
|
48
|
+
GPR_ASSERT(requests_.empty());
|
49
|
+
dispatch_release(queue_);
|
50
|
+
}
|
51
|
+
|
52
|
+
void Shutdown();
|
53
|
+
|
54
|
+
void LookupHostname(
|
55
|
+
EventEngine::DNSResolver::LookupHostnameCallback on_resolve,
|
56
|
+
absl::string_view name, absl::string_view default_port);
|
57
|
+
|
58
|
+
private:
|
59
|
+
static void ResolveCallback(DNSServiceRef sdRef, DNSServiceFlags flags,
|
60
|
+
uint32_t interfaceIndex,
|
61
|
+
DNSServiceErrorType errorCode,
|
62
|
+
const char* hostname,
|
63
|
+
const struct sockaddr* address, uint32_t ttl,
|
64
|
+
void* context);
|
65
|
+
|
66
|
+
private:
|
67
|
+
std::shared_ptr<CFEventEngine> engine_;
|
68
|
+
// DNSServiceSetDispatchQueue requires a serial dispatch queue
|
69
|
+
dispatch_queue_t queue_ =
|
70
|
+
dispatch_queue_create("dns_service_resolver", nullptr);
|
71
|
+
grpc_core::Mutex request_mu_;
|
72
|
+
absl::flat_hash_map<DNSServiceRef, DNSServiceRequest> requests_
|
73
|
+
ABSL_GUARDED_BY(request_mu_);
|
74
|
+
};
|
75
|
+
|
76
|
+
class DNSServiceResolver : public EventEngine::DNSResolver {
|
77
|
+
public:
|
78
|
+
explicit DNSServiceResolver(std::shared_ptr<CFEventEngine> engine)
|
79
|
+
: engine_(std::move(engine)),
|
80
|
+
impl_(grpc_core::MakeRefCounted<DNSServiceResolverImpl>(
|
81
|
+
std::move((engine_)))) {}
|
82
|
+
|
83
|
+
~DNSServiceResolver() override { impl_->Shutdown(); }
|
84
|
+
|
85
|
+
void LookupHostname(
|
86
|
+
EventEngine::DNSResolver::LookupHostnameCallback on_resolve,
|
87
|
+
absl::string_view name, absl::string_view default_port) override {
|
88
|
+
impl_->LookupHostname(std::move(on_resolve), name, default_port);
|
89
|
+
};
|
90
|
+
|
91
|
+
void LookupSRV(EventEngine::DNSResolver::LookupSRVCallback on_resolve,
|
92
|
+
absl::string_view /* name */) override {
|
93
|
+
engine_->Run([on_resolve = std::move(on_resolve)]() mutable {
|
94
|
+
on_resolve(absl::UnimplementedError(
|
95
|
+
"The DNS Service resolver does not support looking up SRV records"));
|
96
|
+
});
|
97
|
+
}
|
98
|
+
|
99
|
+
void LookupTXT(EventEngine::DNSResolver::LookupTXTCallback on_resolve,
|
100
|
+
absl::string_view /* name */) override {
|
101
|
+
engine_->Run([on_resolve = std::move(on_resolve)]() mutable {
|
102
|
+
on_resolve(absl::UnimplementedError(
|
103
|
+
"The DNS Service resolver does not support looking up TXT records"));
|
104
|
+
});
|
105
|
+
}
|
106
|
+
|
107
|
+
private:
|
108
|
+
std::shared_ptr<CFEventEngine> engine_;
|
109
|
+
grpc_core::RefCountedPtr<DNSServiceResolverImpl> impl_;
|
110
|
+
};
|
111
|
+
|
112
|
+
} // namespace experimental
|
113
|
+
} // namespace grpc_event_engine
|
114
|
+
|
115
|
+
#endif // GPR_APPLE
|
116
|
+
|
117
|
+
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_CF_ENGINE_DNS_SERVICE_RESOLVER_H
|
@@ -35,6 +35,8 @@
|
|
35
35
|
namespace grpc_event_engine {
|
36
36
|
namespace experimental {
|
37
37
|
|
38
|
+
grpc_core::TraceFlag grpc_trace_fork(false, "fork");
|
39
|
+
|
38
40
|
namespace {
|
39
41
|
grpc_core::NoDestruct<grpc_core::Mutex> g_mu;
|
40
42
|
bool g_registered ABSL_GUARDED_BY(g_mu){false};
|
@@ -58,41 +60,52 @@ void RegisterForkHandlers() {
|
|
58
60
|
grpc_core::MutexLock lock(g_mu.get());
|
59
61
|
if (!std::exchange(g_registered, true)) {
|
60
62
|
#ifdef GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
|
63
|
+
GRPC_FORK_TRACE_LOG_STRING("RegisterForkHandlers");
|
61
64
|
pthread_atfork(PrepareFork, PostforkParent, PostforkChild);
|
62
65
|
#endif
|
63
66
|
}
|
64
67
|
}
|
65
|
-
}
|
68
|
+
}
|
66
69
|
|
67
70
|
void PrepareFork() {
|
68
71
|
if (IsForkEnabled()) {
|
72
|
+
GRPC_FORK_TRACE_LOG_STRING("PrepareFork");
|
69
73
|
grpc_core::MutexLock lock(g_mu.get());
|
70
74
|
for (auto forkable_iter = g_forkables->rbegin();
|
71
75
|
forkable_iter != g_forkables->rend(); ++forkable_iter) {
|
72
76
|
(*forkable_iter)->PrepareFork();
|
73
77
|
}
|
78
|
+
GRPC_FORK_TRACE_LOG_STRING("PrepareFork finished");
|
74
79
|
}
|
75
80
|
}
|
81
|
+
|
76
82
|
void PostforkParent() {
|
77
83
|
if (IsForkEnabled()) {
|
84
|
+
GRPC_FORK_TRACE_LOG_STRING("PostforkParent");
|
78
85
|
grpc_core::MutexLock lock(g_mu.get());
|
79
86
|
for (auto* forkable : *g_forkables) {
|
87
|
+
GRPC_FORK_TRACE_LOG("Calling PostforkParent for forkable::%p", forkable);
|
80
88
|
forkable->PostforkParent();
|
81
89
|
}
|
90
|
+
GRPC_FORK_TRACE_LOG_STRING("PostforkParent finished");
|
82
91
|
}
|
83
92
|
}
|
84
93
|
|
85
94
|
void PostforkChild() {
|
86
95
|
if (IsForkEnabled()) {
|
96
|
+
GRPC_FORK_TRACE_LOG_STRING("PostforkChild");
|
87
97
|
grpc_core::MutexLock lock(g_mu.get());
|
88
98
|
for (auto* forkable : *g_forkables) {
|
99
|
+
GRPC_FORK_TRACE_LOG("Calling PostforkChild for forkable::%p", forkable);
|
89
100
|
forkable->PostforkChild();
|
90
101
|
}
|
102
|
+
GRPC_FORK_TRACE_LOG_STRING("PostforkChild finished");
|
91
103
|
}
|
92
104
|
}
|
93
105
|
|
94
106
|
void ManageForkable(Forkable* forkable) {
|
95
107
|
if (IsForkEnabled()) {
|
108
|
+
GRPC_FORK_TRACE_LOG("Manage forkable::%p", forkable);
|
96
109
|
grpc_core::MutexLock lock(g_mu.get());
|
97
110
|
g_forkables->push_back(forkable);
|
98
111
|
}
|
@@ -100,6 +113,7 @@ void ManageForkable(Forkable* forkable) {
|
|
100
113
|
|
101
114
|
void StopManagingForkable(Forkable* forkable) {
|
102
115
|
if (IsForkEnabled()) {
|
116
|
+
GRPC_FORK_TRACE_LOG("Stop managing forkable::%p", forkable);
|
103
117
|
grpc_core::MutexLock lock(g_mu.get());
|
104
118
|
auto iter = std::find(g_forkables->begin(), g_forkables->end(), forkable);
|
105
119
|
GPR_ASSERT(iter != g_forkables->end());
|
@@ -16,9 +16,24 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
+
#include <grpc/support/log.h>
|
20
|
+
|
21
|
+
#include "src/core/lib/debug/trace.h"
|
22
|
+
|
19
23
|
namespace grpc_event_engine {
|
20
24
|
namespace experimental {
|
21
25
|
|
26
|
+
extern grpc_core::TraceFlag grpc_trace_fork;
|
27
|
+
|
28
|
+
#define GRPC_FORK_TRACE_LOG(format, ...) \
|
29
|
+
do { \
|
30
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_fork)) { \
|
31
|
+
gpr_log(GPR_DEBUG, "[fork] " format, __VA_ARGS__); \
|
32
|
+
} \
|
33
|
+
} while (0)
|
34
|
+
|
35
|
+
#define GRPC_FORK_TRACE_LOG_STRING(format) GRPC_FORK_TRACE_LOG("%s", format)
|
36
|
+
|
22
37
|
// Register fork handlers with the system, enabling fork support.
|
23
38
|
//
|
24
39
|
// This provides pthread-based support for fork events. Any objects that
|