mirror of https://github.com/minio/minio.git
				
				
				
			fix: loading usage cache to not fail early when reading the backup fails (#18158)
Currently, the retry is not fully used when there is no backup copy of the data usage; use 5 retry attempts when we don't have any valid data, new or backup, unless we have seen an un-recognized error.
This commit is contained in:
		
							parent
							
								
									a2ab21e91c
								
							
						
					
					
						commit
						b336e9a79f
					
				|  | @ -924,7 +924,7 @@ type objectIO interface { | ||||||
| // load the cache content with name from minioMetaBackgroundOpsBucket.
 | // load the cache content with name from minioMetaBackgroundOpsBucket.
 | ||||||
| // Only backend errors are returned as errors.
 | // Only backend errors are returned as errors.
 | ||||||
| // The loader is optimistic and has no locking, but tries 5 times before giving up.
 | // The loader is optimistic and has no locking, but tries 5 times before giving up.
 | ||||||
| // If the object is not found or unable to deserialize d is cleared and nil error is returned.
 | // If the object is not found, a nil error with empty data usage cache is returned.
 | ||||||
| func (d *dataUsageCache) load(ctx context.Context, store objectIO, name string) error { | func (d *dataUsageCache) load(ctx context.Context, store objectIO, name string) error { | ||||||
| 	// By defaut, empty data usage cache
 | 	// By defaut, empty data usage cache
 | ||||||
| 	*d = dataUsageCache{} | 	*d = dataUsageCache{} | ||||||
|  | @ -960,13 +960,19 @@ func (d *dataUsageCache) load(ctx context.Context, store objectIO, name string) | ||||||
| 		if !retry { | 		if !retry { | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 		retry, _ = load(name+".bkp", 30*time.Second) | 		retry, err = load(name+".bkp", 30*time.Second) | ||||||
| 		if !retry { | 		if err == nil && !retry { | ||||||
|  | 			// Only return when we have valid data from the backup
 | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 		retries++ | 		retries++ | ||||||
| 		time.Sleep(time.Duration(rand.Int63n(int64(time.Second)))) | 		time.Sleep(time.Duration(rand.Int63n(int64(time.Second)))) | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	if retries == 5 { | ||||||
|  | 		logger.LogOnceIf(ctx, fmt.Errorf("maximum retry reached to load the data usage cache `%s`", name), "retry-loading-data-usage-cache") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue