Ensure database access waits until it is started.
This commit introduces a channel message to ensure serving state has been reached with the storage stack before anything attempts to use it.
This commit is contained in:
		
							parent
							
								
									115437ad1f
								
							
						
					
					
						commit
						2c3df44af6
					
				
							
								
								
									
										5
									
								
								main.go
								
								
								
								
							
							
						
						
									
										5
									
								
								main.go
								
								
								
								
							|  | @ -266,7 +266,10 @@ func main() { | ||||||
| 	} | 	} | ||||||
| 	defer prometheus.close() | 	defer prometheus.close() | ||||||
| 
 | 
 | ||||||
| 	go ts.Serve() | 	storageStarted := make(chan bool) | ||||||
|  | 	go ts.Serve(storageStarted) | ||||||
|  | 	<-storageStarted | ||||||
|  | 
 | ||||||
| 	go prometheus.interruptHandler() | 	go prometheus.interruptHandler() | ||||||
| 	go prometheus.reportDatabaseState() | 	go prometheus.reportDatabaseState() | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -79,8 +79,9 @@ func NewTestTieredStorage(t test.Tester) (storage *metric.TieredStorage, closer | ||||||
| 		directory.Close() | 		directory.Close() | ||||||
| 		t.Fatalf("storage == nil") | 		t.Fatalf("storage == nil") | ||||||
| 	} | 	} | ||||||
| 
 | 	started := make(chan bool) | ||||||
| 	go storage.Serve() | 	go storage.Serve(started) | ||||||
|  | 	<-started | ||||||
| 	closer = &testTieredStorageCloser{ | 	closer = &testTieredStorageCloser{ | ||||||
| 		storage:   storage, | 		storage:   storage, | ||||||
| 		directory: directory, | 		directory: directory, | ||||||
|  |  | ||||||
|  | @ -101,7 +101,10 @@ func NewTestTieredStorage(t test.Tester) (storage *TieredStorage, closer test.Cl | ||||||
| 		t.Fatalf("storage == nil") | 		t.Fatalf("storage == nil") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	go storage.Serve() | 	started := make(chan bool) | ||||||
|  | 	go storage.Serve(started) | ||||||
|  | 	<-started | ||||||
|  | 
 | ||||||
| 	closer = &testTieredStorageCloser{ | 	closer = &testTieredStorageCloser{ | ||||||
| 		storage:   storage, | 		storage:   storage, | ||||||
| 		directory: directory, | 		directory: directory, | ||||||
|  |  | ||||||
|  | @ -156,7 +156,7 @@ func (t *TieredStorage) MakeView(builder ViewRequestBuilder, deadline time.Durat | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Starts serving requests.
 | // Starts serving requests.
 | ||||||
| func (t *TieredStorage) Serve() { | func (t *TieredStorage) Serve(started chan<- bool) { | ||||||
| 	flushMemoryTicker := time.NewTicker(t.flushMemoryInterval) | 	flushMemoryTicker := time.NewTicker(t.flushMemoryInterval) | ||||||
| 	defer flushMemoryTicker.Stop() | 	defer flushMemoryTicker.Stop() | ||||||
| 	queueReportTicker := time.NewTicker(time.Second) | 	queueReportTicker := time.NewTicker(time.Second) | ||||||
|  | @ -168,6 +168,8 @@ func (t *TieredStorage) Serve() { | ||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
| 
 | 
 | ||||||
|  | 	started <- true | ||||||
|  | 
 | ||||||
| 	for { | 	for { | ||||||
| 		select { | 		select { | ||||||
| 		case <-flushMemoryTicker.C: | 		case <-flushMemoryTicker.C: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue