diff --git a/weed/server/master_server_cluster.go b/weed/server/master_server_cluster.go index 19ecaff0a..fa5280ccd 100644 --- a/weed/server/master_server_cluster.go +++ b/weed/server/master_server_cluster.go @@ -14,6 +14,7 @@ const ( type ClusterNode struct { address pb.ServerAddress version string + counter int } type Cluster struct { @@ -32,12 +33,14 @@ func (cluster *Cluster) AddClusterNode(nodeType string, address pb.ServerAddress case "filer": cluster.filersLock.Lock() defer cluster.filersLock.Unlock() - if _, found := cluster.filers[address]; found { + if existingNode, found := cluster.filers[address]; found { + existingNode.counter++ return } cluster.filers[address] = &ClusterNode{ address: address, version: version, + counter: 1, } case "master": } @@ -48,10 +51,14 @@ func (cluster *Cluster) RemoveClusterNode(nodeType string, address pb.ServerAddr case "filer": cluster.filersLock.Lock() defer cluster.filersLock.Unlock() - if _, found := cluster.filers[address]; !found { + if existingNode, found := cluster.filers[address]; !found { return + } else { + existingNode.counter-- + if existingNode.counter <= 0 { + delete(cluster.filers, address) + } } - delete(cluster.filers, address) case "master": } }