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:16 UTC

[kylin] 21/44: KYLIN-4306: Delete data model desc when encountering WriteConflictException

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 <zh...@xiaomi.com>
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;