Add a context object in nebula.Main to clean up on error (#550)

This commit is contained in:
brad-defined
2021-11-02 14:14:26 -04:00
committed by GitHub
parent 32cd9a93f1
commit 6ae8ba26f7
13 changed files with 139 additions and 40 deletions

View File

@ -1,6 +1,7 @@
package nebula
import (
"context"
"errors"
"io"
"net"
@ -86,7 +87,7 @@ type Interface struct {
l *logrus.Logger
}
func NewInterface(c *InterfaceConfig) (*Interface, error) {
func NewInterface(ctx context.Context, c *InterfaceConfig) (*Interface, error) {
if c.Outside == nil {
return nil, errors.New("no outside connection")
}
@ -135,7 +136,7 @@ func NewInterface(c *InterfaceConfig) (*Interface, error) {
l: c.l,
}
ifce.connectionManager = newConnectionManager(c.l, ifce, c.checkInterval, c.pendingDeletionInterval)
ifce.connectionManager = newConnectionManager(ctx, c.l, ifce, c.checkInterval, c.pendingDeletionInterval)
return ifce, nil
}
@ -302,15 +303,20 @@ func (f *Interface) reloadFirewall(c *Config) {
Info("New firewall has been installed")
}
func (f *Interface) emitStats(i time.Duration) {
func (f *Interface) emitStats(ctx context.Context, i time.Duration) {
ticker := time.NewTicker(i)
defer ticker.Stop()
udpStats := NewUDPStatsEmitter(f.writers)
for range ticker.C {
f.firewall.EmitStats()
f.handshakeManager.EmitStats()
udpStats()
for {
select {
case <-ctx.Done():
return
case <-ticker.C:
f.firewall.EmitStats()
f.handshakeManager.EmitStats()
udpStats()
}
}
}