framework icon indicating copy to clipboard operation
framework copied to clipboard

DatabaseUuidFailedJobProvider doesn't work with Postgres Unix Socket

Open ibnIrshad opened this issue 3 years ago • 2 comments

  • Laravel Version: 9.40.1
  • PHP Version: 8.1.11
  • Database Driver & Version: Postgres

Description:

Using unix sockets instead of a network address such as 127.0.0.1 has performance benefits when the Postgres instance is located on the same machine. This database configuration works normally, EXCEPT when inserting failed jobs.

DB_DRIVER=pgsql
DB_HOST=/var/run/postgresql
DB_DATABASE=foo
DB_USERNAME=bar
DB_PASSWORD=null
DB_PORT=null
DB_PREFIX=null

When using this configuration, failed jobs give rise to the following exception, and nothing is inserted in the failed_jobs table:

[2022-11-25 09:21:20] production.ERROR: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for /var/run/postgresql failed: Name or service not known (SQL: delete from `failed_jobs` where `failed_at` < 2022-11-24 09:21:20 limit 1000) [{"capturer":"$this->reportable"}] 
[2022-11-25 09:21:20] production.ERROR: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for /var/run/postgresql failed: Name or service not known (SQL: delete from `failed_jobs` where `failed_at` < 2022-11-24 09:21:20 limit 1000) {"exception":"[object] (Illuminate\\Database\\QueryException(code: 2002): SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for /var/run/postgresql failed: Name or service not known (SQL: delete from `failed_jobs` where `failed_at` < 2022-11-24 09:21:20 limit 1000) at /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php:760)
[stacktrace]
#0 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(899): Illuminate\\Database\\Connection->runQueryCallback()
#1 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(879): Illuminate\\Database\\Connection->tryAgainIfCausedByLostConnection()
#2 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(723): Illuminate\\Database\\Connection->handleQueryException()
#3 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(577): Illuminate\\Database\\Connection->run()
#4 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(522): Illuminate\\Database\\Connection->affectingStatement()
#5 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3456): Illuminate\\Database\\Connection->delete()
#6 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseUuidFailedJobProvider.php(138): Illuminate\\Database\\Query\\Builder->delete()
#7 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Queue/Console/PruneFailedJobsCommand.php(49): Illuminate\\Queue\\Failed\\DatabaseUuidFailedJobProvider->prune()
#8 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\Queue\\Console\\PruneFailedJobsCommand->handle()
#9 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#10 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#11 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()
#12 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\\Container\\BoundMethod::call()
#13 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Console/Command.php(178): Illuminate\\Container\\Container->call()
#14 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Command/Command.php(308): Illuminate\\Console\\Command->execute()
#15 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Console/Command.php(148): Symfony\\Component\\Console\\Command\\Command->run()
#16 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Application.php(1014): Illuminate\\Console\\Command->run()
#17 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Application.php(301): Symfony\\Component\\Console\\Application->doRunCommand()
#18 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()
#19 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Console/Application.php(102): Symfony\\Component\\Console\\Application->run()
#20 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(155): Illuminate\\Console\\Application->run()
#21 /home/forge/fintable.io/releases/20221124172709/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()
#22 {main}

[previous exception] [object] (PDOException(code: 2002): SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for /var/run/postgresql failed: Name or service not known at /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70)
[stacktrace]
#0 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(70): PDO->__construct()
#1 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(100): Illuminate\\Database\\Connectors\\Connector->createPdoConnection()
#2 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(50): Illuminate\\Database\\Connectors\\Connector->tryAgainIfCausedByLostConnection()
#3 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\\Database\\Connectors\\Connector->createConnection()
#4 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(184): Illuminate\\Database\\Connectors\\MySqlConnector->connect()
#5 [internal function]: Illuminate\\Database\\Connectors\\ConnectionFactory->Illuminate\\Database\\Connectors\\{closure}()
#6 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1171): call_user_func()
#7 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(566): Illuminate\\Database\\Connection->getPdo()
#8 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(753): Illuminate\\Database\\Connection->Illuminate\\Database\\{closure}()
#9 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(899): Illuminate\\Database\\Connection->runQueryCallback()
#10 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(879): Illuminate\\Database\\Connection->tryAgainIfCausedByLostConnection()
#11 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(723): Illuminate\\Database\\Connection->handleQueryException()
#12 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(577): Illuminate\\Database\\Connection->run()
#13 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(522): Illuminate\\Database\\Connection->affectingStatement()
#14 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3456): Illuminate\\Database\\Connection->delete()
#15 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseUuidFailedJobProvider.php(138): Illuminate\\Database\\Query\\Builder->delete()
#16 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Queue/Console/PruneFailedJobsCommand.php(49): Illuminate\\Queue\\Failed\\DatabaseUuidFailedJobProvider->prune()
#17 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\Queue\\Console\\PruneFailedJobsCommand->handle()
#18 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#19 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#20 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()
#21 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\\Container\\BoundMethod::call()
#22 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Console/Command.php(178): Illuminate\\Container\\Container->call()
#23 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Command/Command.php(308): Illuminate\\Console\\Command->execute()
#24 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Console/Command.php(148): Symfony\\Component\\Console\\Command\\Command->run()
#25 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Application.php(1014): Illuminate\\Console\\Command->run()
#26 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Application.php(301): Symfony\\Component\\Console\\Application->doRunCommand()
#27 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()
#28 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Console/Application.php(102): Symfony\\Component\\Console\\Application->run()
#29 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(155): Illuminate\\Console\\Application->run()
#30 /home/forge/fintable.io/releases/20221124172709/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()
#31 {main}

[previous exception] [object] (PDOException(code: 0): PDO::__construct(): php_network_getaddresses: getaddrinfo for /var/run/postgresql failed: Name or service not known at /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70)
[stacktrace]
#0 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(70): PDO->__construct()
#1 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(100): Illuminate\\Database\\Connectors\\Connector->createPdoConnection()
#2 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(50): Illuminate\\Database\\Connectors\\Connector->tryAgainIfCausedByLostConnection()
#3 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\\Database\\Connectors\\Connector->createConnection()
#4 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(184): Illuminate\\Database\\Connectors\\MySqlConnector->connect()
#5 [internal function]: Illuminate\\Database\\Connectors\\ConnectionFactory->Illuminate\\Database\\Connectors\\{closure}()
#6 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(1171): call_user_func()
#7 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(566): Illuminate\\Database\\Connection->getPdo()
#8 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(753): Illuminate\\Database\\Connection->Illuminate\\Database\\{closure}()
#9 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(899): Illuminate\\Database\\Connection->runQueryCallback()
#10 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(879): Illuminate\\Database\\Connection->tryAgainIfCausedByLostConnection()
#11 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(723): Illuminate\\Database\\Connection->handleQueryException()
#12 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(577): Illuminate\\Database\\Connection->run()
#13 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Connection.php(522): Illuminate\\Database\\Connection->affectingStatement()
#14 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3456): Illuminate\\Database\\Connection->delete()
#15 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseUuidFailedJobProvider.php(138): Illuminate\\Database\\Query\\Builder->delete()
#16 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Queue/Console/PruneFailedJobsCommand.php(49): Illuminate\\Queue\\Failed\\DatabaseUuidFailedJobProvider->prune()
#17 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\\Queue\\Console\\PruneFailedJobsCommand->handle()
#18 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#19 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#20 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()
#21 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\\Container\\BoundMethod::call()
#22 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Console/Command.php(178): Illuminate\\Container\\Container->call()
#23 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Command/Command.php(308): Illuminate\\Console\\Command->execute()
#24 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Console/Command.php(148): Symfony\\Component\\Console\\Command\\Command->run()
#25 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Application.php(1014): Illuminate\\Console\\Command->run()
#26 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Application.php(301): Symfony\\Component\\Console\\Application->doRunCommand()
#27 /home/forge/fintable.io/releases/20221124172709/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()
#28 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Console/Application.php(102): Symfony\\Component\\Console\\Application->run()
#29 /home/forge/fintable.io/releases/20221124172709/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(155): Illuminate\\Console\\Application->run()
#30 /home/forge/fintable.io/releases/20221124172709/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()
#31 {main}
"} 

   Illuminate\Database\QueryException 

  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for /var/run/postgresql failed: Name or service not known (SQL: delete from `failed_jobs` where `failed_at` < 2022-11-24 09:21:20 limit 1000)

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:760
    756▕         // If an exception occurs when attempting to run a query, we'll format the error
    757▕         // message to include the bindings with SQL, which will make this exception a
    758▕         // lot more helpful to the developer instead of just the database's errors.
    759▕         catch (Exception $e) {
  ➜ 760▕             throw new QueryException(
    761▕                 $query, $this->prepareBindings($bindings), $e
    762▕             );
    763▕         }
    764▕     }

      +31 vendor frames 
  32  artisan:37
      Illuminate\Foundation\Console\Kernel::handle()

Steps To Reproduce:

  1. Use a unix socket address instead of a network address for DB_HOST, for example DB_HOST=/var/run/postgresql
  2. Let a job fail
  3. Run the php artisan queue:prune-failed --hours=0 command
  4. The exception above is thrown.

ibnIrshad avatar Nov 25 '22 09:11 ibnIrshad

For now, a temporary workaround I am using to prevent these exceptions from being raised is by setting QUEUE_FAILED_DRIVER=null, however then I have no tracking of my failed jobs.

ibnIrshad avatar Nov 25 '22 09:11 ibnIrshad

Thank you for reporting this issue!

As Laravel is an open source project, we rely on the community to help us diagnose and fix issues as it is not possible to research and fix every issue reported to us via GitHub. If possible, please make a pull request fixing the issue you have described, along with corresponding tests. All pull requests are promptly reviewed by the Laravel team.

Thank you!

github-actions[bot] avatar Nov 25 '22 09:11 github-actions[bot]

Hey @ibnIrshad ✋

I was playing around with this issue on my local. And unfortunately i cant re-produce it.

I`ve tested many different ways, but everything works fine.

One thing which I`ve changed though - its something related to the .env file , in my case creds for DB looks like this:


DB_CONNECTION=pgsql
DB_HOST=/var/run/postgresql/
DB_DATABASE=foo
DB_USERNAME=bar
DB_PASSWORD=null
DB_PREFIX=null

Can you provide more details of your configuration and how you set everything up?

Thank you!

dyriavin avatar Dec 11 '22 07:12 dyriavin

@ibnIrshad feel free to continue the discussion here.

driesvints avatar Dec 13 '22 09:12 driesvints

Thanks @dyriavin

driesvints avatar Dec 13 '22 09:12 driesvints