diff --git a/router/httpTriggers.go b/router/httpTriggers.go index 2ee95c9e..c9df3008 100644 --- a/router/httpTriggers.go +++ b/router/httpTriggers.go @@ -18,6 +18,8 @@ package router import ( "log" + "os" + "strconv" "time" "github.com/gorilla/mux" @@ -69,11 +71,30 @@ func (ts *HTTPTriggerSet) watchTriggers() { return } - failureCount := 0 + // the number of connection failures we'll accept before quitting + var err error maxFailures := 5 + maxFailuresEnv := os.Getenv("FISSION_ROUTER_MAX_FAILURES") + if len(maxFailuresEnv) != 0 { + maxFailures, err = strconv.Atoi(maxFailuresEnv) + if err != nil { + log.Fatalf("FISSION_ROUTER_MAX_FAILURES must be an integer, found %v", maxFailuresEnv) + } + } + + // amount of time to sleep between polling calls + pollSleepSec := 3 + pollSleepEnv := os.Getenv("FISSION_ROUTER_POLL_SLEEP_SECONDS") + if len(pollSleepEnv) != 0 { + pollSleepSec, err = strconv.Atoi(pollSleepEnv) + if err != nil { + log.Fatalf("FISSION_ROUTER_POLL_SLEEP_SECONDS must be an integer, found %v", pollSleepEnv) + } + } // Watch controller for updates to triggers and update the router accordingly. // TODO change this to use a watch API; or maybe even watch etcd directly. + failureCount := 0 for { triggers, err := ts.controller.HTTPTriggerList() if err != nil { @@ -82,11 +103,8 @@ func (ts *HTTPTriggerSet) watchTriggers() { log.Fatalf("Failed to connect to controller after %v retries: %v", failureCount, err) } } - log.Printf("Updating router, %v triggers", len(triggers)) - ts.triggers = triggers ts.mutableRouter.updateRouter(ts.getRouterFromTriggers()) - - time.Sleep(3 * time.Second) + time.Sleep(time.Duration(pollSleepSec) * time.Second) } } diff --git a/router/mutablemux.go b/router/mutablemux.go index 6e0354c2..f556fc09 100644 --- a/router/mutablemux.go +++ b/router/mutablemux.go @@ -49,6 +49,5 @@ func (mr *mutableRouter) ServeHTTP(responseWriter http.ResponseWriter, request * } func (mr *mutableRouter) updateRouter(newHandler *mux.Router) { - log.Println("Updating router") mr.router.Store(newHandler) }