Skip to content

Commit 9655dc6

Browse files
committed
status: return error if subserver already registered
Let the status manager first check its map of subservers before registering a new one to ensure that an existing subserver is not being overridden.
1 parent 73cadc5 commit 9655dc6

File tree

3 files changed

+33
-11
lines changed

3 files changed

+33
-11
lines changed

status/manager.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,30 +145,38 @@ func (s *Manager) SubServerStatus(_ context.Context,
145145

146146
// RegisterSubServer will create a new sub-server entry for the Manager to
147147
// keep track of.
148-
func (s *Manager) RegisterSubServer(name string, opts ...SubServerOption) {
148+
func (s *Manager) RegisterSubServer(name string,
149+
opts ...SubServerOption) error {
150+
149151
s.mu.RLock()
150152
defer s.mu.RUnlock()
151153

152-
s.registerSubServerUnsafe(name, true, opts...)
154+
return s.registerSubServerUnsafe(name, true, opts...)
153155
}
154156

155157
// RegisterAndEnableSubServer will create a new sub-server entry for the
156158
// Manager to keep track of and will set it as enabled.
157159
func (s *Manager) RegisterAndEnableSubServer(name string,
158-
opts ...SubServerOption) {
160+
opts ...SubServerOption) error {
159161

160162
s.mu.RLock()
161163
defer s.mu.RUnlock()
162164

163-
s.registerSubServerUnsafe(name, false, opts...)
165+
return s.registerSubServerUnsafe(name, false, opts...)
164166
}
165167

166168
func (s *Manager) registerSubServerUnsafe(name string, disabled bool,
167-
opts ...SubServerOption) {
169+
opts ...SubServerOption) error {
170+
171+
_, ok := s.subServers[name]
172+
if ok {
173+
return fmt.Errorf("a subserver with name %s has already "+
174+
"been registered with the status manager", name)
175+
}
168176

169-
ss := newSubServer(disabled, opts...)
177+
s.subServers[name] = newSubServer(disabled, opts...)
170178

171-
s.subServers[name] = ss
179+
return nil
172180
}
173181

174182
// SetCustomStatus updates the custom status of the given sub-server to the

subservers/manager.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ func NewManager(permsMgr *perms.Manager,
5353
// AddServer adds a new subServer to the manager's set.
5454
func (s *Manager) AddServer(ss SubServer, enable bool) error {
5555
// Register all sub-servers with the status server.
56-
s.statusServer.RegisterSubServer(ss.Name())
56+
err := s.statusServer.RegisterSubServer(ss.Name())
57+
if err != nil {
58+
return err
59+
}
5760

5861
// If the sub-server has explicitly been disabled, then we don't add it
5962
// to the set of servers tracked by the Manager.

terminal.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,22 @@ func (g *LightningTerminal) Run() error {
279279
}
280280

281281
// Register LND, LiT and Accounts with the status manager.
282-
g.statusMgr.RegisterAndEnableSubServer(
282+
err = g.statusMgr.RegisterAndEnableSubServer(
283283
subservers.LND, status.WithIsReadyOverride(lndOverride),
284284
)
285-
g.statusMgr.RegisterAndEnableSubServer(subservers.LIT)
286-
g.statusMgr.RegisterSubServer(subservers.ACCOUNTS)
285+
if err != nil {
286+
return err
287+
}
288+
289+
err = g.statusMgr.RegisterAndEnableSubServer(subservers.LIT)
290+
if err != nil {
291+
return err
292+
}
293+
294+
err = g.statusMgr.RegisterSubServer(subservers.ACCOUNTS)
295+
if err != nil {
296+
return err
297+
}
287298

288299
// Also enable the accounts subserver if it's not disabled.
289300
if !g.cfg.Accounts.Disable {

0 commit comments

Comments
 (0)