<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 9 August 2016 at 12:22, Katherine Cox-Buday <span dir="ltr"><<a href="mailto:katherine.cox-buday@canonical.com" target="_blank">katherine.cox-buday@canonical.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br>
To implement this, I do something like this:<br>
<br>
args := retry.CallArgs{<br>
    Func: func() error {<br>
        // Body of my loop<br>
    },<br>
    BackoffFunc: func(delay time.Duration, attempt int) time.Duration {<br>
        if attempt == 1 {<br>
            return delay<br>
        }<br>
        return delay * factor<br>
    },<br><br></blockquote><div><br></div><div>Note that for BackoffFunc there is already one canned function in the retry package for the common case of doubling the retry delay (DoubleDelay). It might be nice to add a few more standard backoff functions and/or a factory for multiplicative delays like this to remove the need for a little bit of boilerplate in every use of retry.Call.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
Functionally, what's in juju/retry is fine; and I can stuff anything I want into the function. It just feels a little odd to use in that I must put the body of my loop in a function, and I dislike that the CallArgs struct attempts to encapsulate a bunch of different scenarios.<br></blockquote><div><br></div><div>BackoffTick has a certain elegance but I still prefer retry.Call because it makes it harder to get things wrong. The CallArgs struct helps to remind the developer of the things they should be thinking about whereas with BackoffTick it's easy to forget about some aspect (e.g. the need for a cancellation channel).</div><div><br></div><div>retry.Call also has the advantage of already being able to do the job and already being in use.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br>
Also, is it on the roadmap to address the inconsitant retries throughout Juju? I almost used utils.BackoffTimer until I started looking deeper. I'm going to submit a PR to flag it as deprecated.<br></blockquote><div><br></div><div>That would be good to do IMO.</div><div><br></div><div>Cheers,</div><div>Menno</div></div></div></div>