Stephen O'Donnell created HDDS-6315:
---------------------------------------

             Summary: ListContainer API should use the sorted treeMaps more 
effectively
                 Key: HDDS-6315
                 URL: https://issues.apache.org/jira/browse/HDDS-6315
             Project: Apache Ozone
          Issue Type: Improvement
            Reporter: Stephen O'Donnell


As also reported in HDDS-6314, SCMClientProtocolServer.listContainer, the code 
does not seem to use the fact that the "container lists by state" are already 
sorted and in TreeMaps, so they could perform the paging much more efficiently. 
I fear we are potentially forming some very large lists twice per call, only to 
return a small slice of the list each time.

For example, the code looks like:


{code:java}
return scm.getContainerManager().getContainers(state).stream()
    .filter(info -> info.containerID().getId() >= startContainerID)
    .sorted().limit(count).collect(Collectors.toList()); {code}
The `sorted()` call must filter and process the entire list before the limit 
can be applied, but as the list is stored in a treeMap, we should be able to 
avoid the sort.

Better, a TreeMap allows you to obtain a sublist after a certain element using 
some combination of "floorKey" and "subMap", so we may be able to perform this 
paging much more efficiently.

Note that the `ContainerManagerImpl.getContainers(...)` API used by this class 
is vulnerable to ConcurrentModificationException, and hence that needs resolved 
either before or as part of addressing this change.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to