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 bd9832fda12..db9c0950af6 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 @@ -182,12 +182,28 @@ public void onEntityChange(Broadcaster broadcaster, String entity, Event event, } } + /** + * List all cubes from cache. Note the metadata may be out of date + * @return + */ public List listAllCubes() { try (AutoLock lock = cubeMapLock.lockForRead()) { return new ArrayList(cubeMap.values()); } } + /** + * Reload the cubes from database and list all cubes + * @return + * @throws IOException + */ + public List reloadAndListAllCubes() throws IOException { + try (AutoLock lock = cubeMapLock.lockForWrite()) { + crud.reloadAll(); + } + return listAllCubes(); + } + public CubeInstance getCube(String cubeName) { try (AutoLock lock = cubeMapLock.lockForRead()) { return cubeMap.get(cubeName); diff --git a/server-base/src/main/java/org/apache/kylin/rest/job/MetadataCleanupJob.java b/server-base/src/main/java/org/apache/kylin/rest/job/MetadataCleanupJob.java index 360818ba92c..17eebd69da6 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/job/MetadataCleanupJob.java +++ b/server-base/src/main/java/org/apache/kylin/rest/job/MetadataCleanupJob.java @@ -132,7 +132,7 @@ public Map cleanup(boolean delete, int jobOutdatedDays) throws Exc // exclude resources in use Set activeResources = Sets.newHashSet(); - for (CubeInstance cube : cubeManager.listAllCubes()) { + for (CubeInstance cube : cubeManager.reloadAndListAllCubes()) { activeResources.addAll(cube.getSnapshots().values()); for (CubeSegment segment : cube.getSegments()) { activeResources.addAll(segment.getSnapshotPaths()); diff --git a/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanJobHbaseUtil.java b/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanJobHbaseUtil.java index 4c8c42643be..c29c4def4f0 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanJobHbaseUtil.java +++ b/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanJobHbaseUtil.java @@ -81,7 +81,7 @@ static List cleanUnusedHBaseTables(HBaseAdmin hbaseAdmin, boolean delete } // remove every segment htable from drop list - for (CubeInstance cube : cubeMgr.listAllCubes()) { + for (CubeInstance cube : cubeMgr.reloadAndListAllCubes()) { for (CubeSegment seg : cube.getSegments()) { String tablename = seg.getStorageLocationIdentifier(); if (allTablesNeedToBeDropped.contains(tablename)) { diff --git a/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanupJob.java b/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanupJob.java index b73e916213a..3b2e787f840 100755 --- a/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanupJob.java +++ b/server-base/src/main/java/org/apache/kylin/rest/job/StorageCleanupJob.java @@ -256,7 +256,7 @@ private void cleanUnusedHdfsFiles(FileSystem fs, UnusedHdfsFileCollector collect } // remove every segment working dir from deletion list - for (CubeInstance cube : cubeMgr.listAllCubes()) { + for (CubeInstance cube : cubeMgr.reloadAndListAllCubes()) { for (CubeSegment seg : cube.getSegments()) { String jobUuid = seg.getLastBuildJobID(); if (jobUuid != null && jobUuid.equals("") == false) {