Use EngineGroup.SetMaxIdleConns or SetMaxOpenConns Error #1600

Closed
opened 2020-03-12 10:42:29 +00:00 by csboing · 0 comments

Init EngineGroup func :

func InitMysqlGroup(mdb string, sdb []string, tablePrefix string) (*xorm.EngineGroup, error) {
	var err error
	master, err := xorm.NewEngine("mysql", mdb)
	if err != nil {
		logrus.Panicf("Fail to connect master mysql: %s", err.Error())
	}

	slaveList := make([]*xorm.Engine, 0)
	for _, db := range sdb {
		slave, err := xorm.NewEngine("mysql", db)
		if err != nil {
			logrus.Panicf("Fail to connect slave mysql: %s", err.Error())
		}
		slaveList = append(slaveList, slave)
	}

	var tmpEngine *xorm.EngineGroup
	tmpEngine, err = xorm.NewEngineGroup(master, slaveList)
	if err != nil {
		logrus.Panicf("Fail to init group mysql: %s", err.Error())
	}

	
	tmpEngine.SetMaxIdleConns(10)
	tmpEngine.SetMaxOpenConns(100)
	tmpEngine.SetTableMapper(core.NewPrefixMapper(core.SnakeMapper{}, tablePrefix))
	tmpEngine.SetColumnMapper(core.SnakeMapper{})
	tmpEngine.SetLogLevel(log.LOG_DEBUG)
	tmpEngine.SetLogger(logging.XORMLogger)
	tmpEngine.ShowSQL(true)
	return tmpEngine, nil
}

Error:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x16031a9]

goroutine 1 [running]:
xorm.io/xorm.(*EngineGroup).SetMaxIdleConns(0xc0002e64e0, 0xa)
        /Users/xxx/go/src/xorm.io/xorm/engine_group.go:164 +0x29
yueyou.com/golib/db.InitMysqlGroup(0xc000270230, 0x4e, 0xc000219e20, 0x1, 0x1, 0x1911abe, 0x2, 0x192ae0e, 0x1f, 0x1a37160)
        /Users/xxx/go/src/xxx/xxxx/db/mysql.go:59 +0x2c6
yueyou.com/yygoreader/comps.init.0()
        /Users/xxx/go/src/xxx/xxxx/comps/mysql.go:23 +0x313

Modified:

use Engine SetMaxIdleConns or SetMaxOpenConns is OK

func InitMysqlGroup(mdb string, sdb []string, tablePrefix string) (*xorm.EngineGroup, error) {
	var err error
	master, err := xorm.NewEngine("mysql", mdb)
	if err != nil {
		logrus.Panicf("fail to connect master mysql: %s", err.Error())
	}
    
	master.SetMaxIdleConns(10)
	master.SetMaxOpenConns(100)

	slaveList := make([]*xorm.Engine, 0)
	for _, db := range sdb {
		slave, err := xorm.NewEngine("mysql", db)
		if err != nil {
			logrus.Panicf("fail to connect slave mysql: %s", err.Error())
		}
        
		slave.SetMaxIdleConns(10)
		slave.SetMaxOpenConns(100)
		slaveList = append(slaveList, slave)
	}

	var tmpEngine *xorm.EngineGroup
	tmpEngine, err = xorm.NewEngineGroup(master, slaveList)
	if err != nil {
		logrus.Panicf("fail to init group mysql: %s", err.Error())
	}
    
	// tmpEngine.SetMaxIdleConns(10)
	// tmpEngine.SetMaxOpenConns(100)
	tmpEngine.SetTableMapper(core.NewPrefixMapper(core.SnakeMapper{}, tablePrefix))
	tmpEngine.SetColumnMapper(core.SnakeMapper{})
	tmpEngine.SetLogLevel(log.LOG_DEBUG)
	tmpEngine.SetLogger(logging.XORMLogger) 
	tmpEngine.ShowSQL(true)
	return tmpEngine, nil
}
#### Init EngineGroup func : ``` func InitMysqlGroup(mdb string, sdb []string, tablePrefix string) (*xorm.EngineGroup, error) { var err error master, err := xorm.NewEngine("mysql", mdb) if err != nil { logrus.Panicf("Fail to connect master mysql: %s", err.Error()) } slaveList := make([]*xorm.Engine, 0) for _, db := range sdb { slave, err := xorm.NewEngine("mysql", db) if err != nil { logrus.Panicf("Fail to connect slave mysql: %s", err.Error()) } slaveList = append(slaveList, slave) } var tmpEngine *xorm.EngineGroup tmpEngine, err = xorm.NewEngineGroup(master, slaveList) if err != nil { logrus.Panicf("Fail to init group mysql: %s", err.Error()) } tmpEngine.SetMaxIdleConns(10) tmpEngine.SetMaxOpenConns(100) tmpEngine.SetTableMapper(core.NewPrefixMapper(core.SnakeMapper{}, tablePrefix)) tmpEngine.SetColumnMapper(core.SnakeMapper{}) tmpEngine.SetLogLevel(log.LOG_DEBUG) tmpEngine.SetLogger(logging.XORMLogger) tmpEngine.ShowSQL(true) return tmpEngine, nil } ``` #### Error: ``` panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x16031a9] goroutine 1 [running]: xorm.io/xorm.(*EngineGroup).SetMaxIdleConns(0xc0002e64e0, 0xa) /Users/xxx/go/src/xorm.io/xorm/engine_group.go:164 +0x29 yueyou.com/golib/db.InitMysqlGroup(0xc000270230, 0x4e, 0xc000219e20, 0x1, 0x1, 0x1911abe, 0x2, 0x192ae0e, 0x1f, 0x1a37160) /Users/xxx/go/src/xxx/xxxx/db/mysql.go:59 +0x2c6 yueyou.com/yygoreader/comps.init.0() /Users/xxx/go/src/xxx/xxxx/comps/mysql.go:23 +0x313 ``` #### Modified: use Engine SetMaxIdleConns or SetMaxOpenConns is OK ``` func InitMysqlGroup(mdb string, sdb []string, tablePrefix string) (*xorm.EngineGroup, error) { var err error master, err := xorm.NewEngine("mysql", mdb) if err != nil { logrus.Panicf("fail to connect master mysql: %s", err.Error()) } master.SetMaxIdleConns(10) master.SetMaxOpenConns(100) slaveList := make([]*xorm.Engine, 0) for _, db := range sdb { slave, err := xorm.NewEngine("mysql", db) if err != nil { logrus.Panicf("fail to connect slave mysql: %s", err.Error()) } slave.SetMaxIdleConns(10) slave.SetMaxOpenConns(100) slaveList = append(slaveList, slave) } var tmpEngine *xorm.EngineGroup tmpEngine, err = xorm.NewEngineGroup(master, slaveList) if err != nil { logrus.Panicf("fail to init group mysql: %s", err.Error()) } // tmpEngine.SetMaxIdleConns(10) // tmpEngine.SetMaxOpenConns(100) tmpEngine.SetTableMapper(core.NewPrefixMapper(core.SnakeMapper{}, tablePrefix)) tmpEngine.SetColumnMapper(core.SnakeMapper{}) tmpEngine.SetLogLevel(log.LOG_DEBUG) tmpEngine.SetLogger(logging.XORMLogger) tmpEngine.ShowSQL(true) return tmpEngine, nil } ```
lunny added the
kind
bug
label 2020-03-12 15:36:24 +00:00
lunny added this to the 1.0.0 milestone 2020-03-12 15:36:32 +00:00
lunny closed this issue 2020-03-13 00:42:11 +00:00
Sign in to join this conversation.
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/xorm#1600
No description provided.