You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			30 lines
		
	
	
		
			452 B
		
	
	
	
		
			Go
		
	
			
		
		
	
	
			30 lines
		
	
	
		
			452 B
		
	
	
	
		
			Go
		
	
| package internal
 | |
| 
 | |
| import (
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/redis/go-redis/v9/internal/rand"
 | |
| )
 | |
| 
 | |
| func RetryBackoff(retry int, minBackoff, maxBackoff time.Duration) time.Duration {
 | |
| 	if retry < 0 {
 | |
| 		panic("not reached")
 | |
| 	}
 | |
| 	if minBackoff == 0 {
 | |
| 		return 0
 | |
| 	}
 | |
| 
 | |
| 	d := minBackoff << uint(retry)
 | |
| 	if d < minBackoff {
 | |
| 		return maxBackoff
 | |
| 	}
 | |
| 
 | |
| 	d = minBackoff + time.Duration(rand.Int63n(int64(d)))
 | |
| 
 | |
| 	if d > maxBackoff || d < minBackoff {
 | |
| 		d = maxBackoff
 | |
| 	}
 | |
| 
 | |
| 	return d
 | |
| }
 |