Browse Source

fix bug:#2735 (#2770)

1. store process id in zk.
2. resolve host and port through zk path.
3. modify ui key.
tlhhup 4 years ago
parent
commit
396b1716e4

+ 1 - 1
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java

@@ -507,7 +507,7 @@ public final class Constants {
     /**
      * heartbeat for zk info length
      */
-    public static final int HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH = 9;
+    public static final int HEARTBEAT_FOR_ZOOKEEPER_INFO_LENGTH = 10;
 
 
     /**

+ 2 - 2
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/ResInfo.java

@@ -18,8 +18,6 @@ package org.apache.dolphinscheduler.common.utils;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.model.Server;
 
-import java.util.Date;
-
 /**
  *  heartbeat for ZK reigster res info
  */
@@ -109,6 +107,8 @@ public class ResInfo {
                 Double.parseDouble(masterArray[2])));
         masterServer.setCreateTime(DateUtils.stringToDate(masterArray[6]));
         masterServer.setLastHeartbeatTime(DateUtils.stringToDate(masterArray[7]));
+        //set process id
+        masterServer.setId(Integer.parseInt(masterArray[9]));
         return masterServer;
     }
 

+ 3 - 1
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/registry/MasterRegistry.java

@@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.server.master.registry;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.state.ConnectionState;
 import org.apache.curator.framework.state.ConnectionStateListener;
+import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.utils.DateUtils;
 import org.apache.dolphinscheduler.common.utils.OSUtils;
 import org.apache.dolphinscheduler.remote.utils.NamedThreadFactory;
@@ -131,6 +132,7 @@ public class MasterRegistry {
      * @return
      */
     private String getLocalAddress(){
-        return OSUtils.getHost() + ":" + masterConfig.getListenPort();
+        return OSUtils.getHost() + Constants.COLON + masterConfig.getListenPort();
     }
+
 }

+ 3 - 1
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/registry/HeartBeatTask.java

@@ -73,7 +73,9 @@ public class HeartBeatTask extends Thread{
             builder.append(reservedMemory).append(Constants.COMMA);
             builder.append(startTime).append(Constants.COMMA);
             builder.append(DateUtils.dateToString(new Date())).append(Constants.COMMA);
-            builder.append(status);
+            builder.append(status).append(COMMA);
+            //save process id
+            builder.append(OSUtils.getProcessID());
             zookeeperRegistryCenter.getZookeeperCachedOperator().update(heartBeatPath, builder.toString());
         } catch (Throwable ex){
             logger.error("error write heartbeat info", ex);

+ 3 - 1
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/registry/WorkerRegistry.java

@@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.server.worker.registry;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.state.ConnectionState;
 import org.apache.curator.framework.state.ConnectionStateListener;
+import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.utils.DateUtils;
 import org.apache.dolphinscheduler.common.utils.OSUtils;
 import org.apache.dolphinscheduler.common.utils.StringUtils;
@@ -148,6 +149,7 @@ public class WorkerRegistry {
      * @return
      */
     private String getLocalAddress(){
-        return OSUtils.getHost() + ":" + workerConfig.getListenPort();
+        return OSUtils.getHost() + Constants.COLON + workerConfig.getListenPort();
     }
+
 }

+ 7 - 4
dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/zk/AbstractZKClient.java

@@ -123,12 +123,15 @@ public abstract class AbstractZKClient extends ZookeeperCachedOperator {
 		String parentPath = getZNodeParentPath(zkNodeType);
 
 		List<Server> masterServers = new ArrayList<>();
-		int i = 0;
 		for (Map.Entry<String, String> entry : masterMap.entrySet()) {
 			Server masterServer = ResInfo.parseHeartbeatForZKInfo(entry.getValue());
-			masterServer.setZkDirectory(parentPath + "/"+ entry.getKey());
-			masterServer.setId(i);
-			i ++;
+			String key = entry.getKey();
+			masterServer.setZkDirectory(parentPath + "/"+ key);
+			//set host and port
+			String[] hostAndPort=key.split(COLON);
+			String[] hosts=hostAndPort[0].split(DIVISION_STRING);
+			masterServer.setHost(hosts[hosts.length-1]);// fetch the last one
+			masterServer.setPort(Integer.parseInt(hostAndPort[1]));
 			masterServers.add(masterServer);
 		}
 		return masterServers;

+ 1 - 1
dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue

@@ -22,7 +22,7 @@
           <div class="row-title">
             <div class="left">
               <span class="sp">IP: {{item.host}}</span>
-              <span class="sp">{{$t('Process Pid')}}: {{item.port}}</span>
+              <span class="sp">{{$t('Process Pid')}}: {{item.id}}</span>
               <span class="sp">{{$t('Zk registration directory')}}: {{item.zkDirectory}}</span>
             </div>
             <div class="right">

+ 1 - 1
dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue

@@ -22,7 +22,7 @@
           <div class="row-title">
             <div class="left">
               <span class="sp">IP: {{item.host}}</span>
-              <span class="sp">{{$t('Process Pid')}}: {{item.port}}</span>
+              <span class="sp">{{$t('Process Pid')}}: {{item.id}}</span>
               <span class="sp">{{$t('Zk registration directory')}}: {{item.zkDirectory}}</span>
             </div>
             <div class="right">

+ 1 - 1
dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js

@@ -168,7 +168,7 @@ export default {
   'Project Name': '项目名称',
   'Please enter name': '请输入名称',
   'Owned Users': '所属用户',
-  'Process Pid': '进程pid',
+  'Process Pid': '进程Pid',
   'Zk registration directory': 'zk注册目录',
   cpuUsage: 'cpuUsage',
   memoryUsage: 'memoryUsage',