diff options
| author | Michael Davis <mcarsondavis@gmail.com> | 2023-02-01 09:47:15 -0600 |
|---|---|---|
| committer | Diana Parra Corbacho <dparracorbac@vmware.com> | 2023-05-12 11:31:16 +0200 |
| commit | b20443df9fb8fc6b4b667de2bffafb830a63b88f (patch) | |
| tree | a211d349654c643a33a9001373039d24e4f188a0 | |
| parent | cfeea2622de3d413cba26534087024d6f3680914 (diff) | |
| download | rabbitmq-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.erl | 31 |
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. |
