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

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 6fba092741 [optimization](show-frontends) Add start time in Show 
frontends (#21844)
6fba092741 is described below

commit 6fba092741fc51b0f663b5686cbc3ca2a7c58a75
Author: herry2038 <5303...@qq.com>
AuthorDate: Mon Jul 17 05:09:43 2023 +0800

    [optimization](show-frontends) Add start time in Show frontends (#21844)
    
    
    
    ---------
    
    Co-authored-by: yuxianbing <iloveqaz123>
---
 .../org/apache/doris/common/proc/FrontendsProcNode.java   |  4 +++-
 .../main/java/org/apache/doris/service/ExecuteEnv.java    |  6 ++++++
 .../org/apache/doris/service/FrontendServiceImpl.java     |  1 +
 .../src/main/java/org/apache/doris/system/Frontend.java   |  6 ++++++
 .../java/org/apache/doris/system/FrontendHbResponse.java  |  9 ++++++++-
 .../main/java/org/apache/doris/system/HeartbeatMgr.java   | 15 ++++++++++++---
 gensrc/thrift/FrontendService.thrift                      |  1 +
 7 files changed, 37 insertions(+), 5 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/FrontendsProcNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/FrontendsProcNode.java
index a129bbd338..115356bc33 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/FrontendsProcNode.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/FrontendsProcNode.java
@@ -45,7 +45,8 @@ public class FrontendsProcNode implements ProcNodeInterface {
     public static final ImmutableList<String> TITLE_NAMES = new 
ImmutableList.Builder<String>()
             
.add("Name").add("Host").add("EditLogPort").add("HttpPort").add("QueryPort").add("RpcPort")
             
.add("Role").add("IsMaster").add("ClusterId").add("Join").add("Alive")
-            
.add("ReplayedJournalId").add("LastHeartbeat").add("IsHelper").add("ErrMsg").add("Version")
+            .add("ReplayedJournalId").add("LastStartTime").add("LastHeartbeat")
+            .add("IsHelper").add("ErrMsg").add("Version")
             .add("CurrentConnected")
             .build();
 
@@ -124,6 +125,7 @@ public class FrontendsProcNode implements ProcNodeInterface 
{
                 info.add(String.valueOf(fe.isAlive()));
                 info.add(Long.toString(fe.getReplayedJournalId()));
             }
+            info.add(TimeUtils.longToTimeString(fe.getLastStartupTime()));
             info.add(TimeUtils.longToTimeString(fe.getLastUpdateTime()));
             info.add(String.valueOf(isHelperNode(helperNodes, fe)));
             info.add(fe.getHeartbeatErrMsg());
diff --git a/fe/fe-core/src/main/java/org/apache/doris/service/ExecuteEnv.java 
b/fe/fe-core/src/main/java/org/apache/doris/service/ExecuteEnv.java
index a7ac522b5b..b13af519e9 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/service/ExecuteEnv.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/ExecuteEnv.java
@@ -26,10 +26,12 @@ public class ExecuteEnv {
     private static volatile ExecuteEnv INSTANCE;
     private MultiLoadMgr multiLoadMgr;
     private ConnectScheduler scheduler;
+    private long startupTime;
 
     private ExecuteEnv() {
         multiLoadMgr = new MultiLoadMgr();
         scheduler = new ConnectScheduler(Config.qe_max_connection);
+        startupTime = System.currentTimeMillis();
     }
 
     public static ExecuteEnv getInstance() {
@@ -50,4 +52,8 @@ public class ExecuteEnv {
     public MultiLoadMgr getMultiLoadMgr() {
         return multiLoadMgr;
     }
+
+    public long getStartupTime() {
+        return startupTime;
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java 
b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index 206bd56d10..bb6fbe38b3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -1920,6 +1920,7 @@ public class FrontendServiceImpl implements 
FrontendService.Iface {
                 result.setQueryPort(Config.query_port);
                 result.setRpcPort(Config.rpc_port);
                 result.setVersion(Version.DORIS_BUILD_VERSION + "-" + 
Version.DORIS_BUILD_SHORT_HASH);
+                result.setLastStartupTime(exeEnv.getStartupTime());
             }
         } else {
             result.setStatus(TFrontendPingFrontendStatusCode.FAILED);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/system/Frontend.java 
b/fe/fe-core/src/main/java/org/apache/doris/system/Frontend.java
index c0946a1580..e281c752da 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/system/Frontend.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/system/Frontend.java
@@ -51,6 +51,7 @@ public class Frontend implements Writable {
     private int rpcPort;
 
     private long replayedJournalId;
+    private long lastStartupTime;
     private long lastUpdateTime;
     private String heartbeatErrMsg = "";
 
@@ -114,6 +115,10 @@ public class Frontend implements Writable {
         return heartbeatErrMsg;
     }
 
+    public long getLastStartupTime() {
+        return lastStartupTime;
+    }
+
     public long getLastUpdateTime() {
         return lastUpdateTime;
     }
@@ -138,6 +143,7 @@ public class Frontend implements Writable {
             replayedJournalId = hbResponse.getReplayedJournalId();
             lastUpdateTime = hbResponse.getHbTime();
             heartbeatErrMsg = "";
+            lastStartupTime = hbResponse.getFeStartTime();
             isChanged = true;
         } else {
             if (isAlive) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/system/FrontendHbResponse.java 
b/fe/fe-core/src/main/java/org/apache/doris/system/FrontendHbResponse.java
index 7ed5cec5fd..5504de4a9f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/system/FrontendHbResponse.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/system/FrontendHbResponse.java
@@ -39,13 +39,14 @@ public class FrontendHbResponse extends HeartbeatResponse 
implements Writable {
     @SerializedName(value = "replayedJournalId")
     private long replayedJournalId;
     private String version;
+    private long feStartTime;
 
     public FrontendHbResponse() {
         super(HeartbeatResponse.Type.FRONTEND);
     }
 
     public FrontendHbResponse(String name, int queryPort, int rpcPort,
-            long replayedJournalId, long hbTime, String version) {
+            long replayedJournalId, long hbTime, String version, long 
feStartTime) {
         super(HeartbeatResponse.Type.FRONTEND);
         this.status = HbStatus.OK;
         this.name = name;
@@ -54,6 +55,7 @@ public class FrontendHbResponse extends HeartbeatResponse 
implements Writable {
         this.replayedJournalId = replayedJournalId;
         this.hbTime = hbTime;
         this.version = version;
+        this.feStartTime = feStartTime;
     }
 
     public FrontendHbResponse(String name, String errMsg) {
@@ -83,6 +85,10 @@ public class FrontendHbResponse extends HeartbeatResponse 
implements Writable {
         return version;
     }
 
+    public long getFeStartTime() {
+        return feStartTime;
+    }
+
     @Override
     public void readFields(DataInput in) throws IOException {
         super.readFields(in);
@@ -101,6 +107,7 @@ public class FrontendHbResponse extends HeartbeatResponse 
implements Writable {
         sb.append(", queryPort: ").append(queryPort);
         sb.append(", rpcPort: ").append(rpcPort);
         sb.append(", replayedJournalId: ").append(replayedJournalId);
+        sb.append(", festartTime: ").append(feStartTime);
         return sb.toString();
     }
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/system/HeartbeatMgr.java 
b/fe/fe-core/src/main/java/org/apache/doris/system/HeartbeatMgr.java
index dc4c28217b..53427c682e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/system/HeartbeatMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/system/HeartbeatMgr.java
@@ -27,6 +27,7 @@ import org.apache.doris.common.Version;
 import org.apache.doris.common.util.MasterDaemon;
 import org.apache.doris.persist.HbPackage;
 import org.apache.doris.resource.Tag;
+import org.apache.doris.service.ExecuteEnv;
 import org.apache.doris.service.FrontendOptions;
 import org.apache.doris.system.HeartbeatResponse.HbStatus;
 import org.apache.doris.system.SystemInfoService.HostInfo;
@@ -112,7 +113,7 @@ public class HeartbeatMgr extends MasterDaemon {
         for (Frontend frontend : frontends) {
             FrontendHeartbeatHandler handler = new 
FrontendHeartbeatHandler(frontend,
                     Env.getCurrentEnv().getClusterId(),
-                    Env.getCurrentEnv().getToken());
+                    Env.getCurrentEnv().getToken(), 
ExecuteEnv.getInstance().getStartupTime());
             hbResponses.add(executor.submit(handler));
         }
 
@@ -283,6 +284,7 @@ public class HeartbeatMgr extends MasterDaemon {
         private Frontend fe;
         private int clusterId;
         private String token;
+        private long callerFeStartTime;
 
         public FrontendHeartbeatHandler(Frontend fe, int clusterId, String 
token) {
             this.fe = fe;
@@ -290,6 +292,13 @@ public class HeartbeatMgr extends MasterDaemon {
             this.token = token;
         }
 
+        public FrontendHeartbeatHandler(Frontend fe, int clusterId, String 
token, long callerFeStartTime) {
+            this.fe = fe;
+            this.clusterId = clusterId;
+            this.token = token;
+            this.callerFeStartTime = callerFeStartTime;
+        }
+
         @Override
         public HeartbeatResponse call() {
             HostInfo selfNode = Env.getCurrentEnv().getSelfNode();
@@ -298,7 +307,7 @@ public class HeartbeatMgr extends MasterDaemon {
                 if (Env.getCurrentEnv().isReady()) {
                     return new FrontendHbResponse(fe.getNodeName(), 
Config.query_port, Config.rpc_port,
                             Env.getCurrentEnv().getMaxJournalId(), 
System.currentTimeMillis(),
-                            Version.DORIS_BUILD_VERSION + "-" + 
Version.DORIS_BUILD_SHORT_HASH);
+                            Version.DORIS_BUILD_VERSION + "-" + 
Version.DORIS_BUILD_SHORT_HASH, callerFeStartTime);
                 } else {
                     return new FrontendHbResponse(fe.getNodeName(), "not 
ready");
                 }
@@ -319,7 +328,7 @@ public class HeartbeatMgr extends MasterDaemon {
                 if (result.getStatus() == TFrontendPingFrontendStatusCode.OK) {
                     return new FrontendHbResponse(fe.getNodeName(), 
result.getQueryPort(),
                             result.getRpcPort(), result.getReplayedJournalId(),
-                            System.currentTimeMillis(), result.getVersion());
+                            System.currentTimeMillis(), result.getVersion(), 
result.getLastStartupTime());
 
                 } else {
                     return new FrontendHbResponse(fe.getNodeName(), 
result.getMsg());
diff --git a/gensrc/thrift/FrontendService.thrift 
b/gensrc/thrift/FrontendService.thrift
index 619337321f..95c2a75fbb 100644
--- a/gensrc/thrift/FrontendService.thrift
+++ b/gensrc/thrift/FrontendService.thrift
@@ -766,6 +766,7 @@ struct TFrontendPingFrontendResult {
     4: required i32 rpcPort
     5: required i64 replayedJournalId
     6: required string version
+    7: optional i64 lastStartupTime
 }
 
 struct TPropertyVal {


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

Reply via email to