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

gavinchou 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 e59eb2216c0 [enhance](node) add LiveSince to fe and be (#53008)
e59eb2216c0 is described below

commit e59eb2216c00a5698f90befc13f4855dcdcf4449
Author: Yongqiang YANG <[email protected]>
AuthorDate: Tue Jul 15 12:54:10 2025 +0800

    [enhance](node) add LiveSince to fe and be (#53008)
---
 .../java/org/apache/doris/common/proc/BackendsProcDir.java    |  6 +++++-
 .../java/org/apache/doris/common/proc/FrontendsProcNode.java  |  6 +++---
 fe/fe-core/src/main/java/org/apache/doris/system/Backend.java |  7 +++++++
 .../src/main/java/org/apache/doris/system/Frontend.java       | 11 ++++++++++-
 .../java/org/apache/doris/utframe/DemoMultiBackendsTest.java  |  8 ++++----
 5 files changed, 29 insertions(+), 9 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java
index e3db2a3a716..b8eb8d1fcb2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java
@@ -50,7 +50,7 @@ public class BackendsProcDir implements ProcDirInterface {
             
.add("LastStartTime").add("LastHeartbeat").add("Alive").add("SystemDecommissioned").add("TabletNum")
             
.add("DataUsedCapacity").add("TrashUsedCapacity").add("AvailCapacity").add("TotalCapacity").add("UsedPct")
             
.add("MaxDiskUsedPct").add("RemoteUsedCapacity").add("Tag").add("ErrMsg").add("Version").add("Status")
-            
.add("HeartbeatFailureCounter").add("NodeRole").add("CpuCores").add("Memory")
+            
.add("HeartbeatFailureCounter").add("NodeRole").add("CpuCores").add("Memory").add("LiveSince")
             .build();
 
     public static final ImmutableList<String> DISK_TITLE_NAMES = new 
ImmutableList.Builder<String>()
@@ -173,6 +173,10 @@ public class BackendsProcDir implements ProcDirInterface {
 
             // memory
             backendInfo.add(RuntimeProfile.printCounter(backend.getBeMemory(), 
TUnit.BYTES));
+
+            // liveSince
+            
backendInfo.add(TimeUtils.longToTimeString(backend.getLiveSince()));
+
             comparableBackendInfos.add(backendInfo);
         }
 
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 ede8cb56258..0d4dccb196a 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
@@ -48,9 +48,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("ArrowFlightSqlPort").add("Role").add("IsMaster").add("ClusterId").add("Join").add("Alive")
-            .add("ReplayedJournalId").add("LastStartTime").add("LastHeartbeat")
-            .add("IsHelper").add("ErrMsg").add("Version")
-            .add("CurrentConnected")
+            
.add("ReplayedJournalId").add("LastStartTime").add("LastHeartbeat").add("IsHelper").add("ErrMsg")
+            .add("Version").add("CurrentConnected").add("LiveSince")
             .build();
 
     public static final ImmutableList<String> DISK_TITLE_NAMES = new 
ImmutableList.Builder<String>()
@@ -168,6 +167,7 @@ public class FrontendsProcNode implements ProcNodeInterface 
{
             info.add(fe.getVersion());
             // To indicate which FE we currently connected
             info.add(fe.getHost().equals(selfNode) ? "Yes" : "No");
+            info.add(TimeUtils.longToTimeString(fe.getLiveSince()));
 
             infos.add(info);
         }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/system/Backend.java 
b/fe/fe-core/src/main/java/org/apache/doris/system/Backend.java
index 93c9a55557b..6732eba3ab6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/system/Backend.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/system/Backend.java
@@ -86,6 +86,8 @@ public class Backend implements Writable {
     private volatile long lastUpdateMs;
     @SerializedName("lastStartTime")
     private volatile long lastStartTime;
+    @SerializedName("liveSince")
+    private volatile long liveSince;
     @SerializedName("isAlive")
     private AtomicBoolean isAlive;
 
@@ -460,6 +462,10 @@ public class Backend implements Writable {
         return this.lastUpdateMs;
     }
 
+    public long getLiveSince() {
+        return this.lastUpdateMs;
+    }
+
     public void setLastUpdateMs(long currentTime) {
         this.lastUpdateMs = currentTime;
     }
@@ -884,6 +890,7 @@ public class Backend implements Writable {
                         
TimeUtils.longToTimeString(hbResponse.getBeStartTime()),
                         lastStartTime, hbResponse.getBeStartTime());
                 this.lastStartTime = hbResponse.getBeStartTime();
+                this.liveSince = System.currentTimeMillis();
                 this.isAlive.set(true);
             }
 
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 e8f8167368f..2de174c86ef 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
@@ -58,6 +58,7 @@ public class Frontend implements Writable {
     private long replayedJournalId;
     private long lastStartupTime;
     private long lastUpdateTime;
+    private long liveSince;
     private String heartbeatErrMsg = "";
     private List<FeDiskInfo> diskInfos;
 
@@ -139,6 +140,10 @@ public class Frontend implements Writable {
         return lastUpdateTime;
     }
 
+    public long getLiveSince() {
+        return liveSince;
+    }
+
     public List<FeDiskInfo> getDiskInfos() {
         return diskInfos;
     }
@@ -164,6 +169,10 @@ public class Frontend implements Writable {
                 BDBHA bdbha = (BDBHA) Env.getCurrentEnv().getHaProtocol();
                 bdbha.removeUnReadyElectableNode(nodeName, 
Env.getCurrentEnv().getFollowerCount());
             }
+            if (!isAlive) {
+                liveSince = System.currentTimeMillis();
+            }
+
             isAlive = true;
             version = hbResponse.getVersion();
             queryPort = hbResponse.getQueryPort();
@@ -172,7 +181,7 @@ public class Frontend implements Writable {
             replayedJournalId = hbResponse.getReplayedJournalId();
             lastUpdateTime = hbResponse.getHbTime();
             heartbeatErrMsg = "";
-            lastStartupTime = hbResponse.getProcessUUID();
+            lastStartupTime = hbResponse.getFeStartTime();
             diskInfos = hbResponse.getDiskInfos();
             isChanged = true;
             processUUID = hbResponse.getProcessUUID();
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/utframe/DemoMultiBackendsTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/utframe/DemoMultiBackendsTest.java
index 746b453d870..3a258622885 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/utframe/DemoMultiBackendsTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/utframe/DemoMultiBackendsTest.java
@@ -206,13 +206,13 @@ public class DemoMultiBackendsTest {
         ProcResult result = dir.fetchResult();
         Assert.assertEquals(BackendsProcDir.TITLE_NAMES.size(), 
result.getColumnNames().size());
         Assert.assertEquals("{\"location\" : \"default\"}",
-                result.getRows().get(0).get(BackendsProcDir.TITLE_NAMES.size() 
- 8));
+                result.getRows().get(0).get(BackendsProcDir.TITLE_NAMES.size() 
- 9));
         Assert.assertEquals(
                 
"{\"lastSuccessReportTabletsTime\":\"N/A\",\"lastStreamLoadTime\":-1,\"isQueryDisabled\":false,"
                         + 
"\"isLoadDisabled\":false,\"isActive\":true,\"currentFragmentNum\":0,\"lastFragmentUpdateTime\":0}",
-                result.getRows().get(0).get(BackendsProcDir.TITLE_NAMES.size() 
- 5));
-        Assert.assertEquals("0", 
result.getRows().get(0).get(BackendsProcDir.TITLE_NAMES.size() - 4));
-        Assert.assertEquals(Tag.VALUE_MIX, 
result.getRows().get(0).get(BackendsProcDir.TITLE_NAMES.size() - 3));
+                result.getRows().get(0).get(BackendsProcDir.TITLE_NAMES.size() 
- 6));
+        Assert.assertEquals("0", 
result.getRows().get(0).get(BackendsProcDir.TITLE_NAMES.size() - 5));
+        Assert.assertEquals(Tag.VALUE_MIX, 
result.getRows().get(0).get(BackendsProcDir.TITLE_NAMES.size() - 4));
     }
 
     private static void updateReplicaPathHash() {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to