Skip to content

Commit 73cadc5

Browse files
committed
subservers: use a map indexed by name for subservers
So that we can quickly access a sub-server by its name.
1 parent 9eb11e2 commit 73cadc5

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

subservers/manager.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ var (
3333

3434
// Manager manages a set of subServer objects.
3535
type Manager struct {
36-
servers []*subServerWrapper
36+
servers map[string]*subServerWrapper
3737
permsMgr *perms.Manager
3838
statusServer *status.Manager
3939
mu sync.RWMutex
@@ -44,30 +44,37 @@ func NewManager(permsMgr *perms.Manager,
4444
statusServer *status.Manager) *Manager {
4545

4646
return &Manager{
47+
servers: make(map[string]*subServerWrapper),
4748
permsMgr: permsMgr,
4849
statusServer: statusServer,
4950
}
5051
}
5152

5253
// AddServer adds a new subServer to the manager's set.
53-
func (s *Manager) AddServer(ss SubServer, enable bool) {
54+
func (s *Manager) AddServer(ss SubServer, enable bool) error {
5455
// Register all sub-servers with the status server.
5556
s.statusServer.RegisterSubServer(ss.Name())
5657

5758
// If the sub-server has explicitly been disabled, then we don't add it
5859
// to the set of servers tracked by the Manager.
5960
if !enable {
60-
return
61+
return nil
6162
}
6263

6364
s.mu.Lock()
6465
defer s.mu.Unlock()
6566

67+
_, ok := s.servers[ss.Name()]
68+
if ok {
69+
return fmt.Errorf("a subserver with name %s has already "+
70+
"been registered with the subserver manager", ss.Name())
71+
}
72+
6673
// Add the enabled server to the set of servers tracked by the Manager.
67-
s.servers = append(s.servers, &subServerWrapper{
74+
s.servers[ss.Name()] = &subServerWrapper{
6875
SubServer: ss,
6976
quit: make(chan struct{}),
70-
})
77+
}
7178

7279
// Register the sub-server's permissions with the permission manager.
7380
s.permsMgr.RegisterSubServer(
@@ -76,6 +83,8 @@ func (s *Manager) AddServer(ss SubServer, enable bool) {
7683

7784
// Mark the sub-server as enabled with the status manager.
7885
s.statusServer.SetEnabled(ss.Name())
86+
87+
return nil
7988
}
8089

8190
// StartIntegratedServers starts all the manager's sub-servers that should be

terminal.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,10 @@ func (g *LightningTerminal) Run() error {
296296

297297
// Register our sub-servers. This must be done before the REST proxy is
298298
// set up so that the correct REST handlers are registered.
299-
g.initSubServers()
299+
err = g.initSubServers()
300+
if err != nil {
301+
return fmt.Errorf("could not initialise sub-servers: %w", err)
302+
}
300303

301304
// Construct the rpcProxy. It must be initialised before the main web
302305
// server is started.
@@ -1677,33 +1680,49 @@ func (g *LightningTerminal) validateSuperMacaroon(ctx context.Context,
16771680

16781681
// initSubServers registers the faraday and loop sub-servers with the
16791682
// subServerMgr.
1680-
func (g *LightningTerminal) initSubServers() {
1681-
g.subServerMgr.AddServer(
1683+
func (g *LightningTerminal) initSubServers() error {
1684+
err := g.subServerMgr.AddServer(
16821685
subservers.NewFaradaySubServer(
16831686
g.cfg.Faraday, g.cfg.faradayRpcConfig,
16841687
g.cfg.Remote.Faraday, g.cfg.faradayRemote,
16851688
), g.cfg.FaradayMode != ModeDisable,
16861689
)
1690+
if err != nil {
1691+
return fmt.Errorf("could not register Faraday subserver: %w",
1692+
err)
1693+
}
16871694

1688-
g.subServerMgr.AddServer(
1695+
err = g.subServerMgr.AddServer(
16891696
subservers.NewLoopSubServer(
16901697
g.cfg.Loop, g.cfg.Remote.Loop, g.cfg.loopRemote,
16911698
), g.cfg.LoopMode != ModeDisable,
16921699
)
1700+
if err != nil {
1701+
return fmt.Errorf("could not register Loop subserver: %w", err)
1702+
}
16931703

1694-
g.subServerMgr.AddServer(
1704+
err = g.subServerMgr.AddServer(
16951705
subservers.NewPoolSubServer(
16961706
g.cfg.Pool, g.cfg.Remote.Pool, g.cfg.poolRemote,
16971707
), g.cfg.PoolMode != ModeDisable,
16981708
)
1709+
if err != nil {
1710+
return fmt.Errorf("could not register Pool subserver: %w", err)
1711+
}
16991712

1700-
g.subServerMgr.AddServer(
1713+
err = g.subServerMgr.AddServer(
17011714
subservers.NewTaprootAssetsSubServer(
17021715
g.cfg.Network, g.cfg.TaprootAssets,
17031716
g.cfg.Remote.TaprootAssets,
17041717
g.cfg.tapRemote, g.cfg.lndRemote,
17051718
), g.cfg.TaprootAssetsMode != ModeDisable,
17061719
)
1720+
if err != nil {
1721+
return fmt.Errorf("could not register Taproot Assets "+
1722+
"subserver: %w", err)
1723+
}
1724+
1725+
return nil
17071726
}
17081727

17091728
// BakeSuperMacaroon uses the lnd client to bake a macaroon that can include

0 commit comments

Comments
 (0)