in nimo-shake/common/mongodb_mgo.go [41:82]
func NewMongoConn(url string, connectMode string, timeout bool) (*MongoConn, error) {
if connectMode == ConnectModeStandalone {
url += "?connect=direct"
}
session, err := mgo.Dial(url)
if err != nil {
LOG.Critical("Connect to [%s] failed. %v", url, err)
return nil, err
}
// maximum pooled connections. the overall established sockets
// should be lower than this value(will block otherwise)
session.SetPoolLimit(256)
if timeout {
session.SetSocketTimeout(10 * time.Minute)
} else {
session.SetSocketTimeout(0)
}
// already ping in the session
/*if err := session.Ping(); err != nil {
LOG.Critical("Verify ping command to %s failed. %v", url, err)
return nil, err
}*/
// Switch the session to a eventually behavior. In that case session
// may read for any secondary node. default mode is mgo.Strong
switch connectMode {
case ConnectModePrimary:
session.SetMode(mgo.Primary, true)
case ConnectModeSecondaryPreferred:
session.SetMode(mgo.SecondaryPreferred, true)
case ConnectModeStandalone:
session.SetMode(mgo.Monotonic, true)
default:
err = fmt.Errorf("unknown connect mode[%v]", connectMode)
return nil, err
}
LOG.Info("New session to %s successfully", url)
return &MongoConn{Session: session, URL: url}, nil
}