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 2022/12/16 07:01:37 UTC
[kylin] 06/15: KYLIN-5352 updating healthy model no need set id of the simplified measure
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 4ab0273f45054ae7712689d456615f7658419cdd
Author: Pengfei Zhan <pe...@kyligence.io>
AuthorDate: Fri Oct 21 23:29:10 2022 +0800
KYLIN-5352 updating healthy model no need set id of the simplified measure
---
.../kylin/rest/service/ModelSemanticHelper.java | 85 +++++++------
.../service/ModelServiceSemanticUpdateTest.java | 133 +++++++++++++++++----
.../kylin/rest/service/TableReloadServiceTest.java | 82 ++++++-------
3 files changed, 201 insertions(+), 99 deletions(-)
diff --git a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelSemanticHelper.java b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelSemanticHelper.java
index 9471316401..6e029b6b4e 100644
--- a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelSemanticHelper.java
+++ b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelSemanticHelper.java
@@ -524,47 +524,12 @@ public class ModelSemanticHelper extends BasicService {
unusedColumn.setStatus(NDataModel.ColumnStatus.TOMB);
updateImpact.getRemovedOrUpdatedCCs().add(unusedColumn.getId());
});
-
- Set<Integer> healthyExistedMeasures = Sets.newHashSet();
- List<String> illegalSimplifiedMeasures = Lists.newArrayList();
-
- Map<String, Integer> nameToIdOfSimplified = Maps.newHashMap();
- Set<Integer> idOfSimplified = Sets.newHashSet();
- for (SimplifiedMeasure measure : request.getSimplifiedMeasures()) {
- nameToIdOfSimplified.put(measure.getName(), measure.getId());
- if (measure.getId() != 0) {
- idOfSimplified.add(measure.getId());
- }
- }
-
- List<Measure> nonCountStarExistedMeasures = originModel.getAllMeasures().stream()
- .filter(measure -> !measure.getName().equals("COUNT_ALL")).filter(measure -> !measure.isTomb())
- .collect(Collectors.toList());
- Map<String, Integer> nameToIdOfExistedModel = nonCountStarExistedMeasures.stream()
- .collect(Collectors.toMap(MeasureDesc::getName, Measure::getId));
- nameToIdOfExistedModel.forEach((name, id) -> {
- if (!nameToIdOfSimplified.containsKey(name)) {
- if (idOfSimplified.contains(id)) {
- healthyExistedMeasures.add(id);
- }
- } else if (nameToIdOfSimplified.get(name) == 0) {
- illegalSimplifiedMeasures.add(name);
- } else {
- healthyExistedMeasures.add(id);
- }
- });
-
- if (!illegalSimplifiedMeasures.isEmpty()) {
- throw new KylinException(SIMPLIFIED_MEASURES_MISSING_ID, String.join(",", illegalSimplifiedMeasures));
+ Set<String> allFunctions = originModel.getEffectiveMeasures().values().stream()
+ .map(measure -> measure.getFunction().toString()).collect(Collectors.toSet());
+ if (allFunctions.size() != originModel.getEffectiveMeasures().size()) {
+ fixDupMeasureNames(originModel, request);
}
- nonCountStarExistedMeasures.stream() //
- .filter(measure -> !healthyExistedMeasures.contains(measure.getId())) //
- .forEach(measure -> {
- log.warn("the measure({}) has been handled to tomb", measure.getName());
- measure.setTomb(true);
- });
-
// move deleted CC's measure to TOMB
List<Measure> currentMeasures = originModel.getEffectiveMeasures().values().asList();
currentMeasures.stream().filter(measure -> {
@@ -620,6 +585,48 @@ public class ModelSemanticHelper extends BasicService {
return updateImpact;
}
+ private void fixDupMeasureNames(NDataModel originModel, ModelRequest request) {
+ Set<Integer> healthyExistedMeasures = Sets.newHashSet();
+ List<String> illegalSimplifiedMeasures = Lists.newArrayList();
+
+ Map<String, Integer> nameToIdOfSimplified = Maps.newHashMap();
+ Set<Integer> idOfSimplified = Sets.newHashSet();
+ for (SimplifiedMeasure measure : request.getSimplifiedMeasures()) {
+ nameToIdOfSimplified.put(measure.getName(), measure.getId());
+ if (measure.getId() != 0) {
+ idOfSimplified.add(measure.getId());
+ }
+ }
+
+ List<Measure> nonCountStarExistedMeasures = originModel.getAllMeasures().stream()
+ .filter(measure -> !measure.getName().equals("COUNT_ALL")).filter(measure -> !measure.isTomb())
+ .collect(Collectors.toList());
+ Map<String, Integer> nameToIdOfExistedModel = nonCountStarExistedMeasures.stream()
+ .collect(Collectors.toMap(MeasureDesc::getName, Measure::getId));
+ nameToIdOfExistedModel.forEach((name, id) -> {
+ if (!nameToIdOfSimplified.containsKey(name)) {
+ if (idOfSimplified.contains(id)) {
+ healthyExistedMeasures.add(id);
+ }
+ } else if (nameToIdOfSimplified.get(name) == 0) {
+ illegalSimplifiedMeasures.add(name);
+ } else {
+ healthyExistedMeasures.add(id);
+ }
+ });
+
+ if (!illegalSimplifiedMeasures.isEmpty()) {
+ throw new KylinException(SIMPLIFIED_MEASURES_MISSING_ID, String.join(",", illegalSimplifiedMeasures));
+ }
+
+ nonCountStarExistedMeasures.stream() //
+ .filter(measure -> !healthyExistedMeasures.contains(measure.getId())) //
+ .forEach(measure -> {
+ log.warn("the measure({}) has been handled to tomb", measure.getName());
+ measure.setTomb(true);
+ });
+ }
+
/**
* one measure in expectedModel but not in originModel then add one
* one in expectedModel, is also a TOMB one in originModel, set status to not TOMB
diff --git a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceSemanticUpdateTest.java b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceSemanticUpdateTest.java
index c39e2153ac..f0ddc80d02 100644
--- a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceSemanticUpdateTest.java
+++ b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceSemanticUpdateTest.java
@@ -20,13 +20,17 @@ package org.apache.kylin.rest.service;
import static org.apache.kylin.common.exception.code.ErrorCodeServer.SIMPLIFIED_MEASURES_MISSING_ID;
import static org.hamcrest.Matchers.is;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import org.apache.kylin.engine.spark.job.ExecutableAddCuboidHandler;
-import org.apache.kylin.engine.spark.job.NSparkCubingJob;
-import lombok.extern.slf4j.Slf4j;
-import lombok.val;
-import lombok.var;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.commons.collections.CollectionUtils;
import org.apache.kylin.common.KylinConfig;
@@ -36,6 +40,8 @@ import org.apache.kylin.common.util.JsonUtil;
import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
import org.apache.kylin.cube.model.SelectRule;
import org.apache.kylin.engine.spark.ExecutableUtils;
+import org.apache.kylin.engine.spark.job.ExecutableAddCuboidHandler;
+import org.apache.kylin.engine.spark.job.NSparkCubingJob;
import org.apache.kylin.job.execution.AbstractExecutable;
import org.apache.kylin.job.execution.ExecutableState;
import org.apache.kylin.job.execution.NExecutableManager;
@@ -50,6 +56,7 @@ import org.apache.kylin.metadata.cube.model.NDataflowUpdate;
import org.apache.kylin.metadata.cube.model.NIndexPlanManager;
import org.apache.kylin.metadata.cube.model.RuleBasedIndex;
import org.apache.kylin.metadata.model.ComputedColumnDesc;
+import org.apache.kylin.metadata.model.FunctionDesc;
import org.apache.kylin.metadata.model.ManagementType;
import org.apache.kylin.metadata.model.MeasureDesc;
import org.apache.kylin.metadata.model.NDataModel;
@@ -57,7 +64,9 @@ import org.apache.kylin.metadata.model.NDataModel.ColumnStatus;
import org.apache.kylin.metadata.model.NDataModel.Measure;
import org.apache.kylin.metadata.model.NDataModel.NamedColumn;
import org.apache.kylin.metadata.model.NDataModelManager;
+import org.apache.kylin.metadata.model.ParameterDesc;
import org.apache.kylin.metadata.model.PartitionDesc;
+import org.apache.kylin.metadata.project.EnhancedUnitOfWork;
import org.apache.kylin.metadata.realization.RealizationStatusEnum;
import org.apache.kylin.metadata.recommendation.candidate.JdbcRawRecStore;
import org.apache.kylin.rest.constant.Constant;
@@ -84,16 +93,14 @@ import org.springframework.security.authentication.TestingAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.util.ReflectionTestUtils;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+import lombok.val;
+import lombok.var;
+import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ModelServiceSemanticUpdateTest extends NLocalFileMetadataTestCase {
@@ -411,25 +418,111 @@ public class ModelServiceSemanticUpdateTest extends NLocalFileMetadataTestCase {
@Test
public void testRenameTableAliasUsedWithSimplifiedMeasure() throws IOException {
- val modelManager = NDataModelManager.getInstance(getTestConfig(), getProject());
+ String project = getProject();
+ val modelManager = NDataModelManager.getInstance(getTestConfig(), project);
modelManager.listAllModels().forEach(modelManager::dropModel);
val request = JsonUtil.readValue(
getClass().getResourceAsStream("/ut_request/model_update/model_with_measure.json"), ModelRequest.class);
request.setAlias("model_with_measure");
- val newModel = modelService.createModel(request.getProject(), request);
+ val newModel = modelService.createModel(project, request);
+ EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(() -> {
+ // prepare dirty model
+ NDataModelManager modelMgr = NDataModelManager.getInstance(getTestConfig(), project);
+ modelMgr.updateDataModel(newModel.getId(), copyForWrite -> {
+ List<Measure> allMeasures = copyForWrite.getAllMeasures();
+ Measure measure = new Measure();
+ measure.setId(100002);
+ measure.setType(NDataModel.MeasureType.NORMAL);
+ measure.setName("MAX2");
+ FunctionDesc function = new FunctionDesc();
+ function.setExpression("MAX");
+ function.setReturnType("integer");
+ function.setConfiguration(Maps.newLinkedHashMap());
+ ParameterDesc parameter = new ParameterDesc();
+ parameter.setType("column");
+ parameter.setValue("TEST_ACCOUNT.ACCOUNT_SELLER_LEVEL");
+ parameter.setColRef(allMeasures.get(0).getFunction().getParameters().get(0).getColRef());
+ function.setParameters(ImmutableList.of(parameter));
+ measure.setFunction(function);
+ allMeasures.add(measure);
+ });
+ return null;
+ }, project);
val updateRequest = JsonUtil.readValue(
getClass().getResourceAsStream("/ut_request/model_update/model_with_measure_change_alias.json"),
ModelRequest.class);
updateRequest.setAlias("model_with_measure_change_alias");
updateRequest.setUuid(newModel.getUuid());
+ List<SimplifiedMeasure> simplifiedMeasures = updateRequest.getSimplifiedMeasures();
+ simplifiedMeasures.get(0).setId(100000);
+ simplifiedMeasures.get(1).setId(100001);
+ SimplifiedMeasure simplifiedMeasure = new SimplifiedMeasure();
+ ParameterResponse param = new ParameterResponse();
+ param.setType("column");
+ param.setValue("TEST_ACCOUNT.ACCOUNT_SELLER_LEVEL");
+ simplifiedMeasure.setParameterValue(ImmutableList.of(param));
+ simplifiedMeasure.setExpression("MAX");
+ simplifiedMeasure.setName("MAX2");
+ simplifiedMeasure.setReturnType("integer");
+ simplifiedMeasures.add(simplifiedMeasure);
try {
- modelService.updateDataModelSemantic(getProject(), updateRequest);
+ modelService.updateDataModelSemantic(project, updateRequest);
Assert.fail();
} catch (KylinException e) {
Assert.assertEquals(SIMPLIFIED_MEASURES_MISSING_ID.getErrorCode().getCode(), e.getErrorCodeString());
}
}
+ @Test
+ public void testMockFixDirtyModelWhenSaving() throws IOException {
+ val modelManager = NDataModelManager.getInstance(getTestConfig(), getProject());
+ modelManager.listAllModels().forEach(modelManager::dropModel);
+ val request = JsonUtil.readValue(
+ getClass().getResourceAsStream("/ut_request/model_update/model_with_measure.json"), ModelRequest.class);
+ request.setAlias("model_with_measure");
+ val newModel = modelService.createModel(request.getProject(), request);
+ EnhancedUnitOfWork.doInTransactionWithCheckAndRetry(() -> {
+ // prepare dirty model
+ NDataModelManager modelMgr = NDataModelManager.getInstance(getTestConfig(), getProject());
+ modelMgr.updateDataModel(newModel.getId(), copyForWrite -> {
+ List<Measure> allMeasures = copyForWrite.getAllMeasures();
+ Measure measure = new Measure();
+ measure.setId(100002);
+ measure.setType(NDataModel.MeasureType.NORMAL);
+ measure.setName("MAX2");
+ FunctionDesc function = new FunctionDesc();
+ function.setExpression("MAX");
+ function.setReturnType("integer");
+ function.setConfiguration(Maps.newLinkedHashMap());
+ ParameterDesc parameter = new ParameterDesc();
+ parameter.setType("column");
+ parameter.setValue("TEST_ACCOUNT.ACCOUNT_SELLER_LEVEL");
+ parameter.setColRef(allMeasures.get(0).getFunction().getParameters().get(0).getColRef());
+ function.setParameters(ImmutableList.of(parameter));
+ measure.setFunction(function);
+ allMeasures.add(measure);
+ });
+ return null;
+ }, getProject());
+
+ // set max2 to tomb
+ val updateRequest = JsonUtil.readValue(
+ getClass().getResourceAsStream("/ut_request/model_update/model_with_measure_change_alias.json"),
+ ModelRequest.class);
+ updateRequest.setAlias("model_with_measure_change_alias");
+ updateRequest.setUuid(newModel.getUuid());
+ List<SimplifiedMeasure> simplifiedMeasures = updateRequest.getSimplifiedMeasures();
+ simplifiedMeasures.get(0).setId(100000);
+ simplifiedMeasures.get(1).setId(100001);
+ modelService.updateDataModelSemantic(getProject(), updateRequest);
+
+ NDataModel modifiedModel = modelManager.getDataModelDesc(newModel.getUuid());
+ List<Measure> allMeasures = modifiedModel.getAllMeasures();
+ Optional<Measure> max2 = allMeasures.stream().filter(measure -> measure.getName().equals("MAX2")).findFirst();
+ Assert.assertTrue(max2.isPresent());
+ Assert.assertTrue(max2.get().isTomb());
+ }
+
@Test
public void testRenameTableAliasUsedAsMeasure() throws Exception {
val modelManager = NDataModelManager.getInstance(getTestConfig(), getProject());
diff --git a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/TableReloadServiceTest.java b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/TableReloadServiceTest.java
index 7008996d7d..91e1b2a83e 100644
--- a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/TableReloadServiceTest.java
+++ b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/TableReloadServiceTest.java
@@ -17,16 +17,26 @@
*/
package org.apache.kylin.rest.service;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import io.kyligence.kap.clickhouse.MockSecondStorage;
-import org.apache.kylin.engine.spark.job.NSparkCubingJob;
-import org.apache.kylin.engine.spark.job.NTableSamplingJob;
-import io.kyligence.kap.secondstorage.SecondStorageUtil;
-import lombok.extern.slf4j.Slf4j;
-import lombok.val;
-import lombok.var;
+import static org.apache.kylin.common.exception.code.ErrorCodeServer.TABLE_RELOAD_HAVING_NOT_FINAL_JOB;
+import static org.awaitility.Awaitility.await;
+import static org.hamcrest.CoreMatchers.is;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
import org.apache.commons.collections.CollectionUtils;
import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.common.exception.KylinException;
@@ -36,6 +46,8 @@ import org.apache.kylin.common.persistence.transaction.UnitOfWork;
import org.apache.kylin.common.scheduler.EventBusFactory;
import org.apache.kylin.common.util.JsonUtil;
import org.apache.kylin.cube.model.SelectRule;
+import org.apache.kylin.engine.spark.job.NSparkCubingJob;
+import org.apache.kylin.engine.spark.job.NTableSamplingJob;
import org.apache.kylin.job.execution.AbstractExecutable;
import org.apache.kylin.job.execution.JobTypeEnum;
import org.apache.kylin.job.execution.NExecutableManager;
@@ -82,25 +94,15 @@ import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.util.ReflectionTestUtils;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
-import static org.apache.kylin.common.exception.code.ErrorCodeServer.TABLE_RELOAD_HAVING_NOT_FINAL_JOB;
-import static org.awaitility.Awaitility.await;
-import static org.hamcrest.CoreMatchers.is;
+import io.kyligence.kap.clickhouse.MockSecondStorage;
+import io.kyligence.kap.secondstorage.SecondStorageUtil;
+import lombok.val;
+import lombok.var;
+import lombok.extern.slf4j.Slf4j;
@Slf4j
public class TableReloadServiceTest extends CSVSourceTestCase {
@@ -628,7 +630,7 @@ public class TableReloadServiceTest extends CSVSourceTestCase {
Assert.assertNotNull(reModel);
Assert.assertFalse(reModel.isBroken());
Assert.assertEquals(9, reModel.getJoinTables().size());
- Assert.assertEquals(18, reModel.getAllMeasures().size());
+ Assert.assertEquals(17, reModel.getAllMeasures().size());
Assert.assertEquals(198, reModel.getAllNamedColumns().size());
Assert.assertEquals("ORDER_ID", reModel.getAllNamedColumns().get(13).getName());
Assert.assertEquals(NDataModel.ColumnStatus.TOMB, reModel.getAllNamedColumns().get(13).getStatus());
@@ -690,7 +692,7 @@ public class TableReloadServiceTest extends CSVSourceTestCase {
Assert.assertNotNull(reModel);
Assert.assertFalse(reModel.isBroken());
Assert.assertEquals(9, reModel.getJoinTables().size());
- Assert.assertEquals(18, reModel.getAllMeasures().size());
+ Assert.assertEquals(17, reModel.getAllMeasures().size());
Assert.assertEquals(198, reModel.getAllNamedColumns().size());
Assert.assertEquals("CAL_DT", reModel.getAllNamedColumns().get(2).getName());
Assert.assertEquals("DEAL_YEAR", reModel.getAllNamedColumns().get(28).getName());
@@ -740,7 +742,7 @@ public class TableReloadServiceTest extends CSVSourceTestCase {
Assert.assertNotNull(reModel);
Assert.assertFalse(reModel.isBroken());
Assert.assertEquals(9, reModel.getJoinTables().size());
- Assert.assertEquals(18, reModel.getAllMeasures().size());
+ Assert.assertEquals(17, reModel.getAllMeasures().size());
Assert.assertEquals(198, reModel.getAllNamedColumns().size());
Assert.assertEquals("CAL_DT", reModel.getAllNamedColumns().get(2).getName());
Assert.assertEquals("DEAL_YEAR", reModel.getAllNamedColumns().get(28).getName());
@@ -1054,8 +1056,8 @@ public class TableReloadServiceTest extends CSVSourceTestCase {
executableManager.addJob(job);
removeColumn(tableIdentity, "TEST_TIME_ENC");
- OpenPreReloadTableResponse response = tableService.preProcessBeforeReloadWithoutFailFast(PROJECT,
- tableIdentity, false);
+ OpenPreReloadTableResponse response = tableService.preProcessBeforeReloadWithoutFailFast(PROJECT, tableIdentity,
+ false);
Assert.assertTrue(response.isHasEffectedJobs());
Assert.assertEquals(1, response.getEffectedJobs().size());
Assert.assertThrows(TABLE_RELOAD_HAVING_NOT_FINAL_JOB.getMsg(job.getId()), KylinException.class,
@@ -1071,8 +1073,8 @@ public class TableReloadServiceTest extends CSVSourceTestCase {
job.setJobType(JobTypeEnum.TABLE_SAMPLING);
executableManager.addJob(job);
addColumn(tableIdentity, true, new ColumnDesc("", "TEST_COL", "int", "", "", "", null));
- OpenPreReloadTableResponse response = tableService.preProcessBeforeReloadWithoutFailFast(PROJECT,
- tableIdentity, false);
+ OpenPreReloadTableResponse response = tableService.preProcessBeforeReloadWithoutFailFast(PROJECT, tableIdentity,
+ false);
Assert.assertTrue(response.isHasEffectedJobs());
Assert.assertEquals(1, response.getEffectedJobs().size());
tableService.preProcessBeforeReloadWithFailFast(PROJECT, tableIdentity);
@@ -1091,8 +1093,8 @@ public class TableReloadServiceTest extends CSVSourceTestCase {
put("SLR_SEGMENT_CD", "bigint");
}
}, true);
- OpenPreReloadTableResponse response = tableService.preProcessBeforeReloadWithoutFailFast(PROJECT,
- tableIdentity, false);
+ OpenPreReloadTableResponse response = tableService.preProcessBeforeReloadWithoutFailFast(PROJECT, tableIdentity,
+ false);
Assert.assertTrue(response.isHasEffectedJobs());
Assert.assertEquals(1, response.getEffectedJobs().size());
Assert.assertThrows(TABLE_RELOAD_HAVING_NOT_FINAL_JOB.getMsg(job.getId()), KylinException.class,
@@ -1626,7 +1628,7 @@ public class TableReloadServiceTest extends CSVSourceTestCase {
}
@Test
- public void testReloadAWSTableCompatibleCrossAccountNoSample(){
+ public void testReloadAWSTableCompatibleCrossAccountNoSample() {
S3TableExtInfo tableExtInfo = prepareTableExtInfo("DEFAULT.TEST_ORDER", "endpoint", "role");
prepareTableExt("DEFAULT.TEST_ORDER");
tableService.reloadAWSTableCompatibleCrossAccount(PROJECT, tableExtInfo, false, 10000, true, 3, null);
@@ -1648,13 +1650,13 @@ public class TableReloadServiceTest extends CSVSourceTestCase {
}
@Test(expected = Exception.class)
- public void testReloadAWSTableCompatibleCrossAccountNeedSample(){
+ public void testReloadAWSTableCompatibleCrossAccountNeedSample() {
S3TableExtInfo tableExtInfo = prepareTableExtInfo("DEFAULT.TEST_ORDER", "endpoint", "role");
prepareTableExt("DEFAULT.TEST_ORDER");
tableService.reloadAWSTableCompatibleCrossAccount(PROJECT, tableExtInfo, true, 10000, true, 3, null);
}
- private S3TableExtInfo prepareTableExtInfo(String dbTable, String endpoint, String role){
+ private S3TableExtInfo prepareTableExtInfo(String dbTable, String endpoint, String role) {
S3TableExtInfo tableExtInfo = new S3TableExtInfo();
tableExtInfo.setName(dbTable);
tableExtInfo.setEndpoint(endpoint);