Fix SQL connection on wakeup in heroku

When a heroku dyno goes into sleep mode it loses connection to the
backend database. Once it is woken back up, no more reads or
writes could be done anymore due to a dead connection. This change
reinstates a new db connection when the connection is fatally
terminated.
This commit is contained in:
Wolvan 2022-01-10 18:16:52 +01:00
parent 33c9ca168e
commit 1ad2c8c1a0

View file

@ -7,14 +7,23 @@ import { BackendPoll as Poll } from "./Poll";
export default class MySQLStorage extends Storage { export default class MySQLStorage extends Storage {
#db: mysql.Connection; #db: mysql.Connection;
#options: mysql.ConnectionOptions;
#createConnection(mysqlInstance?: mysql.Connection): void {
if (!mysqlInstance) this.#db = mysql.createConnection(this.#options);
this.#db.on("error", (err: mysql.QueryError) => {
if (err.fatal) this.#createConnection();
});
}
constructor(options: mysql.ConnectionOptions) { constructor(options: mysql.ConnectionOptions) {
super(); super();
this.#options = options;
console.debug("Initiating MySQLStorage."); console.debug("Initiating MySQLStorage.");
this.#db = mysql.createConnection(options); this.#db = mysql.createConnection(this.#options);
this.#createConnection(this.#db);
} }
async init(): Promise<this> { async init(): Promise<this> {
await this.#db.promise().connect();
await this.#db.promise().query(` await this.#db.promise().query(`
CREATE TABLE IF NOT EXISTS polls ( CREATE TABLE IF NOT EXISTS polls (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,