parallel icon indicating copy to clipboard operation
parallel copied to clipboard

Connection Timeout

Open ckilb opened this issue 4 years ago • 3 comments

Code Formatted: https://pastebin.com/V8dAKU4n $promises = []; foreach ($items as $item) { $promises[] = Worker\enqueueCallable(function() use ($item, $productConcreteStorages, $productMerchantStorages) { return $this->mapItem($item, $productConcreteStorages, $productMerchantStorages); }); } $productViews = Promise\wait(Promise\all($promises));

Exception: [previous exception] [object] (ErrorException(code: 0): stream_socket_accept(): accept failed: Connection timed out at /data/shop/development/current/vendor/amphp/parallel/lib/Context/Internal/ProcessHub.php:78) [stacktrace] #0 [internal function]: Spryker\\Shared\\ErrorHandler\\ErrorHandlerEnvironment->Spryker\\Shared\\ErrorHandler\\{closure}(2, 'stream_socket_a...', '/data/shop/deve...', 78, Array) #1 /data/shop/development/current/vendor/amphp/parallel/lib/Context/Internal/ProcessHub.php(78): stream_socket_accept(Resource id #1119, 0) #2 /data/shop/development/current/vendor/amphp/amp/lib/Loop/NativeDriver.php(183): Amp\\Parallel\\Context\\Internal\\ProcessHub::Amp\\Parallel\\Context\\Internal\\{closure}('a', Resource id #1119, NULL) #3 /data/shop/development/current/vendor/amphp/amp/lib/Loop/NativeDriver.php(96): Amp\\Loop\\NativeDriver->selectStreams(Array, Array, 4.976) #4 /data/shop/development/current/vendor/amphp/amp/lib/Loop/Driver.php(138): Amp\\Loop\\NativeDriver->dispatch(true) #5 /data/shop/development/current/vendor/amphp/amp/lib/Loop/Driver.php(72): Amp\\Loop\\Driver->tick() #6 /data/shop/development/current/vendor/amphp/amp/lib/Loop.php(95): Amp\\Loop\\Driver->run() #7 /data/shop/development/current/vendor/amphp/amp/lib/functions.php(229): Amp\\Loop::run(Object(Closure))

Any idea how to fix?

ckilb avatar Oct 08 '20 10:10 ckilb

Can you disable the Spryker error handler and try again? It appears the error handler may not be honoring the current error reporting level and throwing an exception.

trowski avatar Oct 09 '20 14:10 trowski

~~Ran into the same issue with xdebugger ignoring the error suppression. See #125 for a potential fix.~~

duckboy81 avatar Oct 23 '20 02:10 duckboy81

Can you disable the Spryker error handler and try again? It appears the error handler may not be honoring the current error reporting level and throwing an exception.

100% the error handler is the issue.

Just upgraded to 8.0 and came back here because my error handler needed updates to reflect the following breaking change: https://www.php.net/manual/en/migration80.incompatible.php

The @ operator will no longer silence fatal errors (E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR, E_PARSE). Error handlers that expect error_reporting to be 0 when @ is used, should be adjusted to use a mask check instead:

Saw a potential option for a future fix instead of just suppressing the E_WARNING https://github.com/walkor/Workerman/blob/master/Worker.php#L2463

\set_error_handler(function(){});
$new_socket = \stream_socket_accept($socket, 0, $remote_address);
\restore_error_handler();

Implemented here: https://github.com/amphp/parallel/compare/master...duckboy81:master

duckboy81 avatar Apr 10 '21 03:04 duckboy81

We've switched out uses of @ across all libraries compatible with AMPHP v3 to use a custom error handler to avoid mis-behaving error handlers.

For AMPHP v2, this is far from the only usage of @ and we are not planning on back-porting this "feature." As such, I'd recommend fixing any error handlers to properly check error_reporting().

trowski avatar Dec 30 '22 00:12 trowski