mirror of
https://github.com/tailscale/tailscale.git
synced 2025-12-14 13:51:58 +01:00
feature/relayserver: init server at config time instead of request time (#17484)
The lazy init led to confusion and a belief that was something was wrong. It's reasonable to expect the daemon to listen on the port at the time it's configured. Updates tailscale/corp#33094 Signed-off-by: Jordan Whited <jordan@tailscale.com>
This commit is contained in:
parent
0f4dec928e
commit
e2233b7942
@ -367,7 +367,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
💣 tailscale.com/net/tshttpproxy from tailscale.com/feature/useproxy
|
💣 tailscale.com/net/tshttpproxy from tailscale.com/feature/useproxy
|
||||||
tailscale.com/net/tstun from tailscale.com/cmd/tailscaled+
|
tailscale.com/net/tstun from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/net/udprelay from tailscale.com/feature/relayserver
|
tailscale.com/net/udprelay from tailscale.com/feature/relayserver
|
||||||
tailscale.com/net/udprelay/endpoint from tailscale.com/feature/relayserver+
|
tailscale.com/net/udprelay/endpoint from tailscale.com/net/udprelay+
|
||||||
tailscale.com/net/udprelay/status from tailscale.com/client/local+
|
tailscale.com/net/udprelay/status from tailscale.com/client/local+
|
||||||
tailscale.com/omit from tailscale.com/ipn/conffile
|
tailscale.com/omit from tailscale.com/ipn/conffile
|
||||||
tailscale.com/paths from tailscale.com/client/local+
|
tailscale.com/paths from tailscale.com/client/local+
|
||||||
|
|||||||
@ -21,10 +21,8 @@ import (
|
|||||||
"tailscale.com/ipn/ipnext"
|
"tailscale.com/ipn/ipnext"
|
||||||
"tailscale.com/ipn/localapi"
|
"tailscale.com/ipn/localapi"
|
||||||
"tailscale.com/net/udprelay"
|
"tailscale.com/net/udprelay"
|
||||||
"tailscale.com/net/udprelay/endpoint"
|
|
||||||
"tailscale.com/net/udprelay/status"
|
"tailscale.com/net/udprelay/status"
|
||||||
"tailscale.com/tailcfg"
|
"tailscale.com/tailcfg"
|
||||||
"tailscale.com/types/key"
|
|
||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
"tailscale.com/types/ptr"
|
"tailscale.com/types/ptr"
|
||||||
"tailscale.com/util/eventbus"
|
"tailscale.com/util/eventbus"
|
||||||
@ -91,13 +89,6 @@ type extension struct {
|
|||||||
hasNodeAttrDisableRelayServer bool // tailcfg.NodeAttrDisableRelayServer
|
hasNodeAttrDisableRelayServer bool // tailcfg.NodeAttrDisableRelayServer
|
||||||
}
|
}
|
||||||
|
|
||||||
// relayServer is the interface of [udprelay.Server].
|
|
||||||
type relayServer interface {
|
|
||||||
AllocateEndpoint(discoA key.DiscoPublic, discoB key.DiscoPublic) (endpoint.ServerEndpoint, error)
|
|
||||||
Close() error
|
|
||||||
GetSessions() []status.ServerSession
|
|
||||||
}
|
|
||||||
|
|
||||||
// Name implements [ipnext.Extension].
|
// Name implements [ipnext.Extension].
|
||||||
func (e *extension) Name() string {
|
func (e *extension) Name() string {
|
||||||
return featureName
|
return featureName
|
||||||
@ -182,7 +173,11 @@ func (e *extension) consumeEventbusTopics(ec *eventbus.Client, port int) func(*e
|
|||||||
debugSessionsCh := e.debugSessionsCh
|
debugSessionsCh := e.debugSessionsCh
|
||||||
|
|
||||||
return func(ec *eventbus.Client) {
|
return func(ec *eventbus.Client) {
|
||||||
var rs relayServer // lazily initialized
|
rs, err := udprelay.NewServer(e.logf, port, overrideAddrs())
|
||||||
|
if err != nil {
|
||||||
|
e.logf("error initializing server: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if rs != nil {
|
if rs != nil {
|
||||||
rs.Close()
|
rs.Close()
|
||||||
@ -194,7 +189,6 @@ func (e *extension) consumeEventbusTopics(ec *eventbus.Client, port int) func(*e
|
|||||||
return
|
return
|
||||||
case respCh := <-debugSessionsCh:
|
case respCh := <-debugSessionsCh:
|
||||||
if rs == nil {
|
if rs == nil {
|
||||||
// Don't initialize the server simply for a debug request.
|
|
||||||
respCh <- nil
|
respCh <- nil
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -202,7 +196,8 @@ func (e *extension) consumeEventbusTopics(ec *eventbus.Client, port int) func(*e
|
|||||||
respCh <- sessions
|
respCh <- sessions
|
||||||
case req := <-reqSub.Events():
|
case req := <-reqSub.Events():
|
||||||
if rs == nil {
|
if rs == nil {
|
||||||
var err error
|
// The server may have previously failed to initialize if
|
||||||
|
// the configured port was in use, try again.
|
||||||
rs, err = udprelay.NewServer(e.logf, port, overrideAddrs())
|
rs, err = udprelay.NewServer(e.logf, port, overrideAddrs())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.logf("error initializing server: %v", err)
|
e.logf("error initializing server: %v", err)
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import (
|
|||||||
|
|
||||||
"tailscale.com/ipn"
|
"tailscale.com/ipn"
|
||||||
"tailscale.com/tsd"
|
"tailscale.com/tsd"
|
||||||
|
"tailscale.com/types/logger"
|
||||||
"tailscale.com/types/ptr"
|
"tailscale.com/types/ptr"
|
||||||
"tailscale.com/util/eventbus"
|
"tailscale.com/util/eventbus"
|
||||||
)
|
)
|
||||||
@ -96,6 +97,7 @@ func Test_extension_profileStateChanged(t *testing.T) {
|
|||||||
sys := tsd.NewSystem()
|
sys := tsd.NewSystem()
|
||||||
bus := sys.Bus.Get()
|
bus := sys.Bus.Get()
|
||||||
e := &extension{
|
e := &extension{
|
||||||
|
logf: logger.Discard,
|
||||||
port: tt.fields.port,
|
port: tt.fields.port,
|
||||||
bus: bus,
|
bus: bus,
|
||||||
}
|
}
|
||||||
@ -154,6 +156,7 @@ func Test_extension_handleBusLifetimeLocked(t *testing.T) {
|
|||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
e := &extension{
|
e := &extension{
|
||||||
|
logf: logger.Discard,
|
||||||
bus: eventbus.New(),
|
bus: eventbus.New(),
|
||||||
shutdown: tt.shutdown,
|
shutdown: tt.shutdown,
|
||||||
port: tt.port,
|
port: tt.port,
|
||||||
|
|||||||
@ -536,6 +536,7 @@ func (s *Server) listenOn(port int) error {
|
|||||||
s.uc6 = bc
|
s.uc6 = bc
|
||||||
s.uc6Port = uint16(portUint)
|
s.uc6Port = uint16(portUint)
|
||||||
}
|
}
|
||||||
|
s.logf("listening on %s:%d", network, portUint)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user