mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-30 14:16:38 +00:00
* [relay] evict foreign client cache on disconnect When a foreign relay's TCP connection drops, the manager's onServerDisconnected handler only triggered reconnect logic for the home server; the disconnected foreign entry stayed in the relayClients cache. Subsequent OpenConn calls reused the closed client until the 60-second cleanup tick evicted it, breaking peer connectivity through that relay for up to a minute. Evict the foreign entry from the cache on disconnect so the next OpenConn dials a fresh client. Also: - Make the reconnect backoff cap configurable via WithMaxBackoffInterval ManagerOption; the previous hard-coded 60s constant forced TestAutoReconnect to sleep ~61s. Test now polls Ready() and finishes in ~2s. - Add NB_HOME_RELAY_SERVERS env var that overrides the relay URL list received from management, so a peer can be pinned to a specific home relay (used by the netbird-conn-lab Edge 4 reproducer). * [client] treat empty NB_HOME_RELAY_SERVERS as unset Returning (urls=[], ok=true) when the env var contained only separators or whitespace caused callers to wipe the mgmt-provided relay list, leaving the peer with no relays. Treat a parsed-empty result the same as an unset env.
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package peer
|
|
|
|
import (
|
|
"os"
|
|
"runtime"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
EnvKeyNBForceRelay = "NB_FORCE_RELAY"
|
|
EnvKeyNBHomeRelayServers = "NB_HOME_RELAY_SERVERS"
|
|
)
|
|
|
|
func IsForceRelayed() bool {
|
|
if runtime.GOOS == "js" {
|
|
return true
|
|
}
|
|
return strings.EqualFold(os.Getenv(EnvKeyNBForceRelay), "true")
|
|
}
|
|
|
|
// OverrideRelayURLs returns the relay server URL list set in
|
|
// NB_HOME_RELAY_SERVERS (comma-separated) and a boolean indicating whether
|
|
// the override is active. When the env var is unset, the boolean is false
|
|
// and the caller should keep the list received from the management server.
|
|
// Intended for lab/debug scenarios where a peer must pin to a specific home
|
|
// relay regardless of what management offers.
|
|
func OverrideRelayURLs() ([]string, bool) {
|
|
raw := os.Getenv(EnvKeyNBHomeRelayServers)
|
|
if raw == "" {
|
|
return nil, false
|
|
}
|
|
parts := strings.Split(raw, ",")
|
|
urls := make([]string, 0, len(parts))
|
|
for _, p := range parts {
|
|
p = strings.TrimSpace(p)
|
|
if p != "" {
|
|
urls = append(urls, p)
|
|
}
|
|
}
|
|
if len(urls) == 0 {
|
|
return nil, false
|
|
}
|
|
return urls, true
|
|
}
|