Repository: incubator-kylin
Updated Branches:
  refs/heads/0.8.0 02b0d84a0 -> 247d4f13c


bug fix on long running cube steaming


Project: http://git-wip-us.apache.org/repos/asf/incubator-kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kylin/commit/247d4f13
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kylin/tree/247d4f13
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kylin/diff/247d4f13

Branch: refs/heads/0.8.0
Commit: 247d4f13c5bc0d0f910e041bdd34f11e1483fe08
Parents: 02b0d84
Author: honma <ho...@ebay.com>
Authored: Tue Jun 9 19:07:51 2015 +0800
Committer: honma <ho...@ebay.com>
Committed: Tue Jun 9 19:08:03 2015 +0800

----------------------------------------------------------------------
 .../org/apache/kylin/common/util/BasicTest.java |  2 +-
 .../java/org/apache/kylin/cube/CubeManager.java | 20 ++++++++++++++++----
 .../apache/kylin/query/routing/QueryRouter.java | 12 ++++++------
 .../apache/kylin/rest/service/CacheService.java |  1 +
 .../apache/kylin/rest/service/CubeService.java  |  2 ++
 .../kylin/storage/hbase/CubeStorageEngine.java  |  9 +++++++--
 6 files changed, 33 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/247d4f13/common/src/test/java/org/apache/kylin/common/util/BasicTest.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/kylin/common/util/BasicTest.java 
b/common/src/test/java/org/apache/kylin/common/util/BasicTest.java
index 73f708d..01a22c1 100644
--- a/common/src/test/java/org/apache/kylin/common/util/BasicTest.java
+++ b/common/src/test/java/org/apache/kylin/common/util/BasicTest.java
@@ -77,7 +77,7 @@ public class BasicTest {
     @Test
     @Ignore("convenient trial tool for dev")
     public void test1() throws Exception {
-        
System.out.println(org.apache.kylin.common.util.DateFormat.formatToTimeStr(1433496233000L));
+        
System.out.println(org.apache.kylin.common.util.DateFormat.formatToTimeStr(1433833611000L));
         
System.out.println(org.apache.kylin.common.util.DateFormat.formatToTimeStr(1433250517000L));
         
System.out.println(org.apache.kylin.common.util.DateFormat.stringToMillis("2015-06-01
 00:00:00"));
         
System.out.println(org.apache.kylin.common.util.DateFormat.stringToMillis("2015-05-15
 17:00:00"));

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/247d4f13/cube/src/main/java/org/apache/kylin/cube/CubeManager.java
----------------------------------------------------------------------
diff --git a/cube/src/main/java/org/apache/kylin/cube/CubeManager.java 
b/cube/src/main/java/org/apache/kylin/cube/CubeManager.java
index ac49dfa..29bc9b0 100644
--- a/cube/src/main/java/org/apache/kylin/cube/CubeManager.java
+++ b/cube/src/main/java/org/apache/kylin/cube/CubeManager.java
@@ -18,6 +18,8 @@
 
 package org.apache.kylin.cube;
 
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Multimap;
@@ -48,6 +50,7 @@ import org.apache.kylin.metadata.realization.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.annotation.Nullable;
 import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
@@ -351,7 +354,7 @@ public class CubeManager implements IRealizationProvider {
         return appendSegments(cube, startDate, endDate, strictChecking, 
saveChange);
     }
 
-    public CubeSegment appendSegments(CubeInstance cube, long startDate,  long 
endDate, boolean strictChecking, boolean saveChange) throws IOException {
+    public CubeSegment appendSegments(CubeInstance cube, long startDate, long 
endDate, boolean strictChecking, boolean saveChange) throws IOException {
         if (strictChecking)
             checkNoBuildingSegment(cube);
 
@@ -385,7 +388,7 @@ public class CubeManager implements IRealizationProvider {
         Pair<Long, Long> range = alignMergeRange(cube, startDate, endDate);
         CubeSegment newSegment = newSegment(cube, range.getFirst(), 
range.getSecond());
 
-        validateNewSegments(cube, newSegment);
+        validateNewSegments(cube, false, newSegment);
 
         CubeBuilder cubeBuilder = new CubeBuilder(cube);
         cubeBuilder.setToAddSegs(newSegment);
@@ -553,7 +556,7 @@ public class CubeManager implements IRealizationProvider {
             for (CubeSegment segment : readySegments) {
                 long thisSegmentRange = segment.getDateRangeEnd() - 
segment.getDateRangeStart();
 
-                if (thisSegmentRange >= toMergeRange ) {
+                if (thisSegmentRange >= toMergeRange) {
                     // this segment and its previous segments will not be 
merged
                     toMergeSegments.clear();
                     currentRange = 0;
@@ -658,7 +661,7 @@ public class CubeManager implements IRealizationProvider {
         }
         firstSeg.validate();
 
-        for (int i = 0, j = 1; j < tobe.size();) {
+        for (int i = 0, j = 1; j < tobe.size(); ) {
             CubeSegment is = tobe.get(i);
             CubeSegment js = tobe.get(j);
             js.validate();
@@ -750,6 +753,15 @@ public class CubeManager implements IRealizationProvider {
                 usedStorageLocation.put(cubeName.toUpperCase(), 
segment.getStorageLocationIdentifier());
             }
 
+            logger.info("Reloaded new cube: " + cubeName + " with reference 
being" + cubeInstance + " having " + cubeInstance.getSegments().size() + " 
segments:" +
+                    
StringUtils.join(Collections2.transform(cubeInstance.getSegments(), new 
Function<CubeSegment, String>() {
+                        @Nullable
+                        @Override
+                        public String apply(CubeSegment input) {
+                            return input.getStorageLocationIdentifier();
+                        }
+                    }), ","));
+
             return cubeInstance;
         } catch (Exception e) {
             logger.error("Error during load cube instance " + path, e);

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/247d4f13/query/src/main/java/org/apache/kylin/query/routing/QueryRouter.java
----------------------------------------------------------------------
diff --git 
a/query/src/main/java/org/apache/kylin/query/routing/QueryRouter.java 
b/query/src/main/java/org/apache/kylin/query/routing/QueryRouter.java
index e9e7e7b..14db363 100644
--- a/query/src/main/java/org/apache/kylin/query/routing/QueryRouter.java
+++ b/query/src/main/java/org/apache/kylin/query/routing/QueryRouter.java
@@ -18,16 +18,15 @@
 
 package org.apache.kylin.query.routing;
 
-import java.util.List;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.google.common.collect.Lists;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.metadata.project.ProjectManager;
 import org.apache.kylin.metadata.realization.IRealization;
 import org.apache.kylin.query.relnode.OLAPContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
 
 /**
  * @author xjiang
@@ -39,6 +38,7 @@ public class QueryRouter {
     public static IRealization selectRealization(OLAPContext olapContext) 
throws NoRealizationFoundException {
 
         ProjectManager prjMgr = 
ProjectManager.getInstance(olapContext.olapSchema.getConfig());
+        logger.info("The project manager's reference is " + prjMgr);
         String factTableName = olapContext.firstTableScan.getTableName();
         String projectName = olapContext.olapSchema.getProjectName();
         List<IRealization> realizations = 
Lists.newArrayList(prjMgr.getRealizationsByTable(projectName, factTableName));

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/247d4f13/server/src/main/java/org/apache/kylin/rest/service/CacheService.java
----------------------------------------------------------------------
diff --git 
a/server/src/main/java/org/apache/kylin/rest/service/CacheService.java 
b/server/src/main/java/org/apache/kylin/rest/service/CacheService.java
index e580f3a..ea6d410 100644
--- a/server/src/main/java/org/apache/kylin/rest/service/CacheService.java
+++ b/server/src/main/java/org/apache/kylin/rest/service/CacheService.java
@@ -67,6 +67,7 @@ public class CacheService extends BasicService {
 
     public void rebuildCache(Broadcaster.TYPE cacheType, String cacheKey) {
         final String log = "rebuild cache type: " + cacheType + " name:" + 
cacheKey;
+        logger.info(log);
         try {
             switch (cacheType) {
             case CUBE:

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/247d4f13/server/src/main/java/org/apache/kylin/rest/service/CubeService.java
----------------------------------------------------------------------
diff --git 
a/server/src/main/java/org/apache/kylin/rest/service/CubeService.java 
b/server/src/main/java/org/apache/kylin/rest/service/CubeService.java
index 2469ebd..5ea3004 100644
--- a/server/src/main/java/org/apache/kylin/rest/service/CubeService.java
+++ b/server/src/main/java/org/apache/kylin/rest/service/CubeService.java
@@ -242,6 +242,7 @@ public class CubeService extends BasicService {
 
         try {
             if 
(!cube.getDescriptor().calculateSignature().equals(cube.getDescriptor().getSignature()))
 {
+                logger.info("Releasing all segments due to cube desc 
conflict");
                 this.releaseAllSegments(cube);
             }
 
@@ -385,6 +386,7 @@ public class CubeService extends BasicService {
             throw new JobException("Enable is not allowed with a running 
job.");
         }
         if 
(!cube.getDescriptor().calculateSignature().equals(cube.getDescriptor().getSignature()))
 {
+            logger.info("Releasing all segments due to cube desc conflict");
             cube = this.releaseAllSegments(cube);
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/247d4f13/storage/src/main/java/org/apache/kylin/storage/hbase/CubeStorageEngine.java
----------------------------------------------------------------------
diff --git 
a/storage/src/main/java/org/apache/kylin/storage/hbase/CubeStorageEngine.java 
b/storage/src/main/java/org/apache/kylin/storage/hbase/CubeStorageEngine.java
index 3689877..4d143d5 100644
--- 
a/storage/src/main/java/org/apache/kylin/storage/hbase/CubeStorageEngine.java
+++ 
b/storage/src/main/java/org/apache/kylin/storage/hbase/CubeStorageEngine.java
@@ -144,7 +144,6 @@ public class CubeStorageEngine implements 
ICachableStorageEngine {
         return this.uuid;
     }
 
-
     @Override
     public boolean isDynamic() {
         return false;
@@ -399,8 +398,12 @@ public class CubeStorageEngine implements 
ICachableStorageEngine {
 
         List<HBaseKeyRange> result = Lists.newArrayList();
 
+        logger.info("Current cubeInstance is " + cubeInstance + " with " + 
cubeInstance.getSegments().size() + " segs in all");
+        List<CubeSegment> segs = 
cubeInstance.getSegments(SegmentStatusEnum.READY);
+        logger.info("READY segs count: " + segs.size());
+
         // build row key range for each cube segment
-        for (CubeSegment cubeSeg : 
cubeInstance.getSegments(SegmentStatusEnum.READY)) {
+        for (CubeSegment cubeSeg : segs) {
 
             // consider derived (lookup snapshot), filter on dimension may
             // differ per segment
@@ -420,7 +423,9 @@ public class CubeStorageEngine implements 
ICachableStorageEngine {
             result.addAll(mergedRanges);
         }
 
+        logger.info("hbasekeyrange count: " + result.size());
         dropUnhitSegments(result);
+        logger.info("hbasekeyrange count after dropping unhit :" + 
result.size());
 
         return result;
     }

Reply via email to