fix(ft-asm): use regular map for meta fragments

There's actually no need to use an ordered data structure at all.
This commit is contained in:
Andrew Mayorov 2023-03-23 14:17:56 +03:00 committed by Ilya Averyanov
parent 4132f5a5fb
commit 9aec01e7a3
1 changed files with 5 additions and 8 deletions

View File

@ -37,10 +37,7 @@
status :: status(), status :: status(),
coverage :: coverage() | undefined, coverage :: coverage() | undefined,
properties :: properties() | undefined, properties :: properties() | undefined,
meta :: orddict:orddict( meta :: #{filemeta() => {node(), filefrag({filemeta, filemeta()})}},
filemeta(),
{node(), filefrag({filemeta, filemeta()})}
),
segs :: emqx_wdgraph:t(emqx_ft:offset(), {node(), filefrag({segment, segmentinfo()})}), segs :: emqx_wdgraph:t(emqx_ft:offset(), {node(), filefrag({segment, segmentinfo()})}),
size :: emqx_ft:bytes() size :: emqx_ft:bytes()
}). }).
@ -63,7 +60,7 @@
new(Size) -> new(Size) ->
#asm{ #asm{
status = {incomplete, {missing, filemeta}}, status = {incomplete, {missing, filemeta}},
meta = orddict:new(), meta = #{},
segs = emqx_wdgraph:new(), segs = emqx_wdgraph:new(),
size = Size size = Size
}. }.
@ -111,7 +108,7 @@ coverage(#asm{coverage = Coverage}) ->
-spec nodes(t()) -> [node()]. -spec nodes(t()) -> [node()].
nodes(#asm{meta = Meta, segs = Segs}) -> nodes(#asm{meta = Meta, segs = Segs}) ->
S1 = orddict:fold( S1 = maps:fold(
fun(_Meta, {Node, _Fragment}, Acc) -> fun(_Meta, {Node, _Fragment}, Acc) ->
ordsets:add_element(Node, Acc) ordsets:add_element(Node, Acc)
end, end,
@ -131,7 +128,7 @@ properties(#asm{properties = Properties}) ->
Properties. Properties.
status(meta, #asm{meta = Meta}) -> status(meta, #asm{meta = Meta}) ->
status(meta, orddict:to_list(Meta)); status(meta, maps:to_list(Meta));
status(meta, [{Meta, {_Node, _Frag}}]) -> status(meta, [{Meta, {_Node, _Frag}}]) ->
{complete, Meta}; {complete, Meta};
status(meta, []) -> status(meta, []) ->
@ -150,7 +147,7 @@ status(coverage, #asm{segs = Segments, size = Size}) ->
append_filemeta(Asm, Node, Fragment = #{fragment := {filemeta, Meta}}) -> append_filemeta(Asm, Node, Fragment = #{fragment := {filemeta, Meta}}) ->
Asm#asm{ Asm#asm{
meta = orddict:store(Meta, {Node, Fragment}, Asm#asm.meta) meta = maps:put(Meta, {Node, Fragment}, Asm#asm.meta)
}. }.
append_segmentinfo(Asm, _Node, #{fragment := {segment, #{size := 0}}}) -> append_segmentinfo(Asm, _Node, #{fragment := {segment, #{size := 0}}}) ->