Skip to content
This repository has been archived by the owner on Aug 3, 2020. It is now read-only.

Commit

Permalink
Merge pull request #16 from ibuildthecloud/reload
Browse files Browse the repository at this point in the history
Reload immediately, not on an interval
  • Loading branch information
ibuildthecloud committed Mar 22, 2016
2 parents 5341fd0 + 2979a2c commit 2fcb66f
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 33 deletions.
2 changes: 1 addition & 1 deletion content/etc/monit/conf.d/rancher-metadata
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
check process rancher-metadata matching "rancher-metadata"
check process rancher-metadata matching "/var/lib/cattle/bin/rancher-metadata"
start program = "/etc/init.d/rancher-metadata start"
stop program = "/etc/init.d/rancher-metadata stop"
51 changes: 20 additions & 31 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"encoding/json"
"flag"
"fmt"
"io"
"io/ioutil"
"net"
"net/http"
Expand All @@ -14,7 +15,6 @@ import (
"strconv"
"strings"
"syscall"
"time"

log "github.com/Sirupsen/logrus"
"github.com/golang/gddo/httputil"
Expand Down Expand Up @@ -49,11 +49,9 @@ var (
router = mux.NewRouter()
answers Versions

VERSION string
wantRevision = 1
loadedRevision = 0
loading = false
ticker = time.NewTicker(1 * time.Second)
VERSION string
loading = false
reloadChan = make(chan chan error)
)

func main() {
Expand Down Expand Up @@ -116,7 +114,6 @@ func parseFlags() {
func loadAnswers() (err error) {
log.Debug("Loading answers")
loading = true
revision := wantRevision
neu, err := ParseAnswers(*answersFile)
if err == nil {
for _, data := range neu {
Expand All @@ -132,9 +129,8 @@ func loadAnswers() (err error) {
}

answers = neu
loadedRevision = revision
loading = false
log.Infof("Loaded answers revision %d for %d versions", revision, len(answers))
log.Infof("Loaded answers")
} else {
log.Errorf("Failed to load answers: %v", err)
}
Expand Down Expand Up @@ -162,22 +158,18 @@ func watchSignals() {
go func() {
for _ = range c {
log.Info("Received HUP signal")
wantRevision += 1
reloadChan <- nil
}
}()

go func() {
for {
select {
case <-ticker.C:
//log.Info("Ping")
if !loading && loadedRevision < wantRevision {
loadAnswers()
}
for resp := range reloadChan {
err := loadAnswers()
if resp != nil {
resp <- err
}
}
}()

}

func watchHttp() {
Expand All @@ -190,19 +182,16 @@ func watchHttp() {
}

func httpReload(w http.ResponseWriter, req *http.Request) {
wantRevision += 1
waitFor := wantRevision
log.Debugf("Received HTTP reload request, wait for %d, ", waitFor)

for {
select {
case <-time.After(100 * time.Millisecond):
//log.Debugf("Now at %d, waiting for %d", loadedRevision, waitFor)
if loadedRevision >= waitFor {
fmt.Fprintf(w, "OK %d\r\n", loadedRevision)
return
}
}
log.Debugf("Received HTTP reload request")
respChan := make(chan error)
reloadChan <- respChan
err := <-respChan

if err == nil {
io.WriteString(w, "OK")
} else {
w.WriteHeader(500)
io.WriteString(w, err.Error())
}
}

Expand Down
3 changes: 2 additions & 1 deletion parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,16 @@ func convertKeysToStrings(item interface{}) interface{} {
}

func ParseAnswers(path string) (out Versions, err error) {
var tmp Versions
data, err := ioutil.ReadFile(path)
if err != nil {
if os.IsNotExist(err) {
log.Warn("Failed to find: ", path)
return tmp, nil
}
return nil, err
}

var tmp Versions
err = yaml.Unmarshal(data, &tmp)

tmp = convertVersionKeysToStrings(tmp)
Expand Down

0 comments on commit 2fcb66f

Please sign in to comment.