aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/gun
AgeCommit message (Collapse)Author
2022-02-25Copyright bump for 2022Sean King
2021-10-06CI: Bump lint stage to elixir-1.12Haelwenn (lanodan) Monnier
Elixir 1.12 changed formatting rules, this allows to avoid having to rollback to run `mix format`
2021-05-29Gun: use runtime deps in ConnectionPoolAlex Gleason
Speed up recompilation time by breaking compile-time cycles
2021-01-13Bump Copyright to 2021Haelwenn (lanodan) Monnier
grep -rl '# Copyright © .* Pleroma' * | xargs sed -i 's;Copyright © .* Pleroma .*;Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>;'
2020-10-13other files consistencyAlexander Strizhakov
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-07adapter options unificationAlexander Strizhakov
not needed options deletion
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-08-01ConnectionPool: fix gun open errors being returned without an error tuplerinpatch
When gun shuts down due to the host being unreachable, the worker process shuts down with the same shutdown reason since they are linked. Gun doesn't have error tuples in it's shutdown reason though, so we need to handle it in get_conn. Closes #2008
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-15host is now uselesshref
2020-07-15Simplify TLS optshref
- `verify_fun` is not useful now - use `customize_check_hostname` (OTP 20+ so OK) - `partial_chain` is useless as of OTP 21.1 (wasn't there, but hackney/.. uses it)
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-15Add documentation for new connection pool settings and remove somerinpatch
`:retry_timeout` and `:retry` got removed because reconnecting on failure is something the new pool intentionally doesn't do. `:max_overflow` had to go in favor of `:max_waiting`, I didn't reuse the key because the settings are very different in their behaviour. `:checkin_timeout` got removed in favor of `:connection_acquisition_wait`, I didn't reuse the key because the settings are somewhat different. I didn't do any migrations/deprecation warnings/changelog entries because these settings were never in stable.
2020-07-15Use erlang monotonic time for CRF calculationrinpatch
2020-07-15Connection pool: fix connections being supervised by gun_suprinpatch
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-15Connection pool: check that there actually is a resultrinpatch
Sometimes connections died before being released to the pool, resulting in MatchErrors
2020-07-15Connection Pool: don't enforce pool limits if no new connection needs to be ↵rinpatch
opened
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
2020-04-08fix for gun connections poolAlexander Strizhakov
2020-03-12clean upAlexander Strizhakov
2020-03-10add verify tls_opts only when we open connectionAlexander Strizhakov
for other requests tesla will add tls_opts
2020-03-06little refactorAlexander Strizhakov
2020-03-03Update Copyrights for gun related filesMark Felder
2020-03-03refactoring for gun api modulesAlexander Strizhakov
2020-03-03retry and retry_timeout settings default changeAlexander Strizhakov
2020-03-03return error if connection failed to openAlexander Strizhakov
2020-03-03namingAlexander Strizhakov
2020-03-03simplification of formatting host methodAlexander Strizhakov
case for format_proxy method
2020-02-24open conn in separate taskAlexander Strizhakov
2020-02-18adding gun adapterAlexander Strizhakov