Repository navigation
0.2.0
Released 2026-10-25. On Maven Central as dev.resilience4cata:*:0.2.0 (installation, documentation).
Fixes three behaviour bugs of 0.1.0; one of the fixes changes a default (see Upgrading).
Upgrading from 0.1.0
- Keep
coreandprocessoron the same version (import the BOM). Code generated by the 0.2.0 processor needs the 0.2.0core; code generated by 0.1.0 still links against the 0.2.0core, which only adds API. abortOnno longer containsCallNotPermittedExceptionby default, because an open circuit breaker now stops the retries on its own. RemoveCallNotPermittedExceptionfrom your ownabortOnlists if you added it only for that; it does no harm if you keep it.- A call rejected by an open breaker can no longer be retried by any configuration, classifier included.
Changed
- An open circuit breaker always stops the retries. A call rejected with
CallNotPermittedExceptionis never retried, whateverabortOn,retryOnor a classifier say, in generated code (sync and async) and inPipeline. In 0.1.0 this came from the defaultabortOn, so setting your ownabortOnsilently dropped it and the retry kept calling an open breaker.RetryConfig.DEFAULTS.abortOn()(anddefaults.retry.abortOn) is now empty; Retry.
Fixed
FallbackEvent.Appliedis no longer published for a failure that no sibling fallback method takes (for example anErrorwhen the only sibling takesException): such a failure is rethrown, and the event now means that a fallback really ran.- Error messages R4C-ATR-001 and R4C-CFG-002 state the duration grammar once instead of twice, and R4C-CFG-007 ends its sentence before "Known configs".
- The processor's module descriptor declares
AnnotationClaimertoo, so-Xlint:processingstays quiet when the processor runs from the processor module path next to other processors. - A classifier that throws inside
@CircuitBreaker(or aPipeline's breaker) now ends the call at once, sync and async: the retry around it no longer classifies the classifier's exception as the method's failure and retries it (which could open the breaker and surfaceCallNotPermittedExceptioninstead). The breaker records one failure, the retry publishesGaveUp(CLASSIFIER_FAILED)once, and the fallback or the caller gets the classifier's exception. See A classifier that throws.