summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Davis <mcarsondavis@gmail.com>2023-02-01 09:47:15 -0600
committerDiana Parra Corbacho <dparracorbac@vmware.com>2023-05-12 11:31:16 +0200
commitb20443df9fb8fc6b4b667de2bffafb830a63b88f (patch)
treea211d349654c643a33a9001373039d24e4f188a0
parentcfeea2622de3d413cba26534087024d6f3680914 (diff)
downloadrabbitmq-server-git-b20443df9fb8fc6b4b667de2bffafb830a63b88f.tar.gz
projections: Match on node props in extended project fun
One of the Khepri revisions on the projections branch used `undefined` in extended projection functions to indicate that there was no old/new tree node. This was eventually changed before being merged so that the old and new tree node properties (`khepri:node_props()`) are always provided and an empty map is passed instead if there is no tree node in the old/new tree.
-rw-r--r--deps/rabbit/src/rabbit_khepri.erl31
1 files changed, 14 insertions, 17 deletions
diff --git a/deps/rabbit/src/rabbit_khepri.erl b/deps/rabbit/src/rabbit_khepri.erl
index 1c11dd1edd..c85aae9828 100644
--- a/deps/rabbit/src/rabbit_khepri.erl
+++ b/deps/rabbit/src/rabbit_khepri.erl
@@ -697,22 +697,8 @@ register_rabbit_index_route_projection() ->
%% `khepri_projection:extended_projection_fun()' to determine the changes
%% `khepri_projection' should apply to the ETS table using set algebra.
projection_fun_for_sets(MapFun) ->
- fun (_Table, _Path, undefined, undefined) ->
- ok;
- (Table, Path, undefined, NewPayload0) ->
- NewPayload = maps:get(data, NewPayload0, sets:new()),
- ets:insert(Table, [MapFun(Path, Element) ||
- Element <- sets:to_list(NewPayload)]);
-
- (Table, Path, OldPayload0, undefined) ->
- OldPayload = maps:get(data, OldPayload0, sets:new()),
- sets:fold(
- fun(Element, _Acc) ->
- ets:delete_object(Table, MapFun(Path, Element))
- end, [], OldPayload);
- (Table, Path, OldPayload0, NewPayload0) ->
- NewPayload = maps:get(data, NewPayload0, sets:new()),
- OldPayload = maps:get(data, OldPayload0, sets:new()),
+ fun
+ (Table, Path, #{data := OldPayload}, #{data := NewPayload}) ->
Deletions = sets:subtract(OldPayload, NewPayload),
Creations = sets:subtract(NewPayload, OldPayload),
sets:fold(
@@ -720,5 +706,16 @@ projection_fun_for_sets(MapFun) ->
ets:delete_object(Table, MapFun(Path, Element))
end, [], Deletions),
ets:insert(Table, [MapFun(Path, Element) ||
- Element <- sets:to_list(Creations)])
+ Element <- sets:to_list(Creations)]);
+ (Table, Path, _OldProps, #{data := NewPayload}) ->
+ ets:insert(Table, [MapFun(Path, Element) ||
+ Element <- sets:to_list(NewPayload)]);
+
+ (Table, Path, #{data := OldPayload}, _NewProps) ->
+ sets:fold(
+ fun(Element, _Acc) ->
+ ets:delete_object(Table, MapFun(Path, Element))
+ end, [], OldPayload);
+ (_Table, _Path, _OldProps, _NewProps) ->
+ ok
end.