You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by GitBox <gi...@apache.org> on 2022/05/26 08:00:08 UTC

[GitHub] [incubator-doris] stalary commented on a diff in pull request #9786: There is Policy which is not on TABLE, Policy should be a base class, and use TablePolicy to extends it.

stalary commented on code in PR #9786:
URL: https://github.com/apache/incubator-doris/pull/9786#discussion_r882408928


##########
fe/fe-core/src/main/java/org/apache/doris/policy/Policy.java:
##########
@@ -17,106 +17,97 @@
 
 package org.apache.doris.policy;
 
-import org.apache.doris.analysis.CreatePolicyStmt;
-import org.apache.doris.analysis.Expr;
-import org.apache.doris.analysis.SqlParser;
-import org.apache.doris.analysis.SqlScanner;
+import org.apache.doris.analysis.CreateTablePolicyStmt;
 import org.apache.doris.analysis.UserIdentity;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.Table;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.io.Writable;
-import org.apache.doris.common.util.SqlParserUtils;
 import org.apache.doris.persist.gson.GsonPostProcessable;
 import org.apache.doris.persist.gson.GsonUtils;
 import org.apache.doris.qe.ConnectContext;
 
-import com.google.common.collect.Lists;
 import com.google.gson.annotations.SerializedName;
-import lombok.AllArgsConstructor;
-import lombok.Data;
+
+import org.apache.commons.lang.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
-import java.io.StringReader;
 import java.util.List;
 
+import lombok.Data;
+
 /**
  * Save policy for filtering data.
  **/
 @Data
-@AllArgsConstructor
-public class Policy implements Writable, GsonPostProcessable {
-
-    public static final String ROW_POLICY = "ROW";
+public abstract class Policy implements Writable, GsonPostProcessable {
 
     private static final Logger LOG = LogManager.getLogger(Policy.class);
 
-    @SerializedName(value = "dbId")
-    private long dbId;
-
-    @SerializedName(value = "tableId")
-    private long tableId;
-
-    @SerializedName(value = "policyName")
-    private String policyName;
-
-    /**
-     * ROW.
-     **/
     @SerializedName(value = "type")
-    private PolicyTypeEnum type;
+    protected PolicyTypeEnum type;
 
-    /**
-     * PERMISSIVE | RESTRICTIVE, If multiple types exist, the last type prevails.
-     **/
-    @SerializedName(value = "filterType")
-    private final FilterType filterType;
+    @SerializedName(value = "policyName")
+    protected String policyName;
 
-    private Expr wherePredicate;
+    @SerializedName(value = "dbId")
+    protected long dbId;

Review Comment:
   Is it possible that stroage is not for DB, but for be nodes?



##########
fe/fe-core/src/main/java/org/apache/doris/policy/Policy.java:
##########
@@ -17,106 +17,97 @@
 
 package org.apache.doris.policy;
 
-import org.apache.doris.analysis.CreatePolicyStmt;
-import org.apache.doris.analysis.Expr;
-import org.apache.doris.analysis.SqlParser;
-import org.apache.doris.analysis.SqlScanner;
+import org.apache.doris.analysis.CreateTablePolicyStmt;
 import org.apache.doris.analysis.UserIdentity;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.Table;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.io.Writable;
-import org.apache.doris.common.util.SqlParserUtils;
 import org.apache.doris.persist.gson.GsonPostProcessable;
 import org.apache.doris.persist.gson.GsonUtils;
 import org.apache.doris.qe.ConnectContext;
 
-import com.google.common.collect.Lists;
 import com.google.gson.annotations.SerializedName;
-import lombok.AllArgsConstructor;
-import lombok.Data;
+
+import org.apache.commons.lang.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
-import java.io.StringReader;
 import java.util.List;
 
+import lombok.Data;
+
 /**
  * Save policy for filtering data.
  **/
 @Data
-@AllArgsConstructor
-public class Policy implements Writable, GsonPostProcessable {
-
-    public static final String ROW_POLICY = "ROW";
+public abstract class Policy implements Writable, GsonPostProcessable {
 
     private static final Logger LOG = LogManager.getLogger(Policy.class);
 
-    @SerializedName(value = "dbId")
-    private long dbId;
-
-    @SerializedName(value = "tableId")
-    private long tableId;
-
-    @SerializedName(value = "policyName")
-    private String policyName;
-
-    /**
-     * ROW.
-     **/
     @SerializedName(value = "type")
-    private PolicyTypeEnum type;
+    protected PolicyTypeEnum type;
 
-    /**
-     * PERMISSIVE | RESTRICTIVE, If multiple types exist, the last type prevails.
-     **/
-    @SerializedName(value = "filterType")
-    private final FilterType filterType;
+    @SerializedName(value = "policyName")
+    protected String policyName;
 
-    private Expr wherePredicate;
+    @SerializedName(value = "dbId")
+    protected long dbId;
 
     /**
      * Policy bind user.
      **/
     @SerializedName(value = "user")
-    private final UserIdentity user;
+    protected final UserIdentity user;
 
     /**
      * Use for Serialization/deserialization.
      **/
     @SerializedName(value = "originStmt")
-    private String originStmt;
+    protected String originStmt;
+
+    public Policy() {
+        user = null;

Review Comment:
   Maybe we can not use final for user?



##########
fe/fe-core/src/main/java/org/apache/doris/policy/Policy.java:
##########
@@ -17,106 +17,97 @@
 
 package org.apache.doris.policy;
 
-import org.apache.doris.analysis.CreatePolicyStmt;
-import org.apache.doris.analysis.Expr;
-import org.apache.doris.analysis.SqlParser;
-import org.apache.doris.analysis.SqlScanner;
+import org.apache.doris.analysis.CreateTablePolicyStmt;
 import org.apache.doris.analysis.UserIdentity;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.Table;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.io.Writable;
-import org.apache.doris.common.util.SqlParserUtils;
 import org.apache.doris.persist.gson.GsonPostProcessable;
 import org.apache.doris.persist.gson.GsonUtils;
 import org.apache.doris.qe.ConnectContext;
 
-import com.google.common.collect.Lists;
 import com.google.gson.annotations.SerializedName;
-import lombok.AllArgsConstructor;
-import lombok.Data;
+
+import org.apache.commons.lang.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
-import java.io.StringReader;
 import java.util.List;
 
+import lombok.Data;
+
 /**
  * Save policy for filtering data.
  **/
 @Data
-@AllArgsConstructor
-public class Policy implements Writable, GsonPostProcessable {
-
-    public static final String ROW_POLICY = "ROW";
+public abstract class Policy implements Writable, GsonPostProcessable {
 
     private static final Logger LOG = LogManager.getLogger(Policy.class);
 
-    @SerializedName(value = "dbId")
-    private long dbId;
-
-    @SerializedName(value = "tableId")
-    private long tableId;
-
-    @SerializedName(value = "policyName")
-    private String policyName;
-
-    /**
-     * ROW.
-     **/
     @SerializedName(value = "type")
-    private PolicyTypeEnum type;
+    protected PolicyTypeEnum type;
 
-    /**
-     * PERMISSIVE | RESTRICTIVE, If multiple types exist, the last type prevails.
-     **/
-    @SerializedName(value = "filterType")
-    private final FilterType filterType;
+    @SerializedName(value = "policyName")
+    protected String policyName;
 
-    private Expr wherePredicate;
+    @SerializedName(value = "dbId")
+    protected long dbId;
 
     /**
      * Policy bind user.
      **/
     @SerializedName(value = "user")
-    private final UserIdentity user;
+    protected final UserIdentity user;
 
     /**
      * Use for Serialization/deserialization.
      **/
     @SerializedName(value = "originStmt")
-    private String originStmt;
+    protected String originStmt;
+
+    public Policy() {
+        user = null;
+    }
 
+    public Policy(final PolicyTypeEnum type, final String policyName, long dbId,
+                  UserIdentity user, String originStmt) {
+        this.type = type;
+        this.policyName = policyName;
+        this.dbId = dbId;
+        this.user = user;
+        this.originStmt = originStmt;
+    }
     /**
      * Trans stmt to Policy.
      **/
-    public static Policy fromCreateStmt(CreatePolicyStmt stmt) throws AnalysisException {
+    public static Policy fromCreateStmt(CreateTablePolicyStmt stmt) throws AnalysisException {

Review Comment:
   Is it better to use CreateTablePolicyStmt in TablePolicy?



##########
fe/fe-core/src/main/java/org/apache/doris/policy/PolicyMgr.java:
##########
@@ -68,7 +68,7 @@ public class PolicyMgr implements Writable {
      * Cache merge policy for match.
      * key:dbId:tableId-type-user
      **/
-    private Map<Long, Map<String, Policy>> dbIdToMergePolicyMap = Maps.newConcurrentMap();
+    private Map<Long, Map<String, TablePolicy>> dbIdToMergePolicyMap = Maps.newConcurrentMap();

Review Comment:
   ```suggestion
       private Map<Long, Map<String, TablePolicy>> dbIdToMergeTablePolicyMap = Maps.newConcurrentMap();
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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