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

rickyma pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-uniffle.git


The following commit(s) were added to refs/heads/master by this push:
     new b97dbcead [#1471] feat(server/dashboard): Add Reg time to ServerNode 
(#1862)
b97dbcead is described below

commit b97dbcead3d764dfcae970f412b3b73f9b26667b
Author: maobaolong <baoloong...@tencent.com>
AuthorDate: Tue Jul 9 15:38:41 2024 +0800

    [#1471] feat(server/dashboard): Add Reg time to ServerNode (#1862)
    
    ### What changes were proposed in this pull request?
    
    Add reg time to ServerNode, and update method to update ServerNode when 
server heartbeat to coordinator rather than replace serverNode object.
    
    ### Why are the changes needed?
    
    Fix: #1471
    
    ### Does this PR introduce _any_ user-facing change?
    
    User can get registrationTime from dashboard server page.
    
    ### How was this patch tested?
    
    <img width="2462" alt="image" 
src="https://github.com/apache/incubator-uniffle/assets/17329931/423733c7-7bb8-44f1-8f02-d8f6ef5026a5";>
    <img width="2478" alt="image" 
src="https://github.com/apache/incubator-uniffle/assets/17329931/aedd73c5-77f4-4264-8ae7-e43cc89c04cc";>
---
 .../java/org/apache/uniffle/coordinator/ClusterManager.java  |  2 +-
 .../main/java/org/apache/uniffle/coordinator/ServerNode.java | 12 +++++++++++-
 .../org/apache/uniffle/coordinator/SimpleClusterManager.java |  8 +++++++-
 .../webapp/src/pages/serverstatus/ActiveNodeListPage.vue     |  7 +++++++
 .../src/pages/serverstatus/DecommissionednodeListPage.vue    |  7 +++++++
 .../src/pages/serverstatus/DecommissioningNodeListPage.vue   |  7 +++++++
 .../src/main/webapp/src/pages/serverstatus/LostNodeList.vue  |  7 +++++++
 .../webapp/src/pages/serverstatus/UnhealthyNodeListPage.vue  |  7 +++++++
 8 files changed, 54 insertions(+), 3 deletions(-)

diff --git 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/ClusterManager.java 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/ClusterManager.java
index 1b44eea02..0ef8b8bda 100644
--- 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/ClusterManager.java
+++ 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/ClusterManager.java
@@ -24,7 +24,7 @@ import java.util.Set;
 public interface ClusterManager extends Closeable {
 
   /**
-   * Add a server to the cluster.
+   * Add or update a server to the cluster.
    *
    * @param shuffleServerInfo server info
    */
diff --git 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/ServerNode.java 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/ServerNode.java
index 93b1e59c3..ec33d262a 100644
--- a/coordinator/src/main/java/org/apache/uniffle/coordinator/ServerNode.java
+++ b/coordinator/src/main/java/org/apache/uniffle/coordinator/ServerNode.java
@@ -36,6 +36,7 @@ public class ServerNode implements Comparable<ServerNode> {
   private long preAllocatedMemory;
   private long availableMemory;
   private int eventNumInFlush;
+  private long registrationTime;
   private long timestamp;
   private Set<String> tags;
   private ServerStatus status;
@@ -136,7 +137,8 @@ public class ServerNode implements Comparable<ServerNode> {
     this.preAllocatedMemory = preAllocatedMemory;
     this.availableMemory = availableMemory;
     this.eventNumInFlush = eventNumInFlush;
-    this.timestamp = System.currentTimeMillis();
+    this.registrationTime = System.currentTimeMillis();
+    this.timestamp = registrationTime;
     this.tags = tags;
     this.status = status;
     this.storageInfo = storageInfoMap;
@@ -237,6 +239,14 @@ public class ServerNode implements Comparable<ServerNode> {
     this.timestamp = timestamp;
   }
 
+  void setRegistrationTime(long registrationTime) {
+    this.registrationTime = registrationTime;
+  }
+
+  public long getRegistrationTime() {
+    return registrationTime;
+  }
+
   @Override
   public int compareTo(ServerNode other) {
     if (availableMemory > other.getAvailableMemory()) {
diff --git 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/SimpleClusterManager.java
 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/SimpleClusterManager.java
index 28a9a1189..e5f7ec3a7 100644
--- 
a/coordinator/src/main/java/org/apache/uniffle/coordinator/SimpleClusterManager.java
+++ 
b/coordinator/src/main/java/org/apache/uniffle/coordinator/SimpleClusterManager.java
@@ -224,10 +224,16 @@ public class SimpleClusterManager implements 
ClusterManager {
 
   @Override
   public void add(ServerNode node) {
-    if (!servers.containsKey(node.getId())) {
+    ServerNode pre = servers.get(node.getId());
+    if (pre == null) {
       LOG.info("Newly registering node: {}", node.getId());
+    } else {
+      long regTime = pre.getRegistrationTime();
+      // inherit registration time
+      node.setRegistrationTime(regTime);
     }
     servers.put(node.getId(), node);
+
     Set<String> tags = node.getTags();
     // remove node with all tags to deal with the situation of tag change
     for (Set<ServerNode> nodes : tagToNodes.values()) {
diff --git 
a/dashboard/src/main/webapp/src/pages/serverstatus/ActiveNodeListPage.vue 
b/dashboard/src/main/webapp/src/pages/serverstatus/ActiveNodeListPage.vue
index 659a3feb9..8b08c13d2 100644
--- a/dashboard/src/main/webapp/src/pages/serverstatus/ActiveNodeListPage.vue
+++ b/dashboard/src/main/webapp/src/pages/serverstatus/ActiveNodeListPage.vue
@@ -37,6 +37,12 @@
       />
       <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80" 
/>
       <el-table-column prop="status" label="Status" min-width="80" />
+      <el-table-column
+        prop="registrationTime"
+        label="RegistrationTime"
+        min-width="80"
+        :formatter="dateFormatter"
+      />
       <el-table-column
         prop="timestamp"
         label="HeartbeatTime"
@@ -68,6 +74,7 @@ export default {
           eventNumInFlush: 0,
           tags: '',
           status: '',
+          registrationTime: '',
           timestamp: ''
         }
       ]
diff --git 
a/dashboard/src/main/webapp/src/pages/serverstatus/DecommissionednodeListPage.vue
 
b/dashboard/src/main/webapp/src/pages/serverstatus/DecommissionednodeListPage.vue
index 9e9f5f11b..dae4a6c18 100644
--- 
a/dashboard/src/main/webapp/src/pages/serverstatus/DecommissionednodeListPage.vue
+++ 
b/dashboard/src/main/webapp/src/pages/serverstatus/DecommissionednodeListPage.vue
@@ -37,6 +37,12 @@
       />
       <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80" 
/>
       <el-table-column prop="status" label="Status" min-width="80" />
+      <el-table-column
+          prop="registrationTime"
+          label="RegistrationTime"
+          min-width="80"
+          :formatter="dateFormatter"
+      />
       <el-table-column
         prop="timestamp"
         label="HeartbeatTime"
@@ -68,6 +74,7 @@ export default {
           eventNumInFlush: 0,
           tags: '',
           status: '',
+          registrationTime: '',
           timestamp: ''
         }
       ]
diff --git 
a/dashboard/src/main/webapp/src/pages/serverstatus/DecommissioningNodeListPage.vue
 
b/dashboard/src/main/webapp/src/pages/serverstatus/DecommissioningNodeListPage.vue
index 7633f5a77..58e52aa6f 100644
--- 
a/dashboard/src/main/webapp/src/pages/serverstatus/DecommissioningNodeListPage.vue
+++ 
b/dashboard/src/main/webapp/src/pages/serverstatus/DecommissioningNodeListPage.vue
@@ -37,6 +37,12 @@
       />
       <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80" 
/>
       <el-table-column prop="status" label="Status" min-width="80" />
+      <el-table-column
+          prop="registrationTime"
+          label="RegistrationTime"
+          min-width="80"
+          :formatter="dateFormatter"
+      />
       <el-table-column
         prop="timestamp"
         label="HeartbeatTime"
@@ -68,6 +74,7 @@ export default {
           eventNumInFlush: 0,
           tags: '',
           status: '',
+          registrationTime: '',
           timestamp: ''
         }
       ]
diff --git a/dashboard/src/main/webapp/src/pages/serverstatus/LostNodeList.vue 
b/dashboard/src/main/webapp/src/pages/serverstatus/LostNodeList.vue
index f46d03f8e..2bb8de2f7 100644
--- a/dashboard/src/main/webapp/src/pages/serverstatus/LostNodeList.vue
+++ b/dashboard/src/main/webapp/src/pages/serverstatus/LostNodeList.vue
@@ -37,6 +37,12 @@
       />
       <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80" 
/>
       <el-table-column prop="status" label="Status" min-width="80" />
+      <el-table-column
+          prop="registrationTime"
+          label="RegistrationTime"
+          min-width="80"
+          :formatter="dateFormatter"
+      />
       <el-table-column
         prop="timestamp"
         label="HeartbeatTime"
@@ -68,6 +74,7 @@ export default {
           eventNumInFlush: 0,
           tags: '',
           status: '',
+          registrationTime: '',
           timestamp: ''
         }
       ]
diff --git 
a/dashboard/src/main/webapp/src/pages/serverstatus/UnhealthyNodeListPage.vue 
b/dashboard/src/main/webapp/src/pages/serverstatus/UnhealthyNodeListPage.vue
index 4472106c8..6073b994d 100644
--- a/dashboard/src/main/webapp/src/pages/serverstatus/UnhealthyNodeListPage.vue
+++ b/dashboard/src/main/webapp/src/pages/serverstatus/UnhealthyNodeListPage.vue
@@ -37,6 +37,12 @@
       />
       <el-table-column prop="eventNumInFlush" label="FlushNum" min-width="80" 
/>
       <el-table-column prop="status" label="Status" min-width="80" />
+      <el-table-column
+          prop="registrationTime"
+          label="RegistrationTime"
+          min-width="80"
+          :formatter="dateFormatter"
+      />
       <el-table-column
         prop="timestamp"
         label="HeartbeatTime"
@@ -68,6 +74,7 @@ export default {
           eventNumInFlush: 0,
           tags: '',
           status: '',
+          registrationTime: '',
           timestamp: ''
         }
       ]

Reply via email to