diff options
| author | Chris Lu <chris.lu@gmail.com> | 2021-09-05 15:20:03 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2021-09-05 15:20:03 -0700 |
| commit | 65af3cf4dfc338129913aac0ae2b5176c6cd0702 (patch) | |
| tree | 099e52507668b2d1d8b7f8d8b68af8e2ba61755b | |
| parent | 57a95887d23777813ffd580d809bfea9ac84036f (diff) | |
| download | seaweedfs-65af3cf4dfc338129913aac0ae2b5176c6cd0702.tar.xz seaweedfs-65af3cf4dfc338129913aac0ae2b5176c6cd0702.zip | |
master: disconnect only the phantom volume server
fix https://github.com/chrislusf/seaweedfs/issues/2311
| -rw-r--r-- | weed/server/master_grpc_server.go | 7 | ||||
| -rw-r--r-- | weed/topology/data_node.go | 1 |
2 files changed, 7 insertions, 1 deletions
diff --git a/weed/server/master_grpc_server.go b/weed/server/master_grpc_server.go index afd479b21..be92d972d 100644 --- a/weed/server/master_grpc_server.go +++ b/weed/server/master_grpc_server.go @@ -22,7 +22,11 @@ func (ms *MasterServer) SendHeartbeat(stream master_pb.Seaweed_SendHeartbeatServ defer func() { if dn != nil { - + dn.Counter-- + if dn.Counter > 0 { + glog.V(0).Infof("disconnect phantom volume server %s:%d remaining %d", dn.Counter, dn.Ip, dn.Port) + return + } // if the volume server disconnects and reconnects quickly // the unregister and register can race with each other ms.Topo.UnRegisterDataNode(dn) @@ -68,6 +72,7 @@ func (ms *MasterServer) SendHeartbeat(stream master_pb.Seaweed_SendHeartbeatServ dc := ms.Topo.GetOrCreateDataCenter(dcName) rack := dc.GetOrCreateRack(rackName) dn = rack.GetOrCreateDataNode(heartbeat.Ip, int(heartbeat.Port), heartbeat.PublicUrl, heartbeat.MaxVolumeCounts) + dn.Counter++ glog.V(0).Infof("added volume server %v:%d", heartbeat.GetIp(), heartbeat.GetPort()) if err := stream.Send(&master_pb.HeartbeatResponse{ VolumeSizeLimit: uint64(ms.option.VolumeSizeLimitMB) * 1024 * 1024, diff --git a/weed/topology/data_node.go b/weed/topology/data_node.go index 2813f7b45..3f0234ca8 100644 --- a/weed/topology/data_node.go +++ b/weed/topology/data_node.go @@ -18,6 +18,7 @@ type DataNode struct { Port int PublicUrl string LastSeen int64 // unix time in seconds + Counter int // in race condition, the previous dataNode was not dead } func NewDataNode(id string) *DataNode { |
