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
commit140a39c16a6d169647d557fb0123a9e9f2d7f6eb (patch)
tree4f4d29b19a84ea80d564017588d7ed3dc0988a33
parent33cca071e5a859720059abfcb6a13d1e5ba09a08 (diff)
downloadrabbitmq-server-140a39c16a6d169647d557fb0123a9e9f2d7f6eb.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 f4c425ca..ba0cb04f 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 dd1c5a00..ebc0177e 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;