guava-retrying icon indicating copy to clipboard operation
guava-retrying copied to clipboard

Return builder from a Retryer instance

Open rholder opened this issue 9 years ago • 1 comments

This returns the RetryerBuilder used to build the Retryer instance, if it exists, as described in #13. In adding this functionality, I noticed a few things that I believe make this feature less desirable.

The builder itself doesn't currently expose methods for inspecting the existing configured strategies so we'd need to add those which increases the public API footprint. Resetting the strategies upon inspection and then mutation (for the returned original builder) is currently not possible because of the checkState guards on most of the setters. We'd need to relax those checks to complete the use case described in #13 (or maybe expose another mechanism for safely returning/cloning and mutating in a single step?).

I am open to exploring other means of completing #13 than what I've created here or further expanding on this if there is still interest. In the mean time, I'm adding this as a PR such that I can continue moving a 2.x release forward without worrying about trying to get this feature completed before that ships.

rholder avatar Jun 20 '15 22:06 rholder

Adding the builder as a field in the object built doesn't smell good. I think a better solution is to add getXxx() methods in RetryerBuilder (suggested) and/or Retryer (not suggested. "if you expect me to do a final touch on the retry logic, you should pass in a RetryerBuilder instance rather than a Retryer instance") so that whenever needed those XxxStrategy objects can be get and used to build another Retryer. This solution is more flexible in terms of supporting creative use cases and it has no impact on the core logic at all.

james-hu avatar Jul 28 '15 22:07 james-hu