"net/http"
"net/url"
"os"
+ "strings"
"time"
"git.arvados.org/arvados.git/lib/config"
newhash := fmt.Sprintf("%x", sha256.Sum256(append(confdata, '\n')))
c.Logf("newhash %s", newhash)
- // Wait 2s to give RailsAPI's 1 Hz reload_config thread time
- // to poll and hit restart.txt
- time.Sleep(2 * time.Second)
-
- resp, err = hc.Do(req)
- c.Assert(err, check.IsNil)
- c.Check(resp.StatusCode, check.Equals, http.StatusOK)
- body, err = ioutil.ReadAll(resp.Body)
- c.Assert(err, check.IsNil)
+ // Wait for RailsAPI's 1 Hz reload_config thread to poll and
+ // hit restart.txt
+ pollstart := time.Now()
+ for deadline := time.Now().Add(20 * time.Second); time.Now().Before(deadline); time.Sleep(time.Second) {
+ resp, err = hc.Do(req)
+ c.Assert(err, check.IsNil)
+ defer resp.Body.Close()
+ c.Check(resp.StatusCode, check.Equals, http.StatusOK)
+ body, err = ioutil.ReadAll(resp.Body)
+ c.Assert(err, check.IsNil)
+ resp.Body.Close()
+ if strings.Contains(string(body), newhash) {
+ break
+ }
+ }
+ c.Logf("waited %s for rails to restart", time.Now().Sub(pollstart))
c.Check(string(body), check.Matches, `(?ms).*`+newhash+`.*`)
}