mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Adding maximumConnections and maximumIdleConnections on database side
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user