From 9e15823855c70fa46fea3c6facbbf0311676e7f1 Mon Sep 17 00:00:00 2001 From: Lisandro Pin Date: Fri, 30 Jan 2026 06:51:46 +0100 Subject: [PATCH] Have masters update DataNode details based on state heartbeats from volume servers. (#8017) --- weed/server/master_grpc_server.go | 17 ++++++++++++++++- weed/topology/data_node.go | 2 ++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/weed/server/master_grpc_server.go b/weed/server/master_grpc_server.go index 7c6bd1e3c..d33782ae1 100644 --- a/weed/server/master_grpc_server.go +++ b/weed/server/master_grpc_server.go @@ -165,7 +165,22 @@ func (ms *MasterServer) SendHeartbeat(stream master_pb.Seaweed_SendHeartbeatServ glog.V(4).Infof("master received heartbeat %s", heartbeat.String()) stats.MasterReceivedHeartbeatCounter.WithLabelValues("total").Inc() - // TODO(issues/7977): process status heartbeat updates from volume servers + + if heartbeat.State != nil { + stats.MasterReceivedHeartbeatCounter.WithLabelValues("stateUpdates").Inc() + + updated := false + dn.Lock() + if dn.MaintenanceMode != heartbeat.State.GetMaintenance() { + updated = true + dn.MaintenanceMode = heartbeat.State.GetMaintenance() + } + dn.Unlock() + + if updated { + glog.V(1).Infof("master sees state update from %s: %v", dn.Url(), heartbeat.State) + } + } message := &master_pb.VolumeLocation{ Url: dn.Url(), diff --git a/weed/topology/data_node.go b/weed/topology/data_node.go index f4ad0220c..11412195d 100644 --- a/weed/topology/data_node.go +++ b/weed/topology/data_node.go @@ -23,6 +23,8 @@ type DataNode struct { LastSeen int64 // unix time in seconds Counter int // in race condition, the previous dataNode was not dead IsTerminating bool + + MaintenanceMode bool } func NewDataNode(id string) *DataNode {