Thanks for the updated explanation, that certainly makes sense.

On Mon, Jul 29, 2019 at 10:47 AM Jordan Zimmerman <
jor...@jordanzimmerman.com> wrote:

> Sure - makes sense Cameron..
>
> When CURATOR-533 was written, each ConnectionStateListener created was
> mapped a new CircuitBreaker instance. In hindsight, this doesn't make
> sense. Only a single, shared CircuitBreaker is needed. Here's the email
> that the Elastic engineer sent to me originally that started this:
>
>     "We enabled circuit breaker in production a month ago and everything
> has been working
>     fine so far....
>
>     Also, we implemented a retry policy that adds some jitter: we specify
> minimum and maximum
>     allowed interval and every retry it picks a random value within the
> allowed range.
>
>     However, while we were testing the feature we found out that it works
> a little bit differently
>     than we expected: it creates a circuit breaker per a connection state
> listener. As long as we use
>     the retry policy with jitter, the fact that there are many circuit
> breakers can potentially
>     introduce some races between components."
>
> -Jordan
>
> > On Jul 28, 2019, at 7:28 PM, Cameron McKenzie <cammcken...@apache.org>
> wrote:
> >
> > hey Jordan,
> > Can you expand on why the previous implementation was not ideal?
> >
> > Given that the decorator approach was only introduced recently, I don't
> > imagine it has had a lot of uptake, but it may be worth asking the
> question
> > on the curator-user list to work out if there's going to be any impact in
> > removing the existing implementation?
> > cheers
> >
> > On Mon, Jul 29, 2019 at 2:50 AM Jordan Zimmerman <
> jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com>>
> > wrote:
> >
> >> Hi Committers,
> >>
> >> CURATOR-505 introduced circuit breaking behavior via
> >> CircuitBreakingConnectionStateListener and
> >> ConnectionStateListenerDecorator. Elastic has been using it with success
> >> but reports that the implementation can be improved. The existing
> >> implementation uses a new CircuitBreaker for each
> ConnectionStateListener
> >> set in a Curator client. It turns out that this is not ideal. Instead, a
> >> shared CircuitBreaker should be used per Curator client.
> >>
> >> Unfortunately, the best way to do this is to remove the
> >> ConnectionStateListenerDecorator semantics and use a different
> mechanism.
> >> This Issue proposes to do this and remove
> ConnectionStateListenerDecorator.
> >> This is a breaking change but given the short amount of time it's been
> in
> >> Curator it's unlikely that it's been widely adopted.
> >> If the community considers a breaking change too harsh the older classes
> >> can be maintained for a while and marked as @Deprecated. Otherwise we
> can
> >> make the next release 4.3.0 (note: our semantic versioning has always
> been
> >> wrong - different issue) to denote a breaking change.
> >>
> >> I have a candidate PR here: https://github.com/apache/curator/pull/320
> <
> >> https://github.com/apache/curator/pull/320 <
> https://github.com/apache/curator/pull/320>> - the Jira issue is:
> >> https://issues.apache.org/jira/browse/CURATOR-533 <
> https://issues.apache.org/jira/browse/CURATOR-533> <
> >> https://issues.apache.org/jira/browse/CURATOR-533 <
> https://issues.apache.org/jira/browse/CURATOR-533>>
> >>
> >> -Jordan
>
>

Reply via email to