diff --git a/main.go b/main.go index 282600e53..2aaa0e934 100644 --- a/main.go +++ b/main.go @@ -266,7 +266,10 @@ func main() { } defer prometheus.close() - go ts.Serve() + storageStarted := make(chan bool) + go ts.Serve(storageStarted) + <-storageStarted + go prometheus.interruptHandler() go prometheus.reportDatabaseState() diff --git a/rules/rules_test.go b/rules/rules_test.go index e56d3bd6a..c29136065 100644 --- a/rules/rules_test.go +++ b/rules/rules_test.go @@ -79,8 +79,9 @@ func NewTestTieredStorage(t test.Tester) (storage *metric.TieredStorage, closer directory.Close() t.Fatalf("storage == nil") } - - go storage.Serve() + started := make(chan bool) + go storage.Serve(started) + <-started closer = &testTieredStorageCloser{ storage: storage, directory: directory, diff --git a/storage/metric/helpers_test.go b/storage/metric/helpers_test.go index 43405a55a..8be36cdf8 100644 --- a/storage/metric/helpers_test.go +++ b/storage/metric/helpers_test.go @@ -101,7 +101,10 @@ func NewTestTieredStorage(t test.Tester) (storage *TieredStorage, closer test.Cl t.Fatalf("storage == nil") } - go storage.Serve() + started := make(chan bool) + go storage.Serve(started) + <-started + closer = &testTieredStorageCloser{ storage: storage, directory: directory, diff --git a/storage/metric/tiered.go b/storage/metric/tiered.go index e37a5b105..a856e721c 100644 --- a/storage/metric/tiered.go +++ b/storage/metric/tiered.go @@ -156,7 +156,7 @@ func (t *TieredStorage) MakeView(builder ViewRequestBuilder, deadline time.Durat } // Starts serving requests. -func (t *TieredStorage) Serve() { +func (t *TieredStorage) Serve(started chan<- bool) { flushMemoryTicker := time.NewTicker(t.flushMemoryInterval) defer flushMemoryTicker.Stop() queueReportTicker := time.NewTicker(time.Second) @@ -168,6 +168,8 @@ func (t *TieredStorage) Serve() { } }() + started <- true + for { select { case <-flushMemoryTicker.C: