You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ya...@apache.org on 2021/07/30 01:24:15 UTC

[incubator-doris] branch master updated: [Bug] Fix show load like match (#6314)

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

yangzhg 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 14db74f  [Bug] Fix show load like match (#6314)
14db74f is described below

commit 14db74fac6ea3bff78b6e7557d621e623ebbee8e
Author: DinoZhang <vi...@gmail.com>
AuthorDate: Fri Jul 30 09:24:06 2021 +0800

    [Bug] Fix show load like match (#6314)
    
    * fix show load like match
    
    * Compatible with historical issues
---
 .../org/apache/doris/analysis/CancelLoadStmt.java  |  3 +++
 .../org/apache/doris/analysis/ShowLoadStmt.java    |  3 +++
 .../src/main/java/org/apache/doris/load/Load.java  | 23 +++++++++++++++-------
 .../org/apache/doris/load/loadv2/LoadManager.java  | 13 ++++++++----
 .../apache/doris/analysis/ShowLoadStmtTest.java    |  6 ++++--
 5 files changed, 35 insertions(+), 13 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CancelLoadStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CancelLoadStmt.java
index 4fda341..545ed9d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CancelLoadStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CancelLoadStmt.java
@@ -115,6 +115,9 @@ public class CancelLoadStmt extends DdlStmt {
                 valid = false;
                 break;
             }
+            if (!isAccurateMatch && !label.contains("%")) {
+                label = "%" + label + "%";
+            }
         } while (false);
 
         if (!valid) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowLoadStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowLoadStmt.java
index 523d10a..610477e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowLoadStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowLoadStmt.java
@@ -219,6 +219,9 @@ public class ShowLoadStmt extends ShowStmt {
                 break CHECK;
             }
 
+            if (!isAccurateMatch && !value.contains("%")) {
+                value = "%" + value + "%";
+            }
             if (hasLabel) {
                 labelValue = value;
             } else if (hasState) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/Load.java b/fe/fe-core/src/main/java/org/apache/doris/load/Load.java
index aefe73e..bc78e44 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/Load.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/Load.java
@@ -65,6 +65,7 @@ import org.apache.doris.catalog.TabletMeta;
 import org.apache.doris.catalog.Type;
 import org.apache.doris.cluster.ClusterNamespace;
 import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.ErrorCode;
@@ -75,6 +76,7 @@ import org.apache.doris.common.LabelAlreadyUsedException;
 import org.apache.doris.common.LoadException;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.Pair;
+import org.apache.doris.common.PatternMatcher;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.util.ListComparator;
 import org.apache.doris.common.util.MetaLockUtils;
@@ -1591,7 +1593,7 @@ public class Load {
         return false;
     }
 
-    public boolean isLabelExist(String dbName, String labelValue, boolean isAccurateMatch) throws DdlException {
+    public boolean isLabelExist(String dbName, String labelValue, boolean isAccurateMatch) throws DdlException, AnalysisException {
         // get load job and check state
         Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
@@ -1609,8 +1611,9 @@ public class Load {
                     loadJobs.addAll(labelToLoadJobs.get(labelValue));
                 }
             } else {
+                PatternMatcher matcher = PatternMatcher.createMysqlPattern(labelValue, CaseSensibility.LABEL.getCaseSensibility());
                 for (Map.Entry<String, List<LoadJob>> entry : labelToLoadJobs.entrySet()) {
-                    if (entry.getKey().contains(labelValue)) {
+                    if (matcher.match(entry.getKey())) {
                         loadJobs.addAll(entry.getValue());
                     }
                 }
@@ -1627,7 +1630,7 @@ public class Load {
         }
     }
 
-    public boolean cancelLoadJob(CancelLoadStmt stmt, boolean isAccurateMatch) throws DdlException {
+    public boolean cancelLoadJob(CancelLoadStmt stmt, boolean isAccurateMatch) throws DdlException, AnalysisException {
         // get params
         String dbName = stmt.getDbName();
         String label = stmt.getLabel();
@@ -1653,9 +1656,10 @@ public class Load {
                     matchLoadJobs.addAll(labelToLoadJobs.get(label));
                 }
             } else {
+                PatternMatcher matcher = PatternMatcher.createMysqlPattern(label, CaseSensibility.LABEL.getCaseSensibility());
                 for (Map.Entry<String, List<LoadJob>> entry : labelToLoadJobs.entrySet()) {
-                    if (entry.getKey().contains(label)) {
-                        matchLoadJobs.addAll(entry.getValue());
+                    if (matcher.match(entry.getKey())) {
+                        loadJobs.addAll(entry.getValue());
                     }
                 }
             }
@@ -1904,7 +1908,7 @@ public class Load {
     }
 
     public LinkedList<List<Comparable>> getLoadJobInfosByDb(long dbId, String dbName, String labelValue,
-                                                            boolean accurateMatch, Set<JobState> states) {
+                                                            boolean accurateMatch, Set<JobState> states) throws AnalysisException {
         LinkedList<List<Comparable>> loadJobInfos = new LinkedList<List<Comparable>>();
         readLock();
         try {
@@ -1915,6 +1919,11 @@ public class Load {
 
             long start = System.currentTimeMillis();
             LOG.debug("begin to get load job info, size: {}", loadJobs.size());
+            PatternMatcher matcher = null;
+            if (labelValue != null && !accurateMatch) {
+                matcher = PatternMatcher.createMysqlPattern(labelValue, CaseSensibility.LABEL.getCaseSensibility());
+            }
+
             for (LoadJob loadJob : loadJobs) {
                 // filter first
                 String label = loadJob.getLabel();
@@ -1926,7 +1935,7 @@ public class Load {
                             continue;
                         }
                     } else {
-                        if (!label.contains(labelValue)) {
+                        if (!matcher.match(label)) {
                             continue;
                         }
                     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
index a223ae4..b8d8cab 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
@@ -23,12 +23,15 @@ import org.apache.doris.catalog.Catalog;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.Table;
 import org.apache.doris.cluster.ClusterNamespace;
+import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.CaseSensibility;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.DataQualityException;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.DuplicatedRequestException;
 import org.apache.doris.common.LabelAlreadyUsedException;
 import org.apache.doris.common.MetaNotFoundException;
+import org.apache.doris.common.PatternMatcher;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.io.Writable;
 import org.apache.doris.common.util.LogBuilder;
@@ -294,7 +297,7 @@ public class LoadManager implements Writable{
         Catalog.getCurrentCatalog().getEditLog().logCreateLoadJob(loadJob);
     }
 
-    public void cancelLoadJob(CancelLoadStmt stmt, boolean isAccurateMatch) throws DdlException {
+    public void cancelLoadJob(CancelLoadStmt stmt, boolean isAccurateMatch) throws DdlException, AnalysisException {
         Database db = Catalog.getCurrentCatalog().getDb(stmt.getDbName());
         if (db == null) {
             throw new DdlException("Db does not exist. name: " + stmt.getDbName());
@@ -316,8 +319,9 @@ public class LoadManager implements Writable{
                     matchLoadJobs.addAll(labelToLoadJobs.get(stmt.getLabel()));
                 }
             } else {
+                PatternMatcher matcher = PatternMatcher.createMysqlPattern(stmt.getLabel(), CaseSensibility.LABEL.getCaseSensibility());
                 for (Map.Entry<String, List<LoadJob>> entry : labelToLoadJobs.entrySet()) {
-                    if (entry.getKey().contains(stmt.getLabel())) {
+                    if (matcher.match(entry.getKey())) {
                         matchLoadJobs.addAll(entry.getValue());
                     }
                 }
@@ -503,7 +507,7 @@ public class LoadManager implements Writable{
      *     The result is unordered.
      */
     public List<List<Comparable>> getLoadJobInfosByDb(long dbId, String labelValue,
-                                                      boolean accurateMatch, Set<String> statesValue) {
+                                                      boolean accurateMatch, Set<String> statesValue) throws AnalysisException {
         LinkedList<List<Comparable>> loadJobInfos = new LinkedList<List<Comparable>>();
         if (!dbIdToLabelToLoadJobs.containsKey(dbId)) {
             return loadJobInfos;
@@ -538,8 +542,9 @@ public class LoadManager implements Writable{
                     loadJobList.addAll(labelToLoadJobs.get(labelValue));
                 } else {
                     // non-accurate match
+                    PatternMatcher matcher = PatternMatcher.createMysqlPattern(labelValue, CaseSensibility.LABEL.getCaseSensibility());
                     for (Map.Entry<String, List<LoadJob>> entry : labelToLoadJobs.entrySet()) {
-                        if (entry.getKey().contains(labelValue)) {
+                        if (matcher.match(entry.getKey())) {
                             loadJobList.addAll(entry.getValue());
                         }
                     }
diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowLoadStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowLoadStmtTest.java
index a456875..b9027f3 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowLoadStmtTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowLoadStmtTest.java
@@ -108,10 +108,12 @@ public class ShowLoadStmtTest {
         stmt.analyze(analyzer);
         Assert.assertEquals("SHOW LOAD FROM `testCluster:testDb` WHERE `label` = \'abc\' LIMIT 10", stmt.toString());
 
+        StringLiteral stringLiteralLike = new StringLiteral("ab%");
         LikePredicate likePredicate = new LikePredicate(org.apache.doris.analysis.LikePredicate.Operator.LIKE,
-                                                        slotRef, stringLiteral);
+                                                        slotRef, stringLiteralLike);
+
         stmt = new ShowLoadStmt(null, likePredicate, null, new LimitElement(10));
         stmt.analyze(analyzer);
-        Assert.assertEquals("SHOW LOAD FROM `testCluster:testDb` WHERE `label` LIKE \'abc\' LIMIT 10", stmt.toString());
+        Assert.assertEquals("SHOW LOAD FROM `testCluster:testDb` WHERE `label` LIKE \'ab%\' LIMIT 10", stmt.toString());
     }
 }

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