fix: return a proper error from Node.Join()
This commit is contained in:
parent
fa9cbe6d5c
commit
27edc01912
1 changed files with 12 additions and 12 deletions
|
|
@ -3,6 +3,7 @@ package node
|
|||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
|
|
@ -14,14 +15,14 @@ import (
|
|||
)
|
||||
|
||||
type Role struct {
|
||||
state *state.RuntimeState
|
||||
state *state.RuntimeState
|
||||
keepaliveGroup sync.WaitGroup
|
||||
config config.NodeConfig
|
||||
config config.NodeConfig
|
||||
}
|
||||
|
||||
func New(state *state.RuntimeState, config config.NodeConfig) *Role {
|
||||
return &Role{
|
||||
state: state,
|
||||
state: state,
|
||||
config: config,
|
||||
}
|
||||
}
|
||||
|
|
@ -40,25 +41,28 @@ func (r *Role) Join(bootstrap string) error {
|
|||
return errors.New("no masters configured")
|
||||
}
|
||||
|
||||
var errs []error
|
||||
for m := range masters {
|
||||
logger := log.With().Str("host", m).Logger()
|
||||
logger.Debug().Msg("trying to join via master")
|
||||
|
||||
nodes, err := client.Post[[]types.Node](m, "/master/join", r.state.Self)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
logger.Debug().Err(err).Msg("unable to join")
|
||||
continue
|
||||
}
|
||||
|
||||
if err := r.state.Registry.Set(*nodes); err != nil {
|
||||
logger.Debug().Err(err).Msg("unable to set master's nodes")
|
||||
errs = append(errs, err)
|
||||
continue
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
return errors.New("unable to join")
|
||||
return fmt.Errorf("unable to join with any master: %w", errors.Join(errs...))
|
||||
}
|
||||
|
||||
func (r *Role) Leave() error {
|
||||
|
|
@ -67,7 +71,7 @@ func (r *Role) Leave() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
sent := false
|
||||
var errs []error
|
||||
for _, m := range masters {
|
||||
logger := log.With().Str("name", m.Hostname).Logger()
|
||||
logger.Debug().Msg("sending leave message")
|
||||
|
|
@ -75,19 +79,15 @@ func (r *Role) Leave() error {
|
|||
_, err := client.Post[any](m.Endpoint, types.PathMasterLeave, r.state.Self)
|
||||
if err != nil {
|
||||
logger.Debug().Err(err).Msg("unable to send leave message")
|
||||
errs = append(errs, err)
|
||||
continue
|
||||
} else {
|
||||
sent = true
|
||||
logger.Debug().Msg("leave message sent")
|
||||
break
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
if !sent {
|
||||
return errors.New("unable to send leave message")
|
||||
}
|
||||
|
||||
return nil
|
||||
return fmt.Errorf("unable to send leave message to any master: %w", errors.Join(errs...))
|
||||
}
|
||||
|
||||
func (r *Role) OnStartup(ctx context.Context) error {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue