You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2020/05/04 22:38:34 UTC

[servicecomb-pack] 01/02: SCB-1852 Fixed Alpha UI query error when the ES index not exits or empty

This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-pack.git

commit b55ddcff03068aa7592715beaa5fa707d97b37ec
Author: Lei Zhang <zh...@apache.org>
AuthorDate: Sun May 3 19:35:26 2020 +0800

    SCB-1852 Fixed Alpha UI query error when the ES index not exits or empty
---
 .../ElasticsearchTransactionRepository.java        | 68 +++++++++++++---------
 1 file changed, 42 insertions(+), 26 deletions(-)

diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
index e612c17..c5b5a0f 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
+++ b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/repository/elasticsearch/ElasticsearchTransactionRepository.java
@@ -31,6 +31,7 @@ import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.GlobalTransac
 import org.apache.servicecomb.pack.alpha.core.fsm.repository.model.PagingGlobalTransactions;
 import org.apache.servicecomb.pack.alpha.fsm.metrics.MetricsService;
 import org.apache.servicecomb.pack.alpha.fsm.repository.TransactionRepository;
+import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
 import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.action.search.SearchType;
@@ -118,34 +119,49 @@ public class ElasticsearchTransactionRepository implements TransactionRepository
   public PagingGlobalTransactions getGlobalTransactions(String state, int page, int size) {
     //ElasticsearchTemplate.prepareScroll() does not add sorting https://jira.spring.io/browse/DATAES-457
     long start = System.currentTimeMillis();
+    PagingGlobalTransactions pagingGlobalTransactions = PagingGlobalTransactions.builder().build();
     List<GlobalTransaction> globalTransactions = new ArrayList();
-    QueryBuilder query;
-    if (state != null && state.trim().length() > 0) {
-      query = QueryBuilders.termQuery("state.keyword", state);
-    } else {
-      query = QueryBuilders.matchAllQuery();
-    }
-    SearchResponse response = this.template.getClient().prepareSearch(INDEX_NAME)
-        .setTypes(INDEX_TYPE)
-        .setQuery(query)
-        .addSort(SortBuilders.fieldSort("beginTime").order(SortOrder.DESC))
-        .setSize(size)
-        .setFrom(page * size)
-        .execute()
-        .actionGet();
-    ObjectMapper jsonMapper = new ObjectMapper();
-    response.getHits().forEach(hit -> {
-      try {
-        GlobalTransactionDocument dto = jsonMapper
-            .readValue(hit.getSourceAsString(), GlobalTransactionDocument.class);
-        globalTransactions.add(dto);
-      } catch (Exception e) {
-        LOG.error(e.getMessage(), e);
+    try{
+      IndicesExistsRequest request = new IndicesExistsRequest(INDEX_NAME);
+      if (this.template.getClient().admin().indices().exists(request).actionGet().isExists()) {
+        QueryBuilder query;
+        if (state != null && state.trim().length() > 0) {
+          query = QueryBuilders.termQuery("state.keyword", state);
+        } else {
+          query = QueryBuilders.matchAllQuery();
+        }
+        SearchResponse response = this.template.getClient().prepareSearch(INDEX_NAME)
+            .setTypes(INDEX_TYPE)
+            .setQuery(query)
+            .addSort(SortBuilders.fieldSort("beginTime").order(SortOrder.DESC).missing("_last"))
+            .setSize(size)
+            .setFrom(page * size)
+            .execute()
+            .actionGet();
+        ObjectMapper jsonMapper = new ObjectMapper();
+        response.getHits().forEach(hit -> {
+          try {
+            GlobalTransactionDocument dto = jsonMapper
+                .readValue(hit.getSourceAsString(), GlobalTransactionDocument.class);
+            globalTransactions.add(dto);
+          } catch (Exception e) {
+            LOG.error(e.getMessage(), e);
+          }
+        });
+        pagingGlobalTransactions = PagingGlobalTransactions.builder().page(page).size(size).total(response.getHits().getTotalHits())
+            .globalTransactions(globalTransactions).elapsed(System.currentTimeMillis() - start).build();
+      } else {
+        LOG.warn("[alpha_global_transaction] index not exist");
+        pagingGlobalTransactions = PagingGlobalTransactions.builder().page(page).size(size).total(0)
+            .globalTransactions(globalTransactions).elapsed(System.currentTimeMillis() - start).build();
       }
-    });
-    LOG.info("Query total hits {}, return page {}, size {}", response.getHits().getTotalHits(), page, size);
-    return PagingGlobalTransactions.builder().page(page).size(size).total(response.getHits().getTotalHits())
-        .globalTransactions(globalTransactions).elapsed(System.currentTimeMillis() - start).build();
+    }catch (Exception ex){
+      LOG.error(ex.getMessage(),ex);
+      pagingGlobalTransactions = PagingGlobalTransactions.builder().page(page).size(size).total(0)
+          .globalTransactions(globalTransactions).elapsed(System.currentTimeMillis() - start).build();
+    }
+    LOG.info("Query total hits {}, return page {}, size {}", pagingGlobalTransactions.getTotal(), page, size);
+    return pagingGlobalTransactions;
   }
 
   public Map<String, Long> getTransactionStatistics() {