fix(api-topics): avoid doing full scans over router tables

This commit is contained in:
Andrew Mayorov 2024-02-08 13:28:15 +01:00
parent 9bb0868628
commit bd578a799e
No known key found for this signature in database
GPG Key ID: 2837C62ACFBFED5D
1 changed files with 7 additions and 4 deletions

View File

@ -164,14 +164,17 @@ eval_topic_query(MS, QState) ->
finalize_query(eval_topic_query(MS, QState, emqx_mgmt_api:init_query_result())).
eval_topic_query(MS, QState, QResult) ->
QPage = eval_topic_query_page(MS, QState),
case QPage of
case eval_topic_query_page(MS, QState) of
{Rows, '$end_of_table'} ->
{_, NQResult} = emqx_mgmt_api:accumulate_query_rows(node(), Rows, QState, QResult),
NQResult#{complete => true};
{Rows, NCont} ->
{_, NQResult} = emqx_mgmt_api:accumulate_query_rows(node(), Rows, QState, QResult),
eval_topic_query(MS, QState#{continuation := NCont}, NQResult);
case emqx_mgmt_api:accumulate_query_rows(node(), Rows, QState, QResult) of
{more, NQResult} ->
eval_topic_query(MS, QState#{continuation := NCont}, NQResult);
{enough, NQResult} ->
NQResult#{complete => false}
end;
'$end_of_table' ->
QResult#{complete => true}
end.