Просмотр исходного кода

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

Andrew Mayorov 2 лет назад
Родитель
Сommit
bd578a799e
1 измененных файлов с 7 добавлено и 4 удалено
  1. 7 4
      apps/emqx_management/src/emqx_mgmt_api_topics.erl

+ 7 - 4
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.