diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2010-10-18 16:59:20 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2010-10-18 16:59:20 +0100 |
| commit | fec42446f2b755b9eef1c4bfa0f6df8c7699bc2b (patch) | |
| tree | cd3166ce1bf36416ff6a732b50fcc6483f0ad6bc /src | |
| parent | 00d769801f00a60152a345a8e00c72a667b14db6 (diff) | |
| download | rabbitmq-server-git-fec42446f2b755b9eef1c4bfa0f6df8c7699bc2b.tar.gz | |
Add enough of a mechanism to allow us to update data in Mnesia but not the schema.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_mnesia.erl | 2 | ||||
| -rw-r--r-- | src/rabbit_upgrade.erl | 21 | ||||
| -rw-r--r-- | src/rabbit_upgrades.erl | 30 |
3 files changed, 33 insertions, 20 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index cd072b9cb4..9f08936757 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -287,6 +287,7 @@ check_schema_integrity() -> check_table_integrity() -> ok = wait_for_tables(), + rabbit_upgrade:maybe_upgrade(dir()), case lists:all(fun ({Tab, TabDef}) -> {_, Match} = proplists:lookup(match, TabDef), read_test_table(Tab, Match) @@ -378,7 +379,6 @@ init_db(ClusterNodes, Force) -> [] -> case mnesia:system_info(use_dir) of true -> - rabbit_upgrade:maybe_upgrade(dir()), case check_schema_integrity() of ok -> ok; diff --git a/src/rabbit_upgrade.erl b/src/rabbit_upgrade.erl index 62658fbbd1..5f503fa244 100644 --- a/src/rabbit_upgrade.erl +++ b/src/rabbit_upgrade.erl @@ -31,6 +31,7 @@ -module(rabbit_upgrade). -export([maybe_upgrade/1, write_version/1]). +-export([mnesia_alter_column/3]). -include("rabbit.hrl"). @@ -68,6 +69,26 @@ write_version(Dir) -> digraph:delete(G), ok. +%% ------------------------------------------------------------------- + +mnesia_alter_column(Table, Column, Fun) -> + {atomic, _} = + mnesia:transaction( + fun() -> + [mnesia_alter_column_for_key(Table, Column, Key, Fun) + || Key <- mnesia:all_keys(Table)] + end), + ok. + +mnesia_alter_column_for_key(Table, Column, Key, Fun) -> + Vals = mnesia:read(Table, Key, write), + ok = mnesia:delete(Table, Key, write), + [mnesia_alter_column_for_value(Table, Column, Val, Fun) || Val <- Vals]. + +mnesia_alter_column_for_value(Table, Column, Val, Fun) -> + Val2 = setelement(Column + 1, Val, Fun(element(Column + 1, Val))), + mnesia:write(Table, Val2, write). + %% Graphs ------------------------------------------------------------ load_graph() -> diff --git a/src/rabbit_upgrades.erl b/src/rabbit_upgrades.erl index f6870068e6..50c97bb6bb 100644 --- a/src/rabbit_upgrades.erl +++ b/src/rabbit_upgrades.erl @@ -34,27 +34,19 @@ -compile([export_all]). --rabbit_upgrade({foo, []}). --rabbit_upgrade({bar, [foo]}). --rabbit_upgrade({baz, [bar]}). - --rabbit_upgrade({remove_user_scope, [foo]}). --rabbit_upgrade({remove_user_scope2, [remove_user_scope]}). - +-rabbit_upgrade({remove_user_scope, []}). %%-------------------------------------------------------------------- -foo() -> - ok. +%% TODO this is just a hack, on branch bug23319 this should use the real +%% permission record +-record(permission2, {configure, write, read}). remove_user_scope() -> - ok. - -remove_user_scope2() -> - ok. - -bar() -> - ok. - -baz() -> - ok. + rabbit_upgrade:mnesia_alter_column( + rabbit_user_permission, 2, + fun({permission, _Scope, Conf, Write, Read}) -> + #permission2{configure = Conf, + write = Write, + read = Read} + end). |
