[ 
https://issues.apache.org/jira/browse/COCOON-2109?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Miguel Cuervo updated COCOON-2109:
----------------------------------

    Attachment: ContinuationsManagerImpl.java.patch

> Incorrent cleanup of expired continuations
> ------------------------------------------
>
>                 Key: COCOON-2109
>                 URL: https://issues.apache.org/jira/browse/COCOON-2109
>             Project: Cocoon
>          Issue Type: Bug
>          Components: - Flowscript
>    Affects Versions: 2.1.6, 2.1.7, 2.1.8, 2.1.9, 2.1.10, 2.1.11-dev (Current 
> SVN)
>            Reporter: Miguel Cuervo
>         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 correctly implement the 
> compareTo interface using the lastAccessTime and when a continuation is 
> inserted in the container, it gets correctly ordered. But once the 
> continuation is inserted in the container, 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 may 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.

Reply via email to