@@ -20,42 +20,42 @@ func (p *FixedDurationPolicy) CalculateCooldown(failureCount int) time.Duration
2020}
2121
2222// LinearIncrementalPolicy increases cooldown linearly with each failure
23- // Formula: baseMinutes * failureCount
23+ // Formula: baseSeconds * failureCount
2424type LinearIncrementalPolicy struct {
25- BaseMinutes int
26- MaxMinutes int // Optional cap, 0 means no limit
25+ BaseSeconds int
26+ MaxSeconds int // Optional cap, 0 means no limit
2727}
2828
2929func (p * LinearIncrementalPolicy ) CalculateCooldown (failureCount int ) time.Duration {
30- minutes := p .BaseMinutes * failureCount
31- if p .MaxMinutes > 0 && minutes > p .MaxMinutes {
32- minutes = p .MaxMinutes
30+ seconds := p .BaseSeconds * failureCount
31+ if p .MaxSeconds > 0 && seconds > p .MaxSeconds {
32+ seconds = p .MaxSeconds
3333 }
34- return time .Duration (minutes ) * time .Minute
34+ return time .Duration (seconds ) * time .Second
3535}
3636
3737// ExponentialBackoffPolicy increases cooldown exponentially with each failure
38- // Formula: baseMinutes * (2 ^ (failureCount - 1))
38+ // Formula: baseSeconds * (2 ^ (failureCount - 1))
3939type ExponentialBackoffPolicy struct {
40- BaseMinutes int
41- MaxMinutes int // Optional cap, 0 means no limit
40+ BaseSeconds int
41+ MaxSeconds int // Optional cap, 0 means no limit
4242}
4343
4444func (p * ExponentialBackoffPolicy ) CalculateCooldown (failureCount int ) time.Duration {
4545 if failureCount == 0 {
4646 return 0
4747 }
4848
49- minutes := p .BaseMinutes
49+ seconds := p .BaseSeconds
5050 for i := 1 ; i < failureCount ; i ++ {
51- minutes *= 2
52- if p .MaxMinutes > 0 && minutes > p .MaxMinutes {
53- minutes = p .MaxMinutes
51+ seconds *= 2
52+ if p .MaxSeconds > 0 && seconds > p .MaxSeconds {
53+ seconds = p .MaxSeconds
5454 break
5555 }
5656 }
5757
58- return time .Duration (minutes ) * time .Minute
58+ return time .Duration (seconds ) * time .Second
5959}
6060
6161// CooldownReason represents the reason for cooldown
@@ -75,32 +75,32 @@ const (
7575// those times will be used directly instead of these policies
7676func DefaultPolicies () map [CooldownReason ]CooldownPolicy {
7777 return map [CooldownReason ]CooldownPolicy {
78- // Server errors (5xx): linear increment (1min, 2min, 3min , ... max 10min)
78+ // Server errors (5xx): linear increment (5s, 10s, 15s , ... max 10min)
7979 ReasonServerError : & LinearIncrementalPolicy {
80- BaseMinutes : 1 ,
81- MaxMinutes : 10 ,
80+ BaseSeconds : 5 ,
81+ MaxSeconds : 600 , // 10 minutes
8282 },
83- // Network errors: exponential backoff (1min, 2min, 4min, 8min , ... max 30min)
83+ // Network errors: exponential backoff (5s, 10s, 20s, 40s , ... max 30min)
8484 ReasonNetworkError : & ExponentialBackoffPolicy {
85- BaseMinutes : 1 ,
86- MaxMinutes : 30 ,
85+ BaseSeconds : 5 ,
86+ MaxSeconds : 1800 , // 30 minutes
8787 },
8888 // Quota exhausted: fixed 1 hour (only used as fallback when API doesn't return reset time)
8989 ReasonQuotaExhausted : & FixedDurationPolicy {
9090 Duration : 1 * time .Hour ,
9191 },
92- // Rate limit: fixed 1 minute (only used as fallback when API doesn't return Retry-After)
92+ // Rate limit: fixed 5 seconds (only used as fallback when API doesn't return Retry-After)
9393 ReasonRateLimit : & FixedDurationPolicy {
94- Duration : 1 * time .Minute ,
94+ Duration : 5 * time .Second ,
9595 },
96- // Concurrent limit: fixed 10 seconds (only used as fallback)
96+ // Concurrent limit: fixed 5 seconds (only used as fallback)
9797 ReasonConcurrentLimit : & FixedDurationPolicy {
98- Duration : 10 * time .Second ,
98+ Duration : 5 * time .Second ,
9999 },
100- // Unknown error: linear increment (1min, 2min, 3min , ... max 5min)
100+ // Unknown error: linear increment (5s, 10s, 15s , ... max 5min)
101101 ReasonUnknown : & LinearIncrementalPolicy {
102- BaseMinutes : 1 ,
103- MaxMinutes : 5 ,
102+ BaseSeconds : 5 ,
103+ MaxSeconds : 300 , // 5 minutes
104104 },
105105 }
106106}
0 commit comments