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]