Fix supervisor order

This starts `Pleroma.Web.Endpoint` after all other processes and may
avoid some weird bugs (especially at start/restart).

Also properly ignores starting the gopher's gen_server if disabled.
This commit is contained in:
href 2018-11-19 20:58:12 +01:00
parent 52ce368562
commit 1d94c8f0f0
No known key found for this signature in database
GPG Key ID: EE8296C1A152C325
2 changed files with 41 additions and 34 deletions

View File

@ -1,5 +1,6 @@
defmodule Pleroma.Application do defmodule Pleroma.Application do
use Application use Application
import Supervisor.Spec
@name "Pleroma" @name "Pleroma"
@version Mix.Project.config()[:version] @version Mix.Project.config()[:version]
@ -11,7 +12,6 @@ defmodule Pleroma.Application do
# for more information on OTP Applications # for more information on OTP Applications
@env Mix.env() @env Mix.env()
def start(_type, _args) do def start(_type, _args) do
import Supervisor.Spec
import Cachex.Spec import Cachex.Spec
# Define workers and child supervisors to be supervised # Define workers and child supervisors to be supervised
@ -20,10 +20,6 @@ defmodule Pleroma.Application do
# Start the Ecto repository # Start the Ecto repository
supervisor(Pleroma.Repo, []), supervisor(Pleroma.Repo, []),
worker(Pleroma.Emoji, []), worker(Pleroma.Emoji, []),
# Start the endpoint when the application starts
supervisor(Pleroma.Web.Endpoint, []),
# Start your own worker by calling: Pleroma.Worker.start_link(arg1, arg2, arg3)
# worker(Pleroma.Worker, [arg1, arg2, arg3]),
worker( worker(
Cachex, Cachex,
[ [
@ -63,20 +59,17 @@ defmodule Pleroma.Application do
], ],
id: :cachex_idem id: :cachex_idem
), ),
worker(Pleroma.Web.Federator, []),
worker(Pleroma.Web.Federator.RetryQueue, []), worker(Pleroma.Web.Federator.RetryQueue, []),
worker(Pleroma.Gopher.Server, []), worker(Pleroma.Web.Federator, []),
worker(Pleroma.Stats, []) worker(Pleroma.Stats, [])
] ++ ] ++
if @env == :test, streamer_child() ++
do: [], chat_child() ++
else: [
[worker(Pleroma.Web.Streamer, [])] ++ # Start the endpoint when the application starts
if( supervisor(Pleroma.Web.Endpoint, []),
!chat_enabled(), worker(Pleroma.Gopher.Server, [])
do: [], ]
else: [worker(Pleroma.Web.ChatChannel.ChatChannelState, [])]
)
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
# for other strategies and supported options # for other strategies and supported options
@ -84,7 +77,20 @@ defmodule Pleroma.Application do
Supervisor.start_link(children, opts) Supervisor.start_link(children, opts)
end end
defp chat_enabled do if Mix.env() == :test do
Application.get_env(:pleroma, :chat, []) |> Keyword.get(:enabled) defp streamer_child(), do: []
defp chat_child(), do: []
else
defp streamer_child() do
[worker(Pleroma.Web.Streamer, [])]
end
defp chat_child() do
if Pleroma.Config.get([:chat, :enabled]) do
[worker(Pleroma.Web.ChatChannel.ChatChannelState, [])]
else
[]
end
end
end end
end end

View File

@ -6,27 +6,28 @@ defmodule Pleroma.Gopher.Server do
config = Pleroma.Config.get(:gopher, []) config = Pleroma.Config.get(:gopher, [])
ip = Keyword.get(config, :ip, {0, 0, 0, 0}) ip = Keyword.get(config, :ip, {0, 0, 0, 0})
port = Keyword.get(config, :port, 1234) port = Keyword.get(config, :port, 1234)
GenServer.start_link(__MODULE__, [ip, port], [])
if Keyword.get(config, :enabled, false) do
GenServer.start_link(__MODULE__, [ip, port], [])
else
Logger.info("Gopher server disabled")
:ignore
end
end end
def init([ip, port]) do def init([ip, port]) do
if Pleroma.Config.get([:gopher, :enabled], false) do Logger.info("Starting gopher server on #{port}")
Logger.info("Starting gopher server on #{port}")
:ranch.start_listener( :ranch.start_listener(
:gopher, :gopher,
100, 100,
:ranch_tcp, :ranch_tcp,
[port: port], [port: port],
__MODULE__.ProtocolHandler, __MODULE__.ProtocolHandler,
[] []
) )
{:ok, %{ip: ip, port: port}} {:ok, %{ip: ip, port: port}}
else
Logger.info("Gopher server disabled")
{:ok, nil}
end
end end
end end