Added typed resilient component specs with generated AP/KSP modules - #733
Open
GoodforGod wants to merge 4 commits into
Open
Added typed resilient component specs with generated AP/KSP modules#733GoodforGod wants to merge 4 commits into
GoodforGod wants to merge 4 commits into
Conversation
Test Results140 tests 140 ✅ 10m 41s ⏱️ Results for commit eccb305. ♻️ This comment has been updated with latest results. |
Dependency Update ReportUpdate level: Found
|
Added full config-path based CircuitBreaker wiring for annotation and symbol processors, replacing named manager lookup with generated tagged factory modules. Breaking: CircuitBreaker config is now resolved directly from the annotation path, with reserved root/telemetry paths rejected. - Added generated path-based tags and modules that provide tagged CircuitBreakerFactoryModule instances and deduplicate shared config paths. - Improved KSP CircuitBreaker AOP to inject tagged CircuitBreaker components directly and support suspend methods. - Added CompletionStage and CompletableFuture CircuitBreaker coverage for Java AOP behavior.
Improved CircuitBreaker AP and KSP generation to use typed CircuitBreaker interfaces as injectable components, with config-bound generated implementations and modules. - Added CircuitBreakable method annotation that injects the typed CircuitBreaker interface directly. - Added interface-level CircuitBreaker generation for config, implementation, telemetry, and optional tagged predicate wiring. - Improved failure predicate behavior so tagged CircuitBreakerPredicate overrides the interface test method, while the interface default is used when no predicate is provided. - Removed path-based generated tags, CircuitBreakerFactoryModule, named failure predicate lookup, and old CircuitBreaker tag utilities.
Added Breaking: resilient components now use typed spec interfaces and generated modules instead of string-based named managers. CircuitBreaker, Retry, Timeout, and RateLimiter are created as regular graph components from their own typed configs, while Fallback is simplified to method-level fallback handling with explicit exception reason injection. - Added typed spec annotations for CircuitBreaker, Retry, Timeout, and RateLimiter, with AP/KSP generation of implementation classes and module factories per declared spec interface. - Removed named config/default config lookup flow and manager-based component resolution in favor of direct typed config mapping and generated graph components. - Added Retry v2 behavior with optional exponential backoff, full jitter with ratio, and retry budget support. - Added additional CircuitBreaker implementations and structured count-based/time-based configuration, including high-throughput variants for different accuracy/performance tradeoffs. - Changed ResilientConfig to hold global telemetry defaults for all resilient components. - Added per-component telemetry overrides that merge property-by-property with global telemetry config, matching SchedulingJobConfig-style behavior. - Simplified Fallback by removing fallback predicates/spec components and routing failures to fallback methods with @Fallback.Reason exception arguments. - Updated Java AP and KSP aspects/tests for sync, async, suspend, Flow, typealias, and generated component wiring.
GoodforGod
force-pushed
the
feature/resilient-redesign
branch
from
July 20, 2026 01:12
9d7478e to
eccb305
Compare
GoodforGod
marked this pull request as ready for review
July 20, 2026 10:35
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
EN
Improved Breaking: resilient AOP now uses typed component specs and generated AP/KSP modules instead of manager-based lookup by string name. This makes resilient components regular graph dependencies with typed config mapping and removes named/default config merging from the generated path.
RU
Переработана AOP-интеграция resilient-компонентов: вместо поиска через менеджеры по строковому имени теперь используются типизированные spec-интерфейсы и сгенерированные AP/KSP-модули. Resilient-компоненты стали обычными зависимостями графа с типизированной конфигурацией, без named/default config merging в сгенерированном пути.
CircuitBreaker,Retry,Timeout, andRateLimiterAOP wiring to inject generated typed components instead of resolving them through managers.defaultnamed config merging for resilient components.FallbackAOP by removing fallback spec/predicate components and invoking fallback methods directly with@Fallback.Reason.Flow, and Kotlin typealias resilient targets.Generated Component Shape
A declared spec interface becomes a generated implementation and module component.
Representative generated module shape:
AOP Usage
Guarded methods now reference the typed component contract, and the aspect injects that component directly.
For fallback, the fallback method receives the original failure through
@Fallback.Reason.