mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-04 00:00:37 -04:00
native resolver: consume resolutions in a loop, do not stop after the first one
this was a busy loop on dns resolution; this should utilize the socket better
This commit is contained in:
parent
723fda297f
commit
398c08eb4d
@ -58,22 +58,6 @@ module HTTPX
|
|||||||
when :open
|
when :open
|
||||||
consume
|
consume
|
||||||
end
|
end
|
||||||
nil
|
|
||||||
rescue Errno::EHOSTUNREACH => e
|
|
||||||
@ns_index += 1
|
|
||||||
nameserver = @nameserver
|
|
||||||
if nameserver && @ns_index < nameserver.size
|
|
||||||
log do
|
|
||||||
"resolver #{FAMILY_TYPES[@record_type]}: " \
|
|
||||||
"failed resolving on nameserver #{@nameserver[@ns_index - 1]} (#{e.message})"
|
|
||||||
end
|
|
||||||
transition(:idle)
|
|
||||||
@timeouts.clear
|
|
||||||
else
|
|
||||||
handle_error(e)
|
|
||||||
end
|
|
||||||
rescue NativeResolveError => e
|
|
||||||
handle_error(e)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def interests
|
def interests
|
||||||
@ -123,9 +107,34 @@ module HTTPX
|
|||||||
end
|
end
|
||||||
|
|
||||||
def consume
|
def consume
|
||||||
dread if calculate_interests == :r
|
loop do
|
||||||
do_retry
|
dread if calculate_interests == :r
|
||||||
dwrite if calculate_interests == :w
|
|
||||||
|
break unless calculate_interests == :w
|
||||||
|
|
||||||
|
# do_retry
|
||||||
|
dwrite
|
||||||
|
|
||||||
|
break unless calculate_interests == :r
|
||||||
|
end
|
||||||
|
rescue Errno::EHOSTUNREACH => e
|
||||||
|
@ns_index += 1
|
||||||
|
nameserver = @nameserver
|
||||||
|
if nameserver && @ns_index < nameserver.size
|
||||||
|
log do
|
||||||
|
"resolver #{FAMILY_TYPES[@record_type]}: " \
|
||||||
|
"failed resolving on nameserver #{@nameserver[@ns_index - 1]} (#{e.message})"
|
||||||
|
end
|
||||||
|
transition(:idle)
|
||||||
|
@timeouts.clear
|
||||||
|
retry
|
||||||
|
else
|
||||||
|
handle_error(e)
|
||||||
|
end
|
||||||
|
rescue NativeResolveError => e
|
||||||
|
handle_error(e)
|
||||||
|
close_or_resolve
|
||||||
|
retry unless closed?
|
||||||
end
|
end
|
||||||
|
|
||||||
def do_retry(loop_time = nil)
|
def do_retry(loop_time = nil)
|
||||||
@ -475,12 +484,10 @@ module HTTPX
|
|||||||
emit_resolve_error(connection, host, error)
|
emit_resolve_error(connection, host, error)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
close_or_resolve
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def reset_hostname(hostname, connection: @queries.delete(hostname), reset_candidates: true)
|
def reset_hostname(hostname, connection: @queries.delete(hostname), reset_candidates: true)
|
||||||
@timeouts.delete(hostname)
|
@timeouts.delete(hostname)
|
||||||
@timeouts.delete(hostname)
|
|
||||||
|
|
||||||
return unless connection && reset_candidates
|
return unless connection && reset_candidates
|
||||||
|
|
||||||
|
@ -210,7 +210,7 @@ module Requests
|
|||||||
end
|
end
|
||||||
self.attempts = 0
|
self.attempts = 0
|
||||||
|
|
||||||
def consume
|
def dwrite
|
||||||
self.class.attempts += 1
|
self.class.attempts += 1
|
||||||
raise Errno::EHOSTUNREACH, "host unreachable"
|
raise Errno::EHOSTUNREACH, "host unreachable"
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user