retrying icon indicating copy to clipboard operation
retrying copied to clipboard

Support for retry event hook

Open bodenr opened this issue 9 years ago • 11 comments

It's very common for consumers to perform some action on each attempt iteration; for example logging a message that the operation failed and a retry will be performed after some time. While this can be done today using a custom wait_func, it's inconvenient to use a partial to wrap an existing retrying sleep function just to get this behavior.

This patch adds support for a new kwarg called wait_event_func that when passed should reference a function to be called before sleeping for another attempt iteration. This function looks similar to retrying wait_funcs except its first arg is the time to sleep as returned by the current 'wait' function.

A handful of unit tests are also included.

bodenr avatar May 27 '16 15:05 bodenr

@jd @harlowja @rholder I realize this PR has conflicts now, but I'd like to understand your initial impressions of this code to determine if it's worth my time continuing here. Thanks

bodenr avatar Jun 07 '16 15:06 bodenr

LGTM, feel free to rebase!

jd avatar Jun 09 '16 14:06 jd

travis didn't rebuild; let me try closing + reopening this

bodenr avatar Jun 09 '16 16:06 bodenr

@jd looks like this one is clean now. My apologies for all the noise here; I took a bumpy path on a git adventure.

bodenr avatar Jun 09 '16 17:06 bodenr

Seems pretty useful to me :+1:

harlowja avatar Jun 15 '16 06:06 harlowja

@jd @rholder what do you guys think; is this merge-worthy?

bodenr avatar Jun 16 '16 11:06 bodenr

Looks redundant with wait_func, no?

jd avatar Jun 16 '16 12:06 jd

@jd perhaps.

As indicated in the "commit message" its very common to want a "callback" per retry (for something like logging a message). While this could be done with a custom wait_func it inconvenient to decorate and provide a custom wait_func just for this purpose. That said the intent here is to simplify that consumption pattern.

bodenr avatar Jun 16 '16 12:06 bodenr

I think we don't want to clutter more the init func. What about providing that functionality as part of a custom wait_func that would be provided by retrying itself?

Possibly a composable class.

jd avatar Jun 16 '16 13:06 jd

I agree with jd (also why I did https://github.com/rholder/retrying/pull/55 to help move toward a model that hopefully can be more composeable and user-friendly); so perhaps we should get #55 in first?

harlowja avatar Jun 16 '16 15:06 harlowja

@jd @harlowja I just pushed a commit here with some changes I was playing with that introduce function chaining using the CallChain class I whipped up (no UTs; more of a talking point).

Using this approach it's easy to just pass my "hook function" as the wait_func to achieve what I need. It also address the "chaining" TODO in the code if I understand properly.

I haven't see #55 yet, so perhaps we can weight pros/cons of it vs. the CallChain I just committed to this PR.

bodenr avatar Jun 16 '16 16:06 bodenr