Monitor and throw error message in the logs if Weave bridge interface
is found to be in DOWN state Fixes #3133 Do something more useful when the weave bridge is DOWN On Weave restart there is already logic in place to create the bridge interface and bring it up, this fix only monotors the weave bridge interface and logs error if it is in DOWN state
This commit is contained in:
1 parent
f68579654b
commit
40980aeb90
1 file changed
+29
@@ -5,6 +5,7 @@ import (
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
|
||||
"github.com/coreos/go-iptables/iptables"
|
||||
"github.com/pkg/errors"
|
||||
@@ -283,6 +284,10 @@ func EnsureBridge(procPath string, config *BridgeConfig, log *logrus.Logger, ips
|
||||
return bridgeType, err
|
||||
}
|
||||
|
||||
if err := monitorInterface(config.WeaveBridgeName, log); err != nil {
|
||||
return bridgeType, err
|
||||
}
|
||||
|
||||
if err := configureARPCache(procPath, config.WeaveBridgeName); err != nil {
|
||||
return bridgeType, errors.Wrapf(err, "configuring ARP cache on bridge %q", config.WeaveBridgeName)
|
||||
}
|
||||
@@ -609,3 +614,27 @@ func reexpose(config *BridgeConfig, log *logrus.Logger) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func monitorInterface(ifaceName string, log *logrus.Logger) error {
|
||||
_, err := netlink.LinkByName(ifaceName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Unable to find link %q: %s", ifaceName, err)
|
||||
}
|
||||
|
||||
updatesChannel := make(chan netlink.LinkUpdate)
|
||||
if err := netlink.LinkSubscribe(updatesChannel, nil); err != nil {
|
||||
return errors.Wrapf(err, "error monitoring link %q for UP/DOWN notifications", ifaceName)
|
||||
}
|
||||
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case update := <-updatesChannel:
|
||||
if update.Link.Attrs().Name == ifaceName && update.IfInfomsg.Flags&syscall.IFF_UP == 0 {
|
||||
log.Errorf("Interface %q which needs to be in UP state for Weave functioning is found to be in DOWN state", ifaceName)
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
return nil
|
||||
}
|
||||
Reference in new issue
Block a user