aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/gun/connection_pool
AgeCommit message (Collapse)Author
2020-10-12Add missing Copyright headersMark Felder
2020-09-16ConnectionPool Worker: use monitor flush instead of checking refrinpatch
`:flush` removes the DOWN message if one had arrived, so this check should no longer be necessary.
2020-09-11ConnectionPool: Log possible HTTP1 blocksrinpatch
2020-09-02improvements and fixes for http requestsAlexander Strizhakov
- fix for gun worker termination in some circumstances - pool for http clients (ex_aws, tzdata) - default pool timeouts for gun - gun retries on gun_down messages - s3 upload timeout if streaming enabled
2020-07-28gun ConnectionPool: Re-add a missing cast for remove_clientrinpatch
2020-07-28gun ConnectionPool: replace casts with callsrinpatch
The slowdown from this is most likely immesurable, however it eliminates possible false positives when tracking dead clients.
2020-07-15ConnectionPool.Worker: do not stop with an error when there is a timeoutrinpatch
This produced error log messages about GenServer termination every time the connection was not open due to a timeout. Instead we stop with `{:shutdown, <gun_error>}` since shutting down when the connection can't be established is normal behavior.
2020-07-15parentheses...href
2020-07-15Fix race in enforcer/reclaimer starthref
2020-07-15Ensure connections error get known by the callerhref
2020-07-15ConnectionPool.Worker: Open gun conn in continue instead of inithref
2020-07-15Connection Pool: fix LRFU implementation to not actually be LRUrinpatch
The numbers of the native time unit were so small the CRF was always 1, making it an LRU. This commit switches the time to miliseconds and changes the time delta multiplier to the one yielding mostly highest hit rates according to the paper
2020-07-15Use erlang monotonic time for CRF calculationrinpatch
2020-07-15Connection pool: Add client death trackingrinpatch
While running this in production I noticed a number of ghost processes with all their clients dead before they released the connection, so let's track them to log it and remove them from clients
2020-07-15Connection pool: Fix a possible infinite recursion if the pool is exhaustedrinpatch
2020-07-15Connection pool: implement logging and telemetry eventsrinpatch
2020-07-15Connection Pool: register workers using :viarinpatch
2020-07-15Connection pool: Fix race conditions in limit enforcementrinpatch
Fixes race conditions in limit enforcement by putting worker processes in a DynamicSupervisor
2020-07-15Refactor gun pooling and simplify adapter option insertionrinpatch
This patch refactors gun pooling to use Elixir process registry and simplifies adapter option insertion. Having the pool use process registry instead of a GenServer has a number of advantages: - Simpler code: the initial implementation adds about half the lines of code it deletes - Concurrency: unlike a GenServer, ETS-based registry can handle multiple checkout/checkin requests at the same time - Precise and easy idle connection clousure: current proposal for closing idle connections in the GenServer-based pool needs to filter through all connections once a minute and compare their last active time with closing time. With Elixir process registry this can be done by just using `Process.send_after`/`Process.cancel_timer` in the worker process. - Lower memory footprint: In my tests `gun-memory-leak` branch uses about 290mb on peak load (250 connections) and 235mb on idle (5-10 connections). Registry-based pool uses 210mb on idle and 240mb on peak load