Skip to content

Commit 2bc5510

Browse files
committed
Merge branch 'dgud/mnesia/discard-old-info/OTP-19501' into maint
* dgud/mnesia/discard-old-info/OTP-19501: mnesia: Discard old irrelevant msgs
2 parents 7d04612 + ec9a108 commit 2bc5510

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

lib/mnesia/src/mnesia_controller.erl

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1490,17 +1490,25 @@ orphan_tables([Tab | Tabs], Node, Ns, Local, Remote) ->
14901490
orphan_tables([], _, _, LocalOrphans, RemoteMasters) ->
14911491
{LocalOrphans, RemoteMasters}.
14921492

1493-
node_has_tabs([Tab | Tabs], Node, State) when Node /= node() ->
1494-
State2 =
1495-
try update_whereabouts(Tab, Node, State) of
1496-
State1 = #state{} -> State1
1497-
catch exit:R -> %% Tab was just deleted?
1498-
case ?catch_val({Tab, cstruct}) of
1499-
{'EXIT', _} -> State; % yes
1500-
_ -> erlang:error(R)
1501-
end
1502-
end,
1503-
node_has_tabs(Tabs, Node, State2);
1493+
node_has_tabs([Tab | Tabs], Node, State0) when Node /= node() ->
1494+
State = try
1495+
case ?catch_val({Tab, cstruct}) of
1496+
{'EXIT', _} -> State0;
1497+
Cs ->
1498+
case mnesia_lib:cs_to_storage_type(Node, Cs) of
1499+
unknown -> %% handle_early_msgs may come with obsolete
1500+
State0; %% information, if irrelevant ignore it.
1501+
_ ->
1502+
#state{} = update_whereabouts(Tab, Node, State0)
1503+
end
1504+
end
1505+
catch exit:R:ST -> %% Tab was just deleted?
1506+
case ?catch_val({Tab, cstruct}) of
1507+
{'EXIT', _} -> State0; % yes
1508+
_ -> erlang:error({R, ST})
1509+
end
1510+
end,
1511+
node_has_tabs(Tabs, Node, State);
15041512
node_has_tabs([Tab | Tabs], Node, State) ->
15051513
user_sync_tab(Tab),
15061514
node_has_tabs(Tabs, Node, State);

0 commit comments

Comments
 (0)