112 lines
2.3 KiB
Go
112 lines
2.3 KiB
Go
// Package balance...
|
|
//
|
|
// Description : balance...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2021-10-19 2:26 下午
|
|
package balance
|
|
|
|
import (
|
|
"errors"
|
|
"sync"
|
|
|
|
"git.zhangdeman.cn/zhangdeman/gopkg/balance/define"
|
|
)
|
|
|
|
// base ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2:26 下午 2021/10/19
|
|
type base struct {
|
|
lock *sync.RWMutex
|
|
severList []*define.ServerNode
|
|
}
|
|
|
|
// Lock ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2:27 下午 2021/10/19
|
|
func (b *base) Lock() {
|
|
b.lock.Lock()
|
|
}
|
|
|
|
// Unlock ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2:27 下午 2021/10/19
|
|
func (b *base) Unlock() {
|
|
b.lock.Unlock()
|
|
}
|
|
|
|
// RLock ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2:28 下午 2021/10/19
|
|
func (b *base) RLock() {
|
|
b.lock.RLock()
|
|
}
|
|
|
|
// RUnlock ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2:28 下午 2021/10/19
|
|
func (b *base) RUnlock() {
|
|
b.lock.RUnlock()
|
|
}
|
|
|
|
// AddServerNode 新添加一个服务器节点
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 10:07 下午 2021/10/20
|
|
func (b *base) AddServerNode(node *define.ServerNode) error {
|
|
if len(node.HostIP) == 0 || node.Port <= 0 {
|
|
return errors.New("host ip or port is invalid")
|
|
}
|
|
b.Lock()
|
|
defer b.Unlock()
|
|
for _, item := range b.severList {
|
|
if item.HostIP == node.HostIP && item.Port == node.Port {
|
|
return errors.New("host config is already exist")
|
|
}
|
|
}
|
|
b.severList = append(b.severList, node)
|
|
return nil
|
|
}
|
|
|
|
// Remove 移除一个节点, force = true , 强制删除, force = false 逻辑删除, 设置状态
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 10:19 下午 2021/10/20
|
|
func (b *base) Remove(hostIP string, port int, force bool) {
|
|
b.Lock()
|
|
defer b.Unlock()
|
|
tmpServerNode := make([]*define.ServerNode, 0)
|
|
for _, item := range b.severList {
|
|
if item.HostIP == hostIP && item.Port == port {
|
|
if force {
|
|
continue
|
|
}
|
|
item.Status = define.ServerNodeStatusRemove
|
|
}
|
|
tmpServerNode = append(tmpServerNode, item)
|
|
}
|
|
b.severList = tmpServerNode
|
|
}
|
|
|
|
// GetServerNodeList 获取服务器节点
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 10:33 下午 2021/10/20
|
|
func (b *base) GetServerNodeList() []*define.ServerNode {
|
|
return b.severList
|
|
}
|