-
Notifications
You must be signed in to change notification settings - Fork 11.8k
Open
Description
| class LostConnectionDetector implements LostConnectionDetectorContract |
Claude Code recently helped me troubleshoot this error:
Error Details
- Message: SQLSTATE[HY000] [2002] Connexion terminée par expiration du délai d'attente (Connection: mysql, Host: res01-sql.systeme.local, Port: 3306, Database: {redacted}, SQL: select * from
userswhereid= 91 andusers.deleted_atis null limit 1) - Class: Illuminate\Database\QueryException
- Occurrence: 27489
- Received: 2026-02-27 15:05:06
- Entry Point: {redacted}
- Stage: production
- Version: 7f333df
- Framework: 12.53.0
- Language: 8.3.21
- File: /var/www/{redacted}/app/Http/Middleware/EnsureADPasswordIsFresh.php:20
- Method: App\Http\Middleware\EnsureADPasswordIsFresh::handle
Stack Trace (first 20 frames)
Frame 1: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
Illuminate\Database\Connection::runQueryCallback()
Frame 2: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Database/Connection.php:794
Illuminate\Database\Connection::run()
Frame 3: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Database/Connection.php:411
Illuminate\Database\Connection::select()
Frame 4: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:3475
Illuminate\Database\Query\Builder::runSelect()
Frame 5: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:3460
Illuminate\Database\Query\Builder::Illuminate\Database\Query\{closure}()
Frame 6: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:4050
Illuminate\Database\Query\Builder::onceWithColumns()
Frame 7: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:3459
Illuminate\Database\Query\Builder::get()
Frame 8: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:902
Illuminate\Database\Eloquent\Builder::getModels()
Frame 9: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:884
Illuminate\Database\Eloquent\Builder::get()
Frame 10: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php:366
Illuminate\Database\Eloquent\Builder::first()
Frame 11: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:58
Illuminate\Auth\EloquentUserProvider::retrieveById()
Frame 12: /var/www/{redacted}/vendor/directorytree/ldaprecord-laravel/src/Auth/DatabaseUserProvider.php:112
LdapRecord\Laravel\Auth\DatabaseUserProvider::retrieveById()
Frame 13: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php:189
Illuminate\Auth\SessionGuard::user()
Frame 14: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Auth/GuardHelpers.php:56
Illuminate\Auth\SessionGuard::check()
Frame 15: /var/www/{redacted}/app/Http/Middleware/EnsureADPasswordIsFresh.php:20
App\Http\Middleware\EnsureADPasswordIsFresh::handle()
Frame 16: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}()
Frame 17: /var/www/{redacted}/app/Http/Middleware/RecordPageViewsToActivityLog.php:23
App\Http\Middleware\RecordPageViewsToActivityLog::handle()
Frame 18: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}()
Frame 19: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:50
Illuminate\Routing\Middleware\SubstituteBindings::handle()
Frame 20: /var/www/{redacted}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:219
Illuminate\Pipeline\Pipeline::Illuminate\Pipeline\{closure}()
It told me that the LostConnectionDetector does NOT trigger on French messages, which is an issue.
It implemented a fix like this:
app\Database\FrenchLostConnectionDetector.php
<?php
namespace App\Database;
use Illuminate\Database\LostConnectionDetector;
use Throwable;
class FrenchLostConnectionDetector extends LostConnectionDetector
{
public function causedByLostConnection(Throwable $e): bool
{
if (parent::causedByLostConnection($e)) {
return true;
}
return str_contains($e->getMessage(), 'expiration du délai');
}
}app\Providers\AppServiceProvider.php
public function register(): void
{
$this->app->singleton(
\Illuminate\Contracts\Database\LostConnectionDetector::class,
\App\Database\FrenchLostConnectionDetector::class,
);
}It says: After deploy, the 2002 timeout errors should now auto-retry silently instead of crashing.
Maybe this should be explored?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels