mirror of
https://github.com/smogon/pokemon-showdown-client.git
synced 2026-09-08 11:59:08 -05:00
Fix database connection pool exhaustion (#2494)
- Add PDO::ATTR_PERSISTENT => true to reuse database connections - Handle 'too many connections' errors gracefully with HTTP 503 - Maintain backward compatibility with minimal code changes Fixes MySQL error 1040 crashes during high load periods.
This commit is contained in:
@@ -27,12 +27,21 @@ class PSDatabase {
|
||||
$this->db = new PDO(
|
||||
"mysql:dbname={$this->database};host={$this->server};charset={$this->charset}",
|
||||
$this->username,
|
||||
$this->password
|
||||
$this->password,
|
||||
[PDO::ATTR_PERSISTENT => true]
|
||||
);
|
||||
$this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
|
||||
} catch (Exception $e) {
|
||||
$this->db->exec("SET SESSION wait_timeout = 7200");
|
||||
} catch (PDOException $e) {
|
||||
if (strpos($e->getMessage(), '1040') !== false || strpos($e->getMessage(), 'Too many connections') !== false) {
|
||||
http_response_code(503);
|
||||
header('Content-Type: text/plain');
|
||||
die("Database temporarily unavailable due to high load. Please try again in a few minutes.");
|
||||
}
|
||||
// hide passwords and stuff from stacktrace
|
||||
throw new ErrorException($e->getMessage());
|
||||
} catch (Exception $e) {
|
||||
throw new ErrorException($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user