pull/37442/head
yijiem 6 months ago
parent ede3336bb3
commit 4115b31c3f
  1. 27
      src/core/util/http_client/httpcli.cc
  2. 3
      src/core/util/http_client/httpcli.h

@ -56,11 +56,11 @@
namespace grpc_core {
namespace {
using grpc_event_engine::experimental::EventEngine;
using grpc_event_engine::experimental::ResolvedAddressToURI;
namespace {
grpc_httpcli_get_override g_get_override;
grpc_httpcli_post_override g_post_override;
grpc_httpcli_put_override g_put_override;
@ -174,12 +174,7 @@ HttpRequest::HttpRequest(
resource_quota_(ResourceQuotaFromChannelArgs(channel_args_)),
pollent_(pollent),
pollset_set_(grpc_pollset_set_create()),
test_only_generate_response_(std::move(test_only_generate_response)),
resolver_(
ChannelArgs::FromC(channel_args_)
.GetObjectRef<EventEngine>()
->GetDNSResolver(EventEngine::DNSResolver::ResolverOptions())
.value()) {
test_only_generate_response_(std::move(test_only_generate_response)) {
grpc_http_parser_init(&parser_, GRPC_HTTP_RESPONSE, response);
grpc_slice_buffer_init(&incoming_);
grpc_slice_buffer_init(&outgoing_);
@ -194,6 +189,9 @@ HttpRequest::HttpRequest(
grpc_schedule_on_exec_ctx);
CHECK(pollent);
grpc_polling_entity_add_to_pollset_set(pollent, pollset_set_);
resolver_ = ChannelArgs::FromC(channel_args_)
.GetObjectRef<EventEngine>()
->GetDNSResolver(EventEngine::DNSResolver::ResolverOptions());
}
HttpRequest::~HttpRequest() {
@ -213,8 +211,13 @@ void HttpRequest::Start() {
test_only_generate_response_.value()();
return;
}
if (!resolver_.ok()) {
Finish(resolver_.status());
return;
}
Ref().release(); // ref held by pending DNS resolution
resolver_->LookupHostname(absl::bind_front(&HttpRequest::OnResolved, this),
(*resolver_)
->LookupHostname(absl::bind_front(&HttpRequest::OnResolved, this),
uri_.authority(), uri_.scheme());
}
@ -224,8 +227,8 @@ void HttpRequest::Orphan() {
CHECK(!cancelled_);
cancelled_ = true;
// cancel potentially pending DNS resolution.
if (resolver_ != nullptr) {
resolver_.reset();
if (*resolver_ != nullptr) {
resolver_->reset();
}
if (handshake_mgr_ != nullptr) {
// Shutdown will cancel any ongoing tcp connect.
@ -364,7 +367,7 @@ void HttpRequest::OnResolved(
ExecCtx exec_ctx;
RefCountedPtr<HttpRequest> unreffer(this);
MutexLock lock(&mu_);
resolver_.reset();
resolver_->reset();
if (cancelled_) {
Finish(GRPC_ERROR_CREATE("cancelled during DNS resolution"));
return;

@ -260,7 +260,8 @@ class HttpRequest : public InternallyRefCounted<HttpRequest> {
grpc_slice_buffer incoming_ ABSL_GUARDED_BY(mu_);
grpc_slice_buffer outgoing_ ABSL_GUARDED_BY(mu_);
grpc_error_handle overall_error_ ABSL_GUARDED_BY(mu_) = absl::OkStatus();
std::unique_ptr<grpc_event_engine::experimental::EventEngine::DNSResolver>
absl::StatusOr<std::unique_ptr<
grpc_event_engine::experimental::EventEngine::DNSResolver>>
resolver_;
};

Loading…
Cancel
Save