shutdown fix
This commit is contained in:
parent
e2449b425e
commit
279fba0c57
4 changed files with 39 additions and 11 deletions
2
TODO
2
TODO
|
|
@ -2,4 +2,6 @@ VIP for haproxy-lb
|
||||||
* take from pool?
|
* take from pool?
|
||||||
* extra config?
|
* extra config?
|
||||||
|
|
||||||
|
cleanup pkg/vip
|
||||||
|
|
||||||
test api in followers
|
test api in followers
|
||||||
|
|
|
||||||
|
|
@ -84,8 +84,8 @@ func main() {
|
||||||
log.Info("haproxy-lb shutdown", "signal", s.String())
|
log.Info("haproxy-lb shutdown", "signal", s.String())
|
||||||
go func() {
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-time.After(time.Second * 10):
|
case <-time.After(time.Second * 20):
|
||||||
log.Error(errors.New("shutdown took longer than 10 seconds"), "shutdown forced")
|
log.Error(errors.New("shutdown took longer than 20 seconds"), "shutdown forced")
|
||||||
case <-sigs:
|
case <-sigs:
|
||||||
log.Error(errors.New("force shutdown triggerd"), "shutdown forced")
|
log.Error(errors.New("force shutdown triggerd"), "shutdown forced")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -129,12 +129,7 @@ func NewLBController(cfg *config.Config, srv *api.Server, log logr.Logger) (call
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Cleanup: func(ctx context.Context, cc cluster.CallbackContext) {
|
Cleanup: func(ctx context.Context, cc cluster.CallbackContext) {
|
||||||
db := db.New(cc)
|
deleteIPs(cc, n, n.GetIPs())
|
||||||
ips, err := db.GetIPs()
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
deleteIPs(cc, n, ips)
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,10 @@ package vip
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/vishvananda/netlink"
|
|
||||||
"net"
|
"net"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/vishvananda/netlink"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ErrNoDefaultInterface = errors.New("no default interface found")
|
var ErrNoDefaultInterface = errors.New("no default interface found")
|
||||||
|
|
@ -25,6 +27,8 @@ func DefaultInterface() (iface string, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Network struct {
|
type Network struct {
|
||||||
|
sync.Mutex
|
||||||
|
m map[string]struct{}
|
||||||
iface string
|
iface string
|
||||||
label string
|
label string
|
||||||
link netlink.Link
|
link netlink.Link
|
||||||
|
|
@ -45,7 +49,12 @@ func NewNetworkWithLabel(iface, label string) (n *Network, err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
n = &Network{iface, label, link}
|
n = &Network{
|
||||||
|
m: make(map[string]struct{}),
|
||||||
|
iface: iface,
|
||||||
|
label: label,
|
||||||
|
link: link,
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -67,6 +76,8 @@ func (n *Network) HasIP(a *netlink.Addr) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *Network) AddIP(cidr string) error {
|
func (n *Network) AddIP(cidr string) error {
|
||||||
|
n.Lock()
|
||||||
|
defer n.Unlock()
|
||||||
addr, err := netlink.ParseAddr(cidr)
|
addr, err := netlink.ParseAddr(cidr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -81,10 +92,13 @@ func (n *Network) AddIP(cidr string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
n.m[cidr] = struct{}{}
|
||||||
return ARPSendGratuitous(cidr, n.iface)
|
return ARPSendGratuitous(cidr, n.iface)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *Network) DeleteIP(cidr string) error {
|
func (n *Network) DeleteIP(cidr string) error {
|
||||||
|
n.Lock()
|
||||||
|
defer n.Unlock()
|
||||||
addr, err := netlink.ParseAddr(cidr)
|
addr, err := netlink.ParseAddr(cidr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -92,5 +106,22 @@ func (n *Network) DeleteIP(cidr string) error {
|
||||||
if !n.HasIP(addr) {
|
if !n.HasIP(addr) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return netlink.AddrDel(n.link, addr)
|
err = netlink.AddrDel(n.link, addr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
delete(n.m, cidr)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Network) GetIPs() (cidrs []string) {
|
||||||
|
n.Lock()
|
||||||
|
defer n.Unlock()
|
||||||
|
cidrs = make([]string, len(n.m))
|
||||||
|
c := 0
|
||||||
|
for k := range n.m {
|
||||||
|
cidrs[c] = k
|
||||||
|
c++
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue