diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_mnesia.erl | 25 | ||||
| -rw-r--r-- | src/rabbit_variable_queue.erl | 12 | ||||
| -rw-r--r-- | src/rabbit_version.erl | 31 |
3 files changed, 42 insertions, 26 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index 9ef37d3c48..408154ebb3 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -610,7 +610,7 @@ check_cluster_consistency(Node, CheckNodesConsistency) -> end; {_OTP, Rabbit, _Hash, _Status} -> %% delegate hash checking implies version mismatch - version_error("Rabbit", rabbit_misc:version(), Rabbit) + rabbit_version:version_error("Rabbit", rabbit_misc:version(), Rabbit) end. %%-------------------------------------------------------------------- @@ -765,12 +765,12 @@ change_extra_db_nodes(ClusterNodes0, CheckOtherNodes) -> check_consistency(OTP, Rabbit) -> rabbit_misc:sequence_error( - [check_otp_consistency(OTP), + [rabbit_version:check_otp_consistency(OTP), check_rabbit_consistency(Rabbit)]). check_consistency(OTP, Rabbit, Node, Status) -> rabbit_misc:sequence_error( - [check_otp_consistency(OTP), + [rabbit_version:check_otp_consistency(OTP), check_rabbit_consistency(Rabbit), check_nodes_consistency(Node, Status)]). @@ -785,25 +785,8 @@ check_nodes_consistency(Node, RemoteStatus = {RemoteAllNodes, _, _}) -> [node(), Node, Node])}} end. -check_version_consistency(This, Remote, Name) -> - check_version_consistency(This, Remote, Name, fun (A, B) -> A =:= B end). - -check_version_consistency(This, Remote, Name, Comp) -> - case Comp(This, Remote) of - true -> ok; - false -> version_error(Name, This, Remote) - end. - -version_error(Name, This, Remote) -> - {error, {inconsistent_cluster, - rabbit_misc:format("~s version mismatch: local node is ~s, " - "remote node ~s", [Name, This, Remote])}}. - -check_otp_consistency(Remote) -> - check_version_consistency(rabbit_misc:otp_release(), Remote, "OTP"). - check_rabbit_consistency(Remote) -> - check_version_consistency( + rabbit_version:check_version_consistency( rabbit_misc:version(), Remote, "Rabbit", fun rabbit_misc:version_minor_equivalent/2). diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl index 11e6171acf..eb3e9f5095 100644 --- a/src/rabbit_variable_queue.erl +++ b/src/rabbit_variable_queue.erl @@ -1653,10 +1653,16 @@ count_pending_acks(#vqstate { ram_pending_ack = RPA, qi_pending_ack = QPA }) -> gb_trees:size(RPA) + gb_trees:size(DPA) + gb_trees:size(QPA). -purge_betas_and_deltas(DelsAndAcksFun, State = #vqstate { q3 = Q3 }) -> +purge_betas_and_deltas(DelsAndAcksFun, State = #vqstate { mode = Mode }) -> + State0 = #vqstate { q3 = Q3 } = + case Mode of + lazy -> maybe_deltas_to_betas(DelsAndAcksFun, State); + _ -> State + end, + case ?QUEUE:is_empty(Q3) of - true -> State; - false -> State1 = remove_queue_entries(Q3, DelsAndAcksFun, State), + true -> State0; + false -> State1 = remove_queue_entries(Q3, DelsAndAcksFun, State0), purge_betas_and_deltas(DelsAndAcksFun, maybe_deltas_to_betas( DelsAndAcksFun, diff --git a/src/rabbit_version.erl b/src/rabbit_version.erl index d3b2be1b50..19fc36342e 100644 --- a/src/rabbit_version.erl +++ b/src/rabbit_version.erl @@ -18,7 +18,9 @@ -export([recorded/0, matches/2, desired/0, desired_for_scope/1, record_desired/0, record_desired_for_scope/1, - upgrades_required/1]). + upgrades_required/1, check_version_consistency/3, + check_version_consistency/4, check_otp_consistency/1, + version_error/3]). %% ------------------------------------------------------------------- -ifdef(use_specs). @@ -40,7 +42,13 @@ (scope()) -> rabbit_types:ok_or_error(any())). -spec(upgrades_required/1 :: (scope()) -> rabbit_types:ok_or_error2([step()], any())). - +-spec(check_version_consistency/3 :: + (string(), string(), string()) -> rabbit_types:ok_or_error(any())). +-spec(check_version_consistency/4 :: + (string(), string(), string(), string()) -> + rabbit_types:ok_or_error(any())). +-spec(check_otp_consistency/1 :: + (string()) -> rabbit_types:ok_or_error(any())). -endif. %% ------------------------------------------------------------------- @@ -173,3 +181,22 @@ categorise_by_scope(Version) when is_list(Version) -> dir() -> rabbit_mnesia:dir(). schema_filename() -> filename:join(dir(), ?VERSION_FILENAME). + +%% -------------------------------------------------------------------- + +check_version_consistency(This, Remote, Name) -> + check_version_consistency(This, Remote, Name, fun (A, B) -> A =:= B end). + +check_version_consistency(This, Remote, Name, Comp) -> + case Comp(This, Remote) of + true -> ok; + false -> version_error(Name, This, Remote) + end. + +version_error(Name, This, Remote) -> + {error, {inconsistent_cluster, + rabbit_misc:format("~s version mismatch: local node is ~s, " + "remote node ~s", [Name, This, Remote])}}. + +check_otp_consistency(Remote) -> + check_version_consistency(rabbit_misc:otp_release(), Remote, "OTP"). |
