diff --git a/config.go b/config.go index c9ba5e6f..eef3cfc6 100644 --- a/config.go +++ b/config.go @@ -72,13 +72,13 @@ func (c *GraphConfig) Parse(data []byte) error { func ParseConfigFromFile(filename string) *GraphConfig { data, err := ioutil.ReadFile(filename) if err != nil { - log.Printf("Error: Config: ParseConfigFromFile: File: %v", err) + log.Printf("Config: Error: ParseConfigFromFile: File: %v", err) return nil } var config GraphConfig if err := config.Parse(data); err != nil { - log.Printf("Error: Config: ParseConfigFromFile: Parse: %v", err) + log.Printf("Config: Error: ParseConfigFromFile: Parse: %v", err) return nil } @@ -122,7 +122,7 @@ func (g *Graph) NewGraphFromConfig(config *GraphConfig, embdEtcd *EmbdEtcd, host x := slice.Index(j).Interface() res, ok := x.(Res) // convert to Res type if !ok { - return nil, fmt.Errorf("Error: Config: Can't convert: %v of type: %T to Res.", x, x) + return nil, fmt.Errorf("Config: Error: Can't convert: %v of type: %T to Res.", x, x) } if noop { res.Meta().Noop = noop diff --git a/converger.go b/converger.go index 49e43008..513919b4 100644 --- a/converger.go +++ b/converger.go @@ -209,7 +209,7 @@ func (obj *converger) Loop(startPaused bool) { continue } - case _ = <-obj.channel: + case <-obj.channel: if !obj.isConverged() { if obj.converged { // we're doing a state change if obj.stateFn != nil { diff --git a/etcd.go b/etcd.go index 1dad5d6b..7ace1e32 100644 --- a/etcd.go +++ b/etcd.go @@ -180,8 +180,8 @@ type EmbdEtcd struct { // EMBeddeD etcd delq chan *DL // delete queue txnq chan *TN // txn queue - converger Converger // converged tracking prefix string // folder prefix to use for misc storage + converger Converger // converged tracking // etcd server related serverwg sync.WaitGroup // wait for server to shutdown @@ -190,7 +190,7 @@ type EmbdEtcd struct { // EMBeddeD etcd } // NewEmbdEtcd creates the top level embedded etcd struct client and server obj -func NewEmbdEtcd(hostname string, seeds, clientURLs, serverURLs etcdtypes.URLs, noServer bool, idealClusterSize uint16, converger Converger, prefix string) *EmbdEtcd { +func NewEmbdEtcd(hostname string, seeds, clientURLs, serverURLs etcdtypes.URLs, noServer bool, idealClusterSize uint16, prefix string, converger Converger) *EmbdEtcd { endpoints := make(etcdtypes.URLsMap) if hostname == seedSentinel { // safety return nil @@ -1557,8 +1557,7 @@ func (obj *EmbdEtcd) idealClusterSizeCallback(re *RE) error { } path := fmt.Sprintf("/%s/idealClusterSize", NS) for _, event := range re.response.Events { - key := bytes.NewBuffer(event.Kv.Key).String() - if key != path { + if key := bytes.NewBuffer(event.Kv.Key).String(); key != path { continue } if event.Type != etcd.EventTypePut { diff --git a/exec.go b/exec.go index f8bb85d2..200359b2 100644 --- a/exec.go +++ b/exec.go @@ -184,7 +184,7 @@ func (obj *ExecRes) Watch(processChan chan Event) { return // exit } - case _ = <-cuuid.ConvergedTimer(): + case <-cuuid.ConvergedTimer(): cuuid.SetConverged(true) // converged! continue } diff --git a/file.go b/file.go index 34c4d580..9aedc1a4 100644 --- a/file.go +++ b/file.go @@ -248,7 +248,7 @@ func (obj *FileRes) Watch(processChan chan Event) { } //dirty = false // these events don't invalidate state - case _ = <-cuuid.ConvergedTimer(): + case <-cuuid.ConvergedTimer(): cuuid.SetConverged(true) // converged! continue } diff --git a/main.go b/main.go index dc40d8fb..b6f258ba 100644 --- a/main.go +++ b/main.go @@ -63,6 +63,7 @@ func waitForSignal(exit chan bool) { } } +// run is the main run target. func run(c *cli.Context) error { var start = time.Now().UnixNano() log.Printf("This is: %v, version: %v", program, version) @@ -184,10 +185,14 @@ func run(c *cli.Context) error { serverURLs, c.Bool("no-server"), idealClusterSize, - converger, prefix, + converger, ) - if err := EmbdEtcd.Startup(); err != nil { // startup (returns when etcd main loop is running) + if EmbdEtcd == nil { + // TODO: verify EmbdEtcd is not nil below... + log.Printf("Main: Etcd: Creation failed!") + exit <- true + } else if err := EmbdEtcd.Startup(); err != nil { // startup (returns when etcd main loop is running) log.Printf("Main: Etcd: Startup failed: %v", err) exit <- true } @@ -241,7 +246,7 @@ func run(c *cli.Context) error { config = ParseConfigFromPuppet(c.String("puppet"), c.String("puppet-conf")) } if config == nil { - log.Printf("Config parse failure") + log.Printf("Config: Parse failure") continue } diff --git a/noop.go b/noop.go index 174ad943..231c852e 100644 --- a/noop.go +++ b/noop.go @@ -75,7 +75,7 @@ func (obj *NoopRes) Watch(processChan chan Event) { return // exit } - case _ = <-cuuid.ConvergedTimer(): + case <-cuuid.ConvergedTimer(): cuuid.SetConverged(true) // converged! continue } diff --git a/packagekit.go b/packagekit.go index 6113b4b5..0885ffd9 100644 --- a/packagekit.go +++ b/packagekit.go @@ -415,7 +415,7 @@ loop: } else { return fmt.Errorf("PackageKit: Error: %v", signal.Body) } - case _ = <-TimeAfterOrBlock(timeout): + case <-TimeAfterOrBlock(timeout): if finished { log.Println("PackageKit: Timeout: InstallPackages: Waiting for 'Destroy'") return nil // got tired of waiting for Destroy diff --git a/pkg.go b/pkg.go index 8299975a..d5400687 100644 --- a/pkg.go +++ b/pkg.go @@ -161,7 +161,7 @@ func (obj *PkgRes) Watch(processChan chan Event) { } dirty = false // these events don't invalidate state - case _ = <-cuuid.ConvergedTimer(): + case <-cuuid.ConvergedTimer(): cuuid.SetConverged(true) // converged! continue } diff --git a/remote.go b/remote.go index 53d9485e..6dbb88ba 100644 --- a/remote.go +++ b/remote.go @@ -342,8 +342,9 @@ func (obj *SSH) SftpClean() error { // TODO: fix this possible? panic if we ever end up caring about it... // close any copy operations that are in progress... obj.f1.Close() // TODO: we probably only need to shutdown one of them, - obj.f2.Close() // but which one should we shutdown? close both for now - + if obj.f2 != nil { + obj.f2.Close() // but which one should we shutdown? close both for now + } // clean up the graph definition in obj.remotewd err := obj.sftp.Remove(obj.filepath) @@ -567,6 +568,9 @@ func (obj *SSH) ExecExit() error { // Go kicks off the entire sequence of one SSH connection. func (obj *SSH) Go() error { + defer func() { + obj.exiting = true // bonus: set this as a bonus on exit... + }() if obj.exitCheck() { return nil } @@ -852,6 +856,7 @@ func (obj *Remotes) Run() { } obj.lock.Lock() sshobj, exists := obj.sshmap[f] + obj.lock.Unlock() if !exists || sshobj == nil { continue // skip, this hasn't happened yet } @@ -862,7 +867,6 @@ func (obj *Remotes) Run() { if _, err := sshobj.SftpGraphCopy(); err == nil { // push new copy log.Printf("Remote: Copied over new graph definition: %s", f) } // ignore errors - obj.lock.Unlock() } }() } @@ -884,7 +888,7 @@ func (obj *Remotes) Run() { obj.sshmap[f] = sshobj // save a reference obj.wg.Add(1) - go func() { + go func(sshobj *SSH, f string) { if obj.cConns != 0 { defer obj.semaphore.V(1) } @@ -892,7 +896,7 @@ func (obj *Remotes) Run() { if err := sshobj.Go(); err != nil { log.Printf("Remote: Error: %s", err) } - }() + }(sshobj, f) obj.lock.Unlock() } } diff --git a/svc.go b/svc.go index d0b8b66d..0fda08a2 100644 --- a/svc.go +++ b/svc.go @@ -146,7 +146,7 @@ func (obj *SvcRes) Watch(processChan chan Event) { obj.SetState(resStateWatching) // reset select { - case _ = <-buschan: // XXX wait for new units event to unstick + case <-buschan: // XXX wait for new units event to unstick cuuid.SetConverged(false) // loop so that we can see the changed invalid signal log.Printf("Svc[%v]->DaemonReload()", svc) @@ -160,7 +160,7 @@ func (obj *SvcRes) Watch(processChan chan Event) { dirty = true } - case _ = <-cuuid.ConvergedTimer(): + case <-cuuid.ConvergedTimer(): cuuid.SetConverged(true) // converged! continue } @@ -208,7 +208,7 @@ func (obj *SvcRes) Watch(processChan chan Event) { dirty = true } - case _ = <-cuuid.ConvergedTimer(): + case <-cuuid.ConvergedTimer(): cuuid.SetConverged(true) // converged! continue } diff --git a/test/test-govet.sh b/test/test-govet.sh index 4cad9d23..0b616e6f 100755 --- a/test/test-govet.sh +++ b/test/test-govet.sh @@ -5,4 +5,5 @@ ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" # dir! cd "${ROOT}" go vet && echo PASS || exit 1 # since it doesn't output an ok message on pass -grep 'log.' *.go | grep '\\n"' && exit 1 || echo PASS # no \n needed in log.Printf() +grep 'log.' *.go | grep '\\n"' && echo 'no \n needed in log.Printf()' && exit 1 || echo PASS # no \n needed in log.Printf() +grep 'case _ = <-' *.go && echo 'case _ = <- can be simplified to: case <-' && exit 1 || echo PASS # this can be simplified diff --git a/timer.go b/timer.go index 7f14c56b..4b602cce 100644 --- a/timer.go +++ b/timer.go @@ -90,7 +90,7 @@ func (obj *TimerRes) Watch(processChan chan Event) { if exit, _ := obj.ReadEvent(&event); exit { return } - case _ = <-cuuid.ConvergedTimer(): + case <-cuuid.ConvergedTimer(): cuuid.SetConverged(true) continue }