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
bus.Manager.LoadProviders()
bus.Reload()
err = machine.CreateSentinel("bundles")
if !c.IgnoreBundleErrors && err != nil {
return err

View File

@@ -10,14 +10,24 @@ import (
)
// Manager is the bus instance manager, which subscribes plugins to events emitted.
var Manager = &Bus{
Manager: pluggable.NewManager(
bus.AllEvents,
),
var Manager = NewBus()
func NewBus() *Bus {
return &Bus{
Manager: pluggable.NewManager(
bus.AllEvents,
),
}
}
func Reload() {
Manager = NewBus()
Manager.Initialize()
}
type Bus struct {
*pluggable.Manager
registered bool
}
func (b *Bus) LoadProviders() {
@@ -26,29 +36,32 @@ func (b *Bus) LoadProviders() {
}
func (b *Bus) Initialize() {
b.LoadProviders()
for i := range b.Manager.Events {
e := b.Manager.Events[i]
b.Manager.Response(e, func(p *pluggable.Plugin, r *pluggable.EventResponse) {
if os.Getenv("BUS_DEBUG") == "true" {
fmt.Println(
fmt.Sprintf("[provider event: %s]", e),
"received from",
p.Name,
"at",
p.Executable,
r,
)
}
if r.Errored() {
err := fmt.Sprintf("Provider %s at %s had an error: %s", p.Name, p.Executable, r.Error)
fmt.Println(err)
os.Exit(1)
} else {
if r.State != "" {
fmt.Println(fmt.Sprintf("[provider event: %s]", e), r.State)
if !b.registered {
b.LoadProviders()
for i := range b.Manager.Events {
e := b.Manager.Events[i]
b.Manager.Response(e, func(p *pluggable.Plugin, r *pluggable.EventResponse) {
if os.Getenv("BUS_DEBUG") == "true" {
fmt.Println(
fmt.Sprintf("[provider event: %s]", e),
"received from",
p.Name,
"at",
p.Executable,
r,
)
}
}
})
if r.Errored() {
err := fmt.Sprintf("Provider %s at %s had an error: %s", p.Name, p.Executable, r.Error)
fmt.Println(err)
os.Exit(1)
} else {
if r.State != "" {
fmt.Println(fmt.Sprintf("[provider event: %s]", e), r.State)
}
}
})
}
b.registered = true
}
}