func newServer() (*coretesting.MgoInstance, error) { inst := &coretesting.MgoInstance{Params: []string{"--replSet", name}} err := inst.Start(true) if err != nil { return nil, fmt.Errorf("Error starting mongo server: %s", err.Error()) } // by dialing right now, we'll wait until it's running strategy := utils.AttemptStrategy{Total: time.Second * 5, Delay: time.Millisecond * 100} attempt := strategy.Start() for attempt.Next() { var session *mgo.Session session, err = inst.DialDirect() if err != nil { err = fmt.Errorf("Error dialing mongo server %q: %s", inst.Addr(), err.Error()) } else { session.SetMode(mgo.Monotonic, true) err = session.Ping() if err != nil { err = fmt.Errorf("Error pinging mongo server %q: %s", inst.Addr(), err.Error()) } session.Close() } if err == nil || !attempt.HasNext() { break } } return inst, err }
func getLastUpdated(dataset map[string]interface{}, session *mgo.Session) (t *time.Time) { var lastUpdated bson.M session.SetMode(mgo.Monotonic, true) coll := session.DB("backdrop").C(dataset["name"].(string)) err := coll.Find(nil).Sort("-_updated_at").One(&lastUpdated) if err != nil { panic(err) } t = nil value, isTime := lastUpdated["_updated_at"].(time.Time) if isTime { t = &value } return }
func SetMode(s *mgo.Session, modeFriendly string, refresh bool) { mode, ok := g_modes[strings.ToLower(modeFriendly)] if !ok { log.Fatal("invalid mgo mode") } switch mode { case 0: s.SetMode(mgo.Eventual, refresh) case 1: s.SetMode(mgo.Monotonic, refresh) case 2: s.SetMode(mgo.Strong, refresh) } }