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

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


The following commit(s) were added to refs/heads/kylin5 by this push:
     new f477844343 KYLIN-6042 Fix the discard_table_index parameter to ensure 
that no detail indexes are recommended
f477844343 is described below

commit f477844343892748c24207a51431857e5be4d39a
Author: Guoliang Sun <[email protected]>
AuthorDate: Tue Aug 6 11:00:52 2024 +0800

    KYLIN-6042 Fix the discard_table_index parameter to ensure that no detail 
indexes are recommended
---
 .../kylin/rest/service/ModelSmartService.java      |  7 +++---
 .../kylin/rest/service/ModelRecServiceTest.java    | 28 ++++++++++++++++++++++
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git 
a/src/rec-service/src/main/java/org/apache/kylin/rest/service/ModelSmartService.java
 
b/src/rec-service/src/main/java/org/apache/kylin/rest/service/ModelSmartService.java
index 95d9a3ee63..583182be57 100644
--- 
a/src/rec-service/src/main/java/org/apache/kylin/rest/service/ModelSmartService.java
+++ 
b/src/rec-service/src/main/java/org/apache/kylin/rest/service/ModelSmartService.java
@@ -26,7 +26,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
-import java.util.Optional;
 import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -179,11 +178,11 @@ public class ModelSmartService extends 
AbstractModelService implements SmartCont
                 String layoutStr = 
layoutMap.keySet().stream().map(Object::toString).collect(Collectors.joining(","));
                 log.info(String.format(Locale.ROOT, "Discard table index %s in 
model [%s] via api control.", layoutStr,
                         model.getAlias()));
-                Optional<AbstractContext.ModelContext> optional = 
proposeContext.getModelContexts().stream()
+                List<AbstractContext.ModelContext> contextList = 
proposeContext.getModelContexts().stream()
                         .filter(modelContext -> modelContext.getTargetModel() 
!= null
                                 && 
modelContext.getTargetModel().getUuid().equals(model.getUuid()))
-                        .findFirst();
-                optional.ifPresent(modelContext -> 
modelContext.getIndexRexItemMap().entrySet()
+                        .collect(Collectors.toList());
+                contextList.forEach(modelContext -> 
modelContext.getIndexRexItemMap().entrySet()
                         .removeIf(entry -> 
layoutMap.containsKey(entry.getValue().getLayout().getId())));
             }
         }
diff --git 
a/src/rec-service/src/test/java/org/apache/kylin/rest/service/ModelRecServiceTest.java
 
b/src/rec-service/src/test/java/org/apache/kylin/rest/service/ModelRecServiceTest.java
index 8990e20195..7bb170ed60 100644
--- 
a/src/rec-service/src/test/java/org/apache/kylin/rest/service/ModelRecServiceTest.java
+++ 
b/src/rec-service/src/test/java/org/apache/kylin/rest/service/ModelRecServiceTest.java
@@ -816,4 +816,32 @@ public class ModelRecServiceTest extends SourceTestCase {
         IndexPlan indexPlan1 = 
indexPlanManager.getIndexPlan(openSuggestionResponse2.getModels().get(0).getUuid());
         Assert.assertEquals(2, indexPlan1.getAllLayouts().size());
     }
+
+    @Test
+    public void testIndexDisabledWhenRecIndexDuplicate() {
+        String project = "default";
+        String sql1 = "SELECT c.* FROM (SELECT a.*, b.* FROM\n"
+                + "     (SELECT ID1 AS id FROM TEST_MEASURE) a RIGHT JOIN 
(SELECT *\n"
+                + "      FROM (SELECT ID1 AS id FROM TEST_MEASURE) d) b ON 
a.id=b.id) c";
+        String sql2 = "SELECT c.* FROM (SELECT a.*, b.* FROM\n"
+                + "        (SELECT ID1 AS id, NAME1 AS aName FROM 
TEST_MEASURE) a RIGHT JOIN (SELECT *\n"
+                + "         FROM (SELECT ID1 AS id, NAME1 AS dName FROM 
TEST_MEASURE) d) b ON a.id=b.id) c";
+        NIndexPlanManager indexPlanManager = 
NIndexPlanManager.getInstance(getTestConfig(), project);
+        String modelId = "cb596712-3a09-46f8-aea1-988b43fe9b6c";
+        IndexPlan indexPlan = indexPlanManager.getIndexPlan(modelId);
+        Assert.assertEquals(1, indexPlan.getAllLayouts().size());
+        Assert.assertEquals(0, 
indexPlan.getAllLayouts().stream().filter(LayoutEntity::isBase).count());
+
+        OpenSqlAccelerateRequest request = new OpenSqlAccelerateRequest();
+        request.setProject(project);
+        request.setSqls(Arrays.asList(sql1, sql2));
+        request.setForce2CreateNewModel(false);
+        request.setAcceptRecommendation(false);
+        request.setDiscardTableIndex(true);
+        OpenSuggestionResponse openSuggestionResponse = 
modelRecService.suggestOrOptimizeModels(request);
+        Assert.assertTrue(openSuggestionResponse.getErrorSqlList().isEmpty());
+        Assert.assertEquals(1, openSuggestionResponse.getModels().size());
+        Assert.assertFalse(
+                
openSuggestionResponse.getModels().get(0).getIndexes().get(0).getDimensions().get(0).isNew());
+    }
 }

Reply via email to