Skip to content

Fail imi-swoole-pgsql-raw with PHP 8.3 in Techempower benchmark #661

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
joanhey opened this issue Dec 3, 2023 · 2 comments
Closed

Fail imi-swoole-pgsql-raw with PHP 8.3 in Techempower benchmark #661

joanhey opened this issue Dec 3, 2023 · 2 comments

Comments

@joanhey
Copy link

joanhey commented Dec 3, 2023

image

VERIFYING QUERY COUNT FOR http://tfb-server:8080/pgUpdateRaw?queries=20
--------------------------------------------------------------------------------
imi-swoole-pgsql-raw: [2023-11-29 18:19:31] imi.ERROR: PDOException: SQLSTATE[40P01]: Deadlock detected: 7 ERROR:  deadlock detected
imi-swoole-pgsql-raw: DETAIL:  Process 369 waits for ShareLock on transaction 1128; blocked by process 491.
imi-swoole-pgsql-raw: Process 491 waits for ShareLock on transaction 1132; blocked by process 403.
imi-swoole-pgsql-raw: Process 403 waits for ShareLock on transaction 999; blocked by process 259.
imi-swoole-pgsql-raw: Process 259 waits for ExclusiveLock on tuple (13,50) of relation 16416 of database 16384; blocked by process 418.
imi-swoole-pgsql-raw: Process 418 waits for ShareLock on transaction 1112; blocked by process 309.
imi-swoole-pgsql-raw: Process 309 waits for ShareLock on transaction 1134; blocked by process 347.
imi-swoole-pgsql-raw: Process 347 waits for ShareLock on transaction 1049; blocked by process 369.
imi-swoole-pgsql-raw: HINT:  See server log for query details.
imi-swoole-pgsql-raw: CONTEXT:  while updating tuple (23,199) in relation "world" in /imi/vendor/imiphp/imi/src/Db/Drivers/TPdoStatement.php:146
imi-swoole-pgsql-raw: Stack trace:
imi-swoole-pgsql-raw: #0 /imi/vendor/imiphp/imi/src/Db/Drivers/TPdoStatement.php(146): PDOStatement->execute()
imi-swoole-pgsql-raw: #1 /imi/ApiServer/Controller/PgController.php(194): Imi\Pgsql\Db\Drivers\PdoPgsql\Statement->execute(Array)
imi-swoole-pgsql-raw: #2 /imi/vendor/imiphp/imi/src/Util/DelayServerBeanCallable.php(86): ImiApp\ApiServer\Controller\PgController->pgUpdateRaw(20)
imi-swoole-pgsql-raw: #3 /imi/vendor/imiphp/imi/src/Server/Http/Middleware/ActionMiddleware.php(79): Imi\Util\DelayServerBeanCallable->__invoke('20')
imi-swoole-pgsql-raw: #4 /imi/vendor/imiphp/imi/src/Server/Http/Dispatcher.php(68): Imi\Server\Http\Middleware\ActionMiddleware->dispatch(Object(Imi\Swoole\Http\Message\SwooleRequest), Object(Imi\Swoole\Http\Message\SwooleResponse))
imi-swoole-pgsql-raw: #5 /imi/vendor/imiphp/imi-swoole/src/Server/Http/Listener/BeforeRequest.php(49): Imi\Server\Http\Dispatcher->dispatch(Object(Imi\Swoole\Http\Message\SwooleRequest))
imi-swoole-pgsql-raw: #6 /imi/vendor/imiphp/imi/src/Event/TEvent.php(202): Imi\Swoole\Server\Http\Listener\BeforeRequest->handle(Object(Imi\Swoole\Server\Event\Param\RequestEventParam))
imi-swoole-pgsql-raw: #7 /imi/vendor/imiphp/imi-swoole/src/Server/Http/Server.php(125): Imi\Server\Contract\BaseServer->trigger('request', Array, Object(Server__Bean__29), 'Imi\\Swoole\\Serv...')
imi-swoole-pgsql-raw: #8 [internal function]: Imi\Swoole\Server\Http\Server->Imi\Swoole\Server\Http\{closure}(Object(Swoole\Http\Request), Object(Swoole\Http\Response))
imi-swoole-pgsql-raw: #9 {main}  
imi-swoole-pgsql-raw: [2023-11-29 18:19:31] imi.ERROR: PDOException: SQLSTATE[40P01]: Deadlock detected: 7 ERROR:  deadlock detected
imi-swoole-pgsql-raw: DETAIL:  Process 423 waits for ShareLock on transaction 1089; blocked by process 125.
imi-swoole-pgsql-raw: Process 125 waits for ShareLock on transaction 1190; blocked by process 117.
imi-swoole-pgsql-raw: Process 117 waits for ShareLock on transaction 1106; blocked by process 297.
imi-swoole-pgsql-raw: Process 297 waits for ShareLock on transaction 1145; blocked by process 353.
imi-swoole-pgsql-raw: Process 353 waits for ShareLock on transaction 1129; blocked by process 423.
imi-swoole-pgsql-raw: HINT:  See server log for query details.
imi-swoole-pgsql-raw: CONTEXT:  while updating tuple (82,125) in relation "world" in /imi/vendor/imiphp/imi/src/Db/Drivers/TPdoStatement.php:146
imi-swoole-pgsql-raw: Stack trace:
imi-swoole-pgsql-raw: #0 /imi/vendor/imiphp/imi/src/Db/Drivers/TPdoStatement.php(146): PDOStatement->execute()
imi-swoole-pgsql-raw: #1 /imi/ApiServer/Controller/PgController.php(194): Imi\Pgsql\Db\Drivers\PdoPgsql\Statement->execute(Array)
imi-swoole-pgsql-raw: #2 /imi/vendor/imiphp/imi/src/Util/DelayServerBeanCallable.php(86): ImiApp\ApiServer\Controller\PgController->pgUpdateRaw(20)
imi-swoole-pgsql-raw: #3 /imi/vendor/imiphp/imi/src/Server/Http/Middleware/ActionMiddleware.php(79): Imi\Util\DelayServerBeanCallable->__invoke('20')
imi-swoole-pgsql-raw: #4 /imi/vendor/imiphp/imi/src/Server/Http/Dispatcher.php(68): Imi\Server\Http\Middleware\ActionMiddleware->dispatch(Object(Imi\Swoole\Http\Message\SwooleRequest), Object(Imi\Swoole\Http\Message\SwooleResponse))
imi-swoole-pgsql-raw: #5 /imi/vendor/imiphp/imi-swoole/src/Server/Http/Listener/BeforeRequest.php(49): Imi\Server\Http\Dispatcher->dispatch(Object(Imi\Swoole\Http\Message\SwooleRequest))
imi-swoole-pgsql-raw: #6 /imi/vendor/imiphp/imi/src/Event/TEvent.php(202): Imi\Swoole\Server\Http\Listener\BeforeRequest->handle(Object(Imi\Swoole\Server\Event\Param\RequestEventParam))
imi-swoole-pgsql-raw: #7 /imi/vendor/imiphp/imi-swoole/src/Server/Http/Server.php(125): Imi\Server\Contract\BaseServer->trigger('request', Array, Object(Server__Bean__29), 'Imi\\Swoole\\Serv...')
imi-swoole-pgsql-raw: #8 [internal function]: Imi\Swoole\Server\Http\Server->Imi\Swoole\Server\Http\{closure}(Object(Swoole\Http\Request), Object(Swoole\Http\Response))
imi-swoole-pgsql-raw: #9 {main}  
imi-swoole-pgsql-raw: [2023-11-29 18:19:32] imi.ERROR: PDOException: SQLSTATE[40P01]: Deadlock detected: 7 ERROR:  deadlock detected
imi-swoole-pgsql-raw: DETAIL:  Process 403 waits for ShareLock on transaction 999; blocked by process 259.
imi-swoole-pgsql-raw: Process 259 waits for ShareLock on transaction 1031; blocked by process 418.
imi-swoole-pgsql-raw: Process 418 waits for ShareLock on transaction 1179; blocked by process 122.
imi-swoole-pgsql-raw: Process 122 waits for ShareLock on transaction 1128; blocked by process 491.
imi-swoole-pgsql-raw: Process 491 waits for ShareLock on transaction 1132; blocked by process 403.
imi-swoole-pgsql-raw: HINT:  See server log for query details.
imi-swoole-pgsql-raw: CONTEXT:  while updating tuple (77,90) in relation "world" in /imi/vendor/imiphp/imi/src/Db/Drivers/TPdoStatement.php:146
imi-swoole-pgsql-raw: Stack trace:
imi-swoole-pgsql-raw: #0 /imi/vendor/imiphp/imi/src/Db/Drivers/TPdoStatement.php(146): PDOStatement->execute()
imi-swoole-pgsql-raw: #1 /imi/ApiServer/Controller/PgController.php(194): Imi\Pgsql\Db\Drivers\PdoPgsql\Statement->execute(Array)
imi-swoole-pgsql-raw: #2 /imi/vendor/imiphp/imi/src/Util/DelayServerBeanCallable.php(86): ImiApp\ApiServer\Controller\PgController->pgUpdateRaw(20)
imi-swoole-pgsql-raw: #3 /imi/vendor/imiphp/imi/src/Server/Http/Middleware/ActionMiddleware.php(79): Imi\Util\DelayServerBeanCallable->__invoke('20')
imi-swoole-pgsql-raw: #4 /imi/vendor/imiphp/imi/src/Server/Http/Dispatcher.php(68): Imi\Server\Http\Middleware\ActionMiddleware->dispatch(Object(Imi\Swoole\Http\Message\SwooleRequest), Object(Imi\Swoole\Http\Message\SwooleResponse))
imi-swoole-pgsql-raw: #5 /imi/vendor/imiphp/imi-swoole/src/Server/Http/Listener/BeforeRequest.php(49): Imi\Server\Http\Dispatcher->dispatch(Object(Imi\Swoole\Http\Message\SwooleRequest))
imi-swoole-pgsql-raw: #6 /imi/vendor/imiphp/imi/src/Event/TEvent.php(202): Imi\Swoole\Server\Http\Listener\BeforeRequest->handle(Object(Imi\Swoole\Server\Event\Param\RequestEventParam))
imi-swoole-pgsql-raw: #7 /imi/vendor/imiphp/imi-swoole/src/Server/Http/Server.php(125): Imi\Server\Contract\BaseServer->trigger('request', Array, Object(Server__Bean__29), 'Imi\\Swoole\\Serv...')
imi-swoole-pgsql-raw: #8 [internal function]: Imi\Swoole\Server\Http\Server->Imi\Swoole\Server\Http\{closure}(Object(Swoole\Http\Request), Object(Swoole\Http\Response))
imi-swoole-pgsql-raw: #9 {main}  
imi-swoole-pgsql-raw: [2023-11-29 18:19:32] imi.ERROR: PDOException: SQLSTATE[40P01]: Deadlock detected: 7 ERROR:  deadlock detected
imi-swoole-pgsql-raw: DETAIL:  Process 341 waits for ShareLock on transaction 1037; blocked by process 313.
imi-swoole-pgsql-raw: Process 313 waits for ExclusiveLock on tuple (7,70) of relation 16416 of database 16384; blocked by process 370.
imi-swoole-pgsql-raw: Process 370 waits for ShareLock on transaction 1028; blocked by process 440.
imi-swoole-pgsql-raw: Process 440 waits for ShareLock on transaction 1170; blocked by process 106.
imi-swoole-pgsql-raw: Process 106 waits for ShareLock on transaction 1149; blocked by process 110.
imi-swoole-pgsql-raw: Process 110 waits for ShareLock on transaction 1072; blocked by process 260.
imi-swoole-pgsql-raw: Process 260 waits for ShareLock on transaction 1036; blocked by process 371.
imi-swoole-pgsql-raw: Process 371 waits for ShareLock on transaction 1085; blocked by process 237.
imi-swoole-pgsql-raw: Process 237 waits for ShareLock on transaction 1108; blocked by process 341.
imi-swoole-pgsql-raw: HINT:  See server log for query details.
imi-swoole-pgsql-raw: CONTEXT:  while rechecking updated tuple (127,2) in relation "world" in /imi/vendor/imiphp/imi/src/Db/Drivers/TPdoStatement.php:146
imi-swoole-pgsql-raw: Stack trace:
imi-swoole-pgsql-raw: #0 /imi/vendor/imiphp/imi/src/Db/Drivers/TPdoStatement.php(146): PDOStatement->execute()
imi-swoole-pgsql-raw: #1 /imi/ApiServer/Controller/PgController.php(194): Imi\Pgsql\Db\Drivers\PdoPgsql\Statement->execute(Array)
imi-swoole-pgsql-raw: #2 /imi/vendor/imiphp/imi/src/Util/DelayServerBeanCallable.php(86): ImiApp\ApiServer\Controller\PgController->pgUpdateRaw(20)
imi-swoole-pgsql-raw: #3 /imi/vendor/imiphp/imi/src/Server/Http/Middleware/ActionMiddleware.php(79): Imi\Util\DelayServerBeanCallable->__invoke('20')
imi-swoole-pgsql-raw: #4 /imi/vendor/imiphp/imi/src/Server/Http/Dispatcher.php(68): Imi\Server\Http\Middleware\ActionMiddleware->dispatch(Object(Imi\Swoole\Http\Message\SwooleRequest), Object(Imi\Swoole\Http\Message\SwooleResponse))
imi-swoole-pgsql-raw: #5 /imi/vendor/imiphp/imi-swoole/src/Server/Http/Listener/BeforeRequest.php(49): Imi\Server\Http\Dispatcher->dispatch(Object(Imi\Swoole\Http\Message\SwooleRequest))
imi-swoole-pgsql-raw: #6 /imi/vendor/imiphp/imi/src/Event/TEvent.php(202): Imi\Swoole\Server\Http\Listener\BeforeRequest->handle(Object(Imi\Swoole\Server\Event\Param\RequestEventParam))
imi-swoole-pgsql-raw: #7 /imi/vendor/imiphp/imi-swoole/src/Server/Http/Server.php(125): Imi\Server\Contract\BaseServer->trigger('request', Array, Object(Server__Bean__29), 'Imi\\Swoole\\Serv...')
imi-swoole-pgsql-raw: #8 [internal function]: Imi\Swoole\Server\Http\Server->Imi\Swoole\Server\Http\{closure}(Object(Swoole\Http\Request), Object(Swoole\Http\Response))
imi-swoole-pgsql-raw: #9 {main}  
imi-swoole-pgsql-raw: [2023-11-29 18:19:33] imi.ERROR: PDOException: SQLSTATE[40P01]: Deadlock detected: 7 ERROR:  deadlock detected
imi-swoole-pgsql-raw: DETAIL:  Process 313 waits for ExclusiveLock on tuple (7,70) of relation 16416 of database 16384; blocked by process 370.
imi-swoole-pgsql-raw: Process 370 waits for ShareLock on transaction 1028; blocked by process 440.
imi-swoole-pgsql-raw: Process 440 waits for ShareLock on transaction 1170; blocked by process 106.
imi-swoole-pgsql-raw: Process 106 waits for ShareLock on transaction 1149; blocked by process 110.
imi-swoole-pgsql-raw: Process 110 waits for ShareLock on transaction 1096; blocked by process 244.
imi-swoole-pgsql-raw: Process 244 waits for ShareLock on transaction 1189; blocked by process 236.
imi-swoole-pgsql-raw: Process 236 waits for ShareLock on transaction 1037; blocked by process 313.
imi-swoole-pgsql-raw: HINT:  See server log for query details. in /imi/vendor/imiphp/imi/src/Db/Drivers/TPdoStatement.php:146
imi-swoole-pgsql-raw: Stack trace:
imi-swoole-pgsql-raw: #0 /imi/vendor/imiphp/imi/src/Db/Drivers/TPdoStatement.php(146): PDOStatement->execute()
imi-swoole-pgsql-raw: #1 /imi/ApiServer/Controller/PgController.php(194): Imi\Pgsql\Db\Drivers\PdoPgsql\Statement->execute(Array)
imi-swoole-pgsql-raw: #2 /imi/vendor/imiphp/imi/src/Util/DelayServerBeanCallable.php(86): ImiApp\ApiServer\Controller\PgController->pgUpdateRaw(20)
imi-swoole-pgsql-raw: #3 /imi/vendor/imiphp/imi/src/Server/Http/Middleware/ActionMiddleware.php(79): Imi\Util\DelayServerBeanCallable->__invoke('20')
imi-swoole-pgsql-raw: #4 /imi/vendor/imiphp/imi/src/Server/Http/Dispatcher.php(68): Imi\Server\Http\Middleware\ActionMiddleware->dispatch(Object(Imi\Swoole\Http\Message\SwooleRequest), Object(Imi\Swoole\Http\Message\SwooleResponse))
imi-swoole-pgsql-raw: #5 /imi/vendor/imiphp/imi-swoole/src/Server/Http/Listener/BeforeRequest.php(49): Imi\Server\Http\Dispatcher->dispatch(Object(Imi\Swoole\Http\Message\SwooleRequest))
imi-swoole-pgsql-raw: #6 /imi/vendor/imiphp/imi/src/Event/TEvent.php(202): Imi\Swoole\Server\Http\Listener\BeforeRequest->handle(Object(Imi\Swoole\Server\Event\Param\RequestEventParam))
imi-swoole-pgsql-raw: #7 /imi/vendor/imiphp/imi-swoole/src/Server/Http/Server.php(125): Imi\Server\Contract\BaseServer->trigger('request', Array, Object(Server__Bean__29), 'Imi\\Swoole\\Serv...')
imi-swoole-pgsql-raw: #8 [internal function]: Imi\Swoole\Server\Http\Server->Imi\Swoole\Server\Http\{closure}(Object(Swoole\Http\Request), Object(Swoole\Http\Response))
imi-swoole-pgsql-raw: #9 {main}  

  • Please execute the following command to get environment information.

php -v & php --ri swoole & composer info | grep -a imi

# Use dockerfile
FROM php:8.3-cli

ENV SWOOLE_VERSION 5.1.1
ARG TFB_TEST_DATABASE
ENV TFB_TEST_DATABASE=${TFB_TEST_DATABASE}

RUN apt -yqq update && \
    apt upgrade -y && \
    apt -yqq install git unzip libpq-dev

RUN docker-php-ext-install -j$(nproc) pdo_pgsql opcache mysqli

RUN cd /tmp && curl -sSL "https://github.com/swoole/swoole-src/archive/v${SWOOLE_VERSION}.tar.gz" | tar xzf - \
        && cd swoole-src-${SWOOLE_VERSION} \
        && phpize && ./configure --enable-swoole-pgsql && make -j install \
        && docker-php-ext-enable swoole

COPY . /imi
COPY php.ini /usr/local/etc/php/

RUN chmod -R ug+rwx /imi/.runtime

WORKDIR /imi

COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN composer install --no-dev --classmap-authoritative --quiet
RUN composer require imiphp/imi-swoole:~2.1.0 -W
RUN composer dumpautoload -o

EXPOSE 8080

CMD ./run-swoole.sh

  • Provide the smallest reproducible code: (Optional)
    Run the techempower test locally
// Your code
@Yurunsoft
Copy link
Member

This problem is very strange. Transactions are not used in the code. It is not clear why a deadlock occurs.

@Yurunsoft
Copy link
Member

I saw this PR was merged, maybe this is a sporadic issue. If there are still problems later, you can reopen this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants