diff --git a/master/api_service.go b/master/api_service.go index 3f073b323..fcc466830 100644 --- a/master/api_service.go +++ b/master/api_service.go @@ -6888,6 +6888,7 @@ func (m *Server) queryDataNodeDecoProgress(w http.ResponseWriter, r *http.Reques Progress: fmt.Sprintf("%.2f%%", progress*float64(100)), StatusMessage: GetDecommissionStatusMessage(status), TotalDpCnt: dn.DecommissionDpTotal, + StartTime: time.Unix(int64(dn.DecommissionTime), 0).String(), } remainingDpCnt, failedDps, runningDps := dn.GetDecommissionFailedAndRunningDPByTerm(m.cluster) resp.FailedDps = failedDps diff --git a/master/data_node.go b/master/data_node.go index 00f8672fe..5fa185df6 100644 --- a/master/data_node.go +++ b/master/data_node.go @@ -78,6 +78,7 @@ type DataNode struct { DecommissionLimit int DecommissionWeight int DecommissionFirstHostParallelLimit uint64 + DecommissionTime uint64 DecommissionCompleteTime int64 DpCntLimit uint64 `json:"-"` // max count of data partition in a data node CpuUtil atomicutil.Float64 `json:"-"` @@ -736,6 +737,7 @@ func (dataNode *DataNode) markDecommission(targetAddr string, raftForce bool, li dataNode.DecommissionLimit = limit dataNode.DecommissionWeight = weight dataNode.DecommissionDiskList = make([]string, 0) + dataNode.DecommissionTime = uint64(time.Now().Unix()) } func (dataNode *DataNode) markDecommissionSuccess(c *Cluster) { diff --git a/master/metadata_fsm_op.go b/master/metadata_fsm_op.go index 181477a3e..5cccf92d7 100644 --- a/master/metadata_fsm_op.go +++ b/master/metadata_fsm_op.go @@ -529,6 +529,7 @@ type dataNodeValue struct { DecommissionLimit int DecommissionWeight int DecommissionFirstHostParallelLimit uint64 + DecommissionTime uint64 DecommissionCompleteTime int64 ToBeOffline bool DecommissionDiskList []string @@ -558,6 +559,7 @@ func newDataNodeValue(dataNode *DataNode) *dataNodeValue { DecommissionLimit: dataNode.DecommissionLimit, DecommissionWeight: dataNode.DecommissionWeight, DecommissionFirstHostParallelLimit: dataNode.DecommissionFirstHostParallelLimit, + DecommissionTime: dataNode.DecommissionTime, DecommissionCompleteTime: dataNode.DecommissionCompleteTime, ToBeOffline: dataNode.ToBeOffline, DecommissionDiskList: dataNode.DecommissionDiskList, @@ -1678,6 +1680,7 @@ func (c *Cluster) loadDataNodes() (err error) { dataNode.DecommissionLimit = dnv.DecommissionLimit dataNode.DecommissionWeight = dnv.DecommissionWeight dataNode.DecommissionFirstHostParallelLimit = dnv.DecommissionFirstHostParallelLimit + dataNode.DecommissionTime = dnv.DecommissionTime dataNode.DecommissionCompleteTime = dnv.DecommissionCompleteTime dataNode.ToBeOffline = dnv.ToBeOffline dataNode.DecommissionDiskList = dnv.DecommissionDiskList diff --git a/proto/model.go b/proto/model.go index 123fbc9e8..34d4a6078 100644 --- a/proto/model.go +++ b/proto/model.go @@ -476,6 +476,7 @@ type DataDecommissionProgress struct { FailedDps []FailedDpInfo IgnoreDps []IgnoreDecommissionDP ResidualDps []IgnoreDecommissionDP + StartTime string } type DiskInfo struct {