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());
+ }
}