We recently attempted to add the faraday-net_http_persistent adapter to our Koala stack and noticed that it wasn't behaving as expected.
After tracing it down, I don't believe Koala is compatible with this adapter because Koala::HTTPService.make_request will create a new Faraday instance for every request:
|
# set up our Faraday connection |
|
conn = Faraday.new(request.server, faraday_options(request.options), &(faraday_middleware || DEFAULT_MIDDLEWARE)) |
In doing this, a new connection pool is created each time so there's nothing to share between requests.
I don't believe this is trivial change as the way around it is to create a Faraday connection first (so the middleware stack is built once), and then invokes requests on that connection (a bit similar to the example here). That might be a bit too breaking depending on how folks are using this library 🤔
|
def get_object(id, args = {}, options = {}, &block) |
|
# Fetches the given object from the graph. |
|
graph_call(id, args, "get", options, &block) |
|
end |
|
def graph_call(path, args = {}, verb = "get", options = {}, &post_processing) |
|
# enable appsecret_proof by default |
|
options = {:appsecret_proof => true}.merge(options) if @app_secret |
|
response = api(path, args, verb, options) |
|
# make the request via the provided service |
|
result = Koala.make_request(path, args, verb, options) |
|
# An convenenient alias to Koala.http_service.make_request. |
|
def self.make_request(path, args, verb, options = {}) |
|
http_service.make_request(HTTPService::Request.new(path: path, args: args, verb: verb, options: options)) |
|
end |
|
def self.make_request(request) |
|
# set up our Faraday connection |
|
conn = Faraday.new(request.server, faraday_options(request.options), &(faraday_middleware || DEFAULT_MIDDLEWARE)) |
We recently attempted to add the faraday-net_http_persistent adapter to our Koala stack and noticed that it wasn't behaving as expected.
After tracing it down, I don't believe Koala is compatible with this adapter because
Koala::HTTPService.make_requestwill create a new Faraday instance for every request:koala/lib/koala/http_service.rb
Lines 49 to 50 in c327913
In doing this, a new connection pool is created each time so there's nothing to share between requests.
I don't believe this is trivial change as the way around it is to create a Faraday connection first (so the middleware stack is built once), and then invokes requests on that connection (a bit similar to the example here). That might be a bit too breaking depending on how folks are using this library 🤔
koala/lib/koala/api/graph_api_methods.rb
Lines 54 to 57 in c327913
koala/lib/koala/api.rb
Lines 46 to 49 in c327913
koala/lib/koala/api.rb
Lines 121 to 122 in c327913
koala/lib/koala.rb
Lines 60 to 63 in c327913
koala/lib/koala/http_service.rb
Lines 48 to 50 in c327913