From 8fa8cb559aec0fb1228a9e622db99a665060dae7 Mon Sep 17 00:00:00 2001 From: break60 <790061044@qq.com> Date: Wed, 18 Dec 2019 23:03:49 +0800 Subject: [PATCH 1/4] Solve jertty packing garbled (#1518) * Password verification and v-for add key * DAG automatic layout * combo.js replacement * combo.js replacement * webpack upgrade to 4 * packjson has a file name that has not changed * Solve jertty packing garbled --- dolphinscheduler-ui/src/view/home/index.html | 1 + dolphinscheduler-ui/src/view/login/index.html | 1 + 2 files changed, 2 insertions(+) diff --git a/dolphinscheduler-ui/src/view/home/index.html b/dolphinscheduler-ui/src/view/home/index.html index ff7ee7b66a..a89ab8b01c 100644 --- a/dolphinscheduler-ui/src/view/home/index.html +++ b/dolphinscheduler-ui/src/view/home/index.html @@ -19,6 +19,7 @@ + diff --git a/dolphinscheduler-ui/src/view/login/index.html b/dolphinscheduler-ui/src/view/login/index.html index 595492b7e3..30eb792335 100644 --- a/dolphinscheduler-ui/src/view/login/index.html +++ b/dolphinscheduler-ui/src/view/login/index.html @@ -19,6 +19,7 @@ + From 66217be9903e757fb2375b67d741cbec13656b40 Mon Sep 17 00:00:00 2001 From: Yelli <51317527+Yeleights@users.noreply.github.com> Date: Thu, 19 Dec 2019 11:29:52 +0800 Subject: [PATCH 2/4] Modify Queue already add to User not change bug -- fix #1514 (#1517) * add Spark Version in Spark Component add Spark Version in Spark Component * add license for SparkVersion.class add license * 1 add spark task UT 2 add spark version param check * add assert check for sparkTaskTest * fix bug:user queue field does not change with queue table modify * modify check queue in using method name and updateUserByQueue method param name modify check queue in using method name and updateUserByQueue method param name --- .../api/service/QueueService.java | 58 ++++++++++++++----- .../dao/mapper/UserMapper.java | 14 +++++ .../dao/mapper/UserMapper.xml | 10 ++++ 3 files changed, 66 insertions(+), 16 deletions(-) diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/QueueService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/QueueService.java index 5ac3ace25c..f860517d0f 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/QueueService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/QueueService.java @@ -26,6 +26,7 @@ import org.apache.dolphinscheduler.dao.mapper.QueueMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.lang.StringUtils; +import org.apache.dolphinscheduler.dao.mapper.UserMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -47,6 +48,9 @@ public class QueueService extends BaseService { @Autowired private QueueMapper queueMapper; + @Autowired + private UserMapper userMapper; + /** * query queue list * @@ -70,9 +74,9 @@ public class QueueService extends BaseService { * query queue list paging * * @param loginUser login user - * @param pageNo page number + * @param pageNo page number * @param searchVal search value - * @param pageSize page size + * @param pageSize page size * @return queue list */ public Map queryList(User loginUser, String searchVal, Integer pageNo, Integer pageSize) { @@ -86,7 +90,7 @@ public class QueueService extends BaseService { IPage queueList = queueMapper.queryQueuePaging(page, searchVal); - Integer count = (int)queueList.getTotal(); + Integer count = (int) queueList.getTotal(); PageInfo pageInfo = new PageInfo<>(pageNo, pageSize); pageInfo.setTotalCount(count); pageInfo.setLists(queueList.getRecords()); @@ -100,7 +104,7 @@ public class QueueService extends BaseService { * create queue * * @param loginUser login user - * @param queue queue + * @param queue queue * @param queueName queue name * @return create result */ @@ -110,12 +114,12 @@ public class QueueService extends BaseService { return result; } - if(StringUtils.isEmpty(queue)){ + if (StringUtils.isEmpty(queue)) { putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, queue); return result; } - if(StringUtils.isEmpty(queueName)){ + if (StringUtils.isEmpty(queueName)) { putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, queueName); return result; } @@ -148,8 +152,8 @@ public class QueueService extends BaseService { * update queue * * @param loginUser login user - * @param queue queue - * @param id queue id + * @param queue queue + * @param id queue id * @param queueName queue name * @return update result code */ @@ -173,7 +177,7 @@ public class QueueService extends BaseService { // check queue name is exist if (!queueName.equals(queueObj.getQueueName())) { - if(checkQueueNameExist(queueName)){ + if (checkQueueNameExist(queueName)) { putMsg(result, Status.QUEUE_NAME_EXIST, queueName); return result; } @@ -181,12 +185,19 @@ public class QueueService extends BaseService { // check queue value is exist if (!queue.equals(queueObj.getQueue())) { - if(checkQueueExist(queue)){ + if (checkQueueExist(queue)) { putMsg(result, Status.QUEUE_VALUE_EXIST, queue); return result; } } + // check old queue using by any user + if (checkIfQueueIsInUsing(queueObj.getQueueName(), queueName)) { + //update user related old queue + Integer relatedUserNums = userMapper.updateUserQueue(queueObj.getQueueName(), queueName); + logger.info("old queue have related {} user, exec update user success.", relatedUserNums); + } + // update queue Date now = new Date(); queueObj.setQueue(queue); @@ -194,6 +205,7 @@ public class QueueService extends BaseService { queueObj.setUpdateTime(now); queueMapper.updateById(queueObj); + putMsg(result, Status.SUCCESS); return result; @@ -202,12 +214,12 @@ public class QueueService extends BaseService { /** * verify queue and queueName * - * @param queue queue + * @param queue queue * @param queueName queue name * @return true if the queue name not exists, otherwise return false */ public Result verifyQueue(String queue, String queueName) { - Result result=new Result(); + Result result = new Result(); if (StringUtils.isEmpty(queue)) { putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, queue); @@ -220,13 +232,13 @@ public class QueueService extends BaseService { } - if(checkQueueNameExist(queueName)){ + if (checkQueueNameExist(queueName)) { logger.error("queue name {} has exist, can't create again.", queueName); putMsg(result, Status.QUEUE_NAME_EXIST, queueName); return result; } - if(checkQueueExist(queue)){ + if (checkQueueExist(queue)) { logger.error("queue value {} has exist, can't create again.", queue); putMsg(result, Status.QUEUE_VALUE_EXIST, queue); return result; @@ -240,21 +252,35 @@ public class QueueService extends BaseService { * check queue exist * if exists return true,not exists return false * check queue exist + * * @param queue queue * @return true if the queue not exists, otherwise return false */ private boolean checkQueueExist(String queue) { - return queueMapper.queryAllQueueList(queue, null).size()>0 ? true : false; + return queueMapper.queryAllQueueList(queue, null).size() > 0; } /** * check queue name exist * if exists return true,not exists return false + * * @param queueName queue name * @return true if the queue name not exists, otherwise return false */ private boolean checkQueueNameExist(String queueName) { - return queueMapper.queryAllQueueList(null ,queueName).size() > 0 ? true : false; + return queueMapper.queryAllQueueList(null, queueName).size() > 0; + } + + /** + * check old queue name using by any user + * if need to update user + * + * @param oldQueue old queue name + * @param newQueue new queue name + * @return true if need to update user + */ + private boolean checkIfQueueIsInUsing (String oldQueue, String newQueue) { + return !oldQueue.equals(newQueue) && userMapper.queryUserListByQueue(oldQueue).size() > 0; } } diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UserMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UserMapper.java index 2c194b4afa..1468f10b90 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UserMapper.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UserMapper.java @@ -95,4 +95,18 @@ public interface UserMapper extends BaseMapper { */ User queryUserByToken(@Param("token") String token); + /** + * query user by queue name + * @param queueName queue name + * @return user list + */ + List queryUserListByQueue(@Param("queueName") String queueName); + + /** + * update user with old queue + * @param oldQueue old queue name + * @param newQueue new queue name + * @return update rows + */ + Integer updateUserQueue(@Param("oldQueue") String oldQueue, @Param("newQueue") String newQueue); } diff --git a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml index 6046ad22eb..fcf8a137e6 100644 --- a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml +++ b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml @@ -69,4 +69,14 @@ from t_ds_user u ,t_ds_access_token t where u.id = t.user_id and token=#{token} and t.expire_time > NOW() + + + update t_ds_user + set queue = #{newQueue} + where queue = #{oldQueue} + \ No newline at end of file From 67cde18cc314004f8f9fdba6a271850d1be84ca6 Mon Sep 17 00:00:00 2001 From: Tboy Date: Thu, 19 Dec 2019 11:31:51 +0800 Subject: [PATCH 3/4] fix #1515 (#1516) --- .../dolphinscheduler/server/worker/runner/FetchTaskThread.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/FetchTaskThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/FetchTaskThread.java index ae4ee792c5..68f27d76d8 100644 --- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/FetchTaskThread.java +++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/FetchTaskThread.java @@ -147,9 +147,8 @@ public class FetchTaskThread implements Runnable{ //check memory and cpu usage and threads boolean runCheckFlag = OSUtils.checkResource(workerConfig.getWorkerMaxCpuloadAvg(), workerConfig.getWorkerReservedMemory()) && checkThreadCount(poolExecutor); - Thread.sleep(Constants.SLEEP_TIME_MILLIS); - if(!runCheckFlag) { + Thread.sleep(Constants.SLEEP_TIME_MILLIS); continue; } From 0567b5829c9ce13d64a13480403ccf6d46cc783a Mon Sep 17 00:00:00 2001 From: zhukai Date: Thu, 19 Dec 2019 11:33:08 +0800 Subject: [PATCH 4/4] Add the UTs of FuncUtils and JSONUtilsTest. (#1507) 1.Add FuncUtilsTest.java and JSONUtilsTest.java 2.Add null check in FuncUtils.mkString 3.Add pom config --- .../alert/utils/FuncUtils.java | 7 ++ .../alert/utils/FuncUtilsTest.java | 60 ++++++++++ .../alert/utils/JSONUtilsTest.java | 112 ++++++++++++++++++ pom.xml | 7 +- 4 files changed, 183 insertions(+), 3 deletions(-) create mode 100644 dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/FuncUtilsTest.java create mode 100644 dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/JSONUtilsTest.java diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/FuncUtils.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/FuncUtils.java index e682fde2e7..186a983e05 100644 --- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/FuncUtils.java +++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/utils/FuncUtils.java @@ -16,9 +16,16 @@ */ package org.apache.dolphinscheduler.alert.utils; +import org.apache.commons.lang.StringUtils; + public class FuncUtils { static public String mkString(Iterable list, String split) { + + if (null == list || StringUtils.isEmpty(split)){ + return null; + } + StringBuilder sb = new StringBuilder(); boolean first = true; for (String item : list) { diff --git a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/FuncUtilsTest.java b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/FuncUtilsTest.java new file mode 100644 index 0000000000..e2b25d961d --- /dev/null +++ b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/FuncUtilsTest.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.alert.utils; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +public class FuncUtilsTest { + + private static final Logger logger = LoggerFactory.getLogger(FuncUtilsTest.class); + + /** + * Test mkString + */ + @Test + public void testMKString() { + + //Define users list + Iterable users = Arrays.asList("user1", "user2", "user3"); + //Define split + String split = "|"; + + //Invoke mkString with correctParams + String result = FuncUtils.mkString(users, split); + logger.info(result); + + //Expected result string + assertEquals(result, "user1|user2|user3"); + + //Null list expected return null + result = FuncUtils.mkString(null, split); + assertNull(result); + + //Null split expected return null + result = FuncUtils.mkString(users, null); + assertNull(result); + + } +} \ No newline at end of file diff --git a/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/JSONUtilsTest.java b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/JSONUtilsTest.java new file mode 100644 index 0000000000..cb63a22d79 --- /dev/null +++ b/dolphinscheduler-alert/src/test/java/org/apache/dolphinscheduler/alert/utils/JSONUtilsTest.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.alert.utils; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +public class JSONUtilsTest { + + private static final Logger logger = LoggerFactory.getLogger(JSONUtilsTest.class); + + public List> list = new ArrayList<>(); + + public String expected = null; + + @Before + public void setUp() throws Exception { + + //Define expected json string + expected = "[{\"mysql service name\":\"mysql200\",\"mysql address\":\"192.168.xx.xx\",\"port\":\"3306\",\"no index of number\":\"80\",\"database client connections\":\"190\"}]"; + + //Initial map + LinkedHashMap map = new LinkedHashMap<>(); + map.put("mysql service name","mysql200"); + map.put("mysql address","192.168.xx.xx"); + map.put("port","3306"); + map.put("no index of number","80"); + map.put("database client connections","190"); + + //Add map into list + list.add(map); + } + + + /** + * Test toJsonString + */ + @Test + public void testToJsonString() { + + //Invoke toJsonString + String result = JSONUtils.toJsonString(list); + logger.info(result); + + //Equal result with expected string + assertEquals(result,expected); + + //If param is null, then return null string + result = JSONUtils.toJsonString(null); + logger.info(result); + + assertEquals(result,"null"); + + } + + /** + * Test toList + */ + @Test + public void testToList() { + + //Invoke toList + List result = JSONUtils.toList(expected ,LinkedHashMap.class); + //Equal list size=1 + assertEquals(result.size(),1); + + //Transform entity to LinkedHashMap + LinkedHashMap entity = result.get(0); + + //Equal expected values + assertEquals(entity.get("mysql service name"),"mysql200"); + assertEquals(entity.get("mysql address"),"192.168.xx.xx"); + assertEquals(entity.get("port"),"3306"); + assertEquals(entity.get("no index of number"),"80"); + assertEquals(entity.get("database client connections"),"190"); + + //If param is null, then return null + result = JSONUtils.toList(null ,LinkedHashMap.class); + assertNull(result); + + //If param is incorrect, then return null and log error message + result = JSONUtils.toList("}{" ,LinkedHashMap.class); + assertNull(result); + + } + +} diff --git a/pom.xml b/pom.xml index a56fe6e892..4b10ba9c42 100644 --- a/pom.xml +++ b/pom.xml @@ -613,14 +613,15 @@ **/common/utils/*.java - **/api/utils/CheckUtilsTest.java - **/api/utils/FileUtilsTest.java **/common/graph/*.java **/common/queue/*.java **/api/utils/CheckUtilsTest.java **/api/utils/FileUtilsTest.java - **/alert/utils/ExcelUtilsTest.java + + **/alert/utils/ExcelUtilsTest.java + **/alert/utils/FuncUtilsTest.java + **/alert/utils/JSONUtilsTest.java