diff --git a/etcd/etcd.go b/etcd/etcd.go index 9dee5c0e..a3d5f348 100644 --- a/etcd/etcd.go +++ b/etcd/etcd.go @@ -262,6 +262,9 @@ type EmbdEtcd struct { // EMBeddeD etcd // NoNetwork causes this to use unix:// sockets instead of TCP for // connections. NoNetwork bool + // NoMagic turns off some things which aren't needed when used with a + // simple Seeds and NoServer option. + NoMagic bool // Chooser is the implementation of the algorithm that decides which // hosts to add or remove to grow and shrink the cluster. @@ -418,6 +421,10 @@ func (obj *EmbdEtcd) Validate() error { } } + if obj.NoMagic && !obj.NoServer { + return fmt.Errorf("we need Magic if we're a Server") + } + if _, err := etcdUtil.CopyURLs(obj.Seeds); err != nil { // this will validate return errwrap.Wrapf(err, "the Seeds are not valid") } @@ -1215,11 +1222,13 @@ func (obj *EmbdEtcd) Run() error { obj.activateExit4.Ack() // startup endpoints watcher (to learn about other servers) - ctx, cancel := context.WithCancel(unblockCtx) - defer cancel() // cleanup on close... - if err := obj.runEndpoints(ctx); err != nil { - obj.activateExit5.Ack() - return err + if !obj.NoMagic { // disable possibly buggy code for now + ctx, cancel := context.WithCancel(unblockCtx) + defer cancel() // cleanup on close... + if err := obj.runEndpoints(ctx); err != nil { + obj.activateExit5.Ack() + return err + } } obj.activateExit5.Ack() // We don't set state, we only watch others, so nothing to defer close! diff --git a/lib/main.go b/lib/main.go index 200453d1..a0b5d750 100644 --- a/lib/main.go +++ b/lib/main.go @@ -179,6 +179,10 @@ type Config struct { // clustering or opening tcp ports to the outside. NoNetwork bool `arg:"--no-network,env:MGMT_NO_NETWORK" help:"run single node instance without clustering or opening tcp ports to the outside"` + // NoMagic turns off some things which aren't needed when used with a + // simple Seeds and NoServer option. + NoMagic bool `arg:"--no-magic" help:"do not do any etcd magic (for simple clients)"` + // NoPgp disables pgp functionality. NoPgp bool `arg:"--no-pgp" help:"don't create pgp keys"` @@ -511,6 +515,7 @@ func (obj *Main) Run() error { NoServer: obj.NoServer, NoNetwork: obj.NoNetwork, + NoMagic: obj.NoMagic, Chooser: &chooser.DynamicSize{ IdealClusterSize: obj.idealClusterSize, diff --git a/setup/svc.go b/setup/svc.go index de5c5754..b33ce9e7 100644 --- a/setup/svc.go +++ b/setup/svc.go @@ -118,6 +118,7 @@ func (obj *Svc) Run(ctx context.Context) error { if obj.SetupSvcArgs.NoServer { argv = append(argv, "--no-server") + argv = append(argv, "--no-magic") // XXX: fix this workaround } argv = append(argv, "empty $OPTS")