You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by li...@apache.org on 2020/01/17 08:55:09 UTC

[incubator-dolphinscheduler] branch dev updated: Fix bug: NullPointerException etc. (#1721)

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

lidongdai pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new c522ea7  Fix bug: NullPointerException etc. (#1721)
c522ea7 is described below

commit c522ea7ebbe78df9233103b2126bf869546c73be
Author: Jave-Chen <ac...@126.com>
AuthorDate: Fri Jan 17 16:55:01 2020 +0800

    Fix bug: NullPointerException etc. (#1721)
    
    * #1720 Fix bug: NullPointerException etc.
    
    * fix code smell
    
    * Update DateInterval.java
    
    refactor equals method
    
    Co-authored-by: dailidong <da...@gmail.com>
---
 .../apache/dolphinscheduler/alert/runner/AlertSender.java  |  5 +++++
 .../dolphinscheduler/api/service/ExecutorService.java      |  8 +++++---
 .../apache/dolphinscheduler/common/model/DateInterval.java | 13 ++++++-------
 .../apache/dolphinscheduler/common/utils/HadoopUtils.java  | 14 +++++++++-----
 .../org/apache/dolphinscheduler/dao/utils/DagHelper.java   |  9 +++++++--
 5 files changed, 32 insertions(+), 17 deletions(-)

diff --git a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/runner/AlertSender.java b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/runner/AlertSender.java
index d54c232..5feb36b 100644
--- a/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/runner/AlertSender.java
+++ b/dolphinscheduler-alert/src/main/java/org/apache/dolphinscheduler/alert/runner/AlertSender.java
@@ -101,6 +101,11 @@ public class AlertSender{
             }else if (alert.getAlertType() == AlertType.SMS){
                 retMaps = emailManager.send(getReciversForSMS(users), alert.getTitle(), alert.getContent(),alert.getShowType());
                 alert.setInfo(retMaps);
+            } else {
+                logger.error("AlertType is not defined. code: {}, descp: {}", 
+                    alert.getAlertType().getCode(), 
+                    alert.getAlertType().getDescp());
+                return;
             }
 
             //send flag
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
index c1689c5..8fa4c01 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
@@ -499,6 +499,10 @@ public class ExecutorService extends BaseService{
             }
         }
 
+        if ( start == null || end == null) {
+            return 0;
+        }
+
         if(commandType == CommandType.COMPLEMENT_DATA){
             runMode = (runMode == null) ? RunMode.RUN_MODE_SERIAL : runMode;
             if(null != start && null != end && start.before(end)){
@@ -546,9 +550,7 @@ public class ExecutorService extends BaseService{
         }else{
             command.setCommandParam(JSONUtils.toJson(cmdParam));
             return processDao.createCommand(command);
-        }
-
-        return 0;
+        }  
     }
 
     /**
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
index 3519d5c..9dc2f34 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/model/DateInterval.java
@@ -35,13 +35,12 @@ public class DateInterval {
 
     @Override
     public boolean equals(Object obj) {
-        try{
-            DateInterval dateInterval = (DateInterval) obj;
-            return startTime.equals(dateInterval.getStartTime()) &&
-                    endTime.equals(dateInterval.getEndTime());
-        }catch (Exception e){
-            return false;
-        }
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        DateInterval that = (DateInterval) o;
+        return startTime.equals(that.startTime) &&
+                endTime.equals(that.endTime);
+        
     }
 
     public Date getStartTime() {
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java
index afc3c44..541281f 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HadoopUtils.java
@@ -119,7 +119,9 @@ public class HadoopUtils implements Closeable {
                                     fsRelatedProps.forEach((key, value) -> configuration.set(key, value));
                                 }else{
                                     logger.error("property:{} can not to be empty, please set!", Constants.FS_DEFAULTFS );
-                                    throw new RuntimeException("property:{} can not to be empty, please set!");
+                                    throw new RuntimeException(
+                                        String.format("property: %s can not to be empty, please set!", Constants.FS_DEFAULTFS)
+                                        );
                                 }
                             }else{
                                 logger.info("get property:{} -> {}, from core-site.xml hdfs-site.xml ", Constants.FS_DEFAULTFS, defaultFS);
@@ -219,10 +221,12 @@ public class HadoopUtils implements Closeable {
             return null;
         }
 
-        FSDataInputStream in = fs.open(new Path(hdfsFilePath));
-        BufferedReader br = new BufferedReader(new InputStreamReader(in));
-        Stream<String> stream = br.lines().skip(skipLineNums).limit(limit);
-        return stream.collect(Collectors.toList());
+        try (FSDataInputStream in = fs.open(new Path(hdfsFilePath))){
+            BufferedReader br = new BufferedReader(new InputStreamReader(in));
+            Stream<String> stream = br.lines().skip(skipLineNums).limit(limit);
+            return stream.collect(Collectors.toList());
+        }
+        
     }
 
     /**
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/DagHelper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/DagHelper.java
index 26d0f1e..ac38ddd 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/DagHelper.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/DagHelper.java
@@ -96,7 +96,13 @@ public class DagHelper {
             for (String startNodeName : startNodeList) {
                 TaskNode startNode = findNodeByName(taskNodeList, startNodeName);
                 List<TaskNode> childNodeList = new ArrayList<>();
-                if (TaskDependType.TASK_POST == taskDependType) {
+                if (startNode == null) {
+                    logger.error("start node name [{}] is not in task node list [{}] ",
+                        startNodeName,
+                        taskNodeList
+                    );
+                    continue;
+                } else if (TaskDependType.TASK_POST == taskDependType) {
                     childNodeList = getFlowNodeListPost(startNode, taskNodeList);
                 } else if (TaskDependType.TASK_PRE == taskDependType) {
                     childNodeList = getFlowNodeListPre(startNode, recoveryNodeNameList, taskNodeList);
@@ -129,7 +135,6 @@ public class DagHelper {
             if (null != depList && null != startNode && depList.contains(startNode.getName())) {
                 resultList.addAll(getFlowNodeListPost(taskNode, taskNodeList));
             }
-
         }
         resultList.add(startNode);
         return resultList;