Browse Source

fix: make transport startup failures non-fatal

A single transport failing (e.g. tor binary missing) no longer
prevents other transports from starting. Only fails if zero
transports start successfully.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
imwald-v0.58.10
woikos 3 months ago
parent
commit
69eccb21e2
No known key found for this signature in database
  1. 20
      pkg/transport/manager.go
  2. 2
      pkg/version/version

20
pkg/transport/manager.go

@ -30,24 +30,24 @@ func (m *Manager) Add(t iface.Transport) { @@ -30,24 +30,24 @@ func (m *Manager) Add(t iface.Transport) {
}
// StartAll starts all registered transports in order.
// If any transport fails to start, previously started transports are stopped.
// If a transport fails to start, it is logged and skipped.
// Returns an error only if no transports started successfully.
func (m *Manager) StartAll(ctx context.Context) error {
m.mu.RLock()
defer m.mu.RUnlock()
for i, t := range m.transports {
started := 0
for _, t := range m.transports {
log.I.F("starting transport: %s", t.Name())
if err := t.Start(ctx); err != nil {
// Stop previously started transports in reverse order
for j := i - 1; j >= 0; j-- {
if stopErr := m.transports[j].Stop(ctx); stopErr != nil {
log.E.F("failed to stop transport %s during rollback: %v",
m.transports[j].Name(), stopErr)
}
}
return fmt.Errorf("transport %s failed to start: %w", t.Name(), err)
log.E.F("transport %s failed to start: %v (skipping)", t.Name(), err)
continue
}
log.I.F("transport started: %s", t.Name())
started++
}
if started == 0 {
return fmt.Errorf("no transports started successfully")
}
return nil
}

2
pkg/version/version

@ -1 +1 @@ @@ -1 +1 @@
v0.58.8
v0.58.9

Loading…
Cancel
Save