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

xxyu pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 3df1d8d3a324f93b212c16d2ea6937901fc4245f
Author: lixiang <447399...@qq.com>
AuthorDate: Fri Mar 24 17:46:19 2023 +0800

    KYLIN-5585 Bug fix for loading tables, to add the corresponding message of 
the failure into http response
---
 .../apache/kylin/rest/service/TableExtService.java | 43 +++++++++++-----------
 1 file changed, 21 insertions(+), 22 deletions(-)

diff --git 
a/src/datasource-service/src/main/java/org/apache/kylin/rest/service/TableExtService.java
 
b/src/datasource-service/src/main/java/org/apache/kylin/rest/service/TableExtService.java
index 7527719496..4f7f16afb0 100644
--- 
a/src/datasource-service/src/main/java/org/apache/kylin/rest/service/TableExtService.java
+++ 
b/src/datasource-service/src/main/java/org/apache/kylin/rest/service/TableExtService.java
@@ -115,7 +115,7 @@ public class TableExtService extends BasicService {
             StringHelper.toUpperCaseArray(request.getDatabases(), 
request.getDatabases());
             dbs = classifyDbTables(request.getDatabases(), true);
             Pair<List<Pair<TableDesc, TableExtDesc>>, Integer> pair = 
findCanLoadTables(dbs, project,
-                    true, tableResponseFromDB, existDbs);
+                    true, tableResponseFromDB, existDbs, Maps.newHashMap());
             canLoadTablesFromDB = pair.getFirst();
             count = pair.getSecond();
             checkThreshold(thresholdEnabled, count);
@@ -126,25 +126,28 @@ public class TableExtService extends BasicService {
         if (tableSize > 0) {
             StringHelper.toUpperCaseArray(request.getTables(), 
request.getTables());
             Map<String, Set<String>> tables = 
classifyDbTables(request.getTables(), false);
-            excludeTableFromFormalDB(dbs, tables);
             tableResponse = new LoadTableResponse();
             Pair<List<Pair<TableDesc, TableExtDesc>>, Integer> pair = 
findCanLoadTables(tables, project,
-                    false, tableResponse, existDbs);
+                    false, tableResponse, existDbs, dbs);
             canLoadTables = pair.getFirst();
             count = pair.getSecond() + count;
             checkThreshold(thresholdEnabled, count);
         }
 
         LoadTableResponse loadTableResponse = new LoadTableResponse();
-        if (tableResponseFromDB != null && !canLoadTablesFromDB.isEmpty()) {
-            innerLoadTables(project, tableResponseFromDB, canLoadTablesFromDB);
+        if (tableResponseFromDB != null) {
+            if (!canLoadTablesFromDB.isEmpty()) {
+                innerLoadTables(project, tableResponseFromDB, 
canLoadTablesFromDB);
+            }
             
loadTableResponse.getFailed().addAll(tableResponseFromDB.getFailed());
             
loadTableResponse.getLoaded().addAll(tableResponseFromDB.getLoaded());
             
loadTableResponse.getNeedRealSampling().addAll(tableResponseFromDB.getNeedRealSampling());
         }
 
-        if (tableResponse != null && !canLoadTables.isEmpty()) {
-            innerLoadTables(project, tableResponse, canLoadTables);
+        if (tableResponse != null) {
+            if (!canLoadTables.isEmpty()) {
+                innerLoadTables(project, tableResponse, canLoadTables);
+            }
             loadTableResponse.getFailed().addAll(tableResponse.getFailed());
             loadTableResponse.getLoaded().addAll(tableResponse.getLoaded());
             
loadTableResponse.getNeedRealSampling().addAll(tableResponse.getNeedRealSampling());
@@ -158,14 +161,8 @@ public class TableExtService extends BasicService {
         }
     }
 
-    private void excludeTableFromFormalDB(Map<String, Set<String>> dbs, 
Map<String, Set<String>> tables) {
-        if (dbs.size() > 0) {
-            tables.entrySet().removeIf(entry -> 
dbs.containsKey(entry.getKey()));
-        }
-    }
-
     public Pair<List<Pair<TableDesc, TableExtDesc>>, Integer> 
findCanLoadTables(Map<String, Set<String>> dbTables, String project,
-            boolean isDb, LoadTableResponse tableResponse, Set<String> 
existDbs) throws Exception {
+            boolean isDb, LoadTableResponse tableResponse, Set<String> 
existDbs, Map<String, Set<String>> formalDbs) throws Exception {
         List<Pair<TableDesc, TableExtDesc>> canLoadTables = 
Lists.newArrayList();
         List<TableNameResponse> responseAll = Lists.newArrayList();
         for (Map.Entry<String, Set<String>> entry : dbTables.entrySet()) {
@@ -189,14 +186,16 @@ public class TableExtService extends BasicService {
                 tableResponse.getFailed().addAll(tables);
             }
 
-            String[] tables = existTables.stream().map(table -> db + "." + 
table).toArray(String[]::new);
-            if (tables.length > 0) {
-                filterAccessTables(tables, canLoadTables, tableResponse, 
project);
-            }
+            if (formalDbs.size() == 0 || formalDbs.get(db) == null) {
+                String[] tables = existTables.stream().map(table -> db + "." + 
table).toArray(String[]::new);
+                if (tables.length > 0) {
+                    filterAccessTables(tables, canLoadTables, tableResponse, 
project);
+                }
 
-            List<TableNameResponse> response = 
tableService.getHiveTableNameResponses(project, db, "");
-            response.forEach(t -> t.setTableName(db + "." + t.getTableName()));
-            responseAll.addAll(response);
+                List<TableNameResponse> response = 
tableService.getHiveTableNameResponses(project, db, "");
+                response.forEach(t -> t.setTableName(db + "." + 
t.getTableName()));
+                responseAll.addAll(response);
+            }
         }
         return new Pair<>(canLoadTables, getTableCount(responseAll, 
canLoadTables));
     }
@@ -214,7 +213,7 @@ public class TableExtService extends BasicService {
         LoadTableResponse tableResponse = new LoadTableResponse();
         Map<String, Set<String>> tables = classifyDbTables(dbTables, isDb);
         List<Pair<TableDesc, TableExtDesc>> canLoadTables = 
findCanLoadTables(tables, project, isDb, tableResponse,
-                existDbs).getFirst();
+                existDbs, Maps.newHashMap()).getFirst();
         if (!canLoadTables.isEmpty()) {
             return innerLoadTables(project, tableResponse, canLoadTables);
         }

Reply via email to