From 4791ddefda277b7825beb24f682d00527fd29f8b Mon Sep 17 00:00:00 2001 From: kangkaisen Date: Thu, 11 May 2017 15:28:10 +0800 Subject: [PATCH] KYLIN-2628 Remove synchronized modifier for reloadCubeLocalAt --- .../src/main/java/org/apache/kylin/cube/CubeManager.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 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 0a94fb237..71582ecaa 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java @@ -73,9 +73,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Preconditions; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Lists; -import com.google.common.collect.Multimap; /** * @author yangli9 @@ -132,7 +130,7 @@ public class CubeManager implements IRealizationProvider { // private SingleValueCache lookupTables = new SingleValueCache(Broadcaster.TYPE.METADATA); // for generation hbase table name of a new segment - private Multimap usedStorageLocation = HashMultimap.create(); + private ConcurrentMap usedStorageLocation = new ConcurrentHashMap<>(); private CubeManager(KylinConfig config) throws IOException { logger.info("Initializing CubeManager with config " + config); @@ -626,7 +624,12 @@ public class CubeManager implements IRealizationProvider { } public void removeCubeLocal(String cubeName) { - usedStorageLocation.removeAll(cubeName.toUpperCase()); + CubeInstance cube = cubeMap.get(cubeName); + if (cube != null) { + for (CubeSegment segment : cube.getSegments()) { + usedStorageLocation.remove(segment.getUuid()); + } + } cubeMap.removeLocal(cubeName); } @@ -748,7 +751,7 @@ public class CubeManager implements IRealizationProvider { logger.info("Loaded " + succeed + " cubes, fail on " + fail + " cubes"); } - private synchronized CubeInstance reloadCubeLocalAt(String path) { + private CubeInstance reloadCubeLocalAt(String path) { ResourceStore store = getStore(); CubeInstance cube; @@ -779,7 +782,7 @@ public class CubeManager implements IRealizationProvider { cubeMap.putLocal(cubeName, cube); for (CubeSegment segment : cube.getSegments()) { - usedStorageLocation.put(cubeName.toUpperCase(), segment.getStorageLocationIdentifier()); + usedStorageLocation.put(segment.getUuid(), segment.getStorageLocationIdentifier()); } logger.info("Reloaded cube {} being {} having {} segments", cubeName, cube, cube.getSegments().size()); -- 2.11.0 (Apple Git-81)