SAMOA-71: fixes concurrency issues in HorizontalAMRulesRegressor #68
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.
I suggest a change in ruleSet implementation from LinkedList (providing fail-fast iterators, which causes ConcurrencyException when list content changes during iterating over it) to CopyOnWriteArrayList (which is a thread-safe variant eliminating concurrency exceptions). In the analysed case, the modifications to ruleSet are expected to be much less frequent than reading the rules. When the number of read operations is relatively large and update operations are far less frequent, a possible choice is CopyOnWriteArrayList.
I have compared the performance on 35k instance streams (with a higher than 35k number concurrency exception got thrown) and got the same <1 second processing time. Hence, the possible negative impact on the performance can be considered negligible, if any. Still, suggestions and possible other solution ideas from designers of AMRules are welcome.