I'm not sure, if this is a bug or a peculiarity with opcache, but it's
definitely not a user question thus I am poating it in internals.
I came across a weird situation today that left me dumbfounded.
I have the following symbolic link:
index.php -> ../v1/idx.php
The link index.php is in the directory /data/pr/test/, yet the file
/data/pr/test/index.php was not in the list of cached files even though I
certainly accessed the file and there's no blacklist and other files in that
directory were in the list. This was the first strange thing, but I thought,
hey, maybe only the real file (/data/pr/v1/idx.php) is cached.
But here's the kicker:
After I changed the sym link to point to another file
index.php -> ../v2/index2.php
I had to reset the opcache that the correct page was served.
My revalidate_freq is set to 60 seconds. I also tested different browsers,
deleted the cache in the browser, waited for more than 60 seconds, nothing
helped. Only resetting the cache solved the issue (I actually restarted fpm).
Please let me know, if I should open a bug or if opcache just doesn't work
with symbolic links.
Cheers,
K. C.
--
regards Helmut K. C. Tessarek KeyID 0x172380A011EF4944
Key fingerprint = 8A55 70C1 BD85 D34E ADBC 386C 1723 80A0 11EF 4944
/*
Thou shalt not follow the NULL
pointer for chaos and madness
await thee at its end.
*/
I'm not sure, if this is a bug or a peculiarity with opcache, but it's
definitely not a user question thus I am poating it in internals.I came across a weird situation today that left me dumbfounded.
I have the following symbolic link:
index.php -> ../v1/idx.php
The link index.php is in the directory /data/pr/test/, yet the file
/data/pr/test/index.php was not in the list of cached files even though I
certainly accessed the file and there's no blacklist and other files
in that
directory were in the list. This was the first strange thing, but I
thought,
hey, maybe only the real file (/data/pr/v1/idx.php) is cached.But here's the kicker:
After I changed the sym link to point to another file
index.php -> ../v2/index2.php
I had to reset the opcache that the correct page was served.My revalidate_freq is set to 60 seconds. I also tested different browsers,
deleted the cache in the browser, waited for more than 60 seconds, nothing
helped. Only resetting the cache solved the issue (I actually
restarted fpm).Please let me know, if I should open a bug or if opcache just doesn't work
with symbolic links.
This is a long-standing issue with the opcache, its frequently seen when
deploying code using a symlink swap as the final step to atomically
launch the new code.
There are several pieces of information written on it, such as :
https://engineering.facile.it/blog/eng/realpath-cache-is-it-all-php-opcache-s-fault/
https://hackernoon.com/truly-atomic-deployments-with-nginx-and-php-fpm-aed8a8ac1cd9
I have not seen a bug report somewhere to php, but its possibly a
question if it should be considered a bug or not. There are settings to
trigger a re-evaluation which the links describe, and its also possible
to call opcache_reset()
for example. Most writing I've found is rather
old, but I assume its not because the problem is not there anymore but
rather that people use different means for deployment nowadays(perhaps). :)
/eric
This is a long-standing issue with the opcache, its frequently seen when
deploying code using a symlink swap as the final step to atomically launch
the new code.
Thank you very much for your reply. However, in my case I was not really
deploying something, but I get your point.
I have not seen a bug report somewhere to php, but its possibly a question
if it should be considered a bug or not.
Yep, this is the question I hoped would be answered on internals.
There are settings to trigger a re-evaluation which the links describe,
and its also possible to callopcache_reset()
for example.
This is just a workaround, which I used anyway. If the culprit is a
combination of opcache and realpath caching, it should still be mentioned
somewhere in the docs.
In my case, it was rather an edge case and I usually would not run into this
problem.
It is something I have noticed though, and I hoped I'd get some feedback from
the developers.
Thanks again for the reply and the links.
Cheers,
K. C.
--
regards Helmut K. C. Tessarek KeyID 0x172380A011EF4944
Key fingerprint = 8A55 70C1 BD85 D34E ADBC 386C 1723 80A0 11EF 4944
/*
Thou shalt not follow the NULL
pointer for chaos and madness
await thee at its end.
*/