Ref https://meta.akkoma.dev/t/increase-timeout-on-libretranslate-request-how/156/2
Co-authored-by: FloatingGhost <hannah@coffee-and-dreams.uk>
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/307
## Unreleased
+## Added
+- Config: HTTP timeout options, :pool\_timeout and :receive\_timeout
+
## Changed
- MastoAPI: Accept BooleanLike input on `/api/v1/accounts/:id/follow` (fixes follows with mastodon.py)
# Configures http settings, upstream proxy etc.
config :pleroma, :http,
+ pool_timeout: :timer.seconds(5),
+ receive_timeout: :timer.seconds(15),
proxy_url: nil,
user_agent: :default,
adapter: []
type: :group,
description: "HTTP settings",
children: [
+ %{
+ key: :pool_timeout,
+ label: "HTTP Pool Request Timeout",
+ type: :integer,
+ description: "Timeout for initiating HTTP requests (in ms, default 5000)",
+ suggestions: [5000]
+ },
+ %{
+ key: :receive_timeout,
+ label: "HTTP Receive Timeout",
+ type: :integer,
+ description:
+ "Timeout for waiting on remote servers to respond to HTTP requests (in ms, default 15000)",
+ suggestions: [15000]
+ },
%{
key: :proxy_url,
label: "Proxy URL",
### :http
+* `receive_timeout`: the amount of time, in ms, to wait for a remote server to respond to a request. (default: `15000`)
+* `pool_timeout`: the amount of time, in ms, to wait to check out an HTTP connection from the pool. This likely does not need changing unless your instance is _very_ busy with outbound requests. (default `5000`)
* `proxy_url`: an upstream proxy to fetch posts and/or media with, (default: `nil`); for example `http://127.0.0.1:3192`. Does not support SOCKS5 proxy, only http(s).
* `send_user_agent`: should we include a user agent with HTTP requests? (default: `true`)
* `user_agent`: what user agent should we use? (default: `:default`), must be string or `:default`
@spec options(keyword(), URI.t()) :: keyword()
def options(opts, _uri) do
proxy = Pleroma.Config.get([:http, :proxy_url])
- AdapterHelper.maybe_add_proxy(opts, AdapterHelper.format_proxy(proxy))
+ pool_timeout = Pleroma.Config.get([:http, :pool_timeout], 5000)
+ receive_timeout = Pleroma.Config.get([:http, :receive_timeout], 15_000)
+
+ opts
+ |> AdapterHelper.maybe_add_proxy(AdapterHelper.format_proxy(proxy))
+ |> Keyword.put(:pool_timeout, pool_timeout)
+ |> Keyword.put(:receive_timeout, receive_timeout)
end
@spec get_conn(URI.t(), keyword()) :: {:ok, keyword()}
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.HTTP.AdapterHelperTest do
- use ExUnit.Case, async: true
-
+ use Pleroma.DataCase, async: true
alias Pleroma.HTTP.AdapterHelper
describe "format_proxy/1" do
]
end
end
+
+ describe "timeout settings" do
+ test "should default to 5000/15000" do
+ options = AdapterHelper.options(%URI{host: 'somewhere'})
+ assert options[:pool_timeout] == 5000
+ assert options[:receive_timeout] == 15_000
+ end
+
+ test "pool_timeout should be overridden by :http, :pool_timeout" do
+ clear_config([:http, :pool_timeout], 10_000)
+ options = AdapterHelper.options(%URI{host: 'somewhere'})
+ assert options[:pool_timeout] == 10_000
+ end
+
+ test "receive_timeout should be overridden by :http, :receive_timeout" do
+ clear_config([:http, :receive_timeout], 20_000)
+ options = AdapterHelper.options(%URI{host: 'somewhere'})
+ assert options[:receive_timeout] == 20_000
+ end
+ end
end