diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2010-10-19 14:09:36 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2010-10-19 14:09:36 +0100 |
| commit | 8ac1490a286cb94c2ed0283d9f73a41ab0914bc0 (patch) | |
| tree | 4b5f1f4b778dbe361122d57c9a24be48be23f4d5 | |
| parent | 595a7c5b73fe89b5916dc3fba1d75b8ce9189a1a (diff) | |
| download | rabbitmq-server-git-8ac1490a286cb94c2ed0283d9f73a41ab0914bc0.tar.gz | |
mnesia:transform_table/3 appears to see table data before wait_for_tables, which solves a lot of problems. That's probably deliberate :). Move invocation of maybe_upgrade and add a couple of test upgrades to change schema as well as data.
| -rw-r--r-- | src/rabbit_mnesia.erl | 2 | ||||
| -rw-r--r-- | src/rabbit_upgrades.erl | 18 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index 9f08936757..cd072b9cb4 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -287,7 +287,6 @@ 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) @@ -379,6 +378,7 @@ 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_upgrades.erl b/src/rabbit_upgrades.erl index 17a232c304..dcc79f873e 100644 --- a/src/rabbit_upgrades.erl +++ b/src/rabbit_upgrades.erl @@ -34,6 +34,8 @@ -compile([export_all]). +-rabbit_upgrade({test_add_column, []}). +-rabbit_upgrade({test_remove_column, [test_add_column]}). -rabbit_upgrade({remove_user_scope, []}). %%-------------------------------------------------------------------- @@ -53,3 +55,19 @@ remove_user_scope() -> read = Read}} end, record_info(fields, user_permission)). + +test_add_column() -> + {atomic, ok} = mnesia:transform_table( + rabbit_user, + fun({user, Username, Password, Admin}) -> + {user, Username, Password, Admin, something_else} + end, + [username, password, is_admin, something]). + +test_remove_column() -> + {atomic, ok} = mnesia:transform_table( + rabbit_user, + fun({user, Username, Password, Admin, _SomethingElse}) -> + {user, Username, Password, Admin} + end, + record_info(fields, user)). |
