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

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


The following commit(s) were added to refs/heads/master by this push:
     new a7bf006  Use BackendStatus to show BE's infomation in `show backends;` 
(#3713)
a7bf006 is described below

commit a7bf006b51a28a702aeb2d331e3c7aa8014b0cbc
Author: WingC <1018957...@qq.com>
AuthorDate: Fri Jun 5 22:37:48 2020 -0500

    Use BackendStatus to show BE's infomation in `show backends;` (#3713)
    
    The infomation is displayed in JSON format.For example:
    {"lastTabletReportTime":"2020-05-28 15:29:01"}
---
 .../sql-statements/Administration/SHOW BACKENDS.md |  1 +
 .../sql-statements/Administration/SHOW BACKENDS.md |  1 +
 .../apache/doris/common/proc/BackendsProcDir.java  |  4 +++-
 .../org/apache/doris/master/ReportHandler.java     | 11 ++++++++-
 .../main/java/org/apache/doris/system/Backend.java | 26 ++++++++++++++++++----
 5 files changed, 37 insertions(+), 6 deletions(-)

diff --git a/docs/en/sql-reference/sql-statements/Administration/SHOW 
BACKENDS.md b/docs/en/sql-reference/sql-statements/Administration/SHOW 
BACKENDS.md
index 8d414e6..e89adc9 100644
--- a/docs/en/sql-reference/sql-statements/Administration/SHOW BACKENDS.md      
+++ b/docs/en/sql-reference/sql-statements/Administration/SHOW BACKENDS.md      
@@ -42,6 +42,7 @@ Explain:
 9. Total Capacity represents total disk space. Total Capacity = AvailCapacity 
+ DataUsedCapacity + other non-user data files take up space.
 10. UsedPct represents the percentage of disk usage.
 11. ErrMsg is used to display error messages when a heartbeat fails.
+12. Status is used to display some Status information about BE in JSON format, 
including the last time that BE reported it's tablet.
 
 ## keyword
 SHOW, BACKENDS
diff --git a/docs/zh-CN/sql-reference/sql-statements/Administration/SHOW 
BACKENDS.md b/docs/zh-CN/sql-reference/sql-statements/Administration/SHOW 
BACKENDS.md
index 495c2ed..5cdbdeb 100644
--- a/docs/zh-CN/sql-reference/sql-statements/Administration/SHOW BACKENDS.md   
+++ b/docs/zh-CN/sql-reference/sql-statements/Administration/SHOW BACKENDS.md   
@@ -42,6 +42,7 @@ under the License.
         9. TotalCapacity 表示总磁盘空间。TotalCapacity = AvailCapacity + 
DataUsedCapacity + 其他非用户数据文件占用空间。
        10. UsedPct 表示磁盘已使用量百分比。
        11. ErrMsg 用于显示心跳失败时的错误信息。
+       12. Status 用于以 JSON 格式显示BE的一些状态信息, 目前包括最后一次BE汇报其tablet的时间信息。
         
 ## keyword
     SHOW, BACKENDS
diff --git a/fe/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java 
b/fe/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java
index 7cd2fee..559f1e0 100644
--- a/fe/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java
+++ b/fe/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.common.proc;
 
+import com.google.gson.Gson;
 import org.apache.doris.alter.DecommissionBackendJob.DecommissionType;
 import org.apache.doris.catalog.Catalog;
 import org.apache.doris.cluster.Cluster;
@@ -51,7 +52,7 @@ public class BackendsProcDir implements ProcDirInterface {
             
.add("BePort").add("HttpPort").add("BrpcPort").add("LastStartTime").add("LastHeartbeat").add("Alive")
             
.add("SystemDecommissioned").add("ClusterDecommissioned").add("TabletNum")
             
.add("DataUsedCapacity").add("AvailCapacity").add("TotalCapacity").add("UsedPct")
-            .add("MaxDiskUsedPct").add("ErrMsg").add("Version")
+            .add("MaxDiskUsedPct").add("ErrMsg").add("Version").add("Status")
             .build();
 
     public static final int IP_INDEX = 2;
@@ -167,6 +168,7 @@ public class BackendsProcDir implements ProcDirInterface {
 
             backendInfo.add(backend.getHeartbeatErrMsg());
             backendInfo.add(backend.getVersion());
+            backendInfo.add(new Gson().toJson(backend.getBackendStatus()));
 
             comparableBackendInfos.add(backendInfo);
         }
diff --git a/fe/src/main/java/org/apache/doris/master/ReportHandler.java 
b/fe/src/main/java/org/apache/doris/master/ReportHandler.java
index b8448f5..6f13734 100644
--- a/fe/src/main/java/org/apache/doris/master/ReportHandler.java
+++ b/fe/src/main/java/org/apache/doris/master/ReportHandler.java
@@ -37,12 +37,14 @@ import org.apache.doris.common.Config;
 import org.apache.doris.common.MetaNotFoundException;
 import org.apache.doris.common.Pair;
 import org.apache.doris.common.util.Daemon;
+import org.apache.doris.common.util.TimeUtils;
 import org.apache.doris.metric.GaugeMetric;
 import org.apache.doris.metric.Metric.MetricUnit;
 import org.apache.doris.metric.MetricRepo;
 import org.apache.doris.persist.BackendTabletsInfo;
 import org.apache.doris.persist.ReplicaPersistInfo;
 import org.apache.doris.system.Backend;
+import org.apache.doris.system.Backend.BackendStatus;
 import org.apache.doris.system.SystemInfoService;
 import org.apache.doris.task.AgentBatchTask;
 import org.apache.doris.task.AgentTask;
@@ -309,7 +311,14 @@ public class ReportHandler extends Daemon {
 
         // 10. send set tablet in memory to be
         handleSetTabletInMemory(backendId, backendTablets);
-        
+
+        final SystemInfoService currentSystemInfo = 
Catalog.getCurrentSystemInfo();
+        Backend reportBackend = currentSystemInfo.getBackend(backendId);
+        if (reportBackend != null) {
+            BackendStatus backendStatus = reportBackend.getBackendStatus();
+            backendStatus.lastSuccessReportTabletsTime = 
TimeUtils.longToTimeString(start);
+        }
+
         long end = System.currentTimeMillis();
         LOG.info("tablet report from backend[{}] cost: {} ms", backendId, (end 
- start));
     }
diff --git a/fe/src/main/java/org/apache/doris/system/Backend.java 
b/fe/src/main/java/org/apache/doris/system/Backend.java
index 24e236f..a95f7bb 100644
--- a/fe/src/main/java/org/apache/doris/system/Backend.java
+++ b/fe/src/main/java/org/apache/doris/system/Backend.java
@@ -94,6 +94,9 @@ public class Backend implements Writable {
     // this field is set by tablet report, and just for metric monitor, no 
need to persist.
     private AtomicLong tabletMaxCompactionScore = new AtomicLong(0);
 
+    // additional backendStatus information for BE, display in JSON format
+    private BackendStatus backendStatus = new BackendStatus();
+
     public Backend() {
         this.host = "";
         this.version = "";
@@ -105,9 +108,9 @@ public class Backend implements Writable {
         this.bePort = new AtomicInteger();
         this.httpPort = new AtomicInteger();
         this.beRpcPort = new AtomicInteger();
-        this.disksRef = new AtomicReference<ImmutableMap<String, 
DiskInfo>>(ImmutableMap.<String, DiskInfo> of());
+        this.disksRef = new AtomicReference<>(ImmutableMap.of());
 
-        this.ownerClusterName = new AtomicReference<String>("");
+        this.ownerClusterName = new AtomicReference<>("");
         this.backendState = new AtomicInteger(BackendState.free.ordinal());
         
         this.decommissionType = new 
AtomicInteger(DecommissionType.SystemDecommission.ordinal());
@@ -123,12 +126,12 @@ public class Backend implements Writable {
         this.beRpcPort = new AtomicInteger(-1);
         this.lastUpdateMs = new AtomicLong(-1L);
         this.lastStartTime = new AtomicLong(-1L);
-        this.disksRef = new AtomicReference<ImmutableMap<String, 
DiskInfo>>(ImmutableMap.<String, DiskInfo> of());
+        this.disksRef = new AtomicReference<>(ImmutableMap.of());
 
         this.isAlive = new AtomicBoolean(false);
         this.isDecommissioned = new AtomicBoolean(false);
 
-        this.ownerClusterName = new AtomicReference<String>(""); 
+        this.ownerClusterName = new AtomicReference<>("");
         this.backendState = new AtomicInteger(BackendState.free.ordinal());
         this.decommissionType = new 
AtomicInteger(DecommissionType.SystemDecommission.ordinal());
     }
@@ -262,6 +265,10 @@ public class Backend implements Writable {
         this.disksRef.set(disks);
     }
 
+    public BackendStatus getBackendStatus() {
+        return backendStatus;
+    }
+
     /**
      * backend belong to some cluster
      * 
@@ -631,5 +638,16 @@ public class Backend implements Writable {
     public long getTabletMaxCompactionScore() {
         return tabletMaxCompactionScore.get();
     }
+
+    /**
+     * Note: This class must be a POJO in order to display in JSON format
+     * Add additional information in the class to show in `show backends`
+     * if just change new added backendStatus, you can do like following
+     *     BackendStatus status = Backend.getBackendStatus();
+     *     status.newItem = xxx;
+     */
+    public class BackendStatus {
+        public String lastSuccessReportTabletsTime = "N/A";
+    }
 }
 


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

Reply via email to