func FetchStatus(s *Status, ms *mgo.Session, enc encoder.Encoder, r *http.Request) (int, []byte) { s.Log["MongoDB"] = NewLog(true, "") if err := ms.Ping(); err != nil { s.Log["MongoDB"] = NewLog(false, err.Error()) } return http.StatusOK, encoder.Must(enc.Encode(s)) }
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 }
// TODO remove dead session from freecon func (this *Client) checkServerStatus(wg *sync.WaitGroup, sess *mgo.Session) { defer wg.Done() err := sess.Ping() if err != nil { log.Error("mongodb err: %v %s", sess.LiveServers(), err) sess.Close() } }
// test whether session closed // // PS: sometimes it's not corrected func IsSessionClosed(s *mgo.Session) (res bool) { defer func() { if err := recover(); err != nil { log.Print("[MGO2_IS_SESSION_CLOSED] check session closed panic:", err) } }() res = true return s.Ping() != nil }
func (this *Client) checkServerStatus(wg *sync.WaitGroup, sess *mgo.Session) { defer wg.Done() err := sess.Ping() if err != nil { // TODO show mongodb uri in log log.Error("mongodb killed for: %s", err) sess.Close() this.killConn(sess) } }
// applyRelSetConfig applies the new config to the mongo session. It also logs // what the changes are. It checks if the replica set changes cause the DB // connection to be dropped. If so, it Refreshes the session and tries to Ping // again. func applyRelSetConfig(cmd string, session *mgo.Session, oldconfig, newconfig *Config) error { logger.Debugf("%s() changing replica set\nfrom %s\n to %s", cmd, fmtConfigForLog(oldconfig), fmtConfigForLog(newconfig)) err := session.Run(bson.D{{"replSetReconfig", newconfig}}, nil) // We will only try to Ping 2 times for i := 0; i < 2; i++ { if err == io.EOF { // If the primary changes due to replSetReconfig, then all // current connections are dropped. // Refreshing should fix us up. logger.Debugf("got EOF while running %s(), calling session.Refresh()", cmd) session.Refresh() } else if err != nil { // For all errors that aren't EOF, return immediately return err } // err is either nil or EOF and we called Refresh, so Ping to // make sure we're actually connected err = session.Ping() // Change the command because it is the new command we ran cmd = "Ping" } return err }
func checkSession(s *mgo.Session) (err error) { return s.Ping() }