configurable limits for ConcurrentLimiter
Pleroma.Web.RichMedia.Helpers & Pleroma.Web.MediaProxy
This commit is contained in:
parent
b5899fda1a
commit
b4ff63d020
4 changed files with 75 additions and 1 deletions
|
@ -832,6 +832,11 @@
|
|||
limit_days: 7,
|
||||
dir: nil
|
||||
|
||||
config :pleroma, ConcurrentLimiter, [
|
||||
{Pleroma.Web.RichMedia.Helpers, [max_running: 5, max_waiting: 5]},
|
||||
{Pleroma.Web.MediaProxy, [max_running: 5, max_waiting: 5]}
|
||||
]
|
||||
|
||||
# Import environment specific config. This must remain at the bottom
|
||||
# of this file so it overrides the configuration defined above.
|
||||
import_config "#{Mix.env()}.exs"
|
||||
|
|
|
@ -3330,5 +3330,53 @@
|
|||
suggestions: [:text, :protobuf]
|
||||
}
|
||||
]
|
||||
},
|
||||
%{
|
||||
group: :pleroma,
|
||||
key: ConcurrentLimiter,
|
||||
type: :group,
|
||||
description: "Limits configuration for background tasks.",
|
||||
children: [
|
||||
%{
|
||||
key: Pleroma.Web.RichMedia.Helpers,
|
||||
type: :keyword,
|
||||
description: "Concurrent limits configuration for getting RichMedia for activities.",
|
||||
suggestions: [max_running: 5, max_waiting: 5],
|
||||
children: [
|
||||
%{
|
||||
key: :max_running,
|
||||
type: :integer,
|
||||
description: "Max running concurrently jobs.",
|
||||
suggestion: [5]
|
||||
},
|
||||
%{
|
||||
key: :max_waiting,
|
||||
type: :integer,
|
||||
description: "Max waiting jobs.",
|
||||
suggestion: [5]
|
||||
}
|
||||
]
|
||||
},
|
||||
%{
|
||||
key: Pleroma.Web.MediaProxy,
|
||||
type: :keyword,
|
||||
description: "Concurrent limits configuration for MediaProxyWarmingPolicy.",
|
||||
suggestions: [max_running: 5, max_waiting: 5],
|
||||
children: [
|
||||
%{
|
||||
key: :max_running,
|
||||
type: :integer,
|
||||
description: "Max running concurrently jobs.",
|
||||
suggestion: [5]
|
||||
},
|
||||
%{
|
||||
key: :max_waiting,
|
||||
type: :integer,
|
||||
description: "Max waiting jobs.",
|
||||
suggestion: [5]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1110,3 +1110,15 @@ Settings to enable and configure expiration for ephemeral activities
|
|||
|
||||
* `:enabled` - enables ephemeral activities creation
|
||||
* `:min_lifetime` - minimum lifetime for ephemeral activities (in seconds). Default: 10 minutes.
|
||||
|
||||
## ConcurrentLimiter
|
||||
|
||||
Settings allow configuring restrictions for concurrently running jobs. Jobs, which can be configured:
|
||||
|
||||
* `Pleroma.Web.RichMedia.Helpers` - configuration for getting RichMedia for activities.
|
||||
* `Pleroma.Web.MediaProxy` - configuration for MediaProxyWarmingPolicy.
|
||||
|
||||
Each job has these settings:
|
||||
|
||||
* `:max_running` - max concurrently runnings jobs
|
||||
* `:max_waiting` - max waiting jobs
|
||||
|
|
|
@ -297,7 +297,16 @@ defp http_children(_, _), do: []
|
|||
|
||||
@spec limiters_setup() :: :ok
|
||||
def limiters_setup do
|
||||
config = Config.get(ConcurrentLimiter, [])
|
||||
|
||||
[Pleroma.Web.RichMedia.Helpers, Pleroma.Web.MediaProxy]
|
||||
|> Enum.each(&ConcurrentLimiter.new(&1, 1, 0))
|
||||
|> Enum.each(fn module ->
|
||||
mod_config = Keyword.get(config, module, [])
|
||||
|
||||
max_running = Keyword.get(mod_config, :max_running, 5)
|
||||
max_waiting = Keyword.get(mod_config, :max_waiting, 5)
|
||||
|
||||
ConcurrentLimiter.new(module, max_running, max_waiting)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue