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

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

commit ab7bdaea290123b1823eb8e1f65d4206d198f6d5
Author: Li Yang <liy...@apache.org>
AuthorDate: Thu Jul 5 14:16:01 2018 +0800

    KYLIN-3370 bug fix in UpdateCubeInfoAfterMergeStep
---
 .../org/apache/kylin/cube/DimensionRangeInfoTest.java  |  1 +
 .../engine/mr/steps/UpdateCubeInfoAfterMergeStep.java  | 18 +++++++++---------
 .../mr/steps/UpdateCubeInfoAfterOptimizeStep.java      |  1 +
 .../apache/kylin/provision/BuildCubeWithEngine.java    |  1 +
 4 files changed, 12 insertions(+), 9 deletions(-)

diff --git 
a/core-cube/src/test/java/org/apache/kylin/cube/DimensionRangeInfoTest.java 
b/core-cube/src/test/java/org/apache/kylin/cube/DimensionRangeInfoTest.java
index 94acf9f..43175c9 100644
--- a/core-cube/src/test/java/org/apache/kylin/cube/DimensionRangeInfoTest.java
+++ b/core-cube/src/test/java/org/apache/kylin/cube/DimensionRangeInfoTest.java
@@ -67,6 +67,7 @@ public class DimensionRangeInfoTest extends 
LocalFileMetadataTestCase {
             Map<String, DimensionRangeInfo> m2 = new HashMap<>();
 
             Assert.assertTrue(DimensionRangeInfo.mergeRangeMap(model, m1, 
m2).isEmpty());
+            Assert.assertTrue(DimensionRangeInfo.mergeRangeMap(model, m2, 
m1).isEmpty());
         }
         
         // null min/max value (happens on empty segment, or all-null columns)
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterMergeStep.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterMergeStep.java
index 56f5077..4cf6fc6 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterMergeStep.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterMergeStep.java
@@ -63,28 +63,29 @@ public class UpdateCubeInfoAfterMergeStep extends 
AbstractExecutable {
         if (mergingSegmentIds.isEmpty()) {
             return ExecuteResult.createFailed(new 
SegmentNotFoundException("there are no merging segments"));
         }
+        
         long sourceCount = 0L;
         long sourceSize = 0L;
-
         boolean isOffsetCube = mergedSegment.isOffsetCube();
         Long tsStartMin = Long.MAX_VALUE, tsEndMax = 0L;
+        for (String id : mergingSegmentIds) {
+            CubeSegment segment = cube.getSegmentById(id);
+            sourceCount += segment.getInputRecords();
+            sourceSize += segment.getInputRecordsSize();
+            tsStartMin = Math.min(tsStartMin, segment.getTSRange().start.v);
+            tsEndMax = Math.max(tsEndMax, segment.getTSRange().end.v);
+        }
+
         Map<String, DimensionRangeInfo> mergedSegDimRangeMap = null;
         for (String id : mergingSegmentIds) {
             CubeSegment segment = cube.getSegmentById(id);
             Map<String, DimensionRangeInfo> segDimRangeMap = 
segment.getDimensionRangeInfoMap();
-            if (segDimRangeMap.isEmpty()) {
-                continue;
-            }
             if (mergedSegDimRangeMap == null) {
                 mergedSegDimRangeMap = segDimRangeMap;
             } else {
                 mergedSegDimRangeMap = 
DimensionRangeInfo.mergeRangeMap(cube.getModel(), segDimRangeMap,
                         mergedSegDimRangeMap);
             }
-            sourceCount += segment.getInputRecords();
-            sourceSize += segment.getInputRecordsSize();
-            tsStartMin = Math.min(tsStartMin, segment.getTSRange().start.v);
-            tsEndMax = Math.max(tsEndMax, segment.getTSRange().end.v);
         }
 
         // update segment info
@@ -94,7 +95,6 @@ public class UpdateCubeInfoAfterMergeStep extends 
AbstractExecutable {
         
mergedSegment.setLastBuildJobID(CubingExecutableUtil.getCubingJobId(this.getParams()));
         mergedSegment.setLastBuildTime(System.currentTimeMillis());
         mergedSegment.setDimensionRangeInfoMap(mergedSegDimRangeMap);
-
         if (isOffsetCube) {
             SegmentRange.TSRange tsRange = new 
SegmentRange.TSRange(tsStartMin, tsEndMax);
             mergedSegment.setTSRange(tsRange);
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterOptimizeStep.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterOptimizeStep.java
index d013386..03aa616 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterOptimizeStep.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterOptimizeStep.java
@@ -59,6 +59,7 @@ public class UpdateCubeInfoAfterOptimizeStep extends 
AbstractExecutable {
         segment.setSizeKB(cubeSizeBytes / 1024);
         segment.setInputRecords(sourceCount);
         segment.setInputRecordsSize(sourceSizeBytes);
+        
segment.setDimensionRangeInfoMap(originalSegment.getDimensionRangeInfoMap());
 
         try {
             cubeManager.promoteNewlyOptimizeSegments(cube, segment);
diff --git 
a/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithEngine.java 
b/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithEngine.java
index 2f22bd4..16ceede 100644
--- a/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithEngine.java
+++ b/kylin-it/src/test/java/org/apache/kylin/provision/BuildCubeWithEngine.java
@@ -313,6 +313,7 @@ public class BuildCubeWithEngine {
         checkNormalSegRangeInfo(cubeManager.getCube(cubeName));
         if (!buildSegment(cubeName, date2, date3))
             return false;
+        checkNormalSegRangeInfo(cubeManager.getCube(cubeName));
         if (!optimizeCube(cubeName))
             return false;
         checkNormalSegRangeInfo(cubeManager.getCube(cubeName));

Reply via email to