This is an automated email from the ASF dual-hosted git repository. shaofengshi pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 13d183a KYLIN-3720 add column family check when save/update cube desc 13d183a is described below commit 13d183ab4e5deef11ffc7148eb408278c0a97a5f Author: wangbo <506340...@qq.com> AuthorDate: Mon Dec 17 12:12:20 2018 +0800 KYLIN-3720 add column family check when save/update cube desc --- .../kylin/rest/controller/CubeController.java | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java index b76f7b9..dcaa259 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java @@ -41,6 +41,8 @@ import org.apache.kylin.cube.cuboid.TreeCuboidScheduler; import org.apache.kylin.cube.model.CubeBuildTypeEnum; import org.apache.kylin.cube.model.CubeDesc; import org.apache.kylin.cube.model.CubeJoinedFlatTableDesc; +import org.apache.kylin.cube.model.HBaseColumnDesc; +import org.apache.kylin.cube.model.HBaseColumnFamilyDesc; import org.apache.kylin.cube.model.RowKeyColDesc; import org.apache.kylin.dimension.DimensionEncodingFactory; import org.apache.kylin.engine.mr.common.CuboidStatsReaderUtil; @@ -49,6 +51,7 @@ import org.apache.kylin.job.JoinedFlatTable; import org.apache.kylin.job.exception.JobException; import org.apache.kylin.metadata.model.IJoinedFlatTableDesc; import org.apache.kylin.metadata.model.ISourceAware; +import org.apache.kylin.metadata.model.MeasureDesc; import org.apache.kylin.metadata.model.SegmentRange; import org.apache.kylin.metadata.model.SegmentRange.TSRange; import org.apache.kylin.metadata.project.ProjectInstance; @@ -589,6 +592,8 @@ public class CubeController extends BasicController { throw new BadRequestException("Invalid Cube name, only letters, numbers and underscore supported."); } + validateColumnFamily(desc); + try { desc.setUuid(RandomUtil.randomUUID().toString()); String projectName = (null == cubeRequest.getProject()) ? ProjectInstance.DEFAULT_PROJECT_NAME @@ -608,6 +613,27 @@ public class CubeController extends BasicController { return cubeRequest; } + //column family metrics may not match the real metrics when editing cube by json,see MTHDP-5091 + private void validateColumnFamily(CubeDesc cubeDesc) { + Set<String> columnFamilyMetricsSet = Sets.newHashSet(); + for (HBaseColumnFamilyDesc hBaseColumnFamilyDesc : cubeDesc.getHbaseMapping().getColumnFamily()) { + for (HBaseColumnDesc hBaseColumnDesc : hBaseColumnFamilyDesc.getColumns()) { + for (String columnName : hBaseColumnDesc.getMeasureRefs()) { + columnFamilyMetricsSet.add(columnName); + } + } + } + for (MeasureDesc measureDesc : cubeDesc.getMeasures()) { + if (!columnFamilyMetricsSet.contains(measureDesc.getName())) { + throw new BadRequestException("column family lack measure:" + measureDesc.getName()); + } + } + if (cubeDesc.getMeasures().size() != columnFamilyMetricsSet.size()) { + throw new BadRequestException( + "the number of input measure and the number of measure defined in cubedesc are not consistent"); + } + } + /** * update CubDesc * @@ -635,6 +661,8 @@ public class CubeController extends BasicController { return cubeRequest; } + validateColumnFamily(desc); + //cube renaming is not allowed if (!cube.getDescriptor().getName().equalsIgnoreCase(desc.getName())) { String error = "Cube Desc renaming is not allowed: desc.getName(): " + desc.getName()