From a17fbe2b4cc009564c71111bf63adcb82ef54335 Mon Sep 17 00:00:00 2001 From: huangzhaowei Date: Mon, 6 Feb 2023 12:03:29 +0800 Subject: [PATCH] [fix](MTMV) Use current db to identify the MTMV tasks and jobs (#16419) Show MTMV JOB/Task will list all the jobs and tasks among different databases in spite of the current database. Now use current db to identify the mtmv tasks and jobs. Only the user who did not use a database can list all job and tasks among different databases. --- .../doris/analysis/ShowMTMVJobStmt.java | 33 +++++++++++-------- .../doris/analysis/ShowMTMVTaskStmt.java | 29 +++++++++------- .../org/apache/doris/mtmv/MTMVJobManager.java | 3 +- .../apache/doris/mtmv/MTMVTaskManager.java | 3 +- .../doris/mtmv/ShowMTMVJobStmtTest.java | 30 +++++++++++++---- .../doris/mtmv/ShowMTMVTaskStmtTest.java | 29 ++++++++++++---- 6 files changed, 85 insertions(+), 42 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowMTMVJobStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowMTMVJobStmt.java index d0e934c62c..cdba6ad9ac 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowMTMVJobStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowMTMVJobStmt.java @@ -29,9 +29,11 @@ import com.google.common.base.Strings; public class ShowMTMVJobStmt extends ShowStmt { private final String jobName; // optional - private String dbName; // optional + private final String dbName; // optional private final TableName mvName; // optional + private String analyzedDbName; + public ShowMTMVJobStmt() { this.jobName = null; this.dbName = null; @@ -51,11 +53,11 @@ public class ShowMTMVJobStmt extends ShowStmt { } public boolean isShowAllJobs() { - return dbName == null && mvName == null && jobName == null; + return analyzedDbName == null && mvName == null && jobName == null; } public boolean isShowAllJobsFromDb() { - return dbName != null && mvName == null; + return analyzedDbName != null && mvName == null; } public boolean isShowAllJobsOnMv() { @@ -67,13 +69,7 @@ public class ShowMTMVJobStmt extends ShowStmt { } public String getDbName() { - if (dbName != null) { - return dbName; - } else if (mvName != null) { - return mvName.getDb(); - } else { - return null; - } + return analyzedDbName; } public String getMVName() { @@ -90,8 +86,17 @@ public class ShowMTMVJobStmt extends ShowStmt { if (dbName != null && mvName != null && mvName.getDb() != null && !dbName.equals(mvName.getDb())) { throw new UserException("Database name should be same when they both been set."); } - if (!Strings.isNullOrEmpty(dbName)) { - dbName = ClusterNamespace.getFullName(getClusterName(), dbName); + analyzedDbName = dbName; + if (Strings.isNullOrEmpty(analyzedDbName)) { + if (mvName != null) { + analyzedDbName = mvName.getDb(); + } + if (Strings.isNullOrEmpty(analyzedDbName)) { + analyzedDbName = analyzer.getDefaultDb(); + } + } + if (!Strings.isNullOrEmpty(analyzedDbName)) { + analyzedDbName = ClusterNamespace.getFullName(getClusterName(), analyzedDbName); } } @@ -114,11 +119,11 @@ public class ShowMTMVJobStmt extends ShowStmt { StringBuilder sb = new StringBuilder(); sb.append("SHOW MTMV JOB"); - if (jobName != null) { + if (!Strings.isNullOrEmpty(jobName)) { sb.append(" FOR "); sb.append(getJobName()); } - if (dbName != null) { + if (!Strings.isNullOrEmpty(dbName)) { sb.append(" FROM "); sb.append(ClusterNamespace.getNameFromFullName(dbName)); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowMTMVTaskStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowMTMVTaskStmt.java index 12532dc2b3..4af8798348 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowMTMVTaskStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowMTMVTaskStmt.java @@ -28,9 +28,11 @@ import com.google.common.base.Strings; public class ShowMTMVTaskStmt extends ShowStmt { private final String taskId; // optional - private String dbName; // optional + private final String dbName; // optional private final TableName mvName; // optional + private String analyzedDbName; + public ShowMTMVTaskStmt() { this.taskId = null; this.dbName = null; @@ -50,11 +52,11 @@ public class ShowMTMVTaskStmt extends ShowStmt { } public boolean isShowAllTasks() { - return dbName == null && mvName == null && taskId == null; + return analyzedDbName == null && mvName == null && taskId == null; } public boolean isShowAllTasksFromDb() { - return dbName != null && mvName == null; + return analyzedDbName != null && mvName == null; } public boolean isShowAllTasksOnMv() { @@ -66,13 +68,7 @@ public class ShowMTMVTaskStmt extends ShowStmt { } public String getDbName() { - if (dbName != null) { - return dbName; - } else if (mvName != null) { - return mvName.getDb(); - } else { - return null; - } + return analyzedDbName; } public String getMVName() { @@ -89,8 +85,17 @@ public class ShowMTMVTaskStmt extends ShowStmt { if (dbName != null && mvName != null && mvName.getDb() != null && !dbName.equals(mvName.getDb())) { throw new UserException("Database name should be same when they both been set."); } - if (!Strings.isNullOrEmpty(dbName)) { - dbName = ClusterNamespace.getFullName(getClusterName(), dbName); + analyzedDbName = dbName; + if (Strings.isNullOrEmpty(analyzedDbName)) { + if (mvName != null) { + analyzedDbName = mvName.getDb(); + } + if (Strings.isNullOrEmpty(analyzedDbName)) { + analyzedDbName = analyzer.getDefaultDb(); + } + } + if (!Strings.isNullOrEmpty(analyzedDbName)) { + analyzedDbName = ClusterNamespace.getFullName(getClusterName(), analyzedDbName); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVJobManager.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVJobManager.java index 13941c49a7..607541a7f4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVJobManager.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVJobManager.java @@ -33,6 +33,7 @@ import org.apache.doris.mtmv.metadata.MTMVTask; import org.apache.doris.persist.gson.GsonUtils; import com.google.common.base.Preconditions; +import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.logging.log4j.LogManager; @@ -324,7 +325,7 @@ public class MTMVJobManager { public List showJobs(String dbName) { List jobList = Lists.newArrayList(); - if (dbName == null) { + if (Strings.isNullOrEmpty(dbName)) { jobList.addAll(nameToJobMap.values()); } else { jobList.addAll(nameToJobMap.values().stream().filter(u -> u.getDBName().equals(dbName)) diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTaskManager.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTaskManager.java index 79f15ae4fc..44629a7844 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTaskManager.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVTaskManager.java @@ -29,6 +29,7 @@ import org.apache.doris.mtmv.metadata.MTMVJob; import org.apache.doris.mtmv.metadata.MTMVTask; import org.apache.doris.qe.ConnectContext; +import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Queues; @@ -278,7 +279,7 @@ public class MTMVTaskManager { public List showTasks(String dbName) { List taskList = Lists.newArrayList(); - if (dbName == null) { + if (Strings.isNullOrEmpty(dbName)) { for (Queue pTaskQueue : getPendingTaskMap().values()) { taskList.addAll(pTaskQueue.stream().map(MTMVTaskExecutor::getTask).collect(Collectors.toList())); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/mtmv/ShowMTMVJobStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/mtmv/ShowMTMVJobStmtTest.java index 50af285f24..87eb3e1977 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/mtmv/ShowMTMVJobStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/mtmv/ShowMTMVJobStmtTest.java @@ -24,17 +24,18 @@ import org.apache.doris.analysis.TableName; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.UserException; +import com.google.common.base.Strings; import org.junit.Assert; import org.junit.Test; public class ShowMTMVJobStmtTest { @Test public void testNormal() throws UserException, AnalysisException { - final Analyzer analyzer = AccessTestUtil.fetchBlockAnalyzer(); + final Analyzer analyzer = AccessTestUtil.fetchEmptyDbAnalyzer(); ShowMTMVJobStmt stmt = new ShowMTMVJobStmt(); stmt.analyze(analyzer); Assert.assertNull(stmt.getJobName()); - Assert.assertNull(stmt.getDbName()); + Assert.assertTrue(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNull(stmt.getMVName()); Assert.assertEquals(13, stmt.getMetaData().getColumnCount()); Assert.assertEquals("SHOW MTMV JOB", stmt.toSql()); @@ -42,14 +43,14 @@ public class ShowMTMVJobStmtTest { stmt = new ShowMTMVJobStmt("job1"); stmt.analyze(analyzer); Assert.assertNotNull(stmt.getJobName()); - Assert.assertNull(stmt.getDbName()); + Assert.assertTrue(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNull(stmt.getMVName()); Assert.assertEquals("SHOW MTMV JOB FOR job1", stmt.toSql()); stmt = new ShowMTMVJobStmt("db1", null); stmt.analyze(analyzer); Assert.assertNull(stmt.getJobName()); - Assert.assertNotNull(stmt.getDbName()); + Assert.assertFalse(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNull(stmt.getMVName()); Assert.assertEquals("SHOW MTMV JOB FROM db1", stmt.toSql()); @@ -57,7 +58,7 @@ public class ShowMTMVJobStmtTest { stmt = new ShowMTMVJobStmt(null, tableName); stmt.analyze(analyzer); Assert.assertNull(stmt.getJobName()); - Assert.assertNull(stmt.getDbName()); + Assert.assertTrue(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNotNull(stmt.getMVName()); Assert.assertEquals("SHOW MTMV JOB ON `mv1`", stmt.toSql()); @@ -65,7 +66,7 @@ public class ShowMTMVJobStmtTest { stmt = new ShowMTMVJobStmt(null, tableName); stmt.analyze(analyzer); Assert.assertNull(stmt.getJobName()); - Assert.assertNotNull(stmt.getDbName()); + Assert.assertFalse(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNotNull(stmt.getMVName()); Assert.assertEquals("SHOW MTMV JOB ON `db2`.`mv1`", stmt.toSql()); @@ -73,7 +74,7 @@ public class ShowMTMVJobStmtTest { stmt = new ShowMTMVJobStmt("db1", tableName); stmt.analyze(analyzer); Assert.assertNull(stmt.getJobName()); - Assert.assertNotNull(stmt.getDbName()); + Assert.assertFalse(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNotNull(stmt.getMVName()); Assert.assertEquals("SHOW MTMV JOB FROM db1 ON `mv1`", stmt.toSql()); } @@ -86,4 +87,19 @@ public class ShowMTMVJobStmtTest { ShowMTMVJobStmt stmt = new ShowMTMVJobStmt("db1", tableName); stmt.analyze(analyzer); } + + + @Test + public void testDefaultDb() throws UserException { + final Analyzer analyzer = AccessTestUtil.fetchBlockAnalyzer(); + ShowMTMVJobStmt stmt = new ShowMTMVJobStmt(); + stmt.analyze(analyzer); + Assert.assertNull(stmt.getJobName()); + Assert.assertEquals("testCluster:testDb", stmt.getDbName()); + Assert.assertNull(stmt.getMVName()); + Assert.assertEquals(13, stmt.getMetaData().getColumnCount()); + Assert.assertEquals("SHOW MTMV JOB", stmt.toSql()); + Assert.assertFalse(stmt.isShowAllJobs()); + Assert.assertTrue(stmt.isShowAllJobsFromDb()); + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/mtmv/ShowMTMVTaskStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/mtmv/ShowMTMVTaskStmtTest.java index 0d4e93e237..4c0d1f4d91 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/mtmv/ShowMTMVTaskStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/mtmv/ShowMTMVTaskStmtTest.java @@ -24,17 +24,18 @@ import org.apache.doris.analysis.TableName; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.UserException; +import com.google.common.base.Strings; import org.junit.Assert; import org.junit.Test; public class ShowMTMVTaskStmtTest { @Test public void testNormal() throws UserException, AnalysisException { - final Analyzer analyzer = AccessTestUtil.fetchBlockAnalyzer(); + final Analyzer analyzer = AccessTestUtil.fetchEmptyDbAnalyzer(); ShowMTMVTaskStmt stmt = new ShowMTMVTaskStmt(); stmt.analyze(analyzer); Assert.assertNull(stmt.getTaskId()); - Assert.assertNull(stmt.getDbName()); + Assert.assertTrue(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNull(stmt.getMVName()); Assert.assertEquals(14, stmt.getMetaData().getColumnCount()); Assert.assertEquals("SHOW MTMV TASK", stmt.toSql()); @@ -42,14 +43,14 @@ public class ShowMTMVTaskStmtTest { stmt = new ShowMTMVTaskStmt("task1"); stmt.analyze(analyzer); Assert.assertNotNull(stmt.getTaskId()); - Assert.assertNull(stmt.getDbName()); + Assert.assertTrue(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNull(stmt.getMVName()); Assert.assertEquals("SHOW MTMV TASK FOR task1", stmt.toSql()); stmt = new ShowMTMVTaskStmt("db1", null); stmt.analyze(analyzer); Assert.assertNull(stmt.getTaskId()); - Assert.assertNotNull(stmt.getDbName()); + Assert.assertFalse(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNull(stmt.getMVName()); Assert.assertEquals("SHOW MTMV TASK FROM db1", stmt.toSql()); @@ -57,7 +58,7 @@ public class ShowMTMVTaskStmtTest { stmt = new ShowMTMVTaskStmt(null, tableName); stmt.analyze(analyzer); Assert.assertNull(stmt.getTaskId()); - Assert.assertNull(stmt.getDbName()); + Assert.assertTrue(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNotNull(stmt.getMVName()); Assert.assertEquals("SHOW MTMV TASK ON `mv1`", stmt.toSql()); @@ -65,7 +66,7 @@ public class ShowMTMVTaskStmtTest { stmt = new ShowMTMVTaskStmt(null, tableName); stmt.analyze(analyzer); Assert.assertNull(stmt.getTaskId()); - Assert.assertNotNull(stmt.getDbName()); + Assert.assertFalse(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNotNull(stmt.getMVName()); Assert.assertEquals("SHOW MTMV TASK ON `db2`.`mv1`", stmt.toSql()); @@ -73,7 +74,7 @@ public class ShowMTMVTaskStmtTest { stmt = new ShowMTMVTaskStmt("db1", tableName); stmt.analyze(analyzer); Assert.assertNull(stmt.getTaskId()); - Assert.assertNotNull(stmt.getDbName()); + Assert.assertFalse(Strings.isNullOrEmpty(stmt.getDbName())); Assert.assertNotNull(stmt.getMVName()); Assert.assertEquals("SHOW MTMV TASK FROM db1 ON `mv1`", stmt.toSql()); } @@ -86,4 +87,18 @@ public class ShowMTMVTaskStmtTest { ShowMTMVTaskStmt stmt = new ShowMTMVTaskStmt("db1", tableName); stmt.analyze(analyzer); } + + @Test + public void testDefaultDb() throws UserException { + final Analyzer analyzer = AccessTestUtil.fetchBlockAnalyzer(); + ShowMTMVTaskStmt stmt = new ShowMTMVTaskStmt(); + stmt.analyze(analyzer); + Assert.assertNull(stmt.getTaskId()); + Assert.assertEquals("testCluster:testDb", stmt.getDbName()); + Assert.assertNull(stmt.getMVName()); + Assert.assertEquals(14, stmt.getMetaData().getColumnCount()); + Assert.assertEquals("SHOW MTMV TASK", stmt.toSql()); + Assert.assertFalse(stmt.isShowAllTasks()); + Assert.assertTrue(stmt.isShowAllTasksFromDb()); + } }