@@ -103,6 +103,15 @@ impl<T, E: ErrorBounds> DataStateRetry<T, E> {
103
103
self . inner = DataState :: default ( ) ;
104
104
}
105
105
} else {
106
+ let wait_left = wait_before_next_attempt ( self . next_allowed_attempt ) ;
107
+ ui. colored_label (
108
+ ui. visuals ( ) . error_fg_color ,
109
+ format ! (
110
+ "{} attempt(s) left. {} seconds before retry. {e}" ,
111
+ self . attempts_left,
112
+ wait_left. as_secs( )
113
+ ) ,
114
+ ) ;
106
115
let is_able_to_make_progress = self . get ( fetch_fn) . is_able_to_make_progress ( ) ;
107
116
assert ! (
108
117
is_able_to_make_progress,
@@ -163,10 +172,8 @@ impl<T, E: ErrorBounds> DataStateRetry<T, E> {
163
172
if self . attempts_left == 0 {
164
173
self . inner . get ( fetch_fn)
165
174
} else {
166
- let wait_duration_left = self
167
- . next_allowed_attempt
168
- . saturating_duration_since ( Instant :: now ( ) ) ;
169
- if wait_duration_left. is_zero ( ) {
175
+ let wait_left = wait_before_next_attempt ( self . next_allowed_attempt ) ;
176
+ if wait_left. is_zero ( ) {
170
177
warn ! ( ?err_msg, ?self . attempts_left, "retrying request" ) ;
171
178
self . attempts_left -= 1 ;
172
179
self . inner = DataState :: None ;
@@ -233,3 +240,8 @@ impl<T, E: ErrorBounds> AsMut<DataStateRetry<T, E>> for DataStateRetry<T, E> {
233
240
self
234
241
}
235
242
}
243
+
244
+ /// The duration before the next attempt will be made
245
+ fn wait_before_next_attempt ( next_allowed_attempt : Instant ) -> Duration {
246
+ next_allowed_attempt. saturating_duration_since ( Instant :: now ( ) )
247
+ }
0 commit comments