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 00559cdfaf4637dac0c02a26f77bb754244f2d26 Author: Zhou Kang <[email protected]> AuthorDate: Wed Dec 18 21:50:02 2019 +0800 KYLIN-4306: Delete data model desc when encountering WriteConflictException --- .../java/org/apache/kylin/metadata/model/DataModelManager.java | 9 ++++++++- .../java/org/apache/kylin/storage/hbase/HBaseResourceStore.java | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) 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 dcbdf60..6ba1e5c 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 @@ -26,6 +26,7 @@ import java.util.Map; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.persistence.ResourceStore; import org.apache.kylin.common.persistence.Serializer; +import org.apache.kylin.common.persistence.WriteConflictException; import org.apache.kylin.common.util.AutoReadWriteLock; import org.apache.kylin.common.util.AutoReadWriteLock.AutoLock; import org.apache.kylin.common.util.ClassUtil; @@ -250,7 +251,13 @@ public class DataModelManager { desc = saveDataModelDesc(desc, projectName); // now that model is saved, update project formally - prjMgr.addModelToProject(name, projectName); + try { + prjMgr.addModelToProject(name, projectName); + } catch (WriteConflictException e) { + logger.warn("Add model: {} to project: {} failed for write conflicts, rollback", name, projectName, e); + crud.delete(desc); + throw e; + } return desc; } diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java index f1960a3..e5a2595 100644 --- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java +++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseResourceStore.java @@ -336,7 +336,10 @@ public class HBaseResourceStore extends PushdownResourceStore { if (!ok) { long real = getResourceTimestampImpl(resPath); throw new WriteConflictException( - "Overwriting conflict " + resPath + ", expect old TS " + oldTS + ", but it is " + real); + "Overwriting conflict " + resPath + + ", expect old TS " + oldTS + + ", but it is " + real + + ", the expected new TS: " + newTS); } return newTS;
