mirror of
https://github.com/datarhei/core.git
synced 2025-10-05 07:57:13 +08:00
Set cluster node ips on session block list
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/datarhei/core/v16/log"
|
||||
"github.com/datarhei/core/v16/net"
|
||||
)
|
||||
|
||||
type ClusterReader interface {
|
||||
@@ -33,7 +34,8 @@ type Cluster interface {
|
||||
}
|
||||
|
||||
type ClusterConfig struct {
|
||||
Logger log.Logger
|
||||
IPLimiter net.IPLimiter
|
||||
Logger log.Logger
|
||||
}
|
||||
|
||||
type cluster struct {
|
||||
@@ -42,6 +44,8 @@ type cluster struct {
|
||||
idupdate map[string]time.Time
|
||||
fileid map[string]string
|
||||
|
||||
limiter net.IPLimiter
|
||||
|
||||
updates chan NodeState
|
||||
|
||||
lock sync.RWMutex
|
||||
@@ -57,10 +61,15 @@ func New(config ClusterConfig) (Cluster, error) {
|
||||
idfiles: map[string][]string{},
|
||||
idupdate: map[string]time.Time{},
|
||||
fileid: map[string]string{},
|
||||
limiter: config.IPLimiter,
|
||||
updates: make(chan NodeState, 64),
|
||||
logger: config.Logger,
|
||||
}
|
||||
|
||||
if c.limiter == nil {
|
||||
c.limiter = net.NewNullIPLimiter()
|
||||
}
|
||||
|
||||
if c.logger == nil {
|
||||
c.logger = log.New("")
|
||||
}
|
||||
@@ -134,9 +143,15 @@ func (c *cluster) AddNode(address, username, password string) (string, error) {
|
||||
defer c.lock.Unlock()
|
||||
|
||||
if _, ok := c.nodes[id]; ok {
|
||||
node.stop()
|
||||
return id, nil
|
||||
}
|
||||
|
||||
ips := node.IPs()
|
||||
for _, ip := range ips {
|
||||
c.limiter.AddBlock(ip)
|
||||
}
|
||||
|
||||
c.nodes[id] = node
|
||||
|
||||
c.logger.Info().WithFields(log.Fields{
|
||||
@@ -160,6 +175,12 @@ func (c *cluster) RemoveNode(id string) error {
|
||||
|
||||
delete(c.nodes, id)
|
||||
|
||||
ips := node.IPs()
|
||||
|
||||
for _, ip := range ips {
|
||||
c.limiter.RemoveBlock(ip)
|
||||
}
|
||||
|
||||
c.logger.Info().WithFields(log.Fields{
|
||||
"id": id,
|
||||
}).Log("Removed node")
|
||||
|
Reference in New Issue
Block a user