You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by xx...@apache.org on 2023/05/06 06:59:15 UTC
[kylin] 14/38: KYLIN-5529 Support adding "basic agg index" or "basic table index" separately
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 620a6ad5bfd6ef06e1bd082deec6bc5e0d74d3cb
Author: Hang Jia <75...@qq.com>
AuthorDate: Fri Feb 24 10:59:06 2023 +0800
KYLIN-5529 Support adding "basic agg index" or "basic table index" separately
---
.../kylin/metadata/cube/model/IndexPlan.java | 28 ++++++++---
.../rest/controller/NModelControllerTest.java | 57 ++++++++++++++++++++++
.../apache/kylin/rest/request/ModelRequest.java | 6 +++
.../kylin/rest/service/BaseIndexUpdateHelper.java | 34 ++++++++++---
.../apache/kylin/rest/service/ModelService.java | 24 +++++++--
.../apache/kylin/rest/service/BaseIndexTest.java | 47 +++++++++++++-----
.../kylin/rest/service/ModelServiceTest.java | 32 +++++++++++-
7 files changed, 197 insertions(+), 31 deletions(-)
diff --git a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/IndexPlan.java b/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/IndexPlan.java
index 33c708b9e8..b2f70ee752 100644
--- a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/IndexPlan.java
+++ b/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/IndexPlan.java
@@ -24,6 +24,7 @@ import static org.apache.kylin.metadata.cube.model.IndexEntity.isAggIndex;
import static org.apache.kylin.metadata.cube.model.IndexEntity.isTableIndex;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Collection;
@@ -994,16 +995,29 @@ public class IndexPlan extends RootPersistentEntity implements Serializable, IEn
return !curLayout.equalsCols(replace);
}
- public void createAndAddBaseIndex(NDataModel model) {
+ public void createAndAddBaseIndex(NDataModel model, List<IndexEntity.Source> sources) {
checkIsNotCachedAndShared();
- LayoutEntity agg = createBaseAggIndex(model);
- LayoutEntity table = createBaseTableIndex(model);
List<LayoutEntity> baseLayouts = Lists.newArrayList();
- baseLayouts.add(agg);
- if (table != null) {
- baseLayouts.add(table);
+ if (sources.contains(IndexEntity.Source.BASE_AGG_INDEX)) {
+ LayoutEntity agg = createBaseAggIndex(model);
+ baseLayouts.add(agg);
+ }
+
+ if (sources.contains(IndexEntity.Source.BASE_TABLE_INDEX)) {
+ LayoutEntity table = createBaseTableIndex(model);
+ if (table != null) {
+ baseLayouts.add(table);
+ }
}
- createAndAddBaseIndex(baseLayouts);
+ if (!baseLayouts.isEmpty()) {
+ createAndAddBaseIndex(baseLayouts);
+ }
+ }
+
+ public void createAndAddBaseIndex(NDataModel model) {
+ ArrayList<IndexEntity.Source> sources = Lists.newArrayList(IndexEntity.Source.BASE_AGG_INDEX,
+ IndexEntity.Source.BASE_TABLE_INDEX);
+ createAndAddBaseIndex(model, sources);
}
public void createAndAddBaseIndex(List<LayoutEntity> needCreateBaseLayouts) {
diff --git a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NModelControllerTest.java b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NModelControllerTest.java
index 47520fa814..1638aa0bad 100644
--- a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NModelControllerTest.java
+++ b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NModelControllerTest.java
@@ -360,6 +360,63 @@ public class NModelControllerTest extends NLocalFileMetadataTestCase {
Mockito.verify(nModelController).createModel(Mockito.any(ModelRequest.class));
}
+ @Test
+ public void testCreateModelWithBaseIndexTypeAndWithBaseIndex() throws Exception {
+ ModelRequest request = new ModelRequest();
+ request.setProject("default");
+
+ request.setBaseIndexType(
+ Sets.newHashSet(IndexEntity.Source.BASE_AGG_INDEX, IndexEntity.Source.BASE_TABLE_INDEX));
+ request.setWithBaseIndex(true);
+ NDataModel mockModel = new NDataModel();
+ mockModel.setUuid("mock");
+ mockModel.setProject("default");
+ Mockito.doReturn(mockModel).when(modelService).createModel(request.getProject(), request);
+ Mockito.doReturn(new IndexPlan()).when(modelService).getIndexPlan(mockModel.getId(), mockModel.getProject());
+ mockMvc.perform(MockMvcRequestBuilders.post("/api/models").contentType(MediaType.APPLICATION_JSON)
+ .content(JsonUtil.writeValueAsString(request))
+ .accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_JSON)))
+ .andExpect(MockMvcResultMatchers.status().isOk());
+ Mockito.verify(nModelController).createModel(Mockito.any(ModelRequest.class));
+ }
+
+ @Test
+ public void testCreateModelWithBaseIndex() throws Exception {
+ ModelRequest request = new ModelRequest();
+ request.setProject("default");
+
+ request.setWithBaseIndex(true);
+ NDataModel mockModel = new NDataModel();
+ mockModel.setUuid("mock");
+ mockModel.setProject("default");
+ Mockito.doReturn(mockModel).when(modelService).createModel(request.getProject(), request);
+ Mockito.doReturn(new IndexPlan()).when(modelService).getIndexPlan(mockModel.getId(), mockModel.getProject());
+ mockMvc.perform(MockMvcRequestBuilders.post("/api/models").contentType(MediaType.APPLICATION_JSON)
+ .content(JsonUtil.writeValueAsString(request))
+ .accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_JSON)))
+ .andExpect(MockMvcResultMatchers.status().isOk());
+ Mockito.verify(nModelController).createModel(Mockito.any(ModelRequest.class));
+ }
+
+ @Test
+ public void testCreateModelWithBaseIndexType() throws Exception {
+ ModelRequest request = new ModelRequest();
+ request.setProject("default");
+
+ request.setBaseIndexType(
+ Sets.newHashSet(IndexEntity.Source.BASE_AGG_INDEX, IndexEntity.Source.BASE_TABLE_INDEX));
+ NDataModel mockModel = new NDataModel();
+ mockModel.setUuid("mock");
+ mockModel.setProject("default");
+ Mockito.doReturn(mockModel).when(modelService).createModel(request.getProject(), request);
+ Mockito.doReturn(new IndexPlan()).when(modelService).getIndexPlan(mockModel.getId(), mockModel.getProject());
+ mockMvc.perform(MockMvcRequestBuilders.post("/api/models").contentType(MediaType.APPLICATION_JSON)
+ .content(JsonUtil.writeValueAsString(request))
+ .accept(MediaType.parseMediaType(HTTP_VND_APACHE_KYLIN_JSON)))
+ .andExpect(MockMvcResultMatchers.status().isOk());
+ Mockito.verify(nModelController).createModel(Mockito.any(ModelRequest.class));
+ }
+
@Test
public void checkPartitionDesc() throws Exception {
PartitionDesc partitionDesc = new PartitionDesc();
diff --git a/src/modeling-service/src/main/java/org/apache/kylin/rest/request/ModelRequest.java b/src/modeling-service/src/main/java/org/apache/kylin/rest/request/ModelRequest.java
index 054b7e21f0..e585a8cf47 100644
--- a/src/modeling-service/src/main/java/org/apache/kylin/rest/request/ModelRequest.java
+++ b/src/modeling-service/src/main/java/org/apache/kylin/rest/request/ModelRequest.java
@@ -18,10 +18,13 @@
package org.apache.kylin.rest.request;
+
import java.util.Collection;
import java.util.List;
+import java.util.Set;
import java.util.function.BiFunction;
+import org.apache.kylin.metadata.cube.model.IndexEntity;
import org.apache.kylin.metadata.cube.model.IndexPlan;
import org.apache.kylin.metadata.insensitive.ModelInsensitiveRequest;
import org.apache.kylin.metadata.model.ColumnDesc;
@@ -84,6 +87,9 @@ public class ModelRequest extends NDataModel implements ModelInsensitiveRequest
@JsonProperty("with_base_index")
private boolean withBaseIndex = false;
+ @JsonProperty("base_index_type")
+ private Set<IndexEntity.Source> baseIndexType;
+
@JsonProperty("with_second_storage")
private boolean withSecondStorage = false;
diff --git a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/BaseIndexUpdateHelper.java b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/BaseIndexUpdateHelper.java
index 94e0915750..881f77a14f 100644
--- a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/BaseIndexUpdateHelper.java
+++ b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/BaseIndexUpdateHelper.java
@@ -17,14 +17,19 @@
*/
package org.apache.kylin.rest.service;
+import java.util.List;
+
import org.apache.kylin.common.KylinConfig;
-import org.apache.kylin.rest.util.SpringContext;
+import org.apache.kylin.metadata.cube.model.IndexEntity;
import org.apache.kylin.metadata.cube.model.IndexPlan;
import org.apache.kylin.metadata.cube.model.LayoutEntity;
import org.apache.kylin.metadata.cube.model.NIndexPlanManager;
import org.apache.kylin.metadata.model.NDataModel;
import org.apache.kylin.rest.request.CreateBaseIndexRequest;
import org.apache.kylin.rest.response.BuildBaseIndexResponse;
+import org.apache.kylin.rest.util.SpringContext;
+
+import com.google.common.collect.Lists;
import io.kyligence.kap.secondstorage.SecondStorageUpdater;
import io.kyligence.kap.secondstorage.SecondStorageUtil;
@@ -43,14 +48,25 @@ public class BaseIndexUpdateHelper {
private String project;
private String modelId;
- private boolean createIfNotExist;
+ private List<IndexEntity.Source> updateBaseIndexTypes;
private boolean needUpdate;
private boolean secondStorageEnabled = false;
@Setter
private boolean needCleanSecondStorage = true;
public BaseIndexUpdateHelper(NDataModel model, boolean createIfNotExist) {
+ this(model, updateTypesByFlag(createIfNotExist));
+ }
+
+ private static List<IndexEntity.Source> updateTypesByFlag(boolean createIfNotExist) {
+ if (createIfNotExist) {
+ return Lists.newArrayList(IndexEntity.Source.BASE_AGG_INDEX, IndexEntity.Source.BASE_TABLE_INDEX);
+ } else {
+ return Lists.newArrayList();
+ }
+ }
+ public BaseIndexUpdateHelper(NDataModel model, List<IndexEntity.Source> updateBaseIndexTypes) {
NIndexPlanManager indexPlanManager = NIndexPlanManager.getInstance(KylinConfig.getInstanceFromEnv(),
model.getProject());
IndexPlan indexPlan = indexPlanManager.getIndexPlan(model.getId());
@@ -61,7 +77,7 @@ public class BaseIndexUpdateHelper {
if (needUpdate) {
project = model.getProject();
modelId = model.getId();
- this.createIfNotExist = createIfNotExist;
+ this.updateBaseIndexTypes = updateBaseIndexTypes;
preBaseAggLayout = getBaseAggLayout();
preBaseTableLayout = getBaseTableLayout();
}
@@ -76,18 +92,20 @@ public class BaseIndexUpdateHelper {
if (!needUpdate) {
return BuildBaseIndexResponse.EMPTY;
}
- if (notExist(preBaseAggLayout) && notExist(preBaseTableLayout) && !createIfNotExist) {
+ if (notExist(preBaseAggLayout) && notExist(preBaseTableLayout)
+ && !updateBaseIndexTypes.contains(IndexEntity.Source.BASE_TABLE_INDEX)
+ && !updateBaseIndexTypes.contains(IndexEntity.Source.BASE_AGG_INDEX)) {
return BuildBaseIndexResponse.EMPTY;
}
long curBaseTableLayout = getBaseTableLayout();
- boolean needCreateBaseTable = createIfNotExist;
+ boolean needCreateBaseTable = updateBaseIndexTypes.contains(IndexEntity.Source.BASE_TABLE_INDEX);
if (exist(preBaseTableLayout) && notExist(curBaseTableLayout)) {
needCreateBaseTable = true;
}
Long curExistBaseAggLayout = getBaseAggLayout();
- boolean needCreateBaseAgg = createIfNotExist;
+ boolean needCreateBaseAgg = updateBaseIndexTypes.contains(IndexEntity.Source.BASE_AGG_INDEX);
if (exist(preBaseAggLayout) && notExist(curExistBaseAggLayout)) {
needCreateBaseAgg = true;
}
@@ -98,8 +116,8 @@ public class BaseIndexUpdateHelper {
CreateBaseIndexRequest indexRequest = new CreateBaseIndexRequest();
indexRequest.setModelId(modelId);
indexRequest.setProject(project);
- BuildBaseIndexResponse response = service.updateBaseIndex(project, indexRequest, needCreateBaseAgg,
- needCreateBaseTable, true);
+ BuildBaseIndexResponse response = service.updateBaseIndex(project, indexRequest, needCreateBaseTable,
+ needCreateBaseAgg, true);
response.judgeIndexOperateType(exist(preBaseAggLayout), true);
response.judgeIndexOperateType(exist(preBaseTableLayout), false);
diff --git a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java
index 9a917fb61c..6c5aced159 100644
--- a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java
+++ b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelService.java
@@ -2053,14 +2053,30 @@ public class ModelService extends AbstractModelService implements TableModelSupp
}
public void addBaseIndex(ModelRequest modelRequest, NDataModel model, IndexPlan indexPlan) {
- if (!modelRequest.isWithSecondStorage() && NDataModel.ModelType.BATCH == model.getModelType()
- && modelRequest.isWithBaseIndex()) {
- indexPlan.createAndAddBaseIndex(model);
+ if (!modelRequest.isWithSecondStorage() && NDataModel.ModelType.BATCH == model.getModelType()) {
+ List<IndexEntity.Source> sources = needHandleBaseIndexType(modelRequest);
+ indexPlan.createAndAddBaseIndex(model, sources);
} else if (modelRequest.isWithSecondStorage()) {
indexPlan.createAndAddBaseIndex(Collections.singletonList(indexPlan.createBaseTableIndex(model)));
}
}
+ private List<IndexEntity.Source> needHandleBaseIndexType(ModelRequest modelRequest) {
+ List<IndexEntity.Source> sources = Lists.newArrayList();
+ if (modelRequest.getBaseIndexType() != null) {
+ if (modelRequest.getBaseIndexType().contains(IndexEntity.Source.BASE_AGG_INDEX)) {
+ sources.add(IndexEntity.Source.BASE_AGG_INDEX);
+ }
+ if (modelRequest.getBaseIndexType().contains(IndexEntity.Source.BASE_TABLE_INDEX)) {
+ sources.add(IndexEntity.Source.BASE_TABLE_INDEX);
+ }
+ } else if (modelRequest.isWithBaseIndex()) {
+ sources.add(IndexEntity.Source.BASE_AGG_INDEX);
+ sources.add(IndexEntity.Source.BASE_TABLE_INDEX);
+ }
+ return sources;
+ }
+
// for streaming & fusion model
private void createStreamingJob(String project, NDataModel model, ModelRequest request) {
if (NDataModel.ModelType.BATCH != model.getModelType()) {
@@ -2995,7 +3011,7 @@ public class ModelService extends AbstractModelService implements TableModelSupp
copyModel.init(modelManager.getConfig(), project, modelManager.getCCRelatedModels(copyModel));
BaseIndexUpdateHelper baseIndexUpdater = new BaseIndexUpdateHelper(originModel,
- request.isWithBaseIndex());
+ needHandleBaseIndexType(request));
preProcessBeforeModelSave(copyModel, project);
val updated = modelManager.updateDataModelDesc(copyModel);
diff --git a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/BaseIndexTest.java b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/BaseIndexTest.java
index 928c903239..8abe394632 100644
--- a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/BaseIndexTest.java
+++ b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/BaseIndexTest.java
@@ -142,6 +142,25 @@ public class BaseIndexTest extends SourceTestCase {
compareBaseIndex(getModelIdFrom(modelRequest.getAlias()), baseTableLayout, baseAggLayout);
}
+ @Test
+ public void testCreateBaseTableLayoutWithBaseIndexTypes() {
+ NDataModelManager modelManager = NDataModelManager.getInstance(KylinConfig.getInstanceFromEnv(), "default");
+ ModelRequest modelRequest = FormModel(modelManager.getDataModelDesc(COMMON_MODEL_ID));
+ modelRequest.setWithBaseIndex(false);
+ String modelId = modelService.createModel(modelRequest.getProject(), modelRequest).getId();
+ BaseIndexUpdateHelper baseIndexUpdater = new BaseIndexUpdateHelper(modelRequest,
+ Lists.newArrayList(Source.BASE_AGG_INDEX));
+ BuildBaseIndexResponse baseIndexResponse = baseIndexUpdater.update(indexPlanService);
+ LayoutEntity baseAggLayout = LayoutBuilder.builder().colOrder(0, 1, 2, 3, 100000, 100001).id(1L).build();
+ LayoutEntity baseTableLayout = null;
+ compareBaseIndex(getModelIdFrom(modelRequest.getAlias()), baseTableLayout, baseAggLayout);
+
+ baseIndexUpdater = new BaseIndexUpdateHelper(modelRequest, Lists.newArrayList(Source.BASE_TABLE_INDEX));
+ baseIndexResponse = baseIndexUpdater.update(indexPlanService);
+ baseTableLayout = LayoutBuilder.builder().colOrder(0, 1, 2, 3).id(20000000001L).build();
+ compareBaseIndex(getModelIdFrom(modelRequest.getAlias()), baseTableLayout, baseAggLayout);
+ }
+
@Test
public void testCreateBaseLayoutWithProperties() {
// create base index is same with index in rulebaseindex or indexes
@@ -402,7 +421,7 @@ public class BaseIndexTest extends SourceTestCase {
IndexPlan indexPlan = NIndexPlanManager.getInstance(getTestConfig(), getProject()).getIndexPlan(modelId);
return indexPlan.getAllLayouts().stream()
.filter(layoutEntity -> layoutEntity.isBase() && isAggIndex(layoutEntity.getId())).findFirst()
- .orElseGet(null);
+ .orElse(null);
}
private String createBaseIndexFromModel(String modelId) {
@@ -417,18 +436,24 @@ public class BaseIndexTest extends SourceTestCase {
if (expectedBaseTableLayout == null && baseTableLayout == null) {
return;
}
- Assert.assertThat(baseAggLayout.getColOrder(), equalTo(expectedBaseAggLayout.getColOrder()));
- Assert.assertThat(baseAggLayout.getShardByColumns(), equalTo(expectedBaseAggLayout.getShardByColumns()));
- Assert.assertThat(baseAggLayout.getSortByColumns(), equalTo(expectedBaseAggLayout.getSortByColumns()));
- Assert.assertThat(baseTableLayout.getColOrder(), equalTo(expectedBaseTableLayout.getColOrder()));
- Assert.assertThat(baseTableLayout.getShardByColumns(), equalTo(expectedBaseTableLayout.getShardByColumns()));
- Assert.assertThat(baseTableLayout.getSortByColumns(), equalTo(expectedBaseTableLayout.getSortByColumns()));
- if (baseAggLayout.getId() != -1) {
- Assert.assertEquals(expectedBaseAggLayout.getId(), baseAggLayout.getId());
+ if (expectedBaseAggLayout != null) {
+ Assert.assertThat(baseAggLayout.getColOrder(), equalTo(expectedBaseAggLayout.getColOrder()));
+ Assert.assertThat(baseAggLayout.getShardByColumns(), equalTo(expectedBaseAggLayout.getShardByColumns()));
+ Assert.assertThat(baseAggLayout.getSortByColumns(), equalTo(expectedBaseAggLayout.getSortByColumns()));
+ if (baseAggLayout.getId() != -1) {
+ Assert.assertEquals(expectedBaseAggLayout.getId(), baseAggLayout.getId());
+ }
}
- if (baseTableLayout.getId() != -1) {
- Assert.assertEquals(expectedBaseTableLayout.getId(), baseTableLayout.getId());
+ if (expectedBaseTableLayout != null) {
+ Assert.assertThat(baseTableLayout.getColOrder(), equalTo(expectedBaseTableLayout.getColOrder()));
+ Assert.assertThat(baseTableLayout.getShardByColumns(),
+ equalTo(expectedBaseTableLayout.getShardByColumns()));
+ Assert.assertThat(baseTableLayout.getSortByColumns(), equalTo(expectedBaseTableLayout.getSortByColumns()));
+
+ if (baseTableLayout.getId() != -1) {
+ Assert.assertEquals(expectedBaseTableLayout.getId(), baseTableLayout.getId());
+ }
}
}
diff --git a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java
index b69b89585b..58971f625c 100644
--- a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java
+++ b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceTest.java
@@ -5009,8 +5009,38 @@ public class ModelServiceTest extends SourceTestCase {
when(modelRequest.isWithSecondStorage()).thenReturn(false);
when(model.getModelType()).thenReturn(NDataModel.ModelType.BATCH);
when(modelRequest.isWithBaseIndex()).thenReturn(true);
+ when(modelRequest.getBaseIndexType()).thenReturn(null);
modelService.addBaseIndex(modelRequest, model, indexPlan);
- Mockito.verify(indexPlan).createAndAddBaseIndex(model);
+ Mockito.verify(indexPlan).createAndAddBaseIndex(model,
+ Lists.newArrayList(IndexEntity.Source.BASE_AGG_INDEX, IndexEntity.Source.BASE_TABLE_INDEX));
+ when(modelRequest.isWithSecondStorage()).thenReturn(true);
+ when(indexPlan.createBaseTableIndex(model)).thenReturn(null);
+ modelService.addBaseIndex(modelRequest, model, indexPlan);
+ Mockito.verify(indexPlan).createAndAddBaseIndex(anyList());
+ }
+
+ @Test
+ public void testAddBaseAggIndex() {
+ val modelRequest = mock(ModelRequest.class);
+ val model = mock(NDataModel.class);
+ val indexPlan = mock(IndexPlan.class);
+
+ when(modelRequest.isWithSecondStorage()).thenReturn(false);
+ when(model.getModelType()).thenReturn(NDataModel.ModelType.BATCH);
+ when(modelRequest.isWithBaseIndex()).thenReturn(true);
+ when(modelRequest.getBaseIndexType()).thenReturn(null);
+ modelService.addBaseIndex(modelRequest, model, indexPlan);
+ Mockito.verify(indexPlan).createAndAddBaseIndex(model,
+ Lists.newArrayList(IndexEntity.Source.BASE_AGG_INDEX, IndexEntity.Source.BASE_TABLE_INDEX));
+
+ when(modelRequest.getBaseIndexType()).thenReturn(Collections.singleton(IndexEntity.Source.BASE_AGG_INDEX));
+ modelService.addBaseIndex(modelRequest, model, indexPlan);
+ Mockito.verify(indexPlan).createAndAddBaseIndex(model, Lists.newArrayList(IndexEntity.Source.BASE_AGG_INDEX));
+
+ when(modelRequest.getBaseIndexType()).thenReturn(Collections.singleton(IndexEntity.Source.BASE_TABLE_INDEX));
+ modelService.addBaseIndex(modelRequest, model, indexPlan);
+ Mockito.verify(indexPlan).createAndAddBaseIndex(model, Lists.newArrayList(IndexEntity.Source.BASE_TABLE_INDEX));
+
when(modelRequest.isWithSecondStorage()).thenReturn(true);
when(indexPlan.createBaseTableIndex(model)).thenReturn(null);
modelService.addBaseIndex(modelRequest, model, indexPlan);