View Source Edeliver.Relup.Instructions.ResumeChannels (edeliver v1.9.2)
This upgrade instruction resumes the websocket processes
connected to phoenix channels when the upgrade is done to continue handling channel events. Use this instruction at the end of the upgrade modification if the
Edeliver.Relup.Instructions.SuspendChannels
is used at the beginning. Make sure that it is used before the
Edeliver.Relup.Instructions.ResumeRanchAcceptors
instruction to avoid that recently started websockets which were not suspendet are tried to be resumed.
Suspending and resuming websocket processes for
phoenix channels requires a recent phoenix version
which handles sys events for websockets. It also
requires that the builtin phoenix pubsub backend
Phoenix.PubSub.PG2
is used for the phoenix channels.
Link to this section Summary
Functions
Returns name of the application.
Resumes a list of processes.
Calls the run/1
function of this module
This module depends on the Edeliver.Relup.Instructions.CheckRanchAcceptors
and
the Edeliver.Relup.Instructions.CheckRanchConnections
module
Callback implementation for Edeliver.Relup.RunnableInstruction.insert_where/0
.
Callback implementation for Edeliver.Relup.Instruction.modify_relup/2
.
Resumes all websocket channels
Link to this section Functions
@spec arguments( %Edeliver.Relup.Instructions{ changed_modules: term(), down_instructions: term(), down_version: term(), up_instructions: term(), up_version: term() }, Edeliver.Relup.Config.t() ) :: term()
Returns name of the application.
This name is taken as argument for the run/1
function and is required
to access the acceptor processes through the supervision tree
@spec bulk_resume(processes :: [pid()], timeout :: pos_integer() | :infinity) :: :ok | {:errors, count :: pos_integer(), [{pid :: pid(), reason :: term()}]} | :not_supported
Resumes a list of processes.
Because resume a process might take a while depending on the length
of the message queue or duration of current operation processed by the pid, suspending is done
asynchronously for each process by spawning a new process which calls :sys.resume/2
and then waiting
for all results before returning from this function. Be careful when using :infinity
as timeout,
because this function might hang for infinite time if one of the process does not handle sys events.
@spec call_this(arguments :: [term()]) :: Instruction.instruction() | Instruction.instructions()
Calls the run/1
function of this module
from the relup file during hot code upgrade
@spec dependencies() :: [instruction_module :: atom()]
@spec dependencies() :: [Edeliver.Relup.Instructions.CheckRanchAcceptors]
This module depends on the Edeliver.Relup.Instructions.CheckRanchAcceptors
and
the Edeliver.Relup.Instructions.CheckRanchConnections
module
which must be loaded before this instruction for upgrades and unloaded after this instruction for downgrades.
@spec insert_where() :: Instruction.insert_fun()
Callback implementation for Edeliver.Relup.RunnableInstruction.insert_where/0
.
Callback implementation for Edeliver.Relup.Instruction.modify_relup/2
.
@spec run(otp_application_name :: atom()) :: :ok
Resumes all websocket channels
to continue handling channel events after the upgrade. This is possible only in recent phoenix versions since handling sys events is required for resuming. If an older version is used, a warning is printed that suspending is not supported.