Edit report at https://bugs.php.net/bug.php?id=81673&edit=1
ID: 81673
Comment by: bzxc3t6gsdf at protonmail dot com
Reported by: eric at ericstern dot com
Summary: Tracing JIT causing various errors (trait related?)
Status: Open
Type: Bug
Package: JIT
Operating System: Alpine linux
PHP Version: 8.0.13
Block user comment: N
Private report: N
New Comment:
Thanks
https://altosaxo.net/products/tonstartssbandht-t-shirt-men
https://altosaxo.net/products/perfume-genius-t-shirt-men
https://altosaxo.net/products/lake-street-dive-t-shirt-men
https://altosaxo.net/products/nemesea-t-shirt-men
https://altosaxo.net/products/slow-pulp-t-shirt-men
Previous Comments:
------------------------------------------------------------------------
[2022-03-03 12:38:53] vq4ta2 at protonmail dot com
Thanks
https://altosaxo.net/products/turnstile-t-shirt-men
https://altosaxo.net/products/mushroomhead-t-shirt-men
https://altosaxo.net/products/cro-mags-t-shirt-men
https://altosaxo.net/products/sleigh-bells-t-shirt-men
https://altosaxo.net/products/whyzdom-t-shirt-men
------------------------------------------------------------------------
[2022-03-03 12:38:05] gaxzc443 at protonmail dot com
Thanks
https://altosaxo.net/products/vision-of-disorder-t-shirt-men
https://altosaxo.net/products/strand-of-oaks-t-shirt-men
https://altosaxo.net/products/the-amity-affliction-t-shirt-women
https://altosaxo.net/products/pilfers-t-shirt-men
https://altosaxo.net/products/ad-infinitum-t-shirt-men
------------------------------------------------------------------------
[2021-11-30 00:47:42] julien dot boudry at gmail dot com
Not exactly the same error, but the same context, only with tracing mode. And the code use trait
too.
https://bugs.php.net/bug.php?id=81432
------------------------------------------------------------------------
[2021-11-29 22:02:47] eric at ericstern dot com
Description:
------------
When enabling the JIT in a production environment, I started getting various errors in third-party
libraries (guzzlehttp/psr7, though I doubt it's relevant). After some poking and prodding, I
was able to narrow it down to the JIT running in tracing mode (via "on" or
explicitly "tracing"). Turning it back off or running it in "function" mode made
the errors disappear.
Notably, if I'm following my logs correctly, the first job seems to run fine. It's only on
the second+ job where the error comes up.
The errors that occurred included:
TypeError: GuzzleHttp\Psr7\Request::getBody(): Return value must be of type
Psr\Http\Message\StreamInterface, null returned in
/var/www/html/vendor/guzzlehttp/psr7/src/MessageTrait.php:127
Error: Cannot use object of type GuzzleHttp\Psr7\Uri as array in
/var/www/html/vendor/guzzlehttp/psr7/src/MessageTrait.php:161
(see linked file below)
In both cases, the errors make absolutely no sense for the given source code, especially the latter.
Which error I get seems basically random, though the latter seems more common for any given worker.
My gut tells me the issue is somehow specific to traits, but I don't have any practical way to
verify that.
INI settings:
opcache.enable="1"
opcache.enable_cli="1"
(typical opcache prod values, preloading is enabled)
opcache.jit="on"
opcache.jit_buffer_size="128M"
Test script:
---------------
https://github.com/Firehed/php-jit-tracing-error
- this doesn't actually reproduce the issue (yet), but it shows the approximate code structure
where it occurs.
The surrounding infrastructure/code in prod is fairly long and complex, so I'm not sure how
much needs to get added in to reproduce the issue. But it's a run loop for an async job worker
which performs a network request and then parses and stores the results in a database. Nothing too
special. The code in question has been live for months without ever having an issue.
Errors originate in this file:
https://github.com/guzzle/psr7/blob/2.1.0/src/MessageTrait.php
Expected result:
----------------
No errors
Actual result:
--------------
One backtrace:
TypeError: GuzzleHttp\Psr7\Request::getBody(): Return value must be of type
Psr\Http\Message\StreamInterface, null returned in
/var/www/html/vendor/guzzlehttp/psr7/src/MessageTrait.php:127
Stack trace:
#0 /var/www/html/vendor/guzzlehttp/psr7/src/Utils.php(222): GuzzleHttp\Psr7\Request->getBody()
#1 /var/www/html/vendor/guzzlehttp/guzzle/src/Client.php(440):
GuzzleHttp\Psr7\Utils::modifyRequest(Object(GuzzleHttp\Psr7\Request), Array)
#2 /var/www/html/vendor/guzzlehttp/guzzle/src/Client.php(326):
GuzzleHttp\Client->applyOptions(Object(GuzzleHttp\Psr7\Request), Array)
#3 /var/www/html/vendor/guzzlehttp/guzzle/src/Client.php(107):
GuzzleHttp\Client->transfer(Object(GuzzleHttp\Psr7\Request), Array)
#4 /var/www/html/vendor/guzzlehttp/guzzle/src/Client.php(123):
GuzzleHttp\Client->sendAsync(Object(GuzzleHttp\Psr7\Request), Array)
#5 /var/www/html/src/Worker/FetchStoreData.php(241):
GuzzleHttp\Client->send(Object(GuzzleHttp\Psr7\Request), Array)
#6 /var/www/html/src/Console/Worker/Run.php(213):
Slant\Normalizer\Worker\FetchStoreData->doJob(Array)
#7 [internal function]:
Slant\Normalizer\Console\Worker\Run->Slant\Normalizer\Console\Worker\{closure}(Object(Kicken\Gearman\Job\WorkerJob))
#8 /var/www/html/vendor/kicken/gearman-php/src/Worker.php(194): call_user_func(Object(Closure),
Object(Kicken\Gearman\Job\WorkerJob))
#9 /var/www/html/vendor/kicken/gearman-php/src/Worker.php(177):
Kicken\Gearman\Worker->processJob(Object(Kicken\Gearman\Protocol\Packet))
#10 /var/www/html/vendor/kicken/gearman-php/src/Worker.php(116):
Kicken\Gearman\Worker->processPacket(Object(Kicken\Gearman\Protocol\Packet))
#11 /var/www/html/src/Console/Worker/Run.php(145): Kicken\Gearman\Worker->workOnce()
#12 /var/www/html/vendor/symfony/console/Command/Command.php(299):
Slant\Normalizer\Console\Worker\Run->execute(Object(Symfony\Component\Console\Input\ArgvInput),
Object(Symfony\Component\Console\Output\ConsoleOutput))
#13 /var/www/html/vendor/symfony/console/Application.php(978):
Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput),
Object(Symfony\Component\Console\Output\ConsoleOutput))
#14 /var/www/html/vendor/symfony/console/Application.php(295):
Symfony\Component\Console\Application->doRunCommand(Object(Slant\Normalizer\Console\Worker\Run),
Object(Symfony\Component\Console\Input\ArgvInput),
Object(Symfony\Component\Console\Output\ConsoleOutput))
#15 /var/www/html/vendor/symfony/console/Application.php(167):
Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput),
Object(Symfony\Component\Console\Output\ConsoleOutput))
#16 /var/www/html/bin/app(63): Symfony\Component\Console\Application->run()
#17 {main}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=81673&edit=1