Fix adaptive metrics decay when provider metrics are not updated #16048
+51
−2
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.
What is the purpose of the change?
This PR fixes an issue in AdaptiveLoadBalance / AdaptiveMetrics where latency decay behaves incorrectly when provider metrics are not updated for a period of time.
Currently, when no new provider metrics arrive, getLoad() may repeatedly apply the penalty branch or aggressively right-shift lastLatency, which can result in stale or extreme values dominating EWMA. This makes adaptive load balancing unstable, especially in low-QPS or intermittent-update scenarios.
This PR ensures that latency decays safely and progressively instead of collapsing or being stuck at penalty values.
Fixes #15810
What is changed?
1. Improved decay logic in AdaptiveMetrics#getLoad()
2. Added unit test
Added
testAdaptiveMetricsDecayWithoutProviderUpdateVerifies that when provider metrics are not updated:
Why is this needed?
Adaptive load balancing relies on EWMA latency to reflect recent performance trends.
Without this fix:
This change makes adaptive load balancing more stable, realistic, and robust under real-world traffic patterns.
Verifying this change
mvn -pl dubbo-cluster -am testChecklist