mirror of
https://github.com/netbirdio/netbird.git
synced 2024-12-04 22:10:56 +01:00
13e7198046
wait on engine down to not only wait for the interface to be down but completely removed. If the waiting loop reaches the timeout we will trigger an interface destroy. On the up command, it now waits until the engine is fully running before sending the response to the CLI. Includes a small refactor of probes to comply with sonar rules about parameter count in the function call
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package internal
|
|
|
|
import "context"
|
|
|
|
type ProbeHolder struct {
|
|
MgmProbe *Probe
|
|
SignalProbe *Probe
|
|
RelayProbe *Probe
|
|
WgProbe *Probe
|
|
}
|
|
|
|
// Probe allows to run on-demand callbacks from different code locations.
|
|
// Pass the probe to a receiving and a sending end. The receiving end starts listening
|
|
// to requests with Receive and executes a callback when the sending end requests it
|
|
// by calling Probe.
|
|
type Probe struct {
|
|
request chan struct{}
|
|
result chan bool
|
|
ready bool
|
|
}
|
|
|
|
// NewProbe returns a new initialized probe.
|
|
func NewProbe() *Probe {
|
|
return &Probe{
|
|
request: make(chan struct{}),
|
|
result: make(chan bool),
|
|
}
|
|
}
|
|
|
|
// Probe requests the callback to be run and returns a bool indicating success.
|
|
// It always returns true as long as the receiver is not ready.
|
|
func (p *Probe) Probe() bool {
|
|
if !p.ready {
|
|
return true
|
|
}
|
|
|
|
p.request <- struct{}{}
|
|
return <-p.result
|
|
}
|
|
|
|
// Receive starts listening for probe requests. On such a request it runs the supplied
|
|
// callback func which must return a bool indicating success.
|
|
// Blocks until the passed context is cancelled.
|
|
func (p *Probe) Receive(ctx context.Context, callback func() bool) {
|
|
p.ready = true
|
|
defer func() {
|
|
p.ready = false
|
|
}()
|
|
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
return
|
|
case <-p.request:
|
|
p.result <- callback()
|
|
}
|
|
}
|
|
}
|