From dcac8adb3de7fb5545f6c6f18c9e1d5d82606594 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 16 Dec 2022 18:33:00 +0000 Subject: [PATCH] Add option to modify HTTP pool size --- CHANGELOG.md | 1 + config/config.exs | 1 + config/description.exs | 7 +++++++ lib/pleroma/application.ex | 2 ++ lib/pleroma/config/transfer_task.ex | 4 +++- lib/pleroma/http/adapter_helper.ex | 7 +++++++ test/instance_static/emoji/dump_pack/pack.json | 6 ------ test/pleroma/http/adapter_helper_test.exs | 7 +++++++ 8 files changed, 28 insertions(+), 7 deletions(-) delete mode 100644 test/instance_static/emoji/dump_pack/pack.json diff --git a/CHANGELOG.md b/CHANGELOG.md index c69eb4c82..6dcbc4b14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - Prometheus metrics exporting from `/api/v1/akkoma/metrics` +- Ability to alter http pool size ### Removed - Non-finch HTTP adapters diff --git a/config/config.exs b/config/config.exs index 4c39d52b3..48290fb05 100644 --- a/config/config.exs +++ b/config/config.exs @@ -179,6 +179,7 @@ config :pleroma, :http, receive_timeout: :timer.seconds(15), proxy_url: nil, user_agent: :default, + pool_size: 50, adapter: [] config :pleroma, :instance, diff --git a/config/description.exs b/config/description.exs index 1059039e7..eb61c7218 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2661,6 +2661,13 @@ config :pleroma, :config_description, [ "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`.", suggestions: ["Pleroma", :default] }, + %{ + key: :pool_size, + type: :integer, + description: + "Number of concurrent outbound HTTP requests to allow. Default 50.", + suggestions: [50] + }, %{ key: :adapter, type: :keyword, diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 02336d6d1..26b500dc8 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -259,10 +259,12 @@ defmodule Pleroma.Application do defp http_children do proxy_url = Config.get([:http, :proxy_url]) proxy = Pleroma.HTTP.AdapterHelper.format_proxy(proxy_url) + pool_size = Config.get([:http, :pool_size]) config = [:http, :adapter] |> Config.get([]) + |> Pleroma.HTTP.AdapterHelper.add_pool_size(pool_size) |> Pleroma.HTTP.AdapterHelper.maybe_add_proxy_pool(proxy) |> Keyword.put(:name, MyFinch) diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index 2e4bcb0ee..4fcaab4a5 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -25,7 +25,9 @@ defmodule Pleroma.Config.TransferTask do do: [ {:pleroma, Pleroma.Captcha, [:seconds_valid]}, {:pleroma, Pleroma.Upload, [:proxy_remote]}, - {:pleroma, :instance, [:upload_limit]} + {:pleroma, :instance, [:upload_limit]}, + {:pleroma, :http, [:pool_size]}, + {:pleroma, :http, [:proxy_url]} ] def start_link(restart_pleroma? \\ true) do diff --git a/lib/pleroma/http/adapter_helper.ex b/lib/pleroma/http/adapter_helper.ex index 77b854b5d..e5da3ffa8 100644 --- a/lib/pleroma/http/adapter_helper.ex +++ b/lib/pleroma/http/adapter_helper.ex @@ -47,6 +47,13 @@ defmodule Pleroma.HTTP.AdapterHelper do |> put_in([:pools, :default, :conn_opts, :proxy], proxy) end + def add_pool_size(opts, pool_size) do + opts + |> maybe_add_pools() + |> maybe_add_default_pool() + |> put_in([:pools, :default, :size], pool_size) + end + defp maybe_add_pools(opts) do if Keyword.has_key?(opts, :pools) do opts diff --git a/test/instance_static/emoji/dump_pack/pack.json b/test/instance_static/emoji/dump_pack/pack.json deleted file mode 100644 index 3ca753be0..000000000 --- a/test/instance_static/emoji/dump_pack/pack.json +++ /dev/null @@ -1,6 +0,0 @@ -{ -"files": { }, -"pack": { -"description": "Dump pack", "homepage": "https://pleroma.social", -"license": "Test license", "share-files": true -}} diff --git a/test/pleroma/http/adapter_helper_test.exs b/test/pleroma/http/adapter_helper_test.exs index ba09f3422..cd7491e9a 100644 --- a/test/pleroma/http/adapter_helper_test.exs +++ b/test/pleroma/http/adapter_helper_test.exs @@ -66,4 +66,11 @@ defmodule Pleroma.HTTP.AdapterHelperTest do assert options[:receive_timeout] == 20_000 end end + + describe "pool size settings" do + test "should get set" do + options = AdapterHelper.add_pool_size([], 50) + assert options[:pools][:default][:size] == 50 + end + end end