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

xxyu pushed a commit to branch kylin-on-parquet-v2
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/kylin-on-parquet-v2 by this 
push:
     new 2ad58c7  KYLIN-4872 Fix NPE when there are more than one segment if 
cube planner is open
2ad58c7 is described below

commit 2ad58c712ea1cb8ca7a3494eb30a7d1a69f212a2
Author: Zhichao Zhang <441586...@qq.com>
AuthorDate: Thu Jan 14 17:23:33 2021 +0800

    KYLIN-4872 Fix NPE when there are more than one segment if cube planner is 
open
---
 .../kylin/engine/mr/common/CubeStatsReader.java    | 37 ++++++++++++++--------
 webapp/app/js/controllers/cube.js                  |  4 +--
 2 files changed, 25 insertions(+), 16 deletions(-)

diff --git 
a/build-engine/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
 
b/build-engine/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
index 3f804dd..353e7f4 100644
--- 
a/build-engine/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
+++ 
b/build-engine/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
@@ -96,26 +96,32 @@ public class CubeStatsReader {
      */
     public CubeStatsReader(CubeSegment cubeSegment, CuboidScheduler 
cuboidScheduler, KylinConfig kylinConfig)
             throws IOException {
+        this.seg = cubeSegment;
+        this.cuboidScheduler = cuboidScheduler;
         ResourceStore store = ResourceStore.getStore(kylinConfig);
         String statsKey = cubeSegment.getStatisticsResourcePath();
         RawResource resource = store.getResource(statsKey);
-        if (resource == null) {
+        if (resource != null) {
+            File tmpSeqFile = writeTmpSeqFile(resource.content());
+            Path path = new Path(HadoopUtil.fixWindowsPath("file://" + 
tmpSeqFile.getAbsolutePath()));
+            logger.info("Reading statistics from {}", path);
+            CubeStatsResult cubeStatsResult = new CubeStatsResult(path, 
kylinConfig.getCubeStatsHLLPrecision());
+            tmpSeqFile.delete();
+
+            this.samplingPercentage = cubeStatsResult.getPercentage();
+            this.mapperNumberOfFirstBuild = cubeStatsResult.getMapperNumber();
+            this.mapperOverlapRatioOfFirstBuild = 
cubeStatsResult.getMapperOverlapRatio();
+            this.cuboidRowEstimatesHLL = cubeStatsResult.getCounterMap();
+            this.sourceRowCount = cubeStatsResult.getSourceRecordCount();
+        } else {
             // throw new IllegalStateException("Missing resource at " + 
statsKey);
             logger.warn("{} is not exists.", statsKey);
+            this.samplingPercentage = -1;
+            this.mapperNumberOfFirstBuild = -1;
+            this.mapperOverlapRatioOfFirstBuild = -1.0;
+            this.cuboidRowEstimatesHLL = null;
+            this.sourceRowCount = -1L;
         }
-        File tmpSeqFile = writeTmpSeqFile(resource.content());
-        Path path = new Path(HadoopUtil.fixWindowsPath("file://" + 
tmpSeqFile.getAbsolutePath()));
-        logger.info("Reading statistics from {}", path);
-        CubeStatsResult cubeStatsResult = new CubeStatsResult(path, 
kylinConfig.getCubeStatsHLLPrecision());
-        tmpSeqFile.delete();
-
-        this.seg = cubeSegment;
-        this.cuboidScheduler = cuboidScheduler;
-        this.samplingPercentage = cubeStatsResult.getPercentage();
-        this.mapperNumberOfFirstBuild = cubeStatsResult.getMapperNumber();
-        this.mapperOverlapRatioOfFirstBuild = 
cubeStatsResult.getMapperOverlapRatio();
-        this.cuboidRowEstimatesHLL = cubeStatsResult.getCounterMap();
-        this.sourceRowCount = cubeStatsResult.getSourceRecordCount();
     }
 
     /**
@@ -167,6 +173,9 @@ public class CubeStatsReader {
     }
 
     public Map<Long, Long> getCuboidRowEstimatesHLL() {
+        if (cuboidRowEstimatesHLL == null) {
+            return null;
+        }
         return getCuboidRowCountMapFromSampling(cuboidRowEstimatesHLL, 
samplingPercentage);
     }
 
diff --git a/webapp/app/js/controllers/cube.js 
b/webapp/app/js/controllers/cube.js
index 60df772..32df70f 100755
--- a/webapp/app/js/controllers/cube.js
+++ b/webapp/app/js/controllers/cube.js
@@ -239,7 +239,7 @@ KylinApp.controller('CubeCtrl', function ($scope, 
$rootScope, AccessService, Mes
             };
             $scope.currentOptions.chart.sunburst = getSunburstDispatch();
             $scope.currentOptions.title.text = 'Current Cuboid Distribution';
-            $scope.currentOptions.subtitle.text = '[Cuboid Count: ' + 
data.nodeInfos.length + '] [Row Count: ' + data.totalRowCount + ']';
+            $scope.currentOptions.subtitle.text = '[Cuboid Count: ' + 
data.nodeInfos.length + '] [The Row Count of The First Segment: ' + 
data.totalRowCount + ']';
         } else if ('recommend' === type) {
             $scope.recommendData = [chartData];
             $scope.recommendOptions = 
angular.copy(cubeConfig.baseChartOptions);
@@ -258,7 +258,7 @@ KylinApp.controller('CubeCtrl', function ($scope, 
$rootScope, AccessService, Mes
             };
             $scope.recommendOptions.chart.sunburst = getSunburstDispatch();
             $scope.recommendOptions.title.text = 'Recommend Cuboid 
Distribution';
-            $scope.recommendOptions.subtitle.text = '[Cuboid Count: ' + 
data.nodeInfos.length + '] [Row Count: ' + data.totalRowCount + ']';
+            $scope.recommendOptions.subtitle.text = '[Cuboid Count: ' + 
data.nodeInfos.length + '] [The Row Count of The First Segment: ' + 
data.totalRowCount + ']';
         }
     };
 

Reply via email to