You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ni...@apache.org on 2020/02/07 14:26:11 UTC

[kylin] 16/44: fix bug KYLIN-4300.

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

nic pushed a commit to branch 3.0.x
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 21241e847fb47d211dbc8b0dd9697961502a0101
Author: zengruios <57...@qq.com>
AuthorDate: Mon Dec 16 21:40:53 2019 +0800

    fix bug KYLIN-4300.
---
 .../cube/model/validation/rule/StreamingCubeRule.java   |  3 ++-
 .../org/apache/kylin/rest/service/ModelService.java     | 17 +++++++++++------
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/StreamingCubeRule.java b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/StreamingCubeRule.java
index 647f4c1..dfc5624 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/StreamingCubeRule.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/StreamingCubeRule.java
@@ -44,7 +44,8 @@ public class StreamingCubeRule implements IValidatorRule<CubeDesc> {
     public void validate(CubeDesc cube, ValidateContext context) {
         DataModelDesc model = cube.getModel();
         
-        if (model.getRootFactTable().getTableDesc().getSourceType() != ISourceAware.ID_STREAMING) {
+        if (model.getRootFactTable().getTableDesc().getSourceType() != ISourceAware.ID_STREAMING
+                && !model.getRootFactTable().getTableDesc().isStreamingTable()) {
             return;
         }
 
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java b/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java
index a385fab..888db7c 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/ModelService.java
@@ -136,12 +136,7 @@ public class ModelService extends BasicService {
             throw new BadRequestException(String.format(Locale.ROOT, msg.getDUPLICATE_MODEL_NAME(), desc.getName()));
         }
 
-        String factTableName = desc.getRootFactTableName();
-        TableDesc tableDesc = getTableManager().getTableDesc(factTableName, projectName);
-        if (tableDesc.getSourceType() == ISourceAware.ID_STREAMING
-                && (desc.getPartitionDesc() == null || desc.getPartitionDesc().getPartitionDateColumn() == null)) {
-            throw new IllegalArgumentException("Must define a partition column.");
-        }
+        validateModel(projectName, desc);
 
         DataModelDesc createdDesc = null;
         String owner = SecurityContextHolder.getContext().getAuthentication().getName();
@@ -151,10 +146,20 @@ public class ModelService extends BasicService {
 
     public DataModelDesc updateModelAndDesc(String project, DataModelDesc desc) throws IOException {
         aclEvaluate.checkProjectWritePermission(project);
+        validateModel(project, desc);
         getDataModelManager().updateDataModelDesc(desc);
         return desc;
     }
 
+    public void validateModel(String project, DataModelDesc desc) throws IllegalArgumentException {
+        String factTableName = desc.getRootFactTableName();
+        TableDesc tableDesc = getTableManager().getTableDesc(factTableName, project);
+        if ((tableDesc.getSourceType() == ISourceAware.ID_STREAMING || tableDesc.isStreamingTable())
+                && (desc.getPartitionDesc() == null || desc.getPartitionDesc().getPartitionDateColumn() == null)) {
+            throw new IllegalArgumentException("Must define a partition column.");
+        }
+    }
+
     public void dropModel(DataModelDesc desc) throws IOException {
         aclEvaluate.checkProjectWritePermission(desc.getProjectInstance().getName());
         Message msg = MsgPicker.getMsg();