[EventEngine] Posix NativeDNSResolver implementation (#35153)

<!--

If you know who should review your pull request, please assign it to that
person, otherwise the pull request would get assigned randomly.

If your pull request is for a specific language, please add the appropriate
lang label.

-->

Closes #35153

COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/35153 from yijiem:native_dns_resolver a4107f7d81
PiperOrigin-RevId: 588543137
This commit is contained in:
Yijie Ma 2023-12-06 14:24:11 -08:00 committed by Copybara-Service
parent a58f3f2df5
commit 1abfc97502
27 changed files with 585 additions and 55 deletions

49
CMakeLists.txt generated
View File

@ -1212,6 +1212,9 @@ if(gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx posix_event_engine_connect_test)
endif()
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx posix_event_engine_native_dns_test)
endif()
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx posix_event_engine_test)
endif()
@ -2245,6 +2248,7 @@ add_library(grpc
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
src/core/lib/event_engine/posix_engine/internal_errqueue.cc
src/core/lib/event_engine/posix_engine/lockfree_event.cc
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
src/core/lib/event_engine/posix_engine/posix_endpoint.cc
src/core/lib/event_engine/posix_engine/posix_engine.cc
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
@ -2973,6 +2977,7 @@ add_library(grpc_unsecure
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
src/core/lib/event_engine/posix_engine/internal_errqueue.cc
src/core/lib/event_engine/posix_engine/lockfree_event.cc
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
src/core/lib/event_engine/posix_engine/posix_endpoint.cc
src/core/lib/event_engine/posix_engine/posix_engine.cc
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
@ -4961,6 +4966,7 @@ add_library(grpc_authorization_provider
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
src/core/lib/event_engine/posix_engine/internal_errqueue.cc
src/core/lib/event_engine/posix_engine/lockfree_event.cc
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
src/core/lib/event_engine/posix_engine/posix_endpoint.cc
src/core/lib/event_engine/posix_engine/posix_engine.cc
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
@ -18275,6 +18281,48 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX)
)
endif()
endif()
if(gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX)
add_executable(posix_event_engine_native_dns_test
test/core/event_engine/event_engine_test_utils.cc
test/core/event_engine/test_suite/event_engine_test_framework.cc
test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc
test/core/event_engine/test_suite/posix_event_engine_native_dns_test.cc
test/core/event_engine/test_suite/tests/dns_test.cc
test/core/util/fake_udp_and_tcp_server.cc
test/cpp/util/get_grpc_test_runfile_dir.cc
test/cpp/util/windows/manifest_file.cc
)
target_compile_features(posix_event_engine_native_dns_test PUBLIC cxx_std_14)
target_include_directories(posix_event_engine_native_dns_test
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
${_gRPC_RE2_INCLUDE_DIR}
${_gRPC_SSL_INCLUDE_DIR}
${_gRPC_UPB_GENERATED_DIR}
${_gRPC_UPB_GRPC_GENERATED_DIR}
${_gRPC_UPB_INCLUDE_DIR}
${_gRPC_XXHASH_INCLUDE_DIR}
${_gRPC_ZLIB_INCLUDE_DIR}
third_party/googletest/googletest/include
third_party/googletest/googletest
third_party/googletest/googlemock/include
third_party/googletest/googlemock
${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(posix_event_engine_native_dns_test
${_gRPC_ALLTARGETS_LIBRARIES}
gtest
grpc++_test_util
)
endif()
endif()
if(gRPC_BUILD_TESTS)
@ -24603,6 +24651,7 @@ add_executable(test_core_transport_chaotic_good_frame_test
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
src/core/lib/event_engine/posix_engine/internal_errqueue.cc
src/core/lib/event_engine/posix_engine/lockfree_event.cc
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
src/core/lib/event_engine/posix_engine/posix_endpoint.cc
src/core/lib/event_engine/posix_engine/posix_engine.cc
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc

2
Makefile generated
View File

@ -1450,6 +1450,7 @@ LIBGRPC_SRC = \
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc \
src/core/lib/event_engine/posix_engine/internal_errqueue.cc \
src/core/lib/event_engine/posix_engine/lockfree_event.cc \
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc \
src/core/lib/event_engine/posix_engine/posix_endpoint.cc \
src/core/lib/event_engine/posix_engine/posix_engine.cc \
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc \
@ -2028,6 +2029,7 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc \
src/core/lib/event_engine/posix_engine/internal_errqueue.cc \
src/core/lib/event_engine/posix_engine/lockfree_event.cc \
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc \
src/core/lib/event_engine/posix_engine/posix_endpoint.cc \
src/core/lib/event_engine/posix_engine/posix_engine.cc \
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc \

3
Package.swift generated
View File

@ -1277,6 +1277,8 @@ let package = Package(
"src/core/lib/event_engine/posix_engine/internal_errqueue.h",
"src/core/lib/event_engine/posix_engine/lockfree_event.cc",
"src/core/lib/event_engine/posix_engine/lockfree_event.h",
"src/core/lib/event_engine/posix_engine/native_dns_resolver.cc",
"src/core/lib/event_engine/posix_engine/native_dns_resolver.h",
"src/core/lib/event_engine/posix_engine/posix_endpoint.cc",
"src/core/lib/event_engine/posix_engine/posix_endpoint.h",
"src/core/lib/event_engine/posix_engine/posix_engine.cc",
@ -1303,6 +1305,7 @@ let package = Package(
"src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h",
"src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc",
"src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h",
"src/core/lib/event_engine/ref_counted_dns_resolver_interface.h",
"src/core/lib/event_engine/resolved_address.cc",
"src/core/lib/event_engine/resolved_address_internal.h",
"src/core/lib/event_engine/shim.cc",

View File

@ -877,6 +877,7 @@ libs:
- src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h
- src/core/lib/event_engine/posix_engine/internal_errqueue.h
- src/core/lib/event_engine/posix_engine/lockfree_event.h
- src/core/lib/event_engine/posix_engine/native_dns_resolver.h
- src/core/lib/event_engine/posix_engine/posix_endpoint.h
- src/core/lib/event_engine/posix_engine/posix_engine.h
- src/core/lib/event_engine/posix_engine/posix_engine_closure.h
@ -891,6 +892,7 @@ libs:
- src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h
- src/core/lib/event_engine/ref_counted_dns_resolver_interface.h
- src/core/lib/event_engine/resolved_address_internal.h
- src/core/lib/event_engine/shim.h
- src/core/lib/event_engine/tcp_socket_utils.h
@ -1699,6 +1701,7 @@ libs:
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
- src/core/lib/event_engine/posix_engine/internal_errqueue.cc
- src/core/lib/event_engine/posix_engine/lockfree_event.cc
- src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
- src/core/lib/event_engine/posix_engine/posix_endpoint.cc
- src/core/lib/event_engine/posix_engine/posix_engine.cc
- src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
@ -2331,6 +2334,7 @@ libs:
- src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h
- src/core/lib/event_engine/posix_engine/internal_errqueue.h
- src/core/lib/event_engine/posix_engine/lockfree_event.h
- src/core/lib/event_engine/posix_engine/native_dns_resolver.h
- src/core/lib/event_engine/posix_engine/posix_endpoint.h
- src/core/lib/event_engine/posix_engine/posix_engine.h
- src/core/lib/event_engine/posix_engine/posix_engine_closure.h
@ -2345,6 +2349,7 @@ libs:
- src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h
- src/core/lib/event_engine/ref_counted_dns_resolver_interface.h
- src/core/lib/event_engine/resolved_address_internal.h
- src/core/lib/event_engine/shim.h
- src/core/lib/event_engine/tcp_socket_utils.h
@ -2777,6 +2782,7 @@ libs:
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
- src/core/lib/event_engine/posix_engine/internal_errqueue.cc
- src/core/lib/event_engine/posix_engine/lockfree_event.cc
- src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
- src/core/lib/event_engine/posix_engine/posix_endpoint.cc
- src/core/lib/event_engine/posix_engine/posix_engine.cc
- src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
@ -4465,6 +4471,7 @@ libs:
- src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h
- src/core/lib/event_engine/posix_engine/internal_errqueue.h
- src/core/lib/event_engine/posix_engine/lockfree_event.h
- src/core/lib/event_engine/posix_engine/native_dns_resolver.h
- src/core/lib/event_engine/posix_engine/posix_endpoint.h
- src/core/lib/event_engine/posix_engine/posix_engine.h
- src/core/lib/event_engine/posix_engine/posix_engine_closure.h
@ -4479,6 +4486,7 @@ libs:
- src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h
- src/core/lib/event_engine/ref_counted_dns_resolver_interface.h
- src/core/lib/event_engine/resolved_address_internal.h
- src/core/lib/event_engine/shim.h
- src/core/lib/event_engine/tcp_socket_utils.h
@ -4818,6 +4826,7 @@ libs:
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
- src/core/lib/event_engine/posix_engine/internal_errqueue.cc
- src/core/lib/event_engine/posix_engine/lockfree_event.cc
- src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
- src/core/lib/event_engine/posix_engine/posix_endpoint.cc
- src/core/lib/event_engine/posix_engine/posix_engine.cc
- src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
@ -12970,6 +12979,33 @@ targets:
platforms:
- linux
- posix
- name: posix_event_engine_native_dns_test
gtest: true
build: test
language: c++
headers:
- test/core/event_engine/event_engine_test_utils.h
- test/core/event_engine/test_suite/event_engine_test_framework.h
- test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h
- test/core/event_engine/test_suite/tests/dns_test.h
- test/core/util/fake_udp_and_tcp_server.h
- test/cpp/util/get_grpc_test_runfile_dir.h
- test/cpp/util/windows/manifest_file.h
src:
- test/core/event_engine/event_engine_test_utils.cc
- test/core/event_engine/test_suite/event_engine_test_framework.cc
- test/core/event_engine/test_suite/posix/oracle_event_engine_posix.cc
- test/core/event_engine/test_suite/posix_event_engine_native_dns_test.cc
- test/core/event_engine/test_suite/tests/dns_test.cc
- test/core/util/fake_udp_and_tcp_server.cc
- test/cpp/util/get_grpc_test_runfile_dir.cc
- test/cpp/util/windows/manifest_file.cc
deps:
- gtest
- grpc++_test_util
platforms:
- linux
- posix
- name: posix_event_engine_test
gtest: true
build: test
@ -16795,6 +16831,7 @@ targets:
- src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h
- src/core/lib/event_engine/posix_engine/internal_errqueue.h
- src/core/lib/event_engine/posix_engine/lockfree_event.h
- src/core/lib/event_engine/posix_engine/native_dns_resolver.h
- src/core/lib/event_engine/posix_engine/posix_endpoint.h
- src/core/lib/event_engine/posix_engine/posix_engine.h
- src/core/lib/event_engine/posix_engine/posix_engine_closure.h
@ -16809,6 +16846,7 @@ targets:
- src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h
- src/core/lib/event_engine/ref_counted_dns_resolver_interface.h
- src/core/lib/event_engine/resolved_address_internal.h
- src/core/lib/event_engine/shim.h
- src/core/lib/event_engine/tcp_socket_utils.h
@ -17129,6 +17167,7 @@ targets:
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
- src/core/lib/event_engine/posix_engine/internal_errqueue.cc
- src/core/lib/event_engine/posix_engine/lockfree_event.cc
- src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
- src/core/lib/event_engine/posix_engine/posix_endpoint.cc
- src/core/lib/event_engine/posix_engine/posix_engine.cc
- src/core/lib/event_engine/posix_engine/posix_engine_listener.cc

1
config.m4 generated
View File

@ -540,6 +540,7 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc \
src/core/lib/event_engine/posix_engine/internal_errqueue.cc \
src/core/lib/event_engine/posix_engine/lockfree_event.cc \
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc \
src/core/lib/event_engine/posix_engine/posix_endpoint.cc \
src/core/lib/event_engine/posix_engine/posix_engine.cc \
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc \

1
config.w32 generated
View File

@ -505,6 +505,7 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\event_engine\\posix_engine\\event_poller_posix_default.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\internal_errqueue.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\lockfree_event.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\native_dns_resolver.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\posix_endpoint.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\posix_engine.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\posix_engine_listener.cc " +

4
gRPC-C++.podspec generated
View File

@ -951,6 +951,7 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h',
'src/core/lib/event_engine/posix_engine/internal_errqueue.h',
'src/core/lib/event_engine/posix_engine/lockfree_event.h',
'src/core/lib/event_engine/posix_engine/native_dns_resolver.h',
'src/core/lib/event_engine/posix_engine/posix_endpoint.h',
'src/core/lib/event_engine/posix_engine/posix_engine.h',
'src/core/lib/event_engine/posix_engine/posix_engine_closure.h',
@ -965,6 +966,7 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h',
'src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h',
'src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h',
'src/core/lib/event_engine/ref_counted_dns_resolver_interface.h',
'src/core/lib/event_engine/resolved_address_internal.h',
'src/core/lib/event_engine/shim.h',
'src/core/lib/event_engine/tcp_socket_utils.h',
@ -2183,6 +2185,7 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h',
'src/core/lib/event_engine/posix_engine/internal_errqueue.h',
'src/core/lib/event_engine/posix_engine/lockfree_event.h',
'src/core/lib/event_engine/posix_engine/native_dns_resolver.h',
'src/core/lib/event_engine/posix_engine/posix_endpoint.h',
'src/core/lib/event_engine/posix_engine/posix_engine.h',
'src/core/lib/event_engine/posix_engine/posix_engine_closure.h',
@ -2197,6 +2200,7 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h',
'src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h',
'src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h',
'src/core/lib/event_engine/ref_counted_dns_resolver_interface.h',
'src/core/lib/event_engine/resolved_address_internal.h',
'src/core/lib/event_engine/shim.h',
'src/core/lib/event_engine/tcp_socket_utils.h',

5
gRPC-Core.podspec generated
View File

@ -1380,6 +1380,8 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/posix_engine/internal_errqueue.h',
'src/core/lib/event_engine/posix_engine/lockfree_event.cc',
'src/core/lib/event_engine/posix_engine/lockfree_event.h',
'src/core/lib/event_engine/posix_engine/native_dns_resolver.cc',
'src/core/lib/event_engine/posix_engine/native_dns_resolver.h',
'src/core/lib/event_engine/posix_engine/posix_endpoint.cc',
'src/core/lib/event_engine/posix_engine/posix_endpoint.h',
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
@ -1406,6 +1408,7 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h',
'src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc',
'src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h',
'src/core/lib/event_engine/ref_counted_dns_resolver_interface.h',
'src/core/lib/event_engine/resolved_address.cc',
'src/core/lib/event_engine/resolved_address_internal.h',
'src/core/lib/event_engine/shim.cc',
@ -2945,6 +2948,7 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h',
'src/core/lib/event_engine/posix_engine/internal_errqueue.h',
'src/core/lib/event_engine/posix_engine/lockfree_event.h',
'src/core/lib/event_engine/posix_engine/native_dns_resolver.h',
'src/core/lib/event_engine/posix_engine/posix_endpoint.h',
'src/core/lib/event_engine/posix_engine/posix_engine.h',
'src/core/lib/event_engine/posix_engine/posix_engine_closure.h',
@ -2959,6 +2963,7 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h',
'src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h',
'src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h',
'src/core/lib/event_engine/ref_counted_dns_resolver_interface.h',
'src/core/lib/event_engine/resolved_address_internal.h',
'src/core/lib/event_engine/shim.h',
'src/core/lib/event_engine/tcp_socket_utils.h',

3
grpc.gemspec generated
View File

@ -1283,6 +1283,8 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/event_engine/posix_engine/internal_errqueue.h )
s.files += %w( src/core/lib/event_engine/posix_engine/lockfree_event.cc )
s.files += %w( src/core/lib/event_engine/posix_engine/lockfree_event.h )
s.files += %w( src/core/lib/event_engine/posix_engine/native_dns_resolver.cc )
s.files += %w( src/core/lib/event_engine/posix_engine/native_dns_resolver.h )
s.files += %w( src/core/lib/event_engine/posix_engine/posix_endpoint.cc )
s.files += %w( src/core/lib/event_engine/posix_engine/posix_endpoint.h )
s.files += %w( src/core/lib/event_engine/posix_engine/posix_engine.cc )
@ -1309,6 +1311,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h )
s.files += %w( src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc )
s.files += %w( src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h )
s.files += %w( src/core/lib/event_engine/ref_counted_dns_resolver_interface.h )
s.files += %w( src/core/lib/event_engine/resolved_address.cc )
s.files += %w( src/core/lib/event_engine/resolved_address_internal.h )
s.files += %w( src/core/lib/event_engine/shim.cc )

3
grpc.gyp generated
View File

@ -770,6 +770,7 @@
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',
'src/core/lib/event_engine/posix_engine/internal_errqueue.cc',
'src/core/lib/event_engine/posix_engine/lockfree_event.cc',
'src/core/lib/event_engine/posix_engine/native_dns_resolver.cc',
'src/core/lib/event_engine/posix_engine/posix_endpoint.cc',
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
'src/core/lib/event_engine/posix_engine/posix_engine_listener.cc',
@ -1290,6 +1291,7 @@
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',
'src/core/lib/event_engine/posix_engine/internal_errqueue.cc',
'src/core/lib/event_engine/posix_engine/lockfree_event.cc',
'src/core/lib/event_engine/posix_engine/native_dns_resolver.cc',
'src/core/lib/event_engine/posix_engine/posix_endpoint.cc',
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
'src/core/lib/event_engine/posix_engine/posix_engine_listener.cc',
@ -2069,6 +2071,7 @@
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',
'src/core/lib/event_engine/posix_engine/internal_errqueue.cc',
'src/core/lib/event_engine/posix_engine/lockfree_event.cc',
'src/core/lib/event_engine/posix_engine/native_dns_resolver.cc',
'src/core/lib/event_engine/posix_engine/posix_endpoint.cc',
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
'src/core/lib/event_engine/posix_engine/posix_engine_listener.cc',

3
package.xml generated
View File

@ -1265,6 +1265,8 @@
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/internal_errqueue.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/lockfree_event.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/lockfree_event.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/native_dns_resolver.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/native_dns_resolver.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/posix_endpoint.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/posix_endpoint.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/posix_engine.cc" role="src" />
@ -1291,6 +1293,7 @@
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/ref_counted_dns_resolver_interface.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/resolved_address.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/resolved_address_internal.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/shim.cc" role="src" />

View File

@ -2141,6 +2141,7 @@ grpc_cc_library(
"forkable",
"init_internally",
"iomgr_port",
"native_dns_resolver",
"no_destruct",
"posix_event_engine_base_hdrs",
"posix_event_engine_closure",
@ -2151,7 +2152,9 @@ grpc_cc_library(
"posix_event_engine_tcp_socket_utils",
"posix_event_engine_timer",
"posix_event_engine_timer_manager",
"ref_counted_dns_resolver_interface",
"useful",
"//:config_vars",
"//:event_engine_base_hdrs",
"//:gpr",
"//:grpc_trace",
@ -2472,6 +2475,41 @@ grpc_cc_library(
],
)
grpc_cc_library(
name = "ref_counted_dns_resolver_interface",
hdrs = ["lib/event_engine/ref_counted_dns_resolver_interface.h"],
external_deps = ["absl/strings"],
deps = [
"//:event_engine_base_hdrs",
"//:gpr_platform",
"//:orphanable",
],
)
grpc_cc_library(
name = "native_dns_resolver",
srcs = [
"lib/event_engine/posix_engine/native_dns_resolver.cc",
],
hdrs = [
"lib/event_engine/posix_engine/native_dns_resolver.h",
],
external_deps = [
"absl/functional:any_invocable",
"absl/status",
"absl/status:statusor",
"absl/strings",
"absl/strings:str_format",
],
deps = [
"iomgr_port",
"ref_counted_dns_resolver_interface",
"useful",
"//:event_engine_base_hdrs",
"//:gpr",
],
)
grpc_cc_library(
name = "ares_resolver",
srcs = [
@ -2507,6 +2545,7 @@ grpc_cc_library(
"posix_event_engine_closure",
"posix_event_engine_event_poller",
"posix_event_engine_tcp_socket_utils",
"ref_counted_dns_resolver_interface",
"resolved_address",
"slice",
"windows_iocp",

View File

@ -193,7 +193,7 @@ AresResolver::CreateAresResolver(
AresResolver::AresResolver(
std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory,
std::shared_ptr<EventEngine> event_engine, ares_channel channel)
: grpc_core::InternallyRefCounted<AresResolver>(
: RefCountedDNSResolverInterface(
GRPC_TRACE_FLAG_ENABLED(grpc_trace_ares_resolver) ? "AresResolver"
: nullptr),
channel_(channel),
@ -230,8 +230,8 @@ void AresResolver::Orphan() {
}
void AresResolver::LookupHostname(
absl::string_view name, absl::string_view default_port,
EventEngine::DNSResolver::LookupHostnameCallback callback) {
EventEngine::DNSResolver::LookupHostnameCallback callback,
absl::string_view name, absl::string_view default_port) {
absl::string_view host;
absl::string_view port_string;
if (!grpc_core::SplitHostPort(name, &host, &port_string)) {
@ -296,8 +296,8 @@ void AresResolver::LookupHostname(
}
void AresResolver::LookupSRV(
absl::string_view name,
EventEngine::DNSResolver::LookupSRVCallback callback) {
EventEngine::DNSResolver::LookupSRVCallback callback,
absl::string_view name) {
absl::string_view host;
absl::string_view port;
if (!grpc_core::SplitHostPort(name, &host, &port)) {
@ -325,8 +325,8 @@ void AresResolver::LookupSRV(
}
void AresResolver::LookupTXT(
absl::string_view name,
EventEngine::DNSResolver::LookupTXTCallback callback) {
EventEngine::DNSResolver::LookupTXTCallback callback,
absl::string_view name) {
absl::string_view host;
absl::string_view port;
if (!grpc_core::SplitHostPort(name, &host, &port)) {
@ -387,7 +387,8 @@ void AresResolver::CheckSocketsLocked() {
event_engine_->Run(
[self = Ref(DEBUG_LOCATION, "CheckSocketsLocked"),
fd_node]() mutable {
self->OnReadable(fd_node, absl::OkStatus());
static_cast<AresResolver*>(self.get())
->OnReadable(fd_node, absl::OkStatus());
});
} else {
// Otherwise register with the poller for readable event.
@ -396,7 +397,8 @@ void AresResolver::CheckSocketsLocked() {
fd_node->polled_fd->RegisterForOnReadableLocked(
[self = Ref(DEBUG_LOCATION, "CheckSocketsLocked"),
fd_node](absl::Status status) mutable {
self->OnReadable(fd_node, status);
static_cast<AresResolver*>(self.get())
->OnReadable(fd_node, status);
});
}
}
@ -410,7 +412,8 @@ void AresResolver::CheckSocketsLocked() {
fd_node->polled_fd->RegisterForOnWriteableLocked(
[self = Ref(DEBUG_LOCATION, "CheckSocketsLocked"),
fd_node](absl::Status status) mutable {
self->OnWritable(fd_node, status);
static_cast<AresResolver*>(self.get())
->OnWritable(fd_node, status);
});
}
}
@ -453,7 +456,7 @@ void AresResolver::MaybeStartTimerLocked() {
ares_backup_poll_alarm_handle_ = event_engine_->RunAfter(
kAresBackupPollAlarmDuration,
[self = Ref(DEBUG_LOCATION, "MaybeStartTimerLocked")]() {
self->OnAresBackupPollAlarm();
static_cast<AresResolver*>(self.get())->OnAresBackupPollAlarm();
});
}

View File

@ -39,6 +39,7 @@
#include <grpc/support/log.h>
#include "src/core/lib/event_engine/grpc_polled_fd.h"
#include "src/core/lib/event_engine/ref_counted_dns_resolver_interface.h"
#include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/gprpp/sync.h"
@ -54,7 +55,7 @@ extern grpc_core::TraceFlag grpc_trace_ares_resolver;
} \
} while (0)
class AresResolver : public grpc_core::InternallyRefCounted<AresResolver> {
class AresResolver : public RefCountedDNSResolverInterface {
public:
static absl::StatusOr<grpc_core::OrphanablePtr<AresResolver>>
CreateAresResolver(absl::string_view dns_server,
@ -67,15 +68,13 @@ class AresResolver : public grpc_core::InternallyRefCounted<AresResolver> {
~AresResolver() override;
void Orphan() override ABSL_LOCKS_EXCLUDED(mutex_);
void LookupHostname(absl::string_view name, absl::string_view default_port,
EventEngine::DNSResolver::LookupHostnameCallback callback)
ABSL_LOCKS_EXCLUDED(mutex_);
void LookupSRV(absl::string_view name,
EventEngine::DNSResolver::LookupSRVCallback callback)
ABSL_LOCKS_EXCLUDED(mutex_);
void LookupTXT(absl::string_view name,
EventEngine::DNSResolver::LookupTXTCallback callback)
ABSL_LOCKS_EXCLUDED(mutex_);
void LookupHostname(EventEngine::DNSResolver::LookupHostnameCallback callback,
absl::string_view name, absl::string_view default_port)
ABSL_LOCKS_EXCLUDED(mutex_) override;
void LookupSRV(EventEngine::DNSResolver::LookupSRVCallback callback,
absl::string_view name) ABSL_LOCKS_EXCLUDED(mutex_) override;
void LookupTXT(EventEngine::DNSResolver::LookupTXTCallback callback,
absl::string_view name) ABSL_LOCKS_EXCLUDED(mutex_) override;
private:
// A FdNode saves (not owns) a live socket/fd which c-ares creates, and owns a

View File

@ -0,0 +1,131 @@
// Copyright 2023 The gRPC Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/port.h"
#ifdef GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
#include <netdb.h>
#include <string.h>
#include <sys/socket.h>
#include <string>
#include <type_traits>
#include <utility>
#include <vector>
#include "absl/functional/any_invocable.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/str_format.h"
#include "src/core/lib/event_engine/posix_engine/native_dns_resolver.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/host_port.h"
namespace grpc_event_engine {
namespace experimental {
namespace {
absl::StatusOr<std::vector<EventEngine::ResolvedAddress>>
LookupHostnameBlocking(absl::string_view name, absl::string_view default_port) {
struct addrinfo hints;
struct addrinfo *result = nullptr, *resp;
std::string host;
std::string port;
// parse name, splitting it into host and port parts
grpc_core::SplitHostPort(name, &host, &port);
if (host.empty()) {
return absl::InvalidArgumentError(absl::StrCat("Unparseable name: ", name));
}
if (port.empty()) {
if (default_port.empty()) {
return absl::InvalidArgumentError(
absl::StrFormat("No port in name %s or default_port argument", name));
}
port = std::string(default_port);
}
// Call getaddrinfo
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC; // ipv4 or ipv6
hints.ai_socktype = SOCK_STREAM; // stream socket
hints.ai_flags = AI_PASSIVE; // for wildcard IP address
int s = getaddrinfo(host.c_str(), port.c_str(), &hints, &result);
if (s != 0) {
// Retry if well-known service name is recognized
const char* svc[][2] = {{"http", "80"}, {"https", "443"}};
for (size_t i = 0; i < GPR_ARRAY_SIZE(svc); i++) {
if (port == svc[i][0]) {
s = getaddrinfo(host.c_str(), svc[i][1], &hints, &result);
break;
}
}
}
if (s != 0) {
return absl::UnknownError(absl::StrFormat(
"Address lookup failed for %s os_error: %s syscall: getaddrinfo", name,
gai_strerror(s)));
}
// Success path: fill in addrs
std::vector<EventEngine::ResolvedAddress> addresses;
for (resp = result; resp != nullptr; resp = resp->ai_next) {
addresses.emplace_back(resp->ai_addr, resp->ai_addrlen);
}
if (result) {
freeaddrinfo(result);
}
return addresses;
}
} // namespace
NativeDNSResolver::NativeDNSResolver(std::shared_ptr<EventEngine> event_engine)
: event_engine_(std::move(event_engine)) {}
void NativeDNSResolver::LookupHostname(
EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
absl::string_view name, absl::string_view default_port) {
event_engine_->Run(
[name, default_port, on_resolved = std::move(on_resolved)]() mutable {
on_resolved(LookupHostnameBlocking(name, default_port));
});
}
void NativeDNSResolver::LookupSRV(
EventEngine::DNSResolver::LookupSRVCallback on_resolved,
absl::string_view /* name */) {
// Not supported
event_engine_->Run([on_resolved = std::move(on_resolved)]() mutable {
on_resolved(absl::UnimplementedError(
"The Native resolver does not support looking up SRV records"));
});
}
void NativeDNSResolver::LookupTXT(
EventEngine::DNSResolver::LookupTXTCallback on_resolved,
absl::string_view /* name */) {
// Not supported
event_engine_->Run([on_resolved = std::move(on_resolved)]() mutable {
on_resolved(absl::UnimplementedError(
"The Native resolver does not support looking up TXT records"));
});
}
} // namespace experimental
} // namespace grpc_event_engine
#endif // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS

View File

@ -0,0 +1,61 @@
// Copyright 2023 The gRPC Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_NATIVE_DNS_RESOLVER_H
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_NATIVE_DNS_RESOLVER_H
#include <grpc/support/port_platform.h>
#include <memory>
#include "absl/strings/string_view.h"
#include "src/core/lib/iomgr/port.h"
#ifdef GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/event_engine/ref_counted_dns_resolver_interface.h"
namespace grpc_event_engine {
namespace experimental {
// An asynchronous DNS resolver which uses the native platform's getaddrinfo
// API. Only supports A/AAAA records.
class NativeDNSResolver : public RefCountedDNSResolverInterface {
public:
explicit NativeDNSResolver(std::shared_ptr<EventEngine> event_engine);
void LookupHostname(
EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
absl::string_view name, absl::string_view default_port) override;
void LookupSRV(EventEngine::DNSResolver::LookupSRVCallback on_resolved,
absl::string_view name) override;
void LookupTXT(EventEngine::DNSResolver::LookupTXTCallback on_resolved,
absl::string_view name) override;
void Orphan() override { delete this; }
private:
std::shared_ptr<EventEngine> event_engine_;
};
} // namespace experimental
} // namespace grpc_event_engine
#endif // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_NATIVE_DNS_RESOLVER_H

View File

@ -28,6 +28,7 @@
#include "absl/cleanup/cleanup.h"
#include "absl/functional/any_invocable.h"
#include "absl/status/status.h"
#include "absl/strings/match.h"
#include "absl/strings/str_cat.h"
#include <grpc/event_engine/event_engine.h>
@ -36,12 +37,15 @@
#include <grpc/support/cpu.h>
#include <grpc/support/log.h>
#include "src/core/lib/config/config_vars.h"
#include "src/core/lib/debug/trace.h"
#include "src/core/lib/event_engine/ares_resolver.h"
#include "src/core/lib/event_engine/forkable.h"
#include "src/core/lib/event_engine/grpc_polled_fd.h"
#include "src/core/lib/event_engine/poller.h"
#include "src/core/lib/event_engine/posix.h"
#include "src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h"
#include "src/core/lib/event_engine/posix_engine/native_dns_resolver.h"
#include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
#include "src/core/lib/event_engine/posix_engine/timer.h"
#include "src/core/lib/event_engine/tcp_socket_utils.h"
@ -90,6 +94,15 @@ class TimerForkCallbackMethods {
static void PostforkChild() { g_timer_fork_manager->PostforkChild(); }
};
bool ShouldUseAresDnsResolver() {
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
auto resolver_env = grpc_core::ConfigVars::Get().DnsResolver();
return resolver_env.empty() || absl::EqualsIgnoreCase(resolver_env, "ares");
#else // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
return false;
#endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
}
} // namespace
#ifdef GRPC_POSIX_SOCKET_TCP
@ -517,49 +530,54 @@ EventEngine::TaskHandle PosixEventEngine::RunAfterInternal(
return handle;
}
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
PosixEventEngine::PosixDNSResolver::PosixDNSResolver(
grpc_core::OrphanablePtr<AresResolver> ares_resolver)
: ares_resolver_(std::move(ares_resolver)) {}
grpc_core::OrphanablePtr<RefCountedDNSResolverInterface> dns_resolver)
: dns_resolver_(std::move(dns_resolver)) {}
void PosixEventEngine::PosixDNSResolver::LookupHostname(
LookupHostnameCallback on_resolve, absl::string_view name,
absl::string_view default_port) {
ares_resolver_->LookupHostname(name, default_port, std::move(on_resolve));
dns_resolver_->LookupHostname(std::move(on_resolve), name, default_port);
}
void PosixEventEngine::PosixDNSResolver::LookupSRV(LookupSRVCallback on_resolve,
absl::string_view name) {
ares_resolver_->LookupSRV(name, std::move(on_resolve));
dns_resolver_->LookupSRV(std::move(on_resolve), name);
}
void PosixEventEngine::PosixDNSResolver::LookupTXT(LookupTXTCallback on_resolve,
absl::string_view name) {
ares_resolver_->LookupTXT(name, std::move(on_resolve));
dns_resolver_->LookupTXT(std::move(on_resolve), name);
}
#endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>>
PosixEventEngine::GetDNSResolver(
const EventEngine::DNSResolver::ResolverOptions& options) {
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
auto ares_resolver = AresResolver::CreateAresResolver(
options.dns_server,
std::make_unique<GrpcPolledFdFactoryPosix>(poller_manager_->Poller()),
shared_from_this());
if (!ares_resolver.ok()) {
return ares_resolver.status();
#ifndef GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
grpc_core::Crash("Unable to get DNS resolver for this platform.");
#else // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
// If c-ares is supported on the platform, build according to user's
// configuration.
if (ShouldUseAresDnsResolver()) {
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
GRPC_EVENT_ENGINE_DNS_TRACE("PosixEventEngine:%p creating AresResolver",
this);
auto ares_resolver = AresResolver::CreateAresResolver(
options.dns_server,
std::make_unique<GrpcPolledFdFactoryPosix>(poller_manager_->Poller()),
shared_from_this());
if (!ares_resolver.ok()) {
return ares_resolver.status();
}
return std::make_unique<PosixEventEngine::PosixDNSResolver>(
std::move(*ares_resolver));
#endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
}
GRPC_EVENT_ENGINE_DNS_TRACE("PosixEventEngine:%p creating NativeDNSResolver",
this);
return std::make_unique<PosixEventEngine::PosixDNSResolver>(
std::move(*ares_resolver));
#else // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
// TODO(yijiem): Implement a basic A/AAAA-only native resolver in
// PosixEventEngine.
(void)options;
grpc_core::Crash("unimplemented");
#endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
grpc_core::MakeOrphanable<NativeDNSResolver>(shared_from_this()));
#endif // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
}
bool PosixEventEngine::IsWorkerThread() { grpc_core::Crash("unimplemented"); }

View File

@ -34,11 +34,11 @@
#include <grpc/event_engine/event_engine.h>
#include <grpc/event_engine/memory_allocator.h>
#include "src/core/lib/event_engine/ares_resolver.h"
#include "src/core/lib/event_engine/handle_containers.h"
#include "src/core/lib/event_engine/posix.h"
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
#include "src/core/lib/event_engine/ref_counted_dns_resolver_interface.h"
#include "src/core/lib/event_engine/thread_pool/thread_pool.h"
#include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/gprpp/sync.h"
@ -141,11 +141,8 @@ class PosixEventEngine final : public PosixEventEngineWithFdSupport,
public:
class PosixDNSResolver : public EventEngine::DNSResolver {
public:
PosixDNSResolver() = delete;
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
explicit PosixDNSResolver(
grpc_core::OrphanablePtr<AresResolver> ares_resolver);
#endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
grpc_core::OrphanablePtr<RefCountedDNSResolverInterface> dns_resolver);
void LookupHostname(LookupHostnameCallback on_resolve,
absl::string_view name,
absl::string_view default_port) override;
@ -154,10 +151,8 @@ class PosixEventEngine final : public PosixEventEngineWithFdSupport,
void LookupTXT(LookupTXTCallback on_resolve,
absl::string_view name) override;
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
private:
grpc_core::OrphanablePtr<AresResolver> ares_resolver_;
#endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_TCP)
grpc_core::OrphanablePtr<RefCountedDNSResolverInterface> dns_resolver_;
};
#ifdef GRPC_POSIX_SOCKET_TCP

View File

@ -0,0 +1,55 @@
// Copyright 2023 The gRPC Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_REF_COUNTED_DNS_RESOLVER_INTERFACE_H
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_REF_COUNTED_DNS_RESOLVER_INTERFACE_H
#include <grpc/support/port_platform.h>
#include <stdint.h>
#include "absl/strings/string_view.h"
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/gprpp/orphanable.h"
namespace grpc_event_engine {
namespace experimental {
class RefCountedDNSResolverInterface
: public grpc_core::InternallyRefCounted<RefCountedDNSResolverInterface> {
public:
explicit RefCountedDNSResolverInterface(const char* trace = nullptr,
intptr_t initial_refcount = 1)
: grpc_core::InternallyRefCounted<RefCountedDNSResolverInterface>(
trace, initial_refcount) {}
virtual void LookupHostname(
EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
absl::string_view name, absl::string_view default_port) = 0;
virtual void LookupSRV(
EventEngine::DNSResolver::LookupSRVCallback on_resolved,
absl::string_view name) = 0;
virtual void LookupTXT(
EventEngine::DNSResolver::LookupTXTCallback on_resolved,
absl::string_view name) = 0;
};
} // namespace experimental
} // namespace grpc_event_engine
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_REF_COUNTED_DNS_RESOLVER_INTERFACE_H

View File

@ -204,17 +204,17 @@ WindowsEventEngine::WindowsDNSResolver::WindowsDNSResolver(
void WindowsEventEngine::WindowsDNSResolver::LookupHostname(
LookupHostnameCallback on_resolve, absl::string_view name,
absl::string_view default_port) {
ares_resolver_->LookupHostname(name, default_port, std::move(on_resolve));
ares_resolver_->LookupHostname(std::move(on_resolve), name, default_port);
}
void WindowsEventEngine::WindowsDNSResolver::LookupSRV(
LookupSRVCallback on_resolve, absl::string_view name) {
ares_resolver_->LookupSRV(name, std::move(on_resolve));
ares_resolver_->LookupSRV(std::move(on_resolve), name);
}
void WindowsEventEngine::WindowsDNSResolver::LookupTXT(
LookupTXTCallback on_resolve, absl::string_view name) {
ares_resolver_->LookupTXT(name, std::move(on_resolve));
ares_resolver_->LookupTXT(std::move(on_resolve), name);
}
#endif // GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)

View File

@ -514,6 +514,7 @@ CORE_SOURCE_FILES = [
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',
'src/core/lib/event_engine/posix_engine/internal_errqueue.cc',
'src/core/lib/event_engine/posix_engine/lockfree_event.cc',
'src/core/lib/event_engine/posix_engine/native_dns_resolver.cc',
'src/core/lib/event_engine/posix_engine/posix_endpoint.cc',
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
'src/core/lib/event_engine/posix_engine/posix_engine_listener.cc',

View File

@ -56,6 +56,24 @@ grpc_cc_test(
],
)
grpc_cc_test(
name = "posix_event_engine_native_dns_test",
srcs = ["posix_event_engine_native_dns_test.cc"],
tags = [
"no_mac",
"no_windows",
],
uses_event_engine = True,
uses_polling = True,
deps = [
"//:config_vars",
"//src/core:posix_event_engine",
"//test/core/event_engine:event_engine_test_utils",
"//test/core/event_engine/test_suite/posix:oracle_event_engine_posix",
"//test/core/event_engine/test_suite/tests:dns",
],
)
grpc_cc_test(
name = "thready_posix_event_engine_test",
srcs = ["thready_posix_event_engine_test.cc"],

View File

@ -0,0 +1,51 @@
// Copyright 2023 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <memory>
#include <optional>
#include <string>
#include <gtest/gtest.h>
#include <grpc/grpc.h>
#include "src/core/lib/config/config_vars.h"
#include "src/core/lib/event_engine/posix_engine/posix_engine.h"
#include "test/core/event_engine/test_suite/event_engine_test_framework.h"
#include "test/core/event_engine/test_suite/posix/oracle_event_engine_posix.h"
#include "test/core/event_engine/test_suite/tests/dns_test.h"
#include "test/core/util/test_config.h"
int main(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
grpc::testing::TestEnvironment env(&argc, argv);
SetEventEngineFactories(
[]() {
return std::make_unique<
grpc_event_engine::experimental::PosixEventEngine>();
},
[]() {
return std::make_unique<
grpc_event_engine::experimental::PosixOracleEventEngine>();
});
// TODO(ctiller): EventEngine temporarily needs grpc to be initialized first
// until we clear out the iomgr shutdown code.
grpc_core::ConfigVars::Overrides overrides;
overrides.dns_resolver = "native";
grpc_core::ConfigVars::SetOverrides(overrides);
grpc_event_engine::experimental::InitDNSTests();
grpc_init();
int r = RUN_ALL_TESTS();
grpc_shutdown();
return r;
}

View File

@ -35,6 +35,7 @@
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/config/config_vars.h"
#include "src/core/lib/event_engine/tcp_socket_utils.h"
#include "src/core/lib/gprpp/crash.h" // IWYU pragma: keep
#include "src/core/lib/gprpp/notification.h"
@ -96,6 +97,15 @@ MATCHER(StatusCodeEq, "") {
return std::get<0>(arg).code() == std::get<1>(arg);
}
#define SKIP_TEST_FOR_NATIVE_DNS_RESOLVER() \
do { \
if (grpc_core::ConfigVars::Get().DnsResolver() == "native") { \
GTEST_SKIP() \
<< "This test specifies a target DNS server which the native " \
"DNS resolver does not support."; \
} \
} while (0)
} // namespace
class EventEngineDNSTest : public EventEngineTest {
@ -227,6 +237,7 @@ EventEngineDNSTest::DNSServer EventEngineDNSTest::dns_server_;
#ifndef GRPC_IOS_EVENT_ENGINE_CLIENT
TEST_F(EventEngineDNSTest, QueryNXHostname) {
SKIP_TEST_FOR_NATIVE_DNS_RESOLVER();
auto dns_resolver = CreateDefaultDNSResolver();
dns_resolver->LookupHostname(
[this](auto result) {
@ -242,6 +253,7 @@ TEST_F(EventEngineDNSTest, QueryNXHostname) {
}
TEST_F(EventEngineDNSTest, QueryWithIPLiteral) {
SKIP_TEST_FOR_NATIVE_DNS_RESOLVER();
auto dns_resolver = CreateDefaultDNSResolver();
dns_resolver->LookupHostname(
[this](auto result) {
@ -257,6 +269,7 @@ TEST_F(EventEngineDNSTest, QueryWithIPLiteral) {
}
TEST_F(EventEngineDNSTest, QueryARecord) {
SKIP_TEST_FOR_NATIVE_DNS_RESOLVER();
auto dns_resolver = CreateDefaultDNSResolver();
dns_resolver->LookupHostname(
[this](auto result) {
@ -274,6 +287,7 @@ TEST_F(EventEngineDNSTest, QueryARecord) {
}
TEST_F(EventEngineDNSTest, QueryAAAARecord) {
SKIP_TEST_FOR_NATIVE_DNS_RESOLVER();
auto dns_resolver = CreateDefaultDNSResolver();
dns_resolver->LookupHostname(
[this](auto result) {
@ -294,6 +308,7 @@ TEST_F(EventEngineDNSTest, QueryAAAARecord) {
}
TEST_F(EventEngineDNSTest, TestAddressSorting) {
SKIP_TEST_FOR_NATIVE_DNS_RESOLVER();
auto dns_resolver = CreateDefaultDNSResolver();
dns_resolver->LookupHostname(
[this](auto result) {
@ -311,6 +326,7 @@ TEST_F(EventEngineDNSTest, TestAddressSorting) {
}
TEST_F(EventEngineDNSTest, QuerySRVRecord) {
SKIP_TEST_FOR_NATIVE_DNS_RESOLVER();
const SRVRecord kExpectedRecords[] = {
{/*host=*/"ipv4-only-multi-target.dns-test.event-engine", /*port=*/1234,
/*priority=*/0, /*weight=*/0},
@ -329,6 +345,7 @@ TEST_F(EventEngineDNSTest, QuerySRVRecord) {
}
TEST_F(EventEngineDNSTest, QuerySRVRecordWithLocalhost) {
SKIP_TEST_FOR_NATIVE_DNS_RESOLVER();
auto dns_resolver = CreateDefaultDNSResolver();
dns_resolver->LookupSRV(
[this](auto result) {
@ -341,6 +358,7 @@ TEST_F(EventEngineDNSTest, QuerySRVRecordWithLocalhost) {
}
TEST_F(EventEngineDNSTest, QueryTXTRecord) {
SKIP_TEST_FOR_NATIVE_DNS_RESOLVER();
// clang-format off
const std::string kExpectedRecord =
"grpc_config=[{"
@ -370,6 +388,7 @@ TEST_F(EventEngineDNSTest, QueryTXTRecord) {
}
TEST_F(EventEngineDNSTest, QueryTXTRecordWithLocalhost) {
SKIP_TEST_FOR_NATIVE_DNS_RESOLVER();
auto dns_resolver = CreateDefaultDNSResolver();
dns_resolver->LookupTXT(
[this](auto result) {
@ -382,6 +401,7 @@ TEST_F(EventEngineDNSTest, QueryTXTRecordWithLocalhost) {
}
TEST_F(EventEngineDNSTest, TestCancelActiveDNSQuery) {
SKIP_TEST_FOR_NATIVE_DNS_RESOLVER();
const std::string name = "dont-care-since-wont-be-resolved.test.com:1234";
auto dns_resolver = CreateDNSResolverWithNonResponsiveServer();
dns_resolver->LookupHostname(

View File

@ -2282,6 +2282,8 @@ src/core/lib/event_engine/posix_engine/internal_errqueue.cc \
src/core/lib/event_engine/posix_engine/internal_errqueue.h \
src/core/lib/event_engine/posix_engine/lockfree_event.cc \
src/core/lib/event_engine/posix_engine/lockfree_event.h \
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc \
src/core/lib/event_engine/posix_engine/native_dns_resolver.h \
src/core/lib/event_engine/posix_engine/posix_endpoint.cc \
src/core/lib/event_engine/posix_engine/posix_endpoint.h \
src/core/lib/event_engine/posix_engine/posix_engine.cc \
@ -2308,6 +2310,7 @@ src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h \
src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h \
src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc \
src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h \
src/core/lib/event_engine/ref_counted_dns_resolver_interface.h \
src/core/lib/event_engine/resolved_address.cc \
src/core/lib/event_engine/resolved_address_internal.h \
src/core/lib/event_engine/shim.cc \

View File

@ -2058,6 +2058,8 @@ src/core/lib/event_engine/posix_engine/internal_errqueue.cc \
src/core/lib/event_engine/posix_engine/internal_errqueue.h \
src/core/lib/event_engine/posix_engine/lockfree_event.cc \
src/core/lib/event_engine/posix_engine/lockfree_event.h \
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc \
src/core/lib/event_engine/posix_engine/native_dns_resolver.h \
src/core/lib/event_engine/posix_engine/posix_endpoint.cc \
src/core/lib/event_engine/posix_engine/posix_endpoint.h \
src/core/lib/event_engine/posix_engine/posix_engine.cc \
@ -2084,6 +2086,7 @@ src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h \
src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h \
src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc \
src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h \
src/core/lib/event_engine/ref_counted_dns_resolver_interface.h \
src/core/lib/event_engine/resolved_address.cc \
src/core/lib/event_engine/resolved_address_internal.h \
src/core/lib/event_engine/shim.cc \

View File

@ -6881,6 +6881,26 @@
],
"uses_polling": true
},
{
"args": [],
"benchmark": false,
"ci_platforms": [
"linux",
"posix"
],
"cpu_cost": 1.0,
"exclude_configs": [],
"exclude_iomgrs": [],
"flaky": false,
"gtest": true,
"language": "c++",
"name": "posix_event_engine_native_dns_test",
"platforms": [
"linux",
"posix"
],
"uses_polling": true
},
{
"args": [],
"benchmark": false,