[ 
https://issues.apache.org/jira/browse/KYLIN-3414?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16556765#comment-16556765
 ] 

ASF GitHub Bot commented on KYLIN-3414:
---------------------------------------

shaofengshi closed pull request #177: KYLIN-3414 Optimize the cleanup of 
project L2 cache
URL: https://github.com/apache/kylin/pull/177
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

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 3ff016009e..9d377d9b48 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 @@ private CubeInstance updateCubeWithRetry(CubeUpdate update, 
int retry) throws IO
         }
 
         //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 6462a27aab..d5ecc16600 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 @@ private void notifyListener(String entity, Event event, 
String cacheKey, boolean
             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 1663c8d339..6e718c2994 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 @@
         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 5122fd8401..25908cdffa 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 void onEntityChange(Broadcaster broadcaster, String 
entity, Event event,
         }
     }
 
-    public void clearL2Cache() {
-        l2Cache.clear();
+    public void clearL2Cache(String projectname) {
+        l2Cache.clear(projectname);
     }
 
     public void reloadProjectL2Cache(String project) {
@@ -124,7 +124,7 @@ public void reloadProjectL2Cache(String project) {
     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 ProjectInstance dropProject(String projectName) 
throws IOException {
             crud.delete(projectInstance);
             
BadQueryHistoryManager.getInstance(config).removeBadQueryHistory(projectName);
 
-            clearL2Cache();
+            clearL2Cache(projectName);
             return projectInstance;
         }
     }
@@ -233,7 +233,7 @@ public ProjectInstance updateProject(ProjectInstance 
project, String newName, St
     public void removeProjectLocal(String proj) {
         try (AutoLock lock = prjMapLock.lockForWrite()) {
             projectMap.removeLocal(proj);
-            clearL2Cache();
+            clearL2Cache(proj);
         }
     }
 
@@ -358,7 +358,7 @@ public void removeExtFilterFromProject(String filterName, 
String projectName) th
     
     private ProjectInstance save(ProjectInstance prj) throws IOException {
         crud.save(prj);
-        clearL2Cache();
+        clearL2Cache(prj.getName());
         return prj;
     }
 


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Optimize the cleanup of project L2 cache
> ----------------------------------------
>
>                 Key: KYLIN-3414
>                 URL: https://issues.apache.org/jira/browse/KYLIN-3414
>             Project: Kylin
>          Issue Type: Improvement
>          Components: Metadata
>            Reporter: Shaofeng SHI
>            Assignee: Shaofeng SHI
>            Priority: Major
>             Fix For: v2.5.0
>
>
> Whenever a cube changed, all projects' level 2 cache was cleared. This can be 
> optimized to only flush the specific project's cache.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to