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

nic pushed a commit to branch 2.6.x
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit c6cfbff3d17687a348f14d612aa5dd119f97ecd0
Author: XiaoxiangYu <hit_la...@126.com>
AuthorDate: Mon Sep 23 10:50:50 2019 +0800

    KYLIN-3628 Fix regression bug
    
    Previous code change will cause NPE for "SELECT * from DIMENSION_TABLE" 
when dimension table name use alias.
---
 .../java/org/apache/kylin/cube/CubeManager.java    | 36 ++++++++++++----------
 1 file changed, 20 insertions(+), 16 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 6a96f18..95d01bc 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
@@ -1231,31 +1231,35 @@ public class CubeManager implements 
IRealizationProvider {
     public CubeInstance findLatestSnapshot(List<RealizationEntry> 
realizationEntries, String lookupTableName,
             CubeInstance cubeInstance) {
         CubeInstance cube = null;
-        if (!realizationEntries.isEmpty()) {
-            long maxBuildTime = Long.MIN_VALUE;
-            RealizationRegistry registry = 
RealizationRegistry.getInstance(config);
-            for (RealizationEntry entry : realizationEntries) {
-                IRealization realization = 
registry.getRealization(entry.getType(), entry.getRealization());
-                if (realization != null && realization.isReady() && 
realization instanceof CubeInstance) {
-                    CubeInstance current = (CubeInstance) realization;
-                    if (checkMeetSnapshotTable(current, lookupTableName)) {
-                        CubeSegment segment = current.getLatestReadySegment();
-                        if (segment != null) {
-                            long latestBuildTime = segment.getLastBuildTime();
-                            if (latestBuildTime > maxBuildTime) {
-                                maxBuildTime = latestBuildTime;
-                                cube = current;
+        try {
+            if (!realizationEntries.isEmpty()) {
+                long maxBuildTime = Long.MIN_VALUE;
+                RealizationRegistry registry = 
RealizationRegistry.getInstance(config);
+                for (RealizationEntry entry : realizationEntries) {
+                    IRealization realization = 
registry.getRealization(entry.getType(), entry.getRealization());
+                    if (realization != null && realization.isReady() && 
realization instanceof CubeInstance) {
+                        CubeInstance current = (CubeInstance) realization;
+                        if (checkMeetSnapshotTable(current, lookupTableName)) {
+                            CubeSegment segment = 
current.getLatestReadySegment();
+                            if (segment != null) {
+                                long latestBuildTime = 
segment.getLastBuildTime();
+                                if (latestBuildTime > maxBuildTime) {
+                                    maxBuildTime = latestBuildTime;
+                                    cube = current;
+                                }
                             }
                         }
                     }
                 }
             }
+        } catch (Exception e) {
+            logger.info("Unexpected error.", e);
         }
         if (!cubeInstance.equals(cube)) {
             logger.debug("Picked cube {} over {} as it provides a more recent 
snapshot of the lookup table {}", cube,
                     cubeInstance, lookupTableName);
         }
-        return cube;
+        return cube == null ? cubeInstance : cube;
     }
 
     /**
@@ -1270,7 +1274,7 @@ public class CubeManager implements IRealizationProvider {
             lookupTbl = strArr[strArr.length - 1];
         }
         for (DimensionDesc dimensionDesc : 
toCheck.getDescriptor().getDimensions()) {
-            if (dimensionDesc.getTable().equalsIgnoreCase(lookupTbl)) {
+            if 
(dimensionDesc.getTableRef().getTableName().equalsIgnoreCase(lookupTbl)) {
                 checkRes = true;
                 break;
             }

Reply via email to