You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by zh...@apache.org on 2020/04/23 01:00:57 UTC

[incubator-doris] branch master updated: [Bug] `isQuery` field should be reset at the beginning of query execution (#3374)

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

zhaoc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new d854a79  [Bug] `isQuery` field should be reset at the beginning of query execution (#3374)
d854a79 is described below

commit d854a79878f93e74ce0758a175782ae802f8be77
Author: Mingyu Chen <mo...@gmail.com>
AuthorDate: Thu Apr 23 09:00:47 2020 +0800

    [Bug] `isQuery` field should be reset at the beginning of query execution (#3374)
    
    If not reset, all queries comes from same session will have save isQuery field value.
    This bug will cause all entries in fe.audit.log has same IsQuery=true.
    
    This CL also fix another bug:
    The resolved IPs of domain of a user should not appear in other user's white list. Fix #3380
---
 .../cn/administrator-guide/segment-v2-usage.md           |  2 +-
 fe/src/main/java/org/apache/doris/catalog/Catalog.java   |  2 +-
 .../java/org/apache/doris/catalog/DomainResolver.java    |  8 ++++----
 fe/src/main/java/org/apache/doris/catalog/OlapTable.java |  7 +++++++
 .../java/org/apache/doris/mysql/privilege/PaloAuth.java  |  4 ++--
 .../apache/doris/mysql/privilege/UserPropertyMgr.java    | 16 ++--------------
 .../java/org/apache/doris/mysql/privilege/WhiteList.java |  7 ++++++-
 fe/src/main/java/org/apache/doris/qe/QueryState.java     |  1 +
 8 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/docs/documentation/cn/administrator-guide/segment-v2-usage.md b/docs/documentation/cn/administrator-guide/segment-v2-usage.md
index 1c821a1..09b6f0c 100644
--- a/docs/documentation/cn/administrator-guide/segment-v2-usage.md
+++ b/docs/documentation/cn/administrator-guide/segment-v2-usage.md
@@ -62,7 +62,7 @@ V2 格式的表可以支持以下新的特性:
     
     ```
     ## 创建 V2 格式的 Rollup
-    
+
     ALTER TABLE table_name ADD ROLLUP table_name (columns) PROPERTIES ("storage_format" = "v2");
     ```
 
diff --git a/fe/src/main/java/org/apache/doris/catalog/Catalog.java b/fe/src/main/java/org/apache/doris/catalog/Catalog.java
index bc6e827..6bbc643 100644
--- a/fe/src/main/java/org/apache/doris/catalog/Catalog.java
+++ b/fe/src/main/java/org/apache/doris/catalog/Catalog.java
@@ -3971,7 +3971,7 @@ public class Catalog {
 
             // storage type
             sb.append(",\n\"").append(PropertyAnalyzer.PROPERTIES_STORAGE_FORMAT).append("\" = \"");
-            sb.append(olapTable.getTableProperty().getStorageFormat()).append("\"");
+            sb.append(olapTable.getStorageFormat()).append("\"");
 
             sb.append("\n)");
         } else if (table.getType() == TableType.MYSQL) {
diff --git a/fe/src/main/java/org/apache/doris/catalog/DomainResolver.java b/fe/src/main/java/org/apache/doris/catalog/DomainResolver.java
index 00ae925..d5d22a6 100644
--- a/fe/src/main/java/org/apache/doris/catalog/DomainResolver.java
+++ b/fe/src/main/java/org/apache/doris/catalog/DomainResolver.java
@@ -55,13 +55,13 @@ public class DomainResolver extends MasterDaemon {
     // 'public' for test
     @Override
     public void runAfterCatalogReady() {
-        // domain name -> set of user names
-        Map<String, Set<String>> domainMap = Maps.newHashMap();
-        auth.getDomainMap(domainMap);
+        // domain names
+        Set<String> allDomains = Sets.newHashSet();
+        auth.getAllDomains(allDomains);
         
         // resolve domain name
         Map<String, Set<String>> resolvedIPsMap = Maps.newHashMap();
-        for (String domain : domainMap.keySet()) {
+        for (String domain : allDomains) {
             LOG.debug("begin to resolve domain: {}", domain);
             Set<String> resolvedIPs = Sets.newHashSet();
             if (!resolveWithBNS(domain, resolvedIPs) && !resolveWithDNS(domain, resolvedIPs)) {
diff --git a/fe/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/src/main/java/org/apache/doris/catalog/OlapTable.java
index 719e29e..fe252dd 100644
--- a/fe/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -1470,4 +1470,11 @@ public class OlapTable extends Table {
         tableProperty.modifyTableProperties(PropertyAnalyzer.PROPERTIES_STORAGE_FORMAT, storageFormat.name());
         tableProperty.buildStorageFormat();
     }
+
+    public TStorageFormat getStorageFormat() {
+        if (tableProperty == null) {
+            return TStorageFormat.DEFAULT;
+        }
+        return tableProperty.getStorageFormat();
+    }
 }
diff --git a/fe/src/main/java/org/apache/doris/mysql/privilege/PaloAuth.java b/fe/src/main/java/org/apache/doris/mysql/privilege/PaloAuth.java
index cf87486..d888ed4 100644
--- a/fe/src/main/java/org/apache/doris/mysql/privilege/PaloAuth.java
+++ b/fe/src/main/java/org/apache/doris/mysql/privilege/PaloAuth.java
@@ -851,10 +851,10 @@ public class PaloAuth implements Writable {
         }
     }
 
-    public void getDomainMap(Map<String, Set<String>> domainMap) {
+    public void getAllDomains(Set<String> allDomains) {
         readLock();
         try {
-            propertyMgr.getDomainMap(domainMap);
+            propertyMgr.getAllDomains(allDomains);
         } finally {
             readUnlock();
         }
diff --git a/fe/src/main/java/org/apache/doris/mysql/privilege/UserPropertyMgr.java b/fe/src/main/java/org/apache/doris/mysql/privilege/UserPropertyMgr.java
index ec27f64..b36b217 100644
--- a/fe/src/main/java/org/apache/doris/mysql/privilege/UserPropertyMgr.java
+++ b/fe/src/main/java/org/apache/doris/mysql/privilege/UserPropertyMgr.java
@@ -28,7 +28,6 @@ import org.apache.doris.thrift.TFetchResourceResult;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -181,22 +180,11 @@ public class UserPropertyMgr implements Writable {
     }
 
     // return a map from domain name -> set of user names
-    public void getDomainMap(Map<String, Set<String>> domainMap) {
+    public void getAllDomains(Set<String> allDomains) {
         LOG.debug("get property map: {}", propertyMap);
         for (Map.Entry<String, UserProperty> entry : propertyMap.entrySet()) {
             Set<String> domains = entry.getValue().getWhiteList().getAllDomains();
-            if (domains.isEmpty()) {
-                continue;
-            }
-
-            for (String domain : domains) {
-                Set<String> usernames = domainMap.get(domain);
-                if (usernames == null) {
-                    usernames = Sets.newHashSet();
-                    domainMap.put(domain, usernames);
-                }
-                usernames.add(entry.getKey());
-            }
+            allDomains.addAll(domains);
         }
     }
 
diff --git a/fe/src/main/java/org/apache/doris/mysql/privilege/WhiteList.java b/fe/src/main/java/org/apache/doris/mysql/privilege/WhiteList.java
index eb2ca80..ceeb543 100644
--- a/fe/src/main/java/org/apache/doris/mysql/privilege/WhiteList.java
+++ b/fe/src/main/java/org/apache/doris/mysql/privilege/WhiteList.java
@@ -68,11 +68,16 @@ public class WhiteList implements Writable {
     // it will only modify password entry of these resolved IPs. All other privileges are binded
     // to the domain, so no need to modify.
     public void addUserPrivEntriesByResovledIPs(String user, Map<String, Set<String>> resolvedIPsMap) {
+        // the parameter "resolvedIPsMap" contains all resolved domains.
+        // "newResolvedIPsMap" will only save the domains contained in this white list.
+        Map<String, Set<String>> newResolvedIPsMap = Maps.newHashMap();
         for (Map.Entry<String, Set<String>> entry : resolvedIPsMap.entrySet()) {
             if (!containsDomain(entry.getKey())) {
                 continue;
             }
 
+            newResolvedIPsMap.put(entry.getKey(), entry.getValue());
+
             // this user ident will be saved along with each resolved "IP" user ident, so that when checking
             // password, this "domain" user ident will be returned as "current user".
             UserIdentity domainUserIdent = UserIdentity.createAnalyzedUserIdentWithDomain(user, entry.getKey());
@@ -93,7 +98,7 @@ public class WhiteList implements Writable {
         }
 
         // set new resolved IPs
-        this.resolvedIPsMap = resolvedIPsMap;
+        this.resolvedIPsMap = newResolvedIPsMap;
     }
 
     public Map<String, Set<String>> getResolvedIPs() {
diff --git a/fe/src/main/java/org/apache/doris/qe/QueryState.java b/fe/src/main/java/org/apache/doris/qe/QueryState.java
index bc6e424..09fe321 100644
--- a/fe/src/main/java/org/apache/doris/qe/QueryState.java
+++ b/fe/src/main/java/org/apache/doris/qe/QueryState.java
@@ -56,6 +56,7 @@ public class QueryState {
         errorCode = null;
         infoMessage = null;
         serverStatus = 0;
+        isQuery = false;
     }
 
     public MysqlStateType getStateType() {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org