cziegeler commented on code in PR #69:
URL:
https://github.com/apache/sling-org-apache-sling-resourceresolver/pull/69#discussion_r881597236
##########
src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java:
##########
@@ -1077,25 +1077,28 @@ private void gather(final ResourceResolver resolver,
final List<MapEntry> entrie
*/
private boolean addEntry(final Map<String, List<MapEntry>> entryMap, final
String key, final MapEntry entry) {
- if (entry==null){
+ if (entry == null) {
+ log.trace("trying to add null entry for {}", key);
return false;
- }
-
- List<MapEntry> entries = entryMap.get(key);
- if (entries == null) {
- entries = new ArrayList<>();
- entries.add(entry);
- // and finally sort list
- Collections.sort(entries);
- entryMap.put(key, entries);
} else {
- List<MapEntry> entriesCopy =new ArrayList<>(entries);
- entriesCopy.add(entry);
- // and finally sort list
- Collections.sort( entriesCopy);
- entryMap.put(key, entriesCopy);
+ List<MapEntry> entries = entryMap.get(key);
+ if (entries == null) {
+ entries = new ArrayList<>();
+ entries.add(entry);
+ entryMap.put(key, Collections.synchronizedList(entries));
Review Comment:
With a synchronized list you punish all read calls which outweight the write
calls. Thats why the code is creating a new list with every modification. I
guess these days a copy on write list could be used instead. And instead of
sorting, the insert could search for the right index to insert into (traversing
the list once)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]