This is an automated email from the ASF dual-hosted git repository.

shaofengshi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/master by this push:
     new 95b812f  KYLIN-3655 reinitialize CubeInstance when clear segments
95b812f is described below

commit 95b812fb95e8a69ab35ada11a341959ac15c145a
Author: kyotoYaho <nju_y...@apache.org>
AuthorDate: Wed Dec 19 12:38:58 2018 +0800

    KYLIN-3655 reinitialize CubeInstance when clear segments
---
 .../java/org/apache/kylin/cube/CubeManager.java    | 25 ++++++++++++++++++++++
 .../java/org/apache/kylin/cube/CubeUpdate.java     | 20 ++++++++++++++++-
 .../org/apache/kylin/rest/service/CubeService.java | 14 ++++--------
 3 files changed, 48 insertions(+), 11 deletions(-)

diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java 
b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
index 97e319a..a022f1e 100755
--- a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
@@ -256,6 +256,23 @@ public class CubeManager implements IRealizationProvider {
         }
     }
 
+    /**
+     * when clear all segments, it's supposed to reinitialize the CubeInstance
+     */
+    public CubeInstance clearSegments(CubeInstance cube) throws IOException {
+        try (AutoLock lock = cubeMapLock.lockForWrite()) {
+            cube = cube.latestCopyForWrite(); // get a latest copy
+            CubeUpdate update = new CubeUpdate(cube);
+            update.setToRemoveSegs(cube.getSegments().toArray(new 
CubeSegment[cube.getSegments().size()]));
+            update.setCuboids(Maps.<Long, Long> newHashMap());
+            update.setCuboidsRecommend(Sets.<Long> newHashSet());
+            update.setUpdateTableSnapshotPath(Maps.<String, String> 
newHashMap());
+            update.setCreateTimeUTC(System.currentTimeMillis());
+            update.setCuboidLastOptimized(0L);
+            return updateCube(update);
+        }
+    }
+
     // try minimize the use of this method, use udpateCubeXXX() instead
     public CubeInstance updateCube(CubeUpdate update) throws IOException {
         try (AutoLock lock = cubeMapLock.lockForWrite()) {
@@ -394,6 +411,14 @@ public class CubeManager implements IRealizationProvider {
                 cube.putSnapshotResPath(lookupSnapshotPathEntry.getKey(), 
lookupSnapshotPathEntry.getValue());
             }
         }
+
+        if (update.getCreateTimeUTC() >= 0) {
+            cube.setCreateTimeUTC(update.getCreateTimeUTC());
+        }
+
+        if (update.getCuboidLastOptimized() >= 0) {
+            cube.setCuboidLastOptimized(update.getCuboidLastOptimized());
+        }
     }
 
     private void processToUpdateSegments(CubeUpdate update, 
Segments<CubeSegment> newSegs) {
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeUpdate.java 
b/core-cube/src/main/java/org/apache/kylin/cube/CubeUpdate.java
index 62b46a9..33a3251 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/CubeUpdate.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeUpdate.java
@@ -37,6 +37,8 @@ public class CubeUpdate {
     private Map<Long, Long> cuboids = null;
     private Set<Long> cuboidsRecommend = null;
     private Map<String, String> updateTableSnapshotPath = null;
+    private long createTimeUTC = -1;
+    private long cuboidLastOptimized = -1;
 
     public CubeUpdate(CubeInstance cubeInstance) {
         setCubeInstance(cubeInstance);
@@ -49,7 +51,7 @@ public class CubeUpdate {
     public CubeUpdate setCubeInstance(CubeInstance cubeInstance) {
         if (cubeInstance.isCachedAndShared())
             throw new IllegalArgumentException();
-        
+
         this.cubeInstance = cubeInstance;
         return this;
     }
@@ -133,4 +135,20 @@ public class CubeUpdate {
     public void setUpdateTableSnapshotPath(Map<String, String> 
updateTableSnapshotPath) {
         this.updateTableSnapshotPath = updateTableSnapshotPath;
     }
+
+    public long getCreateTimeUTC() {
+        return createTimeUTC;
+    }
+
+    public void setCreateTimeUTC(long createTimeUTC) {
+        this.createTimeUTC = createTimeUTC;
+    }
+
+    public long getCuboidLastOptimized() {
+        return cuboidLastOptimized;
+    }
+
+    public void setCuboidLastOptimized(long cuboidLastOptimized) {
+        this.cuboidLastOptimized = cuboidLastOptimized;
+    }
 }
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java 
b/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
index 96d60c7..e541c37 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java
@@ -53,13 +53,13 @@ import org.apache.kylin.job.execution.ExecutableState;
 import org.apache.kylin.measure.percentile.PercentileMeasureType;
 import org.apache.kylin.metadata.cachesync.Broadcaster;
 import org.apache.kylin.metadata.draft.Draft;
+import org.apache.kylin.metadata.model.DataModelDesc;
+import org.apache.kylin.metadata.model.FunctionDesc;
 import org.apache.kylin.metadata.model.IStorageAware;
+import org.apache.kylin.metadata.model.MeasureDesc;
 import org.apache.kylin.metadata.model.SegmentRange;
 import org.apache.kylin.metadata.model.SegmentStatusEnum;
 import org.apache.kylin.metadata.model.TableDesc;
-import org.apache.kylin.metadata.model.DataModelDesc;
-import org.apache.kylin.metadata.model.MeasureDesc;
-import org.apache.kylin.metadata.model.FunctionDesc;
 import org.apache.kylin.metadata.project.ProjectInstance;
 import org.apache.kylin.metadata.project.ProjectManager;
 import org.apache.kylin.metadata.project.RealizationEntry;
@@ -95,7 +95,6 @@ import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
 
 /**
  * Stateless & lightweight service facade of cube management functions.
@@ -580,12 +579,7 @@ public class CubeService extends BasicService implements 
InitializingBean {
     private void releaseAllSegments(CubeInstance cube) throws IOException {
         releaseAllJobs(cube);
 
-        CubeUpdate update = new CubeUpdate(cube.latestCopyForWrite());
-        update.setToRemoveSegs(cube.getSegments().toArray(new 
CubeSegment[cube.getSegments().size()]));
-        update.setCuboids(Maps.<Long, Long> newHashMap());
-        update.setCuboidsRecommend(Sets.<Long> newHashSet());
-        update.setUpdateTableSnapshotPath(Maps.<String, String> newHashMap());
-        CubeManager.getInstance(getConfig()).updateCube(update);
+        getCubeManager().clearSegments(cube);
     }
 
     public void updateOnNewSegmentReady(String cubeName) {

Reply via email to