An error occurs in a multi-coroutine scenario
exasasas opened this issue · comments
I have started a program with many coroutines. In this case, when my gorm has been executed for a period of time, it returns an empty struct but does not return an error. This seems to happen randomly because I There are 2 pods running at the same time but always appear in one of them. no return ErrRecordNotFound or other err but return empty struct
This is my config
db, _ := gorm.Open(mysql.Open(dsn_master), &gorm.Config{Logger: logger.New(
Writer{}, // io writer
logger.Config{
SlowThreshold: time.Second / 2, // Slow SQL threshold
LogLevel: logger.Info, // Log level
},
)})
db.Use(dbresolver.Register(dbresolver.Config{
Sources: []gorm.Dialector{mysql.Open(dsn_master)},
Replicas: []gorm.Dialector{mysql.Open(dsn_slave)},
Policy: dbresolver.RandomPolicy{},
}).
SetConnMaxIdleTime(time.Hour).
SetConnMaxLifetime(time.Hour).
SetMaxIdleConns(500).
SetMaxOpenConns(4000))
Please submit a runable example, or we are just wasting time here.
Please submit a runable example, or we are just wasting time here.
It is a simple query. I have a go program that has opened many coroutines. These coroutines will sleep. The query is executed in the coroutines. After running for some time, the results are generated.
err := db.Where("id = ?", id).First(&data).Error
if err != nil {
return nil, err
}
Please submit a runable example, or we are just wasting time here.
A runable example contains huge information than what you provided:
- the go.mod: the version of GORM and the driver version you are using
- the codes: how your codes runs, did you accidently eat the errors?(for example, a gorm plugin)
It's very recommended that you should write one rather than just doing questions and answers, like I said, it's just wasting time here.
This may be because your data insertion side is later than the data reading side