mysql icon indicating copy to clipboard operation
mysql copied to clipboard

PROTOCOL_PACKETS_OUT_OF_ORDER on MariaDB 10.4 when reaching max_connections

Open rwky opened this issue 4 years ago • 3 comments

When hitting the maximum number of connections on MariaDB 10.4 PROTOCOL_PACKETS_OUT_OF_ORDER is returned instead of ER_CON_COUNT_ERROR

To reproduce run MariaDB 10.4 with max_connections set to 10 then run the following snippet

const mysql = require('mysql')                                                                      
const settings = {                                                                                  
  user: process.env.MYSQL_USER,                                                                     
  host: process.env.MYSQL_HOST,                                                                     
  password: process.env.MYSQL_PASSWORD,                                                             
  database: 'mysql',                                                                                
  port: process.env.MYSQL_PORT                                                                      
}                                                                                                   
const connections = []                                                                              
                                                                                                    
for (let i = 0; i <= 10; i++) {                                                                      
    let conn = mysql.createConnection(settings)                                                     
    conn.connect()                                                                                  
    connections.push(conn)                                                                          
}                                                                                                   
const connection = mysql.createConnection(settings)                                                 
connection.query('SELECT 1', (err) => {                                                             
    throw err                                                                                                                                                                                                     
})

Here's the full trace

node test.js 
events.js:288
      throw er; // Unhandled 'error' event
      ^

Error: Packets out of order. Got: 1 Expected: 0
    at Parser._tryReadPacketHeader (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Parser.js:470:15)
    at Parser.write (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Parser.js:33:29)
    at Protocol.write (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/home/rowan/tmp/mysql/node_modules/mysql/lib/Connection.js:88:28)
    at Socket.<anonymous> (/home/rowan/tmp/mysql/node_modules/mysql/lib/Connection.js:526:10)
    at Socket.emit (events.js:311:20)
    at addChunk (_stream_readable.js:294:12)
    at readableAddChunk (_stream_readable.js:275:11)
    at Socket.Readable.push (_stream_readable.js:209:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23)
    --------------------
    at Protocol._enqueue (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/home/rowan/tmp/mysql/node_modules/mysql/lib/Connection.js:116:18)
    at Object.<anonymous> (/home/rowan/tmp/mysql/test.js:13:10)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47
Emitted 'error' event on Connection instance at:
    at Connection._handleProtocolError (/home/rowan/tmp/mysql/node_modules/mysql/lib/Connection.js:423:8)
    at Protocol.emit (events.js:311:20)
    at Protocol._delegateError (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:398:10)
    at Handshake.<anonymous> (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:153:12)
    at Handshake.emit (events.js:311:20)
    at Handshake.Sequence.end (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:78:12)
    at Protocol.handleParserError (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:378:14)
    at Parser._tryReadPacketHeader (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Parser.js:478:10)
    at Parser.write (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Parser.js:33:29)
    at Protocol.write (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:38:16) {
  code: 'PROTOCOL_PACKETS_OUT_OF_ORDER',
  fatal: true
}

rwky avatar May 15 '20 16:05 rwky

Did you ever get this fixed?

I am now having this problem with the new version of XAMPP; works perfectly fine with older versions using 'localhost' and my MacBooks name, but breaks in the newer version using '192.168.0.*'

iamjamesjohn avatar Dec 02 '20 14:12 iamjamesjohn

PLEASE DO NOT DOWNLOAD THE LATEST XAMPP 8.0.0, IT'S TRASH. I WAS FRUSTRATED FOR TWO DAYS STRAIGHT, ALMOST BURN DOWN MY MAC LAPTOP. HARD TO CONNECT, NOTHING IS WORKING. JUST DOWNLOAD THE OLD VERSION TO SAVE YOUR LIFE.

oosunkeye avatar Jan 01 '21 15:01 oosunkeye

When hitting the maximum number of connections on MariaDB 10.4 PROTOCOL_PACKETS_OUT_OF_ORDER is returned instead of ER_CON_COUNT_ERROR

To reproduce run MariaDB 10.4 with max_connections set to 10 then run the following snippet

const mysql = require('mysql')                                                                      
const settings = {                                                                                  
  user: process.env.MYSQL_USER,                                                                     
  host: process.env.MYSQL_HOST,                                                                     
  password: process.env.MYSQL_PASSWORD,                                                             
  database: 'mysql',                                                                                
  port: process.env.MYSQL_PORT                                                                      
}                                                                                                   
const connections = []                                                                              
                                                                                                    
for (let i = 0; i <= 10; i++) {                                                                      
    let conn = mysql.createConnection(settings)                                                     
    conn.connect()                                                                                  
    connections.push(conn)                                                                          
}                                                                                                   
const connection = mysql.createConnection(settings)                                                 
connection.query('SELECT 1', (err) => {                                                             
    throw err                                                                                                                                                                                                     
})

Here's the full trace

node test.js 
events.js:288
      throw er; // Unhandled 'error' event
      ^

Error: Packets out of order. Got: 1 Expected: 0
    at Parser._tryReadPacketHeader (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Parser.js:470:15)
    at Parser.write (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Parser.js:33:29)
    at Protocol.write (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/home/rowan/tmp/mysql/node_modules/mysql/lib/Connection.js:88:28)
    at Socket.<anonymous> (/home/rowan/tmp/mysql/node_modules/mysql/lib/Connection.js:526:10)
    at Socket.emit (events.js:311:20)
    at addChunk (_stream_readable.js:294:12)
    at readableAddChunk (_stream_readable.js:275:11)
    at Socket.Readable.push (_stream_readable.js:209:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23)
    --------------------
    at Protocol._enqueue (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/home/rowan/tmp/mysql/node_modules/mysql/lib/Connection.js:116:18)
    at Object.<anonymous> (/home/rowan/tmp/mysql/test.js:13:10)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47
Emitted 'error' event on Connection instance at:
    at Connection._handleProtocolError (/home/rowan/tmp/mysql/node_modules/mysql/lib/Connection.js:423:8)
    at Protocol.emit (events.js:311:20)
    at Protocol._delegateError (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:398:10)
    at Handshake.<anonymous> (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:153:12)
    at Handshake.emit (events.js:311:20)
    at Handshake.Sequence.end (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:78:12)
    at Protocol.handleParserError (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:378:14)
    at Parser._tryReadPacketHeader (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Parser.js:478:10)
    at Parser.write (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Parser.js:33:29)
    at Protocol.write (/home/rowan/tmp/mysql/node_modules/mysql/lib/protocol/Protocol.js:38:16) {
  code: 'PROTOCOL_PACKETS_OUT_OF_ORDER',
  fatal: true
}

Did you eventually figure it out?

ellysmoore avatar Mar 26 '21 20:03 ellysmoore