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:15 UTC
[kylin] 20/44: KYLIN-4080 Project schema update event casues error
reload NEW DataModelDesc
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 <59...@qq.com>
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());