logging when connections are deregistered from the selector/pool

also, logging when a response is fetched in the session
This commit is contained in:
HoneyryderChuck 2025-07-16 10:45:46 +01:00
parent bf62cd92e1
commit 4e870b19e0
2 changed files with 29 additions and 8 deletions

View File

@ -35,6 +35,10 @@ module HTTPX
@resolvers.each { |r| r.__send__(__method__, s) } @resolvers.each { |r| r.__send__(__method__, s) }
end end
def log(*args, **kwargs, &blk)
@resolvers.each { |r| r.__send__(__method__, *args, **kwargs, &blk) }
end
def closed? def closed?
@resolvers.all?(&:closed?) @resolvers.all?(&:closed?)
end end

View File

@ -136,6 +136,9 @@ module HTTPX
alias_method :select_resolver, :select_connection alias_method :select_resolver, :select_connection
def deselect_connection(connection, selector, cloned = false) def deselect_connection(connection, selector, cloned = false)
connection.log(level: 2) do
"deregistering connection##{connection.object_id}(#{connection.state}) from selector##{selector.object_id}"
end
selector.deregister(connection) selector.deregister(connection)
# when connections coalesce # when connections coalesce
@ -145,14 +148,19 @@ module HTTPX
return if @closing && connection.state == :closed return if @closing && connection.state == :closed
connection.log(level: 2) { "check-in connection##{connection.object_id}(#{connection.state}) in pool##{@pool.object_id}" }
@pool.checkin_connection(connection) @pool.checkin_connection(connection)
end end
def deselect_resolver(resolver, selector) def deselect_resolver(resolver, selector)
resolver.log(level: 2) do
"deregistering resolver##{resolver.object_id}(#{resolver.state}) from selector##{selector.object_id}"
end
selector.deregister(resolver) selector.deregister(resolver)
return if @closing && resolver.closed? return if @closing && resolver.closed?
resolver.log(level: 2) { "check-in resolver##{resolver.object_id}(#{resolver.state}) in pool##{@pool.object_id}" }
@pool.checkin_resolver(resolver) @pool.checkin_resolver(resolver)
end end
@ -221,7 +229,11 @@ module HTTPX
def fetch_response(request, _selector, _options) def fetch_response(request, _selector, _options)
response = request.response response = request.response
response if response && response.finished? return unless response && response.finished?
log(level: 2) { "response fetched" }
response
end end
# sends the +request+ to the corresponding HTTPX::Connection # sends the +request+ to the corresponding HTTPX::Connection
@ -382,14 +394,16 @@ module HTTPX
end end
def find_resolver_for(connection, selector) def find_resolver_for(connection, selector)
resolver = selector.find_resolver(connection.options) if (resolver = selector.find_resolver(connection.options))
resolver.log(level: 2) { "found resolver##{connection.object_id}(#{connection.state}) in selector##{selector.object_id}" }
unless resolver return resolver
resolver = @pool.checkout_resolver(connection.options)
resolver.current_session = self
resolver.current_selector = selector
end end
resolver = @pool.checkout_resolver(connection.options)
resolver.log(level: 2) { "found resolver##{connection.object_id}(#{connection.state}) in pool##{@pool.object_id}" }
resolver.current_session = self
resolver.current_selector = selector
resolver resolver
end end
@ -399,7 +413,10 @@ module HTTPX
unless conn1.coalescable?(conn2) unless conn1.coalescable?(conn2)
conn2.log(level: 2) { "not coalescing with conn##{conn1.object_id}[#{conn1.origin}])" } conn2.log(level: 2) { "not coalescing with conn##{conn1.object_id}[#{conn1.origin}])" }
select_connection(conn2, selector) select_connection(conn2, selector)
@pool.checkin_connection(conn1) if from_pool if from_pool
conn1.log(level: 2) { "check-in connection##{conn1.object_id}(#{conn1.state}) in pool##{@pool.object_id}" }
@pool.checkin_connection(conn1)
end
return false return false
end end