You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kylin.apache.org by GitBox <gi...@apache.org> on 2018/07/26 01:45:33 UTC

[GitHub] shaofengshi closed pull request #177: KYLIN-3414 Optimize the cleanup of project L2 cache

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:
users@infra.apache.org


With regards,
Apache Git Services