mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-06 00:02:08 -04:00
introduce :buffer_size
option
this allows to tweak connection buffer sizes, which may help optimizing memory usage, and in this case, test the resumable retries. wip
This commit is contained in:
parent
cb523794d7
commit
8105e1128e
@ -39,8 +39,6 @@ module HTTPX
|
||||
require "httpx/connection/http2"
|
||||
require "httpx/connection/http1"
|
||||
|
||||
BUFFER_SIZE = 1 << 14
|
||||
|
||||
def_delegator :@io, :closed?
|
||||
|
||||
def_delegator :@write_buffer, :empty?
|
||||
@ -57,8 +55,8 @@ module HTTPX
|
||||
@origin = Utils.to_uri(uri.origin)
|
||||
@options = Options.new(options)
|
||||
@window_size = @options.window_size
|
||||
@read_buffer = Buffer.new(BUFFER_SIZE)
|
||||
@write_buffer = Buffer.new(BUFFER_SIZE)
|
||||
@read_buffer = Buffer.new(@options.buffer_size)
|
||||
@write_buffer = Buffer.new(@options.buffer_size)
|
||||
@pending = []
|
||||
on(:error, &method(:on_error))
|
||||
if @options.io
|
||||
|
@ -4,6 +4,7 @@ require "socket"
|
||||
|
||||
module HTTPX
|
||||
class Options
|
||||
BUFFER_SIZE = 1 << 14
|
||||
WINDOW_SIZE = 1 << 14 # 16K
|
||||
MAX_BODY_THRESHOLD_SIZE = (1 << 10) * 112 # 112K
|
||||
CONNECT_TIMEOUT = 60
|
||||
@ -41,6 +42,7 @@ module HTTPX
|
||||
},
|
||||
:headers => {},
|
||||
:window_size => WINDOW_SIZE,
|
||||
:buffer_size => BUFFER_SIZE,
|
||||
:body_threshold_size => MAX_BODY_THRESHOLD_SIZE,
|
||||
:request_class => Class.new(Request),
|
||||
:response_class => Class.new(Response),
|
||||
@ -178,7 +180,19 @@ module HTTPX
|
||||
end
|
||||
|
||||
def option_window_size(value)
|
||||
Integer(value)
|
||||
value = Integer(value)
|
||||
|
||||
raise TypeError, ":window_size must be positive" unless value.positive?
|
||||
|
||||
value
|
||||
end
|
||||
|
||||
def option_buffer_size(value)
|
||||
value = Integer(value)
|
||||
|
||||
raise TypeError, ":buffer_size must be positive" unless value.positive?
|
||||
|
||||
value
|
||||
end
|
||||
|
||||
def option_body_threshold_size(value)
|
||||
|
@ -19,7 +19,6 @@ module HTTPX
|
||||
include Callbacks
|
||||
include HTTPX::Registry[String, Class]
|
||||
|
||||
BUFFER_SIZE: Integer
|
||||
|
||||
attr_reader type: io_type
|
||||
attr_reader origin: URI::Generic
|
||||
|
@ -2,6 +2,7 @@ module HTTPX
|
||||
class Options
|
||||
# include _ToHash
|
||||
|
||||
BUFFER_SIZE: Integer
|
||||
WINDOW_SIZE: Integer
|
||||
MAX_BODY_THRESHOLD_SIZE: Integer
|
||||
CONNECT_TIMEOUT: Integer
|
||||
@ -38,6 +39,9 @@ module HTTPX
|
||||
# window_size
|
||||
attr_reader window_size: Integer
|
||||
|
||||
# buffer_size
|
||||
attr_reader buffer_size: Integer
|
||||
|
||||
# body_threshold_size
|
||||
attr_reader body_threshold_size: Integer
|
||||
|
||||
|
@ -100,6 +100,7 @@ class OptionsTest < Minitest::Test
|
||||
:json => nil,
|
||||
:xml => nil,
|
||||
:body => nil,
|
||||
:buffer_size => 16_384,
|
||||
:window_size => 16_384,
|
||||
:body_threshold_size => 114_688,
|
||||
:form => { foo: "foo", :bar => "bar" },
|
||||
|
@ -98,7 +98,7 @@ module Requests
|
||||
end
|
||||
|
||||
def test_plugin_retries_resumable
|
||||
resumable_uri = build_uri("/range/200")
|
||||
resumable_uri = build_uri("/range/200?chunk_size=100")
|
||||
full_payload = HTTPX.get(resumable_uri).raise_for_status.to_s
|
||||
|
||||
retries_session = HTTPX
|
||||
@ -106,7 +106,9 @@ module Requests
|
||||
.plugin(RequestFailAfter100Bytes)
|
||||
.plugin(:retries)
|
||||
.max_retries(2)
|
||||
.with(retry_on: ->(res) { res.error.is_a?(RequestFailAfter100Bytes::BiggerThan100Bytes) }, window_size: 100)
|
||||
.with(retry_on: ->(res) {
|
||||
res.error && res.error.message == "over 100 bytes"
|
||||
}, window_size: 50, buffer_size: 50, http2_settings: { settings_initial_window_size: 100 })
|
||||
retries_response = retries_session.get(resumable_uri)
|
||||
verify_status(retries_response, 200)
|
||||
assert retries_response.to_s == full_payload
|
||||
@ -128,7 +130,7 @@ module Requests
|
||||
def write(chunk)
|
||||
val = super
|
||||
|
||||
raise(BiggerThan100Bytes, "ouch") if (100..199).cover?(@length)
|
||||
raise(BiggerThan100Bytes, "over 100 bytes") if (100..199).cover?(@length)
|
||||
|
||||
val
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user