@@ -99,6 +99,7 @@ const (
9999var  (
100100	errExemplarRef       =  errors .New ("exemplars not ingested because series not already present" )
101101	errIngesterStopping  =  errors .New ("ingester stopping" )
102+ 	errNoUserDb          =  errors .New ("no user db" )
102103
103104	tsChunksPool  zeropool.Pool [[]client.TimeSeriesChunk ]
104105)
@@ -988,8 +989,8 @@ func (i *Ingester) updateLoop(ctx context.Context) error {
988989
989990func  (i  * Ingester ) updateUserTSDBConfigs () {
990991	for  _ , userID  :=  range  i .getTSDBUsers () {
991- 		userDB  :=  i .getTSDB (userID )
992- 		if  userDB  ==  nil  {
992+ 		userDB ,  err  :=  i .getTSDB (userID )
993+ 		if  err   !=   nil   ||   userDB  ==  nil  {
993994			continue 
994995		}
995996
@@ -1005,7 +1006,7 @@ func (i *Ingester) updateUserTSDBConfigs() {
10051006		}
10061007
10071008		// This method currently updates the MaxExemplars and OutOfOrderTimeWindow. 
1008- 		err  : =userDB .db .ApplyConfig (cfg )
1009+ 		err  =  userDB .db .ApplyConfig (cfg )
10091010		if  err  !=  nil  {
10101011			level .Error (logutil .WithUserID (userID , i .logger )).Log ("msg" , "failed to update user tsdb configuration." )
10111012		}
@@ -1029,8 +1030,8 @@ func (i *Ingester) updateActiveSeries(ctx context.Context) {
10291030	purgeTime  :=  time .Now ().Add (- i .cfg .ActiveSeriesMetricsIdleTimeout )
10301031
10311032	for  _ , userID  :=  range  i .getTSDBUsers () {
1032- 		userDB  :=  i .getTSDB (userID )
1033- 		if  userDB  ==  nil  {
1033+ 		userDB ,  err  :=  i .getTSDB (userID )
1034+ 		if  err   !=   nil   ||   userDB  ==  nil  {
10341035			continue 
10351036		}
10361037
@@ -1045,8 +1046,8 @@ func (i *Ingester) updateActiveSeries(ctx context.Context) {
10451046func  (i  * Ingester ) updateLabelSetMetrics () {
10461047	activeUserSet  :=  make (map [string ]map [uint64 ]struct {})
10471048	for  _ , userID  :=  range  i .getTSDBUsers () {
1048- 		userDB  :=  i .getTSDB (userID )
1049- 		if  userDB  ==  nil  {
1049+ 		userDB ,  err  :=  i .getTSDB (userID )
1050+ 		if  err   !=   nil   ||   userDB  ==  nil  {
10501051			continue 
10511052		}
10521053
@@ -1549,8 +1550,8 @@ func (i *Ingester) QueryExemplars(ctx context.Context, req *client.ExemplarQuery
15491550
15501551	i .metrics .queries .Inc ()
15511552
1552- 	db  :=  i .getTSDB (userID )
1553- 	if  db  ==  nil  {
1553+ 	db ,  err  :=  i .getTSDB (userID )
1554+ 	if  err   !=   nil   ||   db  ==  nil  {
15541555		return  & client.ExemplarQueryResponse {}, nil 
15551556	}
15561557
@@ -1642,8 +1643,8 @@ func (i *Ingester) labelsValuesCommon(ctx context.Context, req *client.LabelValu
16421643		return  nil , cleanup , err 
16431644	}
16441645
1645- 	db  :=  i .getTSDB (userID )
1646- 	if  db  ==  nil  {
1646+ 	db ,  err  :=  i .getTSDB (userID )
1647+ 	if  err   !=   nil   ||   db  ==  nil  {
16471648		return  & client.LabelValuesResponse {}, cleanup , nil 
16481649	}
16491650
@@ -1732,8 +1733,8 @@ func (i *Ingester) labelNamesCommon(ctx context.Context, req *client.LabelNamesR
17321733		return  nil , cleanup , err 
17331734	}
17341735
1735- 	db  :=  i .getTSDB (userID )
1736- 	if  db  ==  nil  {
1736+ 	db ,  err  :=  i .getTSDB (userID )
1737+ 	if  err   !=   nil   ||   db  ==  nil  {
17371738		return  & client.LabelNamesResponse {}, cleanup , nil 
17381739	}
17391740
@@ -1830,8 +1831,8 @@ func (i *Ingester) metricsForLabelMatchersCommon(ctx context.Context, req *clien
18301831		return  cleanup , err 
18311832	}
18321833
1833- 	db  :=  i .getTSDB (userID )
1834- 	if  db  ==  nil  {
1834+ 	db ,  err  :=  i .getTSDB (userID )
1835+ 	if  err   !=   nil   ||   db  ==  nil  {
18351836		return  cleanup , nil 
18361837	}
18371838
@@ -1944,8 +1945,8 @@ func (i *Ingester) UserStats(ctx context.Context, req *client.UserStatsRequest)
19441945		return  nil , err 
19451946	}
19461947
1947- 	db  :=  i .getTSDB (userID )
1948- 	if  db  ==  nil  {
1948+ 	db ,  err  :=  i .getTSDB (userID )
1949+ 	if  err   !=   nil   ||   db  ==  nil  {
19491950		return  & client.UserStatsResponse {}, nil 
19501951	}
19511952
@@ -2064,8 +2065,8 @@ func (i *Ingester) QueryStream(req *client.QueryRequest, stream client.Ingester_
20642065
20652066	i .metrics .queries .Inc ()
20662067
2067- 	db  :=  i .getTSDB (userID )
2068- 	if  db  ==  nil  {
2068+ 	db ,  err  :=  i .getTSDB (userID )
2069+ 	if  err   !=   nil   ||   db  ==  nil  {
20692070		return  nil 
20702071	}
20712072
@@ -2216,11 +2217,14 @@ func (i *Ingester) queryStreamChunks(ctx context.Context, db *userTSDB, from, th
22162217	return  numSeries , numSamples , totalBatchSizeBytes , numChunks , nil 
22172218}
22182219
2219- func  (i  * Ingester ) getTSDB (userID  string ) * userTSDB  {
2220+ func  (i  * Ingester ) getTSDB (userID  string ) ( * userTSDB ,  error )  {
22202221	i .stoppedMtx .RLock ()
22212222	defer  i .stoppedMtx .RUnlock ()
22222223	db  :=  i .TSDBState .dbs [userID ]
2223- 	return  db 
2224+ 	if  db  ==  nil  {
2225+ 		return  nil , errNoUserDb 
2226+ 	}
2227+ 	return  db , nil 
22242228}
22252229
22262230// List all users for which we have a TSDB. We do it here in order 
@@ -2238,8 +2242,11 @@ func (i *Ingester) getTSDBUsers() []string {
22382242}
22392243
22402244func  (i  * Ingester ) getOrCreateTSDB (userID  string , force  bool ) (* userTSDB , error ) {
2241- 	db  :=  i .getTSDB (userID )
2245+ 	db ,  err  :=  i .getTSDB (userID )
22422246	if  db  !=  nil  {
2247+ 		if  err  !=  nil  {
2248+ 			level .Warn (i .logger ).Log ("msg" , "error getting user DB but userDB is not null" , "err" , err , "userID" , userID )
2249+ 		}
22432250		return  db , nil 
22442251	}
22452252
@@ -2271,7 +2278,7 @@ func (i *Ingester) getOrCreateTSDB(userID string, force bool) (*userTSDB, error)
22712278	}
22722279
22732280	// Create the database and a shipper for a user 
2274- 	db , err  : =i .createTSDB (userID )
2281+ 	db , err  =  i .createTSDB (userID )
22752282	if  err  !=  nil  {
22762283		return  nil , err 
22772284	}
@@ -2285,10 +2292,10 @@ func (i *Ingester) getOrCreateTSDB(userID string, force bool) (*userTSDB, error)
22852292
22862293func  (i  * Ingester ) blockChunkQuerierFunc (userId  string ) tsdb.BlockChunkQuerierFunc  {
22872294	return  func (b  tsdb.BlockReader , mint , maxt  int64 ) (storage.ChunkQuerier , error ) {
2288- 		db  :=  i .getTSDB (userId )
2295+ 		db ,  err  :=  i .getTSDB (userId )
22892296
22902297		var  postingCache  cortex_tsdb.ExpandedPostingsCache 
2291- 		if  db  !=  nil  {
2298+ 		if  err   ==   nil   &&   db  !=  nil  {
22922299			postingCache  =  db .postingCache 
22932300		}
22942301
@@ -2650,8 +2657,8 @@ func (i *Ingester) shipBlocks(ctx context.Context, allowed *util.AllowedTenants)
26502657		}
26512658
26522659		// Get the user's DB. If the user doesn't exist, we skip it. 
2653- 		userDB  :=  i .getTSDB (userID )
2654- 		if  userDB  ==  nil  ||  userDB .shipper  ==  nil  {
2660+ 		userDB ,  err  :=  i .getTSDB (userID )
2661+ 		if  err   !=   nil   ||   userDB  ==  nil  ||  userDB .shipper  ==  nil  {
26552662			return  nil 
26562663		}
26572664
@@ -2762,8 +2769,8 @@ func (i *Ingester) compactBlocks(ctx context.Context, force bool, allowed *util.
27622769			return  nil 
27632770		}
27642771
2765- 		userDB  :=  i .getTSDB (userID )
2766- 		if  userDB  ==  nil  {
2772+ 		userDB ,  err  :=  i .getTSDB (userID )
2773+ 		if  err   !=   nil   ||   userDB  ==  nil  {
27672774			return  nil 
27682775		}
27692776
@@ -2773,8 +2780,6 @@ func (i *Ingester) compactBlocks(ctx context.Context, force bool, allowed *util.
27732780			return  nil 
27742781		}
27752782
2776- 		var  err  error 
2777- 
27782783		i .TSDBState .compactionsTriggered .Inc ()
27792784
27802785		reason  :=  "" 
@@ -2823,8 +2828,8 @@ func (i *Ingester) expirePostingsCache(ctx context.Context) error {
28232828		if  ctx .Err () !=  nil  {
28242829			return  nil 
28252830		}
2826- 		userDB  :=  i .getTSDB (userID )
2827- 		if  userDB  ==  nil  ||  userDB .postingCache  ==  nil  {
2831+ 		userDB ,  err  :=  i .getTSDB (userID )
2832+ 		if  err   !=   nil   ||   userDB  ==  nil  ||  userDB .postingCache  ==  nil  {
28282833			continue 
28292834		}
28302835		userDB .postingCache .PurgeExpiredItems ()
@@ -2834,8 +2839,8 @@ func (i *Ingester) expirePostingsCache(ctx context.Context) error {
28342839}
28352840
28362841func  (i  * Ingester ) closeAndDeleteUserTSDBIfIdle (userID  string ) tsdbCloseCheckResult  {
2837- 	userDB  :=  i .getTSDB (userID )
2838- 	if  userDB  ==  nil  ||  userDB .shipper  ==  nil  {
2842+ 	userDB ,  err  :=  i .getTSDB (userID )
2843+ 	if  err   !=   nil   ||   userDB  ==  nil  ||  userDB .shipper  ==  nil  {
28392844		// We will not delete local data when not using shipping to storage. 
28402845		return  tsdbShippingDisabled 
28412846	}
0 commit comments