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

@ -260,7 +260,8 @@ class HttpRequest : public InternallyRefCounted<HttpRequest> {
grpc_slice_buffer incoming_ ABSL_GUARDED_BY(mu_); grpc_slice_buffer incoming_ ABSL_GUARDED_BY(mu_);
grpc_slice_buffer outgoing_ ABSL_GUARDED_BY(mu_); grpc_slice_buffer outgoing_ ABSL_GUARDED_BY(mu_);
grpc_error_handle overall_error_ ABSL_GUARDED_BY(mu_) = absl::OkStatus(); 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_; resolver_;
}; };

Loading…
Cancel
Save