FailsafeExecutor.compose and .with(Executor) have surprising composition behavior
stevenschlansker opened this issue · 0 comments
stevenschlansker commented
Hi Failsafe fans,
We use a Failsafe retry executor to retry potentially failing network requests.
In response to an incident, we decide to .compose(CircuitBreaker)
Our original code:
failsafe = Failsafe.with(retryPolicy).with(asyncExecutor);
We updated the code:
failsafe = Failsafe.with(retryPolicy).with(asyncExecutor).compose(circuitBreakerPolicy);
However, this leads to surprising behavior - the .compose
call creates a new executor but only copies the policies
and not any other fields. This means your scheduler
, executor
, and any configured handlers are lost.
The correct version is:
failsafe = Failsafe.with(retryPolicy).compose(circuitBreakerPolicy).with(asyncExecutor)
I did not see any mention of this in the documentation. Should compose
retain the other configurations on a FailsafeExecutor
? Or, if that is not desirable, can we document .compose
more specifically that it loses this configuration?