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 466a7a3a8343e807177553d6b35acd6297635276 Author: yaqian.zhang <[email protected]> AuthorDate: Wed Dec 4 19:50:38 2019 +0800 KYLIN-4080 Project schema update event casues error reload NEW DataModelDesc --- .../apache/kylin/metadata/model/DataModelDesc.java | 12 +++++++++ .../kylin/metadata/model/DataModelManager.java | 29 ++++++++-------------- .../kylin/rest/controller/ModelController.java | 1 + 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java index 5795d78..818afdf 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java @@ -104,6 +104,9 @@ public class DataModelDesc extends RootPersistentEntity { @JsonProperty("capacity") private RealizationCapacity capacity = RealizationCapacity.MEDIUM; + @JsonProperty("projectName") + private String projectName; //for KYLIN-4080 + // computed attributes private TableRef rootFactTableRef; private Set<TableRef> factTableRefs = Sets.newLinkedHashSet(); @@ -765,6 +768,14 @@ public class DataModelDesc extends RootPersistentEntity { return ProjectManager.getInstance(getConfig()).getProjectOfModel(this.getName()); } + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + public static DataModelDesc getCopyOf(DataModelDesc orig) { return copy(orig, new DataModelDesc()); } @@ -781,6 +792,7 @@ public class DataModelDesc extends RootPersistentEntity { copy.metrics = orig.metrics; copy.filterCondition = orig.filterCondition; copy.capacity = orig.capacity; + copy.projectName = orig.projectName; if (orig.getPartitionDesc() != null) { copy.partitionDesc = PartitionDesc.getCopyOf(orig.getPartitionDesc()); } diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelManager.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelManager.java index 9d5bf6a..dcbdf60 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelManager.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelManager.java @@ -86,7 +86,9 @@ public class DataModelManager { getDataModelImplClass(), dataModelDescMap) { @Override protected DataModelDesc initEntityAfterReload(DataModelDesc model, String resourceName) { - String prj = ProjectManager.getInstance(config).getProjectOfModel(model.getName()).getName(); + String prj = (null == model.getProjectName() + ? ProjectManager.getInstance(config).getProjectOfModel(model.getName()).getName() + : model.getProjectName()); if (!model.isDraft()) { model.init(config, getAllTablesMap(prj)); } @@ -240,21 +242,12 @@ public class DataModelManager { ProjectManager prjMgr = ProjectManager.getInstance(config); ProjectInstance prj = prjMgr.getProject(projectName); - if (prj.containsModel(name)) + if (prj.containsModel(name)) { throw new IllegalStateException("project " + projectName + " already contains model " + name); - - try { - // Temporarily register model under project, because we want to - // update project formally after model is saved. - prj.getModels().add(name); - - desc.setOwner(owner); - logger.info("Saving Model {} to Project {} with {} as owner", desc.getName(), projectName, owner); - desc = saveDataModelDesc(desc); - - } finally { - prj.getModels().remove(name); } + desc.setOwner(owner); + logger.info("Saving Model {} to Project {} with {} as owner", desc.getName(), projectName, owner); + desc = saveDataModelDesc(desc, projectName); // now that model is saved, update project formally prjMgr.addModelToProject(name, projectName); @@ -270,16 +263,14 @@ public class DataModelManager { throw new IllegalArgumentException("DataModelDesc '" + name + "' does not exist."); } - return saveDataModelDesc(desc); + return saveDataModelDesc(desc, ProjectManager.getInstance(config).getProjectOfModel(desc.getName()).getName()); } } - private DataModelDesc saveDataModelDesc(DataModelDesc dataModelDesc) throws IOException { - - String prj = ProjectManager.getInstance(config).getProjectOfModel(dataModelDesc.getName()).getName(); + private DataModelDesc saveDataModelDesc(DataModelDesc dataModelDesc, String projectName) throws IOException { if (!dataModelDesc.isDraft()) - dataModelDesc.init(config, this.getAllTablesMap(prj)); + dataModelDesc.init(config, this.getAllTablesMap(projectName)); crud.save(dataModelDesc); diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java index 820d422..5ffb51c 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/ModelController.java @@ -228,6 +228,7 @@ public class ModelController extends BasicController { try { logger.debug("Saving MODEL " + modelRequest.getModelDescData()); desc = JsonUtil.readValue(modelRequest.getModelDescData(), DataModelDesc.class); + desc.setProjectName(modelRequest.getProject()); } catch (JsonParseException e) { logger.error("The data model definition is not valid.", e); updateRequest(modelRequest, false, e.getMessage());
