diff options
| author | Michael Klishin <michael@novemberain.com> | 2019-03-29 01:45:28 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-03-29 01:45:28 +0300 |
| commit | a3901cd9ecbbe2b567993e00f505365e3a40fff1 (patch) | |
| tree | d1736a694dcbc870481dfac4d71803f899c139c6 | |
| parent | 4f4b1f53a829c88001c6004d605cb275a7c362ca (diff) | |
| parent | b9947be94bc2911f273487258dba7bd0b1b560c0 (diff) | |
| download | rabbitmq-server-git-a3901cd9ecbbe2b567993e00f505365e3a40fff1.tar.gz | |
Merge pull request #1960 from rabbitmq/mnesia_use_ram_schema_on_consistency_check
Mnesia use ram schema on consistency check
| -rw-r--r-- | src/rabbit_mnesia.erl | 3 | ||||
| -rw-r--r-- | test/clustering_management_SUITE.erl | 39 |
2 files changed, 41 insertions, 1 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index 65383b80af..162badc33d 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -945,10 +945,13 @@ with_running_or_clean_mnesia(Fun) -> false -> SavedMnesiaDir = dir(), application:unset_env(mnesia, dir), + SchemaLoc = application:get_env(mnesia, schema_location, opt_disc), + application:set_env(mnesia, schema_location, ram), mnesia:start(), Result = Fun(), application:stop(mnesia), application:set_env(mnesia, dir, SavedMnesiaDir), + application:set_env(mnesia, schema_location, SchemaLoc), Result end. diff --git a/test/clustering_management_SUITE.erl b/test/clustering_management_SUITE.erl index c9f1565c51..40317ec604 100644 --- a/test/clustering_management_SUITE.erl +++ b/test/clustering_management_SUITE.erl @@ -55,7 +55,8 @@ groups() -> force_boot, status_with_alarm, pid_file_and_await_node_startup, - await_running_count + await_running_count, + start_with_invalid_schema_in_path ]}, {cluster_size_4, [], [ forget_promotes_offline_slave @@ -121,6 +122,42 @@ end_per_testcase(Testcase, Config) -> %% Testcases. %% ------------------------------------------------------------------- + +start_with_invalid_schema_in_path(Config) -> + [Rabbit, Hare] = cluster_members(Config), + stop_app(Rabbit), + stop_app(Hare), + + create_bad_schema(Rabbit, Hare, Config), + + start_app(Hare), + case start_app(Rabbit) of + ok -> ok; + ErrRabbit -> error({unable_to_start_with_bad_schema_in_work_dir, ErrRabbit}) + end. + +create_bad_schema(Rabbit, Hare, Config) -> + + {ok, RabbitMnesiaDir} = rpc:call(Rabbit, application, get_env, [mnesia, dir]), + {ok, HareMnesiaDir} = rpc:call(Hare, application, get_env, [mnesia, dir]), + %% Make sure we don't use the current dir: + PrivDir = ?config(priv_dir, Config), + ct:pal("Priv dir ~p~n", [PrivDir]), + ok = filelib:ensure_dir(filename:join(PrivDir, "file")), + + ok = rpc:call(Rabbit, file, set_cwd, [PrivDir]), + ok = rpc:call(Hare, file, set_cwd, [PrivDir]), + + ok = rpc:call(Rabbit, application, unset_env, [mnesia, dir]), + ok = rpc:call(Hare, application, unset_env, [mnesia, dir]), + ok = rpc:call(Rabbit, mnesia, create_schema, [[Rabbit, Hare]]), + ok = rpc:call(Rabbit, mnesia, start, []), + {atomic,ok} = rpc:call(Rabbit, mnesia, create_table, + [rabbit_queue, [{ram_copies, [Rabbit, Hare]}]]), + stopped = rpc:call(Rabbit, mnesia, stop, []), + ok = rpc:call(Rabbit, application, set_env, [mnesia, dir, RabbitMnesiaDir]), + ok = rpc:call(Hare, application, set_env, [mnesia, dir, HareMnesiaDir]). + join_and_part_cluster(Config) -> [Rabbit, Hare, Bunny] = cluster_members(Config), assert_not_clustered(Rabbit), |
