You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							52 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							52 lines
						
					
					
						
							1.1 KiB
						
					
					
				
								package cluster
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb"
							 | 
						|
									"time"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								type GroupMembers struct {
							 | 
						|
									members map[pb.ServerAddress]*ClusterNode
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func newGroupMembers() *GroupMembers {
							 | 
						|
									return &GroupMembers{
							 | 
						|
										members: make(map[pb.ServerAddress]*ClusterNode),
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func (m *GroupMembers) addMember(dataCenter DataCenter, rack Rack, address pb.ServerAddress, version string) *ClusterNode {
							 | 
						|
									if existingNode, found := m.members[address]; found {
							 | 
						|
										existingNode.counter++
							 | 
						|
										return nil
							 | 
						|
									}
							 | 
						|
									t := &ClusterNode{
							 | 
						|
										Address:    address,
							 | 
						|
										Version:    version,
							 | 
						|
										counter:    1,
							 | 
						|
										CreatedTs:  time.Now(),
							 | 
						|
										DataCenter: dataCenter,
							 | 
						|
										Rack:       rack,
							 | 
						|
									}
							 | 
						|
									m.members[address] = t
							 | 
						|
									return t
							 | 
						|
								}
							 | 
						|
								func (m *GroupMembers) removeMember(address pb.ServerAddress) bool {
							 | 
						|
									if existingNode, found := m.members[address]; !found {
							 | 
						|
										return false
							 | 
						|
									} else {
							 | 
						|
										existingNode.counter--
							 | 
						|
										if existingNode.counter <= 0 {
							 | 
						|
											delete(m.members, address)
							 | 
						|
											return true
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									return false
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func (m *GroupMembers) GetMembers() (addresses []pb.ServerAddress) {
							 | 
						|
									for k := range m.members {
							 | 
						|
										addresses = append(addresses, k)
							 | 
						|
									}
							 | 
						|
									return
							 | 
						|
								}
							 |