From bd578a799efc2edb6096ede684403cf525dede04 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Thu, 8 Feb 2024 13:28:15 +0100 Subject: [PATCH] fix(api-topics): avoid doing full scans over router tables --- apps/emqx_management/src/emqx_mgmt_api_topics.erl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/emqx_management/src/emqx_mgmt_api_topics.erl b/apps/emqx_management/src/emqx_mgmt_api_topics.erl index 75fa789bd..ed2de351b 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_topics.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_topics.erl @@ -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.