@@ -69,14 +69,11 @@ func (r *Retryer) runRetryLoop(
6969 li := & LoopInfo {
7070 durationLimit : r .retryLimit ,
7171 }
72- funcinfos := lo .Map (
73- r .callbacks ,
74- func (cb retryCallbackInfo , _ int ) * FuncInfo {
72+ funcinfos := lo .RepeatBy (
73+ len ( r .callbacks ) ,
74+ func (_ int ) * FuncInfo {
7575 return & FuncInfo {
76- lastReset : msync .NewTypedAtomic (lastResetInfo {
77- time : startTime ,
78- }),
79- description : cb .description ,
76+ lastResetTime : msync .NewTypedAtomic (startTime ),
8077 loopDescription : r .description ,
8178 loopInfo : li ,
8279 }
@@ -116,25 +113,17 @@ func (r *Retryer) runRetryLoop(
116113 defer ticker .Stop ()
117114
118115 for {
119- lastReset := funcinfos [i ].lastReset .Load ()
116+ lastSuccessTime := funcinfos [i ].lastResetTime .Load ()
120117
121118 select {
122119 case <- cbDoneChan :
123120 return
124121 case <- ticker .C :
125- if funcinfos [i ].lastReset .Load () == lastReset {
126- event := logger .Warn ().
122+ if funcinfos [i ].lastResetTime .Load () == lastSuccessTime {
123+ logger .Warn ().
127124 Str ("callbackDescription" , curCbInfo .description ).
128- Time ("noSuccessSince" , lastReset .time ).
129- Uint64 ("successesSoFar" , lastReset .resetsSoFar )
130-
131- if successDesc , hasDesc := lastReset .description .Get (); hasDesc {
132- event .
133- Str ("lastSuccessDescription" , successDesc )
134- }
135-
136- event .
137- Str ("elapsedTime" , reportutils .DurationToHMS (time .Since (lastReset .time ))).
125+ Time ("lastSuccessAt" , lastSuccessTime ).
126+ Str ("elapsedTime" , reportutils .DurationToHMS (time .Since (lastSuccessTime ))).
138127 Msg ("Operation has not reported success for a while." )
139128 }
140129 }
@@ -175,11 +164,9 @@ func (r *Retryer) runRetryLoop(
175164 }
176165
177166 failedFuncInfo := funcinfos [groupErr .funcNum ]
178- descriptions := failedFuncInfo .GetDescriptions ()
179- cbErr := groupErr .errFromCallback
180167
181168 // Not a transient error? Fail immediately.
182- if ! r .shouldRetryWithSleep (logger , sleepTime , descriptions , cbErr ) {
169+ if ! r .shouldRetryWithSleep (logger , sleepTime , * failedFuncInfo , groupErr . errFromCallback ) {
183170 return groupErr .errFromCallback
184171 }
185172
@@ -214,7 +201,7 @@ func (r *Retryer) runRetryLoop(
214201 // Set all of the funcs that did *not* fail as having just succeeded.
215202 for i , curInfo := range funcinfos {
216203 if i != groupErr .funcNum {
217- curInfo .lastReset .Store (lastResetInfo { time : now } )
204+ curInfo .lastResetTime .Store (now )
218205 }
219206 }
220207 }
@@ -248,7 +235,7 @@ func (r *Retryer) addDescriptionToEvent(event *zerolog.Event) *zerolog.Event {
248235func (r * Retryer ) shouldRetryWithSleep (
249236 logger * logger.Logger ,
250237 sleepTime time.Duration ,
251- descriptions [] string ,
238+ funcinfo FuncInfo ,
252239 err error ,
253240) bool {
254241 if err == nil {
@@ -263,35 +250,26 @@ func (r *Retryer) shouldRetryWithSleep(
263250 )
264251
265252 event := logger .WithLevel (
266- lo .Ternary (
267- // If it’s transient, surface it as info.
268- isTransient ,
269- zerolog .InfoLevel ,
270-
271- lo .Ternary (
272- // Context cancellation is unimportant, so debug.
273- errors .Is (err , context .Canceled ),
274- zerolog .DebugLevel ,
275-
276- // Other non-retryables are serious, so warn.
277- zerolog .WarnLevel ,
278- ),
279- ),
253+ lo .Ternary (isTransient , zerolog .InfoLevel , zerolog .WarnLevel ),
280254 )
281255
282- event .Strs ("description" , descriptions ).
256+ if loopDesc , hasLoopDesc := r .description .Get (); hasLoopDesc {
257+ event .Str ("operationDescription" , loopDesc )
258+ }
259+
260+ event .Str ("callbackDescription" , funcinfo .description ).
283261 Int ("error code" , util .GetErrorCode (err )).
284262 Err (err )
285263
286264 if isTransient {
287265 event .
288266 Stringer ("delay" , sleepTime ).
289- Msg ("Got retryable error. Pausing, then will retry ." )
267+ Msg ("Pausing before retrying after transient error ." )
290268
291269 return true
292270 }
293271
294- event .Msg ("Non-retryable error occurred." )
272+ event .Msg ("Non-transient error occurred." )
295273
296274 return false
297275}
0 commit comments