Skip to content

Commit c823104

Browse files
committed
[db] fix when using mongodb connection string
1 parent 61f406c commit c823104

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed

plugins/pluginManager.js

+36-11
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
var plugins = require('./plugins.json', 'dont-enclose'),
22
pluginsApis = {},
33
mongo = require('mongoskin'),
4+
cluster = require('cluster'),
45
countlyConfig = require('../frontend/express/config', 'dont-enclose'),
56
utils = require('../api/utils/utils.js'),
67
fs = require('fs'),
78
path = require('path'),
9+
url = require('url'),
810
querystring = require('querystring'),
911
cp = require('child_process'),
1012
async = require("async"),
@@ -533,14 +535,25 @@ var pluginManager = function pluginManager(){
533535
};
534536

535537
this.singleDefaultConnection = function() {
536-
var conf = Object.assign({}, countlyConfig.mongodb);
537-
for (var k in conf) {
538-
if (typeof k === 'object') {
539-
conf[k] = Object.assign({}, conf[k]);
538+
if(typeof countlyConfig.mongodb === "string"){
539+
var urlParts = url.parse(countlyConfig.mongodb, true);
540+
if(!urlParts.query){
541+
urlParts.query = {};
540542
}
543+
urlParts.query.maxPoolSize = 1;
544+
delete urlParts.search;
545+
return this.dbConnection({mongodb: url.format(urlParts)});
546+
}
547+
else{
548+
var conf = Object.assign({}, countlyConfig.mongodb);
549+
for (var k in conf) {
550+
if (typeof k === 'object') {
551+
conf[k] = Object.assign({}, conf[k]);
552+
}
553+
}
554+
conf.max_pool_size = 1;
555+
return this.dbConnection({mongodb: conf});
541556
}
542-
conf.max_pool_size = 1;
543-
return this.dbConnection({mongodb: conf});
544557
};
545558

546559
this.getDbConnectionParams = function(config) {
@@ -554,7 +567,7 @@ var pluginManager = function pluginManager(){
554567
config = config || JSON.parse(JSON.stringify(countlyConfig));
555568

556569
if (typeof config.mongodb === 'string') {
557-
dbName = db ? config.mongodb.replace(new RegExp('countly$'), db) : config.mongodb;
570+
dbName = db ? config.mongodb.replace(/\/countly\b/, "/"+db) : config.mongodb;
558571
//remove protocol
559572
dbName = dbName.split("://").pop();
560573
if(dbName.indexOf("@") !== -1){
@@ -624,17 +637,29 @@ var pluginManager = function pluginManager(){
624637
return this.singleDefaultConnection();
625638
}
626639

627-
var db;
640+
var db, maxPoolSize = 10;
641+
if (!cluster.isMaster) {
642+
//we are in worker
643+
maxPoolSize = 500;
644+
}
628645
if(typeof config == "string"){
629646
db = config;
630647
config = JSON.parse(JSON.stringify(countlyConfig));
631648
}
632-
else
649+
else{
633650
config = config || JSON.parse(JSON.stringify(countlyConfig));
651+
}
652+
653+
if(config && typeof config.mongodb == "string"){
654+
var urlParts = url.parse(config.mongodb, true);
655+
if(urlParts && urlParts.query && urlParts.query.maxPoolSize){
656+
maxPoolSize = urlParts.query.maxPoolSize;
657+
}
658+
}
634659

635660
var dbName;
636661
var dbOptions = {
637-
poolSize: config.mongodb.max_pool_size,
662+
poolSize: maxPoolSize,
638663
reconnectInterval: 1000,
639664
reconnectTries:999999999,
640665
autoReconnect:true,
@@ -644,7 +669,7 @@ var pluginManager = function pluginManager(){
644669
socketTimeoutMS: 999999999
645670
};
646671
if (typeof config.mongodb === 'string') {
647-
dbName = db ? config.mongodb.replace(new RegExp('countly$'), db) : config.mongodb;
672+
dbName = db ? config.mongodb.replace(/\/countly\b/, "/"+db) : config.mongodb;
648673
} else{
649674
config.mongodb.db = db || config.mongodb.db || 'countly';
650675
if ( typeof config.mongodb.replSetServers === 'object'){

0 commit comments

Comments
 (0)