[ https://issues.apache.org/jira/browse/COCOON-2109?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jörg Heinicke updated COCOON-2109: ---------------------------------- Affects Version/s: (was: 2.1.7) (was: 2.1.6) (was: 2.1.8) > Incorrent cleanup of expired continuations > ------------------------------------------ > > Key: COCOON-2109 > URL: https://issues.apache.org/jira/browse/COCOON-2109 > Project: Cocoon > Issue Type: Bug > Components: * Cocoon Core > Affects Versions: 2.1.11 > Reporter: Miguel Cuervo > Assignee: Jörg Heinicke > Fix For: 2.1.12-dev (Current SVN) > > Attachments: ContinuationsManagerImpl.java.patch > > > The class ContinuationsManagerImpl is in charge of cleaning up expired > continuations. It does so in the method expireContinuations. In this method > there is a loop using an iterator over a SortedSet of continuations > (WebContinuation). The loop is expecting that the continuations are ordered > from oldest to newest. The loop stops in the first continuation that is not > expired. The logic is correct since all the newer continuations could not be > expired. > However, the problem comes from the ordering of the continuations. To have > the continuations ordered by lastAccessTime the program uses a TreeSet as a > container of the continuations. The continuations implement the compareTo > interface using the lastAccessTime and when a continuation is inserted in the > container, it gets correctly ordered. But after the insertion, the > continuation can change its lastAccessTime using the method > WebContinuation.updateLastAccessTime() called from > WebContinuation.getContinuation(). The ordering of the TreeSet is not updated > with the change and when the program iterates over it, it does not get the > continuations in the order expected. > The result of this bug is that under hevy load many expired continuations may > be around before the loop actually clean them up, eating memory resources and > causing OutOfMemory. > To fix it, a patch is provided that uses a HashSet for the continuations > container and loops over all the continuations to check if they have expired. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.