etcd: Chooser shouldn't be used with --no-server

We forgot to check this in Init().
This commit is contained in:
James Shubin
2023-08-29 22:05:12 -04:00
parent 6f4b6cec7e
commit 532e2ec8e1

View File

@@ -253,6 +253,7 @@ type EmbdEtcd struct { // EMBeddeD etcd
// Chooser is the implementation of the algorithm that decides which // Chooser is the implementation of the algorithm that decides which
// hosts to add or remove to grow and shrink the cluster. // hosts to add or remove to grow and shrink the cluster.
Chooser chooser.Chooser Chooser chooser.Chooser
chooser chooser.Chooser // the one we use if it's active
// Converger is a converged coordinator object that can be used to // Converger is a converged coordinator object that can be used to
// track the converged state. // track the converged state.
@@ -496,7 +497,7 @@ func (obj *EmbdEtcd) Init() error {
} }
} }
if obj.Chooser != nil { if !obj.NoServer { // you don't need a Chooser if there's no server...
data := &chooser.Data{ data := &chooser.Data{
Hostname: obj.Hostname, Hostname: obj.Hostname,
Debug: obj.Debug, Debug: obj.Debug,
@@ -504,7 +505,8 @@ func (obj *EmbdEtcd) Init() error {
obj.Logf("chooser: "+format, v...) obj.Logf("chooser: "+format, v...)
}, },
} }
if err := obj.Chooser.Init(data); err != nil { obj.chooser = obj.Chooser // copy
if err := obj.chooser.Init(data); err != nil {
return errwrap.Wrapf(err, "error initializing chooser") return errwrap.Wrapf(err, "error initializing chooser")
} }
} }
@@ -578,8 +580,8 @@ func (obj *EmbdEtcd) Init() error {
func (obj *EmbdEtcd) Close() error { func (obj *EmbdEtcd) Close() error {
var reterr error var reterr error
if obj.Chooser != nil { if obj.chooser != nil {
reterr = errwrap.Append(reterr, obj.Chooser.Close()) reterr = errwrap.Append(reterr, obj.chooser.Close())
} }
return reterr return reterr
@@ -890,7 +892,7 @@ func (obj *EmbdEtcd) Run() error {
go func() { go func() {
defer obj.wg.Done() defer obj.wg.Done()
defer close(obj.errExit2) // multi-signal for errChan close op defer close(obj.errExit2) // multi-signal for errChan close op
if obj.Chooser == nil { if obj.chooser == nil {
return return
} }
@@ -907,12 +909,12 @@ func (obj *EmbdEtcd) Run() error {
obj.err(errwrap.Wrapf(err, "error during chooser init")) obj.err(errwrap.Wrapf(err, "error during chooser init"))
return return
} }
if err := obj.Chooser.Connect(exitCtx, c); err != nil { if err := obj.chooser.Connect(exitCtx, c); err != nil {
obj.err(errwrap.Wrapf(err, "error during chooser connect")) obj.err(errwrap.Wrapf(err, "error during chooser connect"))
return return
} }
ch, err := obj.Chooser.Watch() ch, err := obj.chooser.Watch()
if err != nil { if err != nil {
obj.err(errwrap.Wrapf(err, "error running chooser watch")) obj.err(errwrap.Wrapf(err, "error running chooser watch"))
return return
@@ -920,10 +922,10 @@ func (obj *EmbdEtcd) Run() error {
chooserChan = ch // watch it chooserChan = ch // watch it
}() }()
defer func() { defer func() {
if obj.Chooser == nil { if obj.chooser == nil {
return return
} }
obj.Chooser.Disconnect() // ignore error if any obj.chooser.Disconnect() // ignore error if any
}() }()
// call this once to start the server so we'll be able to connect // call this once to start the server so we'll be able to connect