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) {