From e0e8fb89710df9d126014b05e36534ae298f7275 Mon Sep 17 00:00:00 2001 From: etherge Date: Wed, 3 Jan 2018 10:22:45 +0800 Subject: [PATCH] KYLIN-3081, fix potential NPE --- .../kylin/rest/controller/CubeController.java | 38 ++++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java index f53189b..20ba9ae 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java @@ -797,27 +797,29 @@ public class CubeController extends BasicController { HttpServletResponse response) throws IOException { CubeInstance cube = cubeService.getCubeManager().getCube(cubeName); if (cube == null) { - logger.error("Get cube: [" + cubeName + "] failed when get recommend cuboids"); - throw new BadRequestException("Get cube: [" + cubeName + "] failed when get recommend cuboids"); - } - Map cuboidList = getRecommendCuboidList(cube); - if (cuboidList == null || cuboidList.isEmpty()) { - logger.warn("Cannot get recommend cuboid list for cube " + cubeName); + throw new BadRequestException("Cube: [" + cubeName + "] not exist."); } - if (cuboidList.size() < top) { - logger.info("Only recommend " + cuboidList.size() + " cuboids less than topn " + top); - } - Iterator cuboidIterator = cuboidList.keySet().iterator(); - RowKeyColDesc[] rowKeyColDescList = cube.getDescriptor().getRowkey().getRowKeyColumns(); + Map cuboidList = getRecommendCuboidList(cube); List> dimensionSetList = Lists.newLinkedList(); - while (top-- > 0 && cuboidIterator.hasNext()) { - Set dimensionSet = Sets.newHashSet(); - dimensionSetList.add(dimensionSet); - long cuboid = cuboidIterator.next(); - for (int i = 0; i < rowKeyColDescList.length; i++) { - if ((cuboid & (1L << rowKeyColDescList[i].getBitIndex())) > 0) { - dimensionSet.add(rowKeyColDescList[i].getColumn()); + + if (cuboidList == null || cuboidList.isEmpty()) { + logger.info("Cannot get recommended cuboid list for cube " + cubeName); + }else { + if (cuboidList.size() < top) { + logger.info("Require " + top + " recommended cuboids, but only " + cuboidList.size() + " is found."); + } + Iterator cuboidIterator = cuboidList.keySet().iterator(); + RowKeyColDesc[] rowKeyColDescList = cube.getDescriptor().getRowkey().getRowKeyColumns(); + + while (top-- > 0 && cuboidIterator.hasNext()) { + Set dimensionSet = Sets.newHashSet(); + dimensionSetList.add(dimensionSet); + long cuboid = cuboidIterator.next(); + for (int i = 0; i < rowKeyColDescList.length; i++) { + if ((cuboid & (1L << rowKeyColDescList[i].getBitIndex())) > 0) { + dimensionSet.add(rowKeyColDescList[i].getColumn()); + } } } } -- 2.9.3 (Apple Git-75)