Skip to content
This repository has been archived by the owner on Sep 27, 2023. It is now read-only.

Commit

Permalink
Upgrade path for nsync in v63
Browse files Browse the repository at this point in the history
  • Loading branch information
ferd committed Apr 12, 2013
1 parent ceb0d57 commit edf1a44
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions upgrades/v62_v63/live_upgrade.erl
@@ -0,0 +1,52 @@
f(UpgradeNode).
UpgradeNode = fun () ->
case logplex_app:config(git_branch) of
"v62" ->
io:format(whereis(user), "at=upgrade_start cur_vsn=62~n", []);
"v63" ->
io:format(whereis(user),
"at=upgrade type=retry cur_vsn=62 old_vsn=63~n", []);
Else ->
io:format(whereis(user),
"at=upgrade_start old_vsn=~p abort=wrong_version", [tl(Else)]),
erlang:error({wrong_version, Else})
end,

%% stateless, dependency
l(rdb_load),
l(nsync),

io:format(whereis(user), "at=upgrade_end cur_vsn=63~n", []),
application:set_env(logplex, git_branch, "v63"),
ok
end.

f(NodeVersions).
NodeVersions = fun () ->
lists:keysort(3,
[ {N,
element(2, rpc:call(N, application, get_env, [logplex, git_branch])),
rpc:call(N, os, getenv, ["INSTANCE_NAME"])}
|| N <- [node() | nodes()] ])
end.

f(NodesAt).
NodesAt = fun (Vsn) ->
[ N || {N, V, _} <- NodeVersions(), V =:= Vsn ]
end.


f(RollingUpgrade).
RollingUpgrade = fun (Nodes) ->
lists:foldl(fun (N, {good, Upgraded}) ->
case rpc:call(N, erlang, apply, [ UpgradeNode, [] ]) of
ok ->
{good, [N | Upgraded]};
Else ->
{{bad, N, Else}, Upgraded}
end;
(N, {_, _} = Acc) -> Acc
end,
{good, []},
Nodes)
end.

0 comments on commit edf1a44

Please sign in to comment.