You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2018/07/26 01:45:34 UTC

[kylin] branch master updated: KYLIN-3414 Optimize the cleanup of project L2 cache

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

shaofengshi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/master by this push:
     new 036e26c  KYLIN-3414 Optimize the cleanup of project L2 cache
036e26c is described below

commit 036e26caafef60610d4c0ab7833b19319251c7f5
Author: GinaZhai <na...@kyligence.io>
AuthorDate: Wed Jul 25 17:44:15 2018 +0800

    KYLIN-3414 Optimize the cleanup of project L2 cache
---
 .../src/main/java/org/apache/kylin/cube/CubeManager.java     |  2 +-
 .../org/apache/kylin/metadata/cachesync/Broadcaster.java     |  6 +++---
 .../org/apache/kylin/metadata/project/ProjectL2Cache.java    |  8 ++++++--
 .../org/apache/kylin/metadata/project/ProjectManager.java    | 12 ++++++------
 4 files changed, 16 insertions(+), 12 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 3ff0160..9d377d9 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
@@ -401,7 +401,7 @@ public class CubeManager implements IRealizationProvider {
         }
 
         //this is a duplicate call to take care of scenarios where REST cache service unavailable
-        ProjectManager.getInstance(cube.getConfig()).clearL2Cache();
+        ProjectManager.getInstance(cube.getConfig()).clearL2Cache(cube.getProject());
 
         return cube;
     }
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
index 6462a27..d5ecc16 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
@@ -254,19 +254,19 @@ public class Broadcaster {
             config.clearManagers(); // clear all registered managers in config
             break;
         case SYNC_PRJ_SCHEMA:
-            ProjectManager.getInstance(config).clearL2Cache();
+            ProjectManager.getInstance(config).clearL2Cache(cacheKey);
             for (Listener l : list) {
                 l.onProjectSchemaChange(this, cacheKey);
             }
             break;
         case SYNC_PRJ_DATA:
-            ProjectManager.getInstance(config).clearL2Cache(); // cube's first becoming ready leads to schema change too
+            ProjectManager.getInstance(config).clearL2Cache(cacheKey); // cube's first becoming ready leads to schema change too
             for (Listener l : list) {
                 l.onProjectDataChange(this, cacheKey);
             }
             break;
         case SYNC_PRJ_ACL:
-            ProjectManager.getInstance(config).clearL2Cache();
+            ProjectManager.getInstance(config).clearL2Cache(cacheKey);
             for (Listener l : list) {
                 l.onProjectQueryACLChange(this, cacheKey);
             }
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectL2Cache.java b/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectL2Cache.java
index 1663c8d..6e718c2 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectL2Cache.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectL2Cache.java
@@ -59,8 +59,12 @@ class ProjectL2Cache {
         this.mgr = mgr;
     }
 
-    public void clear() {
-        projectCaches.clear();
+    public void clear(String projectname) {
+        if (projectname == null) {
+            projectCaches.clear();
+        } else {
+            projectCaches.remove(projectname);
+        }
     }
 
     public ExternalFilterDesc getExternalFilterDesc(String project, String extFilterName) {
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java b/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
index 5122fd8..25908cd 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
@@ -113,8 +113,8 @@ public class ProjectManager {
         }
     }
 
-    public void clearL2Cache() {
-        l2Cache.clear();
+    public void clearL2Cache(String projectname) {
+        l2Cache.clear(projectname);
     }
 
     public void reloadProjectL2Cache(String project) {
@@ -124,7 +124,7 @@ public class ProjectManager {
     public ProjectInstance reloadProjectQuietly(String project) throws IOException {
         try (AutoLock lock = prjMapLock.lockForWrite()) {
             ProjectInstance prj = crud.reloadQuietly(project);
-            clearL2Cache();
+            clearL2Cache(project);
             return prj;
         }
     }
@@ -209,7 +209,7 @@ public class ProjectManager {
             crud.delete(projectInstance);
             BadQueryHistoryManager.getInstance(config).removeBadQueryHistory(projectName);
 
-            clearL2Cache();
+            clearL2Cache(projectName);
             return projectInstance;
         }
     }
@@ -233,7 +233,7 @@ public class ProjectManager {
     public void removeProjectLocal(String proj) {
         try (AutoLock lock = prjMapLock.lockForWrite()) {
             projectMap.removeLocal(proj);
-            clearL2Cache();
+            clearL2Cache(proj);
         }
     }
 
@@ -358,7 +358,7 @@ public class ProjectManager {
     
     private ProjectInstance save(ProjectInstance prj) throws IOException {
         crud.save(prj);
-        clearL2Cache();
+        clearL2Cache(prj.getName());
         return prj;
     }