Commit 3c37c0fc authored by Kirill Smelkov's avatar Kirill Smelkov

fixup! TalkMaster: Switch master if dialed M is secondary

- validate received NotPrimaryMaster
- use Address.String() instead of printf with format that works only for ipv6
- add some logging, comments and TODO
parent 354887e3
...@@ -122,19 +122,29 @@ func (node *_MasteredNode) TalkMaster(ctx context.Context, f func(context.Contex ...@@ -122,19 +122,29 @@ func (node *_MasteredNode) TalkMaster(ctx context.Context, f func(context.Contex
node.updateOperational(func() { node.updateOperational(func() {
node.mlink = nil node.mlink = nil
}) })
// TODO log "trying maddr as PM"
err := node.talkMaster1(ctx, ctx0, maddr, f) err := node.talkMaster1(ctx, ctx0, maddr, f)
log.Warning(ctx, err) // XXX Warning -> Error? log.Warning(ctx, err) // XXX Warning -> Error?
if errors.Is(err, cmdShutdown) { if errors.Is(err, cmdShutdown) {
return err // M commands to shutdown return err // M commands to shutdown
} }
// NotPrimaryMaster -> jump to trying what it says is primary
var notPrimaryMaster *proto.NotPrimaryMaster var notPrimaryMaster *proto.NotPrimaryMaster
if errors.As(err, &notPrimaryMaster) { if errors.As(err, &notPrimaryMaster) {
primary := notPrimaryMaster.KnownMasterList[notPrimaryMaster.Primary] p := int(notPrimaryMaster.Primary)
maddr = fmt.Sprintf("[%s]:%v", primary.Host, primary.Port) if !(0 <= p && p < len(notPrimaryMaster.KnownMasterList)) {
log.Warning(ctx, "malformed NotPrimaryMaster reply - ignoring")
} else {
// TODO update masterRegistry from received KnownMasterList
primary := notPrimaryMaster.KnownMasterList[p]
maddr = primary.Address.String()
log.Info(ctx, "switching to try %s as primary master", maddr)
}
} }
// TODO if err == "reject identification / protocol error" -> shutdown client? // TODO if err == "reject identification / protocol error" -> shutdown client?
// TODO if err == "cannot connect" -> start trying other master nodes from MasterAddrSlice
// exit on cancel / throttle reconnecting // exit on cancel / throttle reconnecting
select { select {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment