func NewMongoConn()

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
}