Skip to content

Commit

Permalink
feat: add dump function for current connections count
Browse files Browse the repository at this point in the history
  • Loading branch information
qile222 committed Jul 17, 2023
1 parent dc9c152 commit ad1e01c
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 0 deletions.
10 changes: 10 additions & 0 deletions lib/Pool.js
Expand Up @@ -285,6 +285,16 @@ Pool.prototype.escapeId = function escapeId(value) {
return mysql.escapeId(value, false);
};

Pool.prototype.dumpConnectionsCount = function () {
return {
allConnectionsCount : this._allConnections.length,
freeConnectionsCount : this._freeConnections.length,
connectionQueueCount : this._connectionQueue.length,
acquiringConnectionsCount : this._acquiringConnections.length,
queryingConnectionsCount : this._allConnections.length - this._freeConnections.length - this._acquiringConnections.length
};
};

function spliceConnection(array, connection) {
var index;
if ((index = array.indexOf(connection)) !== -1) {
Expand Down
114 changes: 114 additions & 0 deletions test/unit/pool/test-dump-connections-count.js
@@ -0,0 +1,114 @@
var assert = require('assert');
var common = require('../../common');

var server = common.createFakeServer();

server.listen(0, function (err) {
assert.ifError(err);

var connectionLimit = 3;
var pool = common.createPool({ port: server.port(), connectionLimit: connectionLimit } );
assert.deepStrictEqual(connectionLimit, pool.config.connectionLimit);
assert.deepStrictEqual(pool.dumpConnectionsCount(), {
allConnectionsCount : 0,
freeConnectionsCount : 0,
connectionQueueCount : 0,
acquiringConnectionsCount : 0,
queryingConnectionsCount : 0
});

var conn1, conn2, conn3, conn4, conn5;

pool.getConnection(function (err, connection) {
assert.ifError(err);
conn1 = connection;
});

pool.getConnection(function (err, connection) {
assert.ifError(err);
conn2 = connection;
});
pool.getConnection(function (err, connection) {
assert.ifError(err);
conn3 = connection;
});
pool.getConnection(function (err, connection) {
assert.ifError(err);
conn4 = connection;
});
pool.getConnection(function (err, connection) {
assert.ifError(err);
conn5 = connection;
});

setTimeout(function(){
assert.ok(conn1);
assert.ok(conn2);
assert.ok(conn3);
assert.ok(conn4 === undefined);
assert.ok(conn5 === undefined);
assert.deepStrictEqual(pool.dumpConnectionsCount(), {
allConnectionsCount : 3,
freeConnectionsCount : 0,
connectionQueueCount : 2,
acquiringConnectionsCount : 0,
queryingConnectionsCount : 3
});

pool.releaseConnection(conn1);
assert.deepStrictEqual(pool.dumpConnectionsCount(), {
allConnectionsCount : 3,
freeConnectionsCount : 0,
connectionQueueCount : 1,
acquiringConnectionsCount : 1,
queryingConnectionsCount : 2
});

setTimeout(function() {
assert.ok(conn4);
assert.ok(conn5 === undefined);
assert.deepStrictEqual(pool.dumpConnectionsCount(), {
allConnectionsCount : 3,
freeConnectionsCount : 0,
connectionQueueCount : 1,
acquiringConnectionsCount : 0,
queryingConnectionsCount : 3
});

pool.releaseConnection(conn2);
pool.releaseConnection(conn3);
pool.releaseConnection(conn4);
assert.deepStrictEqual(pool.dumpConnectionsCount(), {
allConnectionsCount : 3,
freeConnectionsCount : 2,
connectionQueueCount : 0,
acquiringConnectionsCount : 1,
queryingConnectionsCount : 0
});

setTimeout(function() {
assert.ok(conn5);
pool.releaseConnection(conn5);
assert.deepStrictEqual(pool.dumpConnectionsCount(), {
allConnectionsCount : 3,
freeConnectionsCount : 3,
connectionQueueCount : 0,
acquiringConnectionsCount : 0,
queryingConnectionsCount : 0
});
pool.end(function(err){
assert.ifError(err);
assert.deepStrictEqual(pool.dumpConnectionsCount(), {
allConnectionsCount : 0,
freeConnectionsCount : 0,
connectionQueueCount : 0,
acquiringConnectionsCount : 0,
queryingConnectionsCount : 0
});
server.destroy();
});
}, 100);
}, 100);
}, 100);

});

0 comments on commit ad1e01c

Please sign in to comment.