diff options
author | Dan Gudmundsson <[email protected]> | 2011-10-27 16:21:25 +0200 |
---|---|---|
committer | Dan Gudmundsson <[email protected]> | 2011-11-07 14:19:55 +0100 |
commit | 63f4750fe4bc3249958d9397a9f5e4453fd35042 (patch) | |
tree | ac469e0052064961da6827f799f67190470ccaef /lib/mnesia/src/mnesia_controller.erl | |
parent | 95a7cca40ae52f32b9eb4f0664857e804636ec2c (diff) | |
download | otp-63f4750fe4bc3249958d9397a9f5e4453fd35042.tar.gz otp-63f4750fe4bc3249958d9397a9f5e4453fd35042.tar.bz2 otp-63f4750fe4bc3249958d9397a9f5e4453fd35042.zip |
[mnesia] Make all schema operations protocol aware
Allow schema operation even if not all nodes are upgraded to
latest version.
Diffstat (limited to 'lib/mnesia/src/mnesia_controller.erl')
-rw-r--r-- | lib/mnesia/src/mnesia_controller.erl | 35 |
1 files changed, 1 insertions, 34 deletions
diff --git a/lib/mnesia/src/mnesia_controller.erl b/lib/mnesia/src/mnesia_controller.erl index 1d3bd55b48..6a561394d5 100644 --- a/lib/mnesia/src/mnesia_controller.erl +++ b/lib/mnesia/src/mnesia_controller.erl @@ -289,40 +289,7 @@ get_remote_cstructs() -> get_cstructs() -> {cstructs, Cstructs, Running} = call(get_cstructs), Node = node(group_leader()), - {cstructs, normalize_cstructs(Cstructs, Node), Running}. - -normalize_cstructs(Cstructs, Node) -> - %% backward-compatibility hack; normalize before returning - case rpc:call(Node, mnesia_lib, val, [{schema,cstruct}]) of - {badrpc, _} -> - %% assume it's not a schema merge - Cstructs; - #cstruct{} -> - %% same format - Cstructs; - Cstruct -> - %% some other format - RemoteFields = [F || {F,_} <- rpc:call(Node, mnesia_schema, cs2list, [Cstruct])], - [convert_cs(Cs, RemoteFields) || Cs <- Cstructs] - end. - -convert_cs(Cs, Fields) -> - MyFields = record_info(fields, cstruct), - convert(tl(tuple_to_list(Cs)), MyFields, Fields, []). - -convert([H|T], [F|FsL], [F|FsR], Acc) -> - convert(T, FsL, FsR, [H|Acc]); -convert([H|T], [Fl|FsL] = L, [Fr|FsR] = R, Acc) -> - case {lists:member(Fl, FsR), lists:member(Fr, FsL)} of - {true, false} -> - convert(T, L, FsR, [H|Acc]); - {false, true} -> - %% Field Fl doesn't exist on receiver side; skip. - convert(T, FsL, R, Acc) - end; -convert([], _, _, Acc) -> - list_to_tuple([cstruct|lists:reverse(Acc)]). - + {cstructs, mnesia_schema:normalize_cs(Cstructs, Node), Running}. update(Fun) -> call({update,Fun}). |