phpactor / phpactor

Mainly a PHP Language Server with more features than you can shake a stick at
MIT License
1.41k stars 128 forks source link

Failed to write to stream; fwrite(): Write of 933 bytes failed with errno=32 Broken pipe #2358

Open leo-unglaub opened 1 year ago

leo-unglaub commented 1 year ago

Hey, since a few days i get the following error in some of my projects. But strangely enough not in all of them, so i am not quite sure in how to reproduce this. I am on my Debian x64 Desktop using PHP 8.2 and VS Code as an LSP client. My phpactor version is 1869936f5bd01515ddc8ada0928e9458dfd9a6e1.

$ ./phpactor language-server --address=127.0.0.1:9999 -vvv
Starting language server, use -vvv for verbose output
[LSP    ][INFO][577765.521952] Listening on 127.0.0.1:9999
[LSP    ][INFO][577775.318263] Accepted connection from "127.0.0.1:36954"
[LSP    ][CRIT][577776.892028] Failed to write to stream; fwrite(): Write of 933 bytes failed with errno=32 Broken pipe

This results in the following trace:

In ResourceOutputStream.php line 218:

  [Amp\ByteStream\StreamException]                                                          
  Failed to write to stream; fwrite(): Write of 933 bytes failed with errno=32 Broken pipe  

Exception trace:
  at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/byte-stream/lib/ResourceOutputStream.php:218
 Amp\ByteStream\ResourceOutputStream->send() at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/byte-stream/lib/ResourceOutputStream.php:157
 Amp\ByteStream\ResourceOutputStream->write() at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/process/lib/ProcessOutputStream.php:48
 Amp\Process\ProcessOutputStream->Amp\Process\{closure}() at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/amp/lib/Internal/Placeholder.php:149
 Amp\Promise@anonymous\/home/leo/code/github.com/phpactor/phpactor/vendor/amphp/amp/lib/Deferred.php:22$8e->resolve() at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/amp/lib/Deferred.php:53
 Amp\Deferred->resolve() at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/process/lib/Internal/Posix/Runner.php:71
 Amp\Process\Internal\Posix\Runner::onProcessStartExtraDataPipeReadable() at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/amp/lib/Loop/NativeDriver.php:327
 Amp\Loop\NativeDriver->selectStreams() at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/amp/lib/Loop/NativeDriver.php:124
 Amp\Loop\NativeDriver->dispatch() at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/amp/lib/Loop/Driver.php:138
 Amp\Loop\Driver->tick() at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/amp/lib/Loop/Driver.php:72
 Amp\Loop\Driver->run() at /home/leo/code/github.com/phpactor/phpactor/vendor/amphp/amp/lib/Loop.php:95
 Amp\Loop::run() at /home/leo/code/github.com/phpactor/phpactor/vendor/phpactor/language-server/lib/Core/Server/LanguageServer.php:111
 Phpactor\LanguageServer\Core\Server\LanguageServer->run() at /home/leo/code/github.com/phpactor/phpactor/lib/Extension/LanguageServer/Command/StartCommand.php:50
 Phpactor\Extension\LanguageServer\Command\StartCommand->execute() at /home/leo/code/github.com/phpactor/phpactor/vendor/symfony/console/Command/Command.php:298
 Symfony\Component\Console\Command\Command->run() at /home/leo/code/github.com/phpactor/phpactor/vendor/symfony/console/Application.php:1040
 Symfony\Component\Console\Application->doRunCommand() at /home/leo/code/github.com/phpactor/phpactor/vendor/symfony/console/Application.php:301
 Symfony\Component\Console\Application->doRun() at /home/leo/code/github.com/phpactor/phpactor/lib/Application.php:48
 Phpactor\Application->doRun() at /home/leo/code/github.com/phpactor/phpactor/vendor/symfony/console/Application.php:171
 Symfony\Component\Console\Application->run() at /home/leo/code/github.com/phpactor/phpactor/bin/phpactor:46

language-server [--address ADDRESS] [--no-loop]

Killed

I checked my drives, i have more than enought space on my /home partition. I also cleared out the 8GB of files i had in /home/leo/.cache/phpactor to give it a fresh start, but still nothing.

The file i am working on is a valid php file (linted with php itself) and it is very simple:

<?php

namespace App\JsonApi\V1;

use LaravelJsonApi\Core\Server\Server as BaseServer;

class Server extends BaseServer
{
    protected string $baseUri = '/api/v1';

    protected function allSchemas(): array
    {
        return [
            GamePlans\GamePlanSchema::class,
        ];
    }
}

Maybe this is related to amphp/byte-stream/issues/53?

Thanks for looking into this, if there something i can do to help, please let me know. Greetings

leo-unglaub commented 1 year ago

I forgot to add the logs from the LSP client in VS Code. sorry about that.

[Info  - 15:30:58] Connection to server got closed. Server will restart.
[Error - 15:30:58] Request textDocument/codeAction failed.
Error: Connection got disposed.
    at Object.dispose (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/main.js:904:25)
    at Object.dispose (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/client.js:74:35)
    at LanguageClient.handleConnectionClosed (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/client.js:2309:42)
    at LanguageClient.handleConnectionClosed (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/main.js:155:15)
    at closeHandler (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/client.js:2296:18)
    at CallbackList.invoke (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:62:39)
    at Emitter.fire (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:121:36)
    at closeHandler (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/main.js:240:26)
    at CallbackList.invoke (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:62:39)
    at Emitter.fire (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:121:36)
    at StreamMessageWriter.fireClose (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/messageWriter.js:39:27)
    at Socket.<anonymous> (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/messageWriter.js:58:46)
    at Socket.emit (node:events:525:35)
    at TCP.<anonymous> (node:net:757:14)
[Error - 15:30:58] Request textDocument/codeAction failed.
Error: Connection got disposed.
    at Object.dispose (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/main.js:904:25)
    at Object.dispose (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/client.js:74:35)
    at LanguageClient.handleConnectionClosed (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/client.js:2309:42)
    at LanguageClient.handleConnectionClosed (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/main.js:155:15)
    at closeHandler (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/client.js:2296:18)
    at CallbackList.invoke (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:62:39)
    at Emitter.fire (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:121:36)
    at closeHandler (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/main.js:240:26)
    at CallbackList.invoke (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:62:39)
    at Emitter.fire (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:121:36)
    at StreamMessageWriter.fireClose (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/messageWriter.js:39:27)
    at Socket.<anonymous> (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/messageWriter.js:58:46)
    at Socket.emit (node:events:525:35)
    at TCP.<anonymous> (node:net:757:14)
[Error - 15:30:58] Request textDocument/codeAction failed.
Error: Connection got disposed.
    at Object.dispose (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/main.js:904:25)
    at Object.dispose (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/client.js:74:35)
    at LanguageClient.handleConnectionClosed (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/client.js:2309:42)
    at LanguageClient.handleConnectionClosed (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/main.js:155:15)
    at closeHandler (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-languageclient/lib/client.js:2296:18)
    at CallbackList.invoke (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:62:39)
    at Emitter.fire (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:121:36)
    at closeHandler (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/main.js:240:26)
    at CallbackList.invoke (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:62:39)
    at Emitter.fire (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/events.js:121:36)
    at StreamMessageWriter.fireClose (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/messageWriter.js:39:27)
    at Socket.<anonymous> (/home/leo/.vscode/extensions/dantleech.vscode-phpactor-1.1.0/node_modules/vscode-jsonrpc/lib/messageWriter.js:58:46)
    at Socket.emit (node:events:525:35)
    at TCP.<anonymous> (node:net:757:14)
[Error - 15:30:58] Connection to server is erroring. Shutting down server.
[Error - 15:30:58] Connection to server is erroring. Shutting down server.
dantleech commented 1 year ago

while running the TCP server should work (and I guess I should double check that it still does after all these years), is there any reason you're not using STDIO - it's easier and is the default used by https://github.com/phpactor/vscode-phpactor

leo-unglaub commented 1 year ago

I usually use STDIO, i just used TCP here to get better debugging messages. Because it hard-crashed in VSCode before i could get a trace out of it. So i used TCP on different session to see what is actually going on. But yeah, as you mention, STDIO with default settings is my normal working setup.

dantleech commented 1 year ago

The error is specific to the TCP server, the STDIO implementation wouldn't crash like that I guess. Do you get VS code logs for STDIO?

leo-unglaub commented 1 year ago

When i use STDIO in VSCode and i stumble upon #2332 it crashed the entire editor before i can get an error message out of it. I once managed to get a screenshot in the exact time it crashed so could read the error message. Its the same as here: https://github.com/phpactor/phpactor/issues/2332#issuecomment-1702859427

Even in the STDIO it prints out

[Info  - 15:33:44] Connection to server got closed. Server will restart.

Maybe the reconnect is bugged after the server restart? My guess would be that this issue here can be closed because as long as #2332 is not triggered, this here does not happen. Is it okay to close this in favour of #2332?