Adding maximumConnections and maximumIdleConnections on database side

This commit is contained in:
DanB
2014-10-03 16:30:50 +02:00
parent d8868bf05b
commit 3756919342
15 changed files with 42 additions and 19 deletions

View File

@@ -92,7 +92,7 @@ func TestCreateTables(t *testing.T) {
t.Fatal("Unsupported storDbType")
}
var mysql *engine.MySQLStorage
if d, err := engine.NewMySQLStorage(cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass); err != nil {
if d, err := engine.NewMySQLStorage(cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass, cfg.StorDBMaxOpenConns, cfg.StorDBMaxIdleConns); err != nil {
t.Fatal("Error on opening database connection: ", err)
} else {
mysql = d.(*engine.MySQLStorage)

View File

@@ -110,7 +110,7 @@ func TestEmptyTables(t *testing.T) {
t.Fatal("Unsupported storDbType")
}
var mysql *engine.MySQLStorage
if d, err := engine.NewMySQLStorage(cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass); err != nil {
if d, err := engine.NewMySQLStorage(cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass, cfg.StorDBMaxOpenConns, cfg.StorDBMaxIdleConns); err != nil {
t.Fatal("Error on opening database connection: ", err)
} else {
mysql = d.(*engine.MySQLStorage)

View File

@@ -364,7 +364,7 @@ func main() {
logDb = ratingDb.(engine.LogStorage)
} else {
logDb, err = engine.ConfigureLogStorage(cfg.StorDBType, cfg.StorDBHost, cfg.StorDBPort,
cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass, cfg.DBDataEncoding)
cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass, cfg.DBDataEncoding, cfg.StorDBMaxOpenConns, cfg.StorDBMaxIdleConns)
if err != nil { // Cannot configure logger database, show stopper
engine.Logger.Crit(fmt.Sprintf("Could not configure logger database: %s exiting!", err))
return

View File

@@ -90,9 +90,11 @@ func main() {
ratingDb, errRatingDb = engine.ConfigureRatingStorage(*ratingdb_type, *ratingdb_host, *ratingdb_port, *ratingdb_name,
*ratingdb_user, *ratingdb_pass, *dbdata_encoding)
accountDb, errAccDb = engine.ConfigureAccountingStorage(*accountdb_type, *accountdb_host, *accountdb_port, *accountdb_name, *accountdb_user, *accountdb_pass, *dbdata_encoding)
storDb, errStorDb = engine.ConfigureLoadStorage(*stor_db_type, *stor_db_host, *stor_db_port, *stor_db_name, *stor_db_user, *stor_db_pass, *dbdata_encoding)
storDb, errStorDb = engine.ConfigureLoadStorage(*stor_db_type, *stor_db_host, *stor_db_port, *stor_db_name, *stor_db_user, *stor_db_pass, *dbdata_encoding,
cgrConfig.StorDBMaxOpenConns, cgrConfig.StorDBMaxIdleConns)
} else if *toStorDb { // Import from csv files to storDb
storDb, errStorDb = engine.ConfigureLoadStorage(*stor_db_type, *stor_db_host, *stor_db_port, *stor_db_name, *stor_db_user, *stor_db_pass, *dbdata_encoding)
storDb, errStorDb = engine.ConfigureLoadStorage(*stor_db_type, *stor_db_host, *stor_db_port, *stor_db_name, *stor_db_user, *stor_db_pass, *dbdata_encoding,
cgrConfig.StorDBMaxOpenConns, cgrConfig.StorDBMaxIdleConns)
} else { // Default load from csv files to dataDb
ratingDb, errRatingDb = engine.ConfigureRatingStorage(*ratingdb_type, *ratingdb_host, *ratingdb_port, *ratingdb_name,
*ratingdb_user, *ratingdb_pass, *dbdata_encoding)

View File

@@ -73,6 +73,8 @@ type CGRConfig struct {
StorDBName string // The name of the database to connect to.
StorDBUser string // The user to sign in as.
StorDBPass string // The user's password.
StorDBMaxOpenConns int // Maximum database connections opened
StorDBMaxIdleConns int // Maximum idle connections to keep opened
DBDataEncoding string // The encoding used to store object data in strings: <msgpack|json>
RPCJSONListen string // RPC JSON listening address
RPCGOBListen string // RPC GOB listening address
@@ -155,6 +157,8 @@ func (self *CGRConfig) setDefaults() error {
self.StorDBName = "cgrates"
self.StorDBUser = "cgrates"
self.StorDBPass = "CGRateS.org"
self.StorDBMaxOpenConns = 100
self.StorDBMaxIdleConns = 10
self.DBDataEncoding = utils.MSGPACK
self.RPCJSONListen = "127.0.0.1:2012"
self.RPCGOBListen = "127.0.0.1:2013"
@@ -346,6 +350,12 @@ func loadConfig(c *conf.ConfigFile) (*CGRConfig, error) {
if hasOpt = c.HasOption("global", "stordb_passwd"); hasOpt {
cfg.StorDBPass, _ = c.GetString("global", "stordb_passwd")
}
if hasOpt = c.HasOption("global", "stordb_max_open_conns"); hasOpt {
cfg.StorDBMaxOpenConns, _ = c.GetInt("global", "stordb_max_open_conns")
}
if hasOpt = c.HasOption("global", "stordb_max_idle_conns"); hasOpt {
cfg.StorDBMaxIdleConns, _ = c.GetInt("global", "stordb_max_idle_conns")
}
if hasOpt = c.HasOption("global", "dbdata_encoding"); hasOpt {
cfg.DBDataEncoding, _ = c.GetString("global", "dbdata_encoding")
}

View File

@@ -64,6 +64,8 @@ func TestDefaults(t *testing.T) {
eCfg.StorDBName = "cgrates"
eCfg.StorDBUser = "cgrates"
eCfg.StorDBPass = "CGRateS.org"
eCfg.StorDBMaxOpenConns = 100
eCfg.StorDBMaxIdleConns = 10
eCfg.DBDataEncoding = utils.MSGPACK
eCfg.RPCJSONListen = "127.0.0.1:2012"
eCfg.RPCGOBListen = "127.0.0.1:2013"
@@ -187,6 +189,8 @@ func TestConfigFromFile(t *testing.T) {
eCfg.StorDBName = "test"
eCfg.StorDBUser = "test"
eCfg.StorDBPass = "test"
eCfg.StorDBMaxOpenConns = 99
eCfg.StorDBMaxIdleConns = 99
eCfg.DBDataEncoding = "test"
eCfg.RPCJSONListen = "test"
eCfg.RPCGOBListen = "test"

View File

@@ -20,6 +20,8 @@ stordb_port = test # The port to reach the logdb.
stordb_name = test # The name of the log database to connect to.
stordb_user = test # Username to use when connecting to logdb.
stordb_passwd = test # Password to use when connecting to logdb.
stordb_max_open_conns = 99 # Maximum database connections opened
stordb_max_idle_conns = 99 # Maximum database connections idle
dbdata_encoding = test # The encoding used to scategorye object data in strings: <msgpack|json>
rpc_json_listen = test # RPC JSON listening address
rpc_gob_listen = test # RPC GOB listening address

View File

@@ -23,6 +23,8 @@
# stordb_name = cgrates # The name of the log database to connect to.
# stordb_user = cgrates # Username to use when connecting to stordb.
# stordb_passwd = CGRateS.org # Password to use when connecting to stordb.
# stordb_max_open_conns = 0 # Maximum database connections opened
# stordb_max_idle_conns = -1 # Maximum database connections idle
# dbdata_encoding = msgpack # The encoding used to store object data in strings: <msgpack|json>
# rpc_json_listen = 127.0.0.1:2012 # RPC JSON listening address
# rpc_gob_listen = 127.0.0.1:2013 # RPC GOB listening address

View File

@@ -95,7 +95,7 @@ func TestCreateStorTpTables(t *testing.T) {
return
}
var db *MySQLStorage
if d, err := NewMySQLStorage(lCfg.StorDBHost, lCfg.StorDBPort, lCfg.StorDBName, lCfg.StorDBUser, lCfg.StorDBPass); err != nil {
if d, err := NewMySQLStorage(lCfg.StorDBHost, lCfg.StorDBPort, lCfg.StorDBName, lCfg.StorDBUser, lCfg.StorDBPass, lCfg.StorDBMaxOpenConns, lCfg.StorDBMaxIdleConns); err != nil {
t.Error("Error on opening database connection: ", err)
return
} else {

View File

@@ -85,7 +85,8 @@ func TestInitStorDb(t *testing.T) {
}
var mysql *MySQLStorage
var err error
if cdrStor, err = ConfigureCdrStorage(cgrCfg.StorDBType, cgrCfg.StorDBHost, cgrCfg.StorDBPort, cgrCfg.StorDBName, cgrCfg.StorDBUser, cgrCfg.StorDBPass); err != nil {
if cdrStor, err = ConfigureCdrStorage(cgrCfg.StorDBType, cgrCfg.StorDBHost, cgrCfg.StorDBPort, cgrCfg.StorDBName, cgrCfg.StorDBUser, cgrCfg.StorDBPass,
cgrCfg.StorDBMaxOpenConns, cgrCfg.StorDBMaxIdleConns); err != nil {
t.Fatal("Error on opening database connection: ", err)
} else {
mysql = cdrStor.(*MySQLStorage)

View File

@@ -29,7 +29,7 @@ type MySQLStorage struct {
*SQLStorage
}
func NewMySQLStorage(host, port, name, user, password string) (Storage, error) {
func NewMySQLStorage(host, port, name, user, password string, maxConn, maxIdleConn int) (Storage, error) {
connectString := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&loc=Local&parseTime=true", user, password, host, port, name)
db, err := gorm.Open("mysql", connectString)
if err != nil {
@@ -39,8 +39,8 @@ func NewMySQLStorage(host, port, name, user, password string) (Storage, error) {
if err != nil {
return nil, err
}
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
db.DB().SetMaxIdleConns(maxIdleConn)
db.DB().SetMaxOpenConns(maxConn)
//db.LogMode(true)
return &MySQLStorage{&SQLStorage{Db: db.DB(), db: db}}, nil

View File

@@ -49,7 +49,8 @@ func TestCreateTables(t *testing.T) {
return
}
cgrConfig, _ := config.NewDefaultCGRConfig()
if d, err := NewMySQLStorage(cgrConfig.StorDBHost, cgrConfig.StorDBPort, cgrConfig.StorDBName, cgrConfig.StorDBUser, cgrConfig.StorDBPass); err != nil {
if d, err := NewMySQLStorage(cgrConfig.StorDBHost, cgrConfig.StorDBPort, cgrConfig.StorDBName, cgrConfig.StorDBUser, cgrConfig.StorDBPass,
cgrConfig.StorDBMaxOpenConns, cgrConfig.StorDBMaxIdleConns); err != nil {
t.Error("Error on opening database connection: ", err)
return
} else {

View File

@@ -86,7 +86,7 @@ func ConfigureAccountingStorage(db_type, host, port, name, user, pass, marshaler
return db, nil
}
func ConfigureLogStorage(db_type, host, port, name, user, pass, marshaler string) (db LogStorage, err error) {
func ConfigureLogStorage(db_type, host, port, name, user, pass, marshaler string, maxConn, maxIdleConn int) (db LogStorage, err error) {
var d Storage
switch db_type {
/*
@@ -107,7 +107,7 @@ func ConfigureLogStorage(db_type, host, port, name, user, pass, marshaler string
d, err = NewPostgresStorage(host, port, name, user, pass)
*/
case utils.MYSQL:
d, err = NewMySQLStorage(host, port, name, user, pass)
d, err = NewMySQLStorage(host, port, name, user, pass, maxConn, maxIdleConn)
default:
err = errors.New("unknown db")
}
@@ -117,7 +117,7 @@ func ConfigureLogStorage(db_type, host, port, name, user, pass, marshaler string
return d.(LogStorage), nil
}
func ConfigureLoadStorage(db_type, host, port, name, user, pass, marshaler string) (db LoadStorage, err error) {
func ConfigureLoadStorage(db_type, host, port, name, user, pass, marshaler string, maxConn, maxIdleConn int) (db LoadStorage, err error) {
var d Storage
switch db_type {
/*
@@ -126,7 +126,7 @@ func ConfigureLoadStorage(db_type, host, port, name, user, pass, marshaler strin
db = d.(LoadStorage)
*/
case utils.MYSQL:
d, err = NewMySQLStorage(host, port, name, user, pass)
d, err = NewMySQLStorage(host, port, name, user, pass, maxConn, maxIdleConn)
db = d.(LoadStorage)
default:
err = errors.New("unknown db")
@@ -137,7 +137,7 @@ func ConfigureLoadStorage(db_type, host, port, name, user, pass, marshaler strin
return db, nil
}
func ConfigureCdrStorage(db_type, host, port, name, user, pass string) (db CdrStorage, err error) {
func ConfigureCdrStorage(db_type, host, port, name, user, pass string, maxConn, maxIdleConn int) (db CdrStorage, err error) {
var d Storage
switch db_type {
/*
@@ -146,7 +146,7 @@ func ConfigureCdrStorage(db_type, host, port, name, user, pass string) (db CdrSt
db = d.(CdrStorage)
*/
case utils.MYSQL:
d, err = NewMySQLStorage(host, port, name, user, pass)
d, err = NewMySQLStorage(host, port, name, user, pass, maxConn, maxIdleConn)
db = d.(CdrStorage)
default:
err = errors.New("unknown db")

View File

@@ -76,7 +76,7 @@ func TestEmptyTables(t *testing.T) {
t.Fatal("Unsupported storDbType")
}
var mysql *engine.MySQLStorage
if d, err := engine.NewMySQLStorage(cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass); err != nil {
if d, err := engine.NewMySQLStorage(cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass, cfg.StorDBMaxOpenConns, cfg.StorDBMaxIdleConns); err != nil {
t.Fatal("Error on opening database connection: ", err)
} else {
mysql = d.(*engine.MySQLStorage)

View File

@@ -54,7 +54,8 @@ func TestTutLclResetDb(t *testing.T) {
if !*testLocal {
return
}
if db, err := engine.NewMySQLStorage(tutCfg.StorDBHost, tutCfg.StorDBPort, tutCfg.StorDBName, tutCfg.StorDBUser, tutCfg.StorDBPass); err != nil {
if db, err := engine.NewMySQLStorage(tutCfg.StorDBHost, tutCfg.StorDBPort, tutCfg.StorDBName, tutCfg.StorDBUser, tutCfg.StorDBPass,
tutCfg.StorDBMaxOpenConns, tutCfg.StorDBMaxIdleConns); err != nil {
t.Error(err)
} else if errFlush := db.Flush(); errFlush != nil {
t.Error(err)