Fix ConcurrentModificationException in LiveMetricsVerifier by using CopyOnWriteArrayList #4328
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.
This PR fixes a sporadic test failure where
LiveMetricsVerifier.getRequestCount()throws aConcurrentModificationExceptionwhen iterating over thepointsArrayList while another thread is modifying it.Problem
The issue manifests as:
Root Cause:
pointsfield is anArrayList<MonitoringDataPoint>accessed from multiple threadsapply()to add elements while another thread iterates ingetRequestCount(),getExceptionCount(), etc.ArrayListis not thread-safe, causing the concurrent modification exceptionSolution
Replace
ArrayListwithCopyOnWriteArrayListfor thread-safe iteration in this read-heavy workload.Changes made:
ArrayList<MonitoringDataPoint>toCopyOnWriteArrayList<MonitoringDataPoint>in thepointsfieldjava.util.concurrent.CopyOnWriteArrayListArrayListimportWhy CopyOnWriteArrayList:
ConcurrentModificationExceptionThis change ensures that all methods like
getRequestCount(),getExceptionCount(),getTraceCount(), etc. can safely iterate over the list while other threads are adding new monitoring data points.Fixes #4327.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.