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;