require("dotenv").config({ path: require("path").resolve(__dirname, "../.env") }); const mysql = require("mysql2"); const pool = mysql.createPool({ // connectionLimit: process.env.CONNECTIONLIMIT, host: process.env.DBHOST, port: process.env.DBPORT, user: process.env.DBUSER, password: process.env.DBPASSWORD, database: process.env.DATABASE, connectionLimit: 10, connectTimeout: 20000, acquireTimeout: 20000, // acquireTimeout: Number(process.env.ACQRTIMEOUT), // in ms }); pool.getConnection((err, conn) => { if (err) { if (err.code === "PROTOCOL_CONNECTION_LOST") { console.error("Koneksi database ditutup."); } if (err.code === "ER_CON_COUNT_ERROR") { console.error("Basis data memiliki terlalu banyak koneksi."); } if (err.code === "ECONNREFUSED") { console.error("Koneksi database ditolak."); } console.error(err); } if (conn) conn.release(); return; }); // pool.on('acquire', function (connection) { // console.log('Connection %d acquired', connection.threadId); // }); // pool.on('connection', function (connection) { // console.log('Connection %d connect', connection.threadId); // }); // pool.on('release', function (connection) { // console.log('Connection %d released', connection.threadId); // }); // // --- The Deadlock Optimizer --- // // This function wraps your queries and retries them if a deadlock occurs // const queryWithRetry = async (sql, params, retries = 3) => { // for (let attempt = 1; attempt <= retries; attempt++) { // try { // return await pool.execute(sql, params); // } catch (err) { // const isDeadlock = err.code === 'ER_LOCK_DEADLOCK' || err.errno === 1213; // if (isDeadlock && attempt < retries) { // console.warn(`Deadlock detected. Retry attempt ${attempt}...`); // // Wait slightly longer each time (Exponential Backoff) // await new Promise(res => setTimeout(res, attempt * 100)); // continue; // } // throw err; // If not a deadlock or out of retries, throw // } // } // }; // module.exports = { // pool, // query: queryWithRetry // }; module.exports = pool;