Bug #78512 [Com]: Cannot make preload work

From: Date: Thu, 12 Sep 2019 18:17:51 +0000
Subject: Bug #78512 [Com]: Cannot make preload work
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-222709@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=78512&edit=1

 ID:                 78512
 Comment by:         nicolas dot grekas+php at gmail dot com
 Reported by:        nicolas dot grekas+php at gmail dot com
 Summary:            Cannot make preload work
 Status:             Feedback
 Type:               Bug
 Package:            opcache
 PHP Version:        7.4.0RC1
 Block user comment: N
 Private report:     N

 New Comment:

built: Sep 11 2019 23:45:59 doesn't work yet for me:

This is gone: Error Internal error: wrong size calculation

php -S starts, but I still have Class 'ComposerAutoloaderInit...' not found when I access
http://localhost:8000 afterwards.
When I call get_declared_classes(), the class is not listed.
But when I call opcache_get_status(), I see the class listed in preload_statistics.

Basically, the original issue description still applies to me sorry...


Previous Comments:
------------------------------------------------------------------------
[2019-09-11 07:57:59] nikic@php.net

After https://github.com/php/php-src/commit/0a24cd4e7c38d7565905152d4286ef0404d9d591
I get:

Warning: Can't preload already declared class
Symfony\Bundle\FrameworkBundle\DependencyInjection\CompatibilityServiceSubscriberInterface in
/home/nikic/repos/preload-test/vendor/symfony/framework-bundle/DependencyInjection/CompatibilityServiceSubscriberInterface.php
on line 28

Warning: Can't preload already declared class
Symfony\Contracts\EventDispatcher\EventDispatcherInterface in
/home/nikic/repos/preload-test/vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php
on line 20

Warning: Can't preload unlinked class Symfony\Component\DependencyInjection\ExpressionLanguage:
Unknown parent Symfony\Component\ExpressionLanguage\ExpressionLanguage in
/home/nikic/repos/preload-test/vendor/symfony/dependency-injection/ExpressionLanguage.php on line 28

But otherwise it works.

Do you see any further issues?

------------------------------------------------------------------------
[2019-09-10 16:48:54] nikic@php.net

I had to use -d opcache.preload=var/cache/dev/srcApp_KernelDevDebugContainer.preload.php.

php: /home/nikic/php-7.4/ext/opcache/ZendAccelerator.c:4293: accel_preload: Assertion
`zend_gc_refcount(&(ht)->gc) == 1' failed.

------------------------------------------------------------------------
[2019-09-10 16:07:51] nicolas dot grekas+php at gmail dot com

I merged the needed code in Symfony so that it becomes easier to experiment with this.

Today, I get:
(514): Error Internal error: wrong size calculation: $PRELOAD$ start=0x00007fad51433380,
end=0x00007fad51595870, real=0x00007fad515959e8

Here is my reproducer:

composer create-project symfony/skeleton:4.4.x@dev preload-test
cd preload-test
php -S localhost:8000 -t public/
-dopcache.preload=var/cache/prod/srcApp_KernelProdContainer.preload.php -dopcache.preload_user=root

FYI, I'm using docker pull devilbox/php-fpm-7.4 to get the code (built: Sep  9 2019 23:44:24).

------------------------------------------------------------------------
[2019-09-10 09:16:00] dmitry@php.net

Not reproducible with PHP-7.4 GIT.

$ wget -qO- http://localhost:8000/
array(8) {
  ["debug"]=>
  int(0)
  ["info"]=>
  int(1)
  ["notice"]=>
  int(2)
  ["warning"]=>
  int(3)
  ["error"]=>
  int(4)
  ["critical"]=>
  int(5)
  ["alert"]=>
  int(6)
  ["emergency"]=>
  int(7)
}

$ wget -qO- http://localhost:8000/stats.php | grep -a
ComposerAutoloaderInit0fc59465a08737274a67ea5841756d9a
    [235] => ComposerAutoloaderInit0fc59465a08737274a67ea5841756d9a
                    [82] => ComposerAutoloaderInit0fc59465a08737274a67ea5841756d9a

------------------------------------------------------------------------
[2019-09-08 13:58:53] nicolas dot grekas+php at gmail dot com

Description:
------------
This is a follow up from https://bugs.php.net/78175

Using https://github.com/nicolas-grekas/symfony/releases/download/php-bugs/preload-failures-78175.tar.bz2

I run
php -S localhost:8000 -t public/
-dopcache.preload=var/cache/prod/srcApp_KernelProdContainer.preload.php

Then in another console:
php info.php

Today, this fails with Class'ComposerAutoloaderInit0fc59465a08737274a67ea5841756d9a' not
found.

When I call get_declared_classes(), the class is not listed.
But when I call opcache_get_status(), I see the class listed in preload_statistics.



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



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


Thread (13 messages)

« previous php.bugs (#222709) next »