Browse Source

Have masters update DataNode details based on state heartbeats from volume servers. (#8017)

pull/8115/merge
Lisandro Pin 2 days ago
committed by GitHub
parent
commit
9e15823855
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 17
      weed/server/master_grpc_server.go
  2. 2
      weed/topology/data_node.go

17
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(),

2
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 {

Loading…
Cancel
Save