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 (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
@ -14,14 +15,14 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Role struct {
|
type Role struct {
|
||||||
state *state.RuntimeState
|
state *state.RuntimeState
|
||||||
keepaliveGroup sync.WaitGroup
|
keepaliveGroup sync.WaitGroup
|
||||||
config config.NodeConfig
|
config config.NodeConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(state *state.RuntimeState, config config.NodeConfig) *Role {
|
func New(state *state.RuntimeState, config config.NodeConfig) *Role {
|
||||||
return &Role{
|
return &Role{
|
||||||
state: state,
|
state: state,
|
||||||
config: config,
|
config: config,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -40,25 +41,28 @@ func (r *Role) Join(bootstrap string) error {
|
||||||
return errors.New("no masters configured")
|
return errors.New("no masters configured")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var errs []error
|
||||||
for m := range masters {
|
for m := range masters {
|
||||||
logger := log.With().Str("host", m).Logger()
|
logger := log.With().Str("host", m).Logger()
|
||||||
logger.Debug().Msg("trying to join via master")
|
logger.Debug().Msg("trying to join via master")
|
||||||
|
|
||||||
nodes, err := client.Post[[]types.Node](m, "/master/join", r.state.Self)
|
nodes, err := client.Post[[]types.Node](m, "/master/join", r.state.Self)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errs = append(errs, err)
|
||||||
logger.Debug().Err(err).Msg("unable to join")
|
logger.Debug().Err(err).Msg("unable to join")
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := r.state.Registry.Set(*nodes); err != nil {
|
if err := r.state.Registry.Set(*nodes); err != nil {
|
||||||
logger.Debug().Err(err).Msg("unable to set master's nodes")
|
logger.Debug().Err(err).Msg("unable to set master's nodes")
|
||||||
|
errs = append(errs, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
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 {
|
func (r *Role) Leave() error {
|
||||||
|
|
@ -67,7 +71,7 @@ func (r *Role) Leave() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
sent := false
|
var errs []error
|
||||||
for _, m := range masters {
|
for _, m := range masters {
|
||||||
logger := log.With().Str("name", m.Hostname).Logger()
|
logger := log.With().Str("name", m.Hostname).Logger()
|
||||||
logger.Debug().Msg("sending leave message")
|
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)
|
_, err := client.Post[any](m.Endpoint, types.PathMasterLeave, r.state.Self)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Debug().Err(err).Msg("unable to send leave message")
|
logger.Debug().Err(err).Msg("unable to send leave message")
|
||||||
|
errs = append(errs, err)
|
||||||
continue
|
continue
|
||||||
} else {
|
} else {
|
||||||
sent = true
|
|
||||||
logger.Debug().Msg("leave message sent")
|
logger.Debug().Msg("leave message sent")
|
||||||
break
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !sent {
|
return fmt.Errorf("unable to send leave message to any master: %w", errors.Join(errs...))
|
||||||
return errors.New("unable to send leave message")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Role) OnStartup(ctx context.Context) error {
|
func (r *Role) OnStartup(ctx context.Context) error {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue