summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-03-21 14:59:10 +0000
committerSimon MacMullen <simon@rabbitmq.com>2012-03-21 14:59:10 +0000
commit7b71672e6ce6ac0c3d06d8f41020177c71c55d74 (patch)
tree4f4d29b19a84ea80d564017588d7ed3dc0988a33
parent975806ecba5d876da65b8faeac8ed6194bcf75f4 (diff)
downloadrabbitmq-server-git-7b71672e6ce6ac0c3d06d8f41020177c71c55d74.tar.gz
It's possible somehow we could be left with an empty mnesia directory (spotted with "make cleandb" but maybe other things could do this). So instead check for the existence of the guid serial, which has not changed since at least 1.7.0.
-rw-r--r--src/rabbit_guid.erl10
-rw-r--r--src/rabbit_version.erl2
2 files changed, 10 insertions, 2 deletions
diff --git a/src/rabbit_guid.erl b/src/rabbit_guid.erl
index f4c425ca20..ba0cb04f71 100644
--- a/src/rabbit_guid.erl
+++ b/src/rabbit_guid.erl
@@ -19,6 +19,7 @@
-behaviour(gen_server).
-export([start_link/0]).
+-export([filename/0]).
-export([gen/0, gen_secure/0, string/2, binary/2]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
@@ -38,6 +39,7 @@
-type(guid() :: binary()).
-spec(start_link/0 :: () -> rabbit_types:ok_pid_or_error()).
+-spec(filename/0 :: () -> string()).
-spec(gen/0 :: () -> guid()).
-spec(gen_secure/0 :: () -> guid()).
-spec(string/2 :: (guid(), any()) -> string()).
@@ -51,8 +53,14 @@ start_link() ->
gen_server:start_link({local, ?SERVER}, ?MODULE,
[update_disk_serial()], []).
+%% We use this to detect a (possibly rather old) Mnesia directory,
+%% since it has existed since at least 1.7.0 (as far back as I cared
+%% to go).
+filename() ->
+ filename:join(rabbit_mnesia:dir(), ?SERIAL_FILENAME).
+
update_disk_serial() ->
- Filename = filename:join(rabbit_mnesia:dir(), ?SERIAL_FILENAME),
+ Filename = filename(),
Serial = case rabbit_file:read_term_file(Filename) of
{ok, [Num]} -> Num;
{error, enoent} -> 0;
diff --git a/src/rabbit_version.erl b/src/rabbit_version.erl
index dd1c5a00ab..ebc0177e6e 100644
--- a/src/rabbit_version.erl
+++ b/src/rabbit_version.erl
@@ -96,7 +96,7 @@ record_desired_for_scope(Scope) ->
upgrades_required(Scope) ->
case recorded_for_scope(Scope) of
{error, enoent} ->
- case filelib:is_dir(rabbit_mnesia:dir() ++ "/") of
+ case filelib:is_file(rabbit_guid:filename()) of
false -> {ok, []}; %% We're blank, no upgrade needed
true -> {error, version_not_available}
end;