bug: Make bus Initialize idempotent, add Reload

This commit is contained in:
Ettore Di Giacinto
2022-08-20 21:47:16 +00:00
committed by Itxaka
parent 1254c09745
commit 6b5c4d416c
2 changed files with 41 additions and 28 deletions

View File

@@ -68,7 +68,7 @@ func Run(opts ...Option) error {
} }
// Re-load providers // Re-load providers
bus.Manager.LoadProviders() bus.Reload()
err = machine.CreateSentinel("bundles") err = machine.CreateSentinel("bundles")
if !c.IgnoreBundleErrors && err != nil { if !c.IgnoreBundleErrors && err != nil {
return err return err

View File

@@ -10,14 +10,24 @@ import (
) )
// Manager is the bus instance manager, which subscribes plugins to events emitted. // Manager is the bus instance manager, which subscribes plugins to events emitted.
var Manager = &Bus{ var Manager = NewBus()
func NewBus() *Bus {
return &Bus{
Manager: pluggable.NewManager( Manager: pluggable.NewManager(
bus.AllEvents, bus.AllEvents,
), ),
}
}
func Reload() {
Manager = NewBus()
Manager.Initialize()
} }
type Bus struct { type Bus struct {
*pluggable.Manager *pluggable.Manager
registered bool
} }
func (b *Bus) LoadProviders() { func (b *Bus) LoadProviders() {
@@ -26,6 +36,7 @@ func (b *Bus) LoadProviders() {
} }
func (b *Bus) Initialize() { func (b *Bus) Initialize() {
if !b.registered {
b.LoadProviders() b.LoadProviders()
for i := range b.Manager.Events { for i := range b.Manager.Events {
e := b.Manager.Events[i] e := b.Manager.Events[i]
@@ -51,4 +62,6 @@ func (b *Bus) Initialize() {
} }
}) })
} }
b.registered = true
}
} }