Bug #71749 [Com]: file_cache_consistency_checks has no effect

From: Date: Wed, 09 Mar 2016 11:19:25 +0000
Subject: Bug #71749 [Com]: file_cache_consistency_checks has no effect
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-199693@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=71749&edit=1

 ID:                 71749
 Comment by:         inefedor at gmail dot com
 Reported by:        iquito at gmx dot net
 Summary:            file_cache_consistency_checks has no effect
 Status:             Open
 Type:               Bug
 Package:            opcache
 PHP Version:        7.0.4
 Block user comment: N
 Private report:     N

 New Comment:

Looking at the code it seems you misunderstood the purpose of file_cache_consistency_checks
directive. If I'm not mistaken it's only needed for checking if *.bin files are not
damaged (i.e. their checksum is the same).


Previous Comments:
------------------------------------------------------------------------
[2016-03-09 01:47:43] iquito at gmx dot net

Description:
------------
I did a lot of tests with the new opcache.file_cache possibilities and think that these new features
are great. But as far as I can tell, "opcache.file_cache_consistency_checks=1" has no
effect - there are no checks if files have changed or if the checksum is still the same, at least I
could not make out any noticeable effects.

This is a problem because it is now a bit confusing and hard to clear the file cache - the only sure
way to clear the cache is to delete the cached .bin file. If "opcache.validate_timestamps"
is set to 1, then that also seems to work for the file_cache - an existing file_cache .bin file is
compared with the timestamp of the original .php file.

But in production, "opcache.validate_timestamps" is better set to zero, to avoid file
system requests. Until now, when deploying a new version of an application, I just called
"opcache_reset();" to reload the application, which worked perfectly: in an instant, the
old code is gone and the new code is loaded.

With validate_timestamps set to 0 and with the new file_cache, the file is instead immediately
re-cached from the file system and not checked against the original file - meaning a newly deployed
application is not loaded, the previous state is loaded from the file system. I thought
"opcache.file_cache_consistency_checks" was to specifically address this issue - check if
the file_cache version is still the same as the original file. But this does not seem to work, in
all my tests.

Test script:
---------------
Use the following settings:

opcache.enable=1
opcache.enable_cli=1
opcache.validate_timestamps=0
opcache.file_cache="/srv/php-file-cache"
opcache.file_cache_only=1
opcache.file_cache_consistency_checks=1

Then call a simple script from PHP CLI (opcache enabled), like "<?php echo
'5';" - this file will now be cached. If you change the file to "<?php echo
'7';", this change will never be displayed until you delete the cached file from the
file system.



------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=71749&edit=1


Thread (9 messages)

« previous php.bugs (#199693) next »