[ 
http://issues.apache.org/jira/browse/COCOON-1681?page=comments#action_12364063 
] 

Antonio Fiol commented on COCOON-1681:
--------------------------------------

No, I am not  disabling the expiry check. This was a temporary workaround.

The code in isValid says something like:

if not yet expired (current time < expiry time) return VALID
expiry time = current time      <---- OFFENDING LINE
check filesystem and return INVALID if it really is INVALID
(as it is not invalid, and FS was already checked)
expiry time = current time
return VALID

What happens is that if it is called twice on an expired directory, the first 
time will return INVALID, but will (incorrectly) update the expiry time.
So the second call will incorrectly return VALID, because it is not expired.

I agree that a single call to isValid() would be much better, but isValid 
should anyway be implemented in a secure (consistent) manner. With our patch, 
if the cached version is invalid, the FS is checked twice instead of the ideal 
"once". But if it is not expired, no FS check is done, so it's quite different 
from disabling the expiry checks.

In any case, I liked your suggestion, and will try to provide the two stack 
frames, and I will also post the patch today (we finished testing yesterday, 
and it works like a charm).



> Generator "directory": Caching too much
> ---------------------------------------
>
>          Key: COCOON-1681
>          URL: http://issues.apache.org/jira/browse/COCOON-1681
>      Project: Cocoon
>         Type: Bug
>   Components: * Cocoon Core
>     Versions: 2.1.8, 2.1.7
>     Reporter: Antonio Fiol
>     Assignee: Jean-Baptiste Quenot

>
> In some cases, an update to the directory is not detected by the 
> DirectoryGenerator.
> Debugging the issue, I discovered that isValid() is called twice on the same 
> DirValidity, but it returns different values (-1 the first time, 1 the second 
> time).
> Apparently, the reason for the inconsistency would be solved by removing the 
> first of the two lines that update the expiry time in the isValid() method in 
> DirValidity, but I am not sure whether this could cause problems in other 
> places.
> A possibility would be that a DirValidity stores the fact that it already 
> detected it is invalid, and is changed so that it always return -1. But... 
> Are DirValidity objects reused? Could this change cause problems? I have not 
> tested, so I don't know.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira