Repository: kylin
Updated Branches:
  refs/heads/master f11f184b0 -> ef7d29083


minor, wipe query cache when update table ACL.


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/2e845c21
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/2e845c21
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/2e845c21

Branch: refs/heads/master
Commit: 2e845c21343e4143bfa5a3d6bb54842808c57275
Parents: 0a8bdc2
Author: tttMelody <245915...@qq.com>
Authored: Fri Sep 22 18:57:41 2017 +0800
Committer: Jiatao Tao <245915...@qq.com>
Committed: Sun Sep 24 17:47:04 2017 +0800

----------------------------------------------------------------------
 .../kylin/metadata/acl/TableACLManager.java       |  1 +
 .../kylin/metadata/cachesync/Broadcaster.java     | 15 +++++++++++++++
 .../org/apache/kylin/rest/request/SQLRequest.java | 18 ++++++++++++++++--
 .../apache/kylin/rest/service/CacheService.java   |  5 +++++
 .../apache/kylin/rest/service/QueryService.java   |  9 +++++++++
 5 files changed, 46 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/2e845c21/core-metadata/src/main/java/org/apache/kylin/metadata/acl/TableACLManager.java
----------------------------------------------------------------------
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/acl/TableACLManager.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/acl/TableACLManager.java
index 4804cef..4812e1c 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/acl/TableACLManager.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/acl/TableACLManager.java
@@ -100,6 +100,7 @@ public class TableACLManager {
         @Override
         public void onEntityChange(Broadcaster broadcaster, String entity, 
Broadcaster.Event event, String cacheKey) throws IOException {
             reloadTableACL(cacheKey);
+            broadcaster.notifyProjectACLUpdate(cacheKey);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/2e845c21/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
----------------------------------------------------------------------
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 532ae74..ef19379 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
@@ -65,6 +65,7 @@ public class Broadcaster {
     public static final String SYNC_ALL = "all"; // the special entity to 
indicate clear all
     public static final String SYNC_PRJ_SCHEMA = "project_schema"; // the 
special entity to indicate project schema has change, e.g. 
table/model/cube_desc update
     public static final String SYNC_PRJ_DATA = "project_data"; // the special 
entity to indicate project data has change, e.g. cube/raw_table update
+    public static final String SYNC_PRJ_ACL = "project_acl"; // the special 
entity to indicate query ACL has change, e.g. table_acl/learn_kylin update
 
     // static cached instances
     private static final ConcurrentMap<KylinConfig, Broadcaster> CACHE = new 
ConcurrentHashMap<KylinConfig, Broadcaster>();
@@ -199,6 +200,7 @@ public class Broadcaster {
             addListener(lmap, SYNC_ALL, listener);
             addListener(lmap, SYNC_PRJ_SCHEMA, listener);
             addListener(lmap, SYNC_PRJ_DATA, listener);
+            addListener(lmap, SYNC_PRJ_ACL, listener);
         }
     }
 
@@ -223,6 +225,10 @@ public class Broadcaster {
         notifyListener(SYNC_PRJ_DATA, Event.UPDATE, project);
     }
 
+    public void notifyProjectACLUpdate(String project) throws IOException {
+        notifyListener(SYNC_PRJ_ACL, Event.UPDATE, project);
+    }
+
     public void notifyListener(String entity, Event event, String cacheKey) 
throws IOException {
         notifyListener(entity, event, cacheKey, true);
     }
@@ -268,6 +274,12 @@ public class Broadcaster {
                 l.onProjectDataChange(this, cacheKey);
             }
             break;
+        case SYNC_PRJ_ACL:
+            ProjectManager.getInstance(config).clearL2Cache();
+            for (Listener l : list) {
+                l.onProjectQueryACLChange(this, cacheKey);
+            }
+            break;
         default:
             for (Listener l : list) {
                 l.onEntityChange(this, entity, event, cacheKey);
@@ -332,6 +344,9 @@ public class Broadcaster {
         public void onProjectDataChange(Broadcaster broadcaster, String 
project) throws IOException {
         }
 
+        public void onProjectQueryACLChange(Broadcaster broadcaster, String 
project) throws IOException {
+        }
+
         public void onEntityChange(Broadcaster broadcaster, String entity, 
Event event, String cacheKey)
                 throws IOException {
         }

http://git-wip-us.apache.org/repos/asf/kylin/blob/2e845c21/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java 
b/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
index 54900ba..a98aba7 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/request/SQLRequest.java
@@ -32,6 +32,7 @@ public class SQLRequest implements Serializable {
     private String sql;
 
     private String project;
+    private String username = "";
     private Integer offset = 0;
     private Integer limit = 0;
     private boolean acceptPartial = false;
@@ -59,6 +60,14 @@ public class SQLRequest implements Serializable {
         this.project = project;
     }
 
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
     public String getSql() {
         return sql;
     }
@@ -95,8 +104,13 @@ public class SQLRequest implements Serializable {
         if (cacheKey != null)
             return cacheKey;
 
-        cacheKey = Lists.newArrayList(sql.replaceAll("\\s+", ""), project, 
offset, limit, acceptPartial,
-                backdoorToggles);
+        cacheKey = Lists.newArrayList(sql.replaceAll("\\s+", "") //
+                , project //
+                , offset //
+                , limit //
+                , acceptPartial //
+                , backdoorToggles //
+                , username);
         return cacheKey;
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/2e845c21/server-base/src/main/java/org/apache/kylin/rest/service/CacheService.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/service/CacheService.java 
b/server-base/src/main/java/org/apache/kylin/rest/service/CacheService.java
index 536b338..f19290f 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/CacheService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/CacheService.java
@@ -71,6 +71,11 @@ public class CacheService extends BasicService implements 
InitializingBean {
         }
 
         @Override
+        public void onProjectQueryACLChange(Broadcaster broadcaster, String 
project) throws IOException {
+            cleanDataCache(project);
+        }
+
+        @Override
         public void onEntityChange(Broadcaster broadcaster, String entity, 
Event event, String cacheKey) throws IOException {
             if ("cube".equals(entity) && event == Event.UPDATE) {
                 final String cubeName = cacheKey;

http://git-wip-us.apache.org/repos/asf/kylin/blob/2e845c21/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java 
b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
index 4cf8556..33dd4e8 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
@@ -373,6 +373,7 @@ public class QueryService extends BasicService {
 
     public SQLResponse doQueryWithCache(SQLRequest sqlRequest) {
         Message msg = MsgPicker.getMsg();
+        sqlRequest.setUsername(getUserName());
 
         KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv();
         String serverMode = kylinConfig.getServerMode();
@@ -485,6 +486,14 @@ public class QueryService extends BasicService {
         }
     }
 
+    private String getUserName() {
+        String username = 
SecurityContextHolder.getContext().getAuthentication().getName();
+        if (StringUtils.isEmpty(username)) {
+            username = "";
+        }
+        return username;
+    }
+
     public SQLResponse searchQueryInCache(SQLRequest sqlRequest) {
         SQLResponse response = null;
         Cache exceptionCache = cacheManager.getCache(EXCEPTION_QUERY_CACHE);

Reply via email to