The application upgrade file defines how an application is upgraded in a running system.
This file is used by the functions in systools
when
generating a release upgrade file (relup
).
The application upgrade file should be called
Application.appup
where Application
is the name of
the application. The file should be located in the ebin
directory for the application.
The .appup
file contains one single Erlang term, which
defines the instructions used to upgrade the application. The
file has the following syntax:
{Vsn, [{UpFromVsn, Instructions}, ...], [{DownToVsn, Instructions}, ...]}.
Vsn = string()
is the current version of the application.
UpFromVsn = string()
is an earlier version of
the application to upgrade from.Instructions
is a list of release upgrade
instructions, see below.DownToVsn = string()
is an earlier version of
the application to downgrade to.Release upgrade instructions are interpreted by the release handler when an upgrade or downgrade is made. For more information about release handling, refer to SASL User's Guide.
High-level instructions
{update, Module, Change, PrePurge, PostPurge, [Mod]} {update, Module, Timeout, Change, PrePurge, PostPurge, [Mod]} {update, Module, ModType, Timeout, Change, PrePurge, PostPurge, [Mod]} Module = atom() ModType = static | dynamic Timeout = int()>0 | default | infinity Change = soft | {advanced,Extra} PrePurge = PostPurge = soft_purge | brutal_purge Mod = atom() {load_module, Module, PrePurge, PostPurge, [Mod]} {add_module, Module} {remove_application, Application} {add_application, Application} {restart_application, Application}
Low-level instructions
{load_object_code, {Lib, LibVsn, [Module]}} Lib = atom() LibVsn = string() Module = atom() point_of_no_return {load, {Module, PrePurge, PostPurge}} PrePurge = PostPurge = soft_purge | brutal_purge {remove, {Module, PrePurge, PostPurge}} {purge, [Module]} {suspend, [Module | {Module, Timeout}]} Timeout = int()>0 | default | infinity {code_change, [{Module, Extra}]} {code_change, Mode, [{Module, Extra}]} Mode = up | down Extra = term() {resume, [Module]} {stop, [Module]} {start, [Module]} {sync_nodes, Id, [Node]} {sync_nodes, Id, {M, F, A}} Id = term() M = F = atom() A = [term()] {apply, {M, F, A}} restart_new_emulator
relup(4), release_handler(3), systools(3)