Ejemplo n.º 1
0
func getPrimaryPort(session *mgo.Session) (string, error) {

	result := struct {
		Members []struct {
			Name     string `bson:"name"`
			StateStr string `bson:"stateStr"`
		} `bson:"members"`
	}{}

	res := &struct {
		Msg string
	}{}
	session.Run("ismaster", res)
	isMongosTestServer = (res.Msg == "isdbgrid")
	if isMongosTestServer {
		return "", nil
	}

	err := session.DB("admin").Run("replSetGetStatus", &result)

	if err != nil {
		if err.Error() == "not running with --replSet" {
			return "", nil
		}
		return "", err
	}

	for _, member := range result.Members {
		if member.StateStr == "PRIMARY" {
			return strings.Split(member.Name, ":")[1], nil
		}
	}

	return "", fmt.Errorf("replset status has no primary")
}
Ejemplo n.º 2
0
func getTestDBPort(session *mgo.Session) (string, error) {
	if port := os.Getenv("DB_PORT"); port != "" {
		return port, nil
	}

	result := struct {
		Members []struct {
			Name     string `bson:"name"`
			StateStr string `bson:"stateStr"`
		} `bson:"members"`
	}{}

	err := session.DB("admin").Run("replSetGetStatus", &result)
	if err != nil && err.Error() != "not running with --replSet" {
		return "", err
	}

	if err != nil && err.Error() == "not running with --replSet" {
		return fmt.Sprintf("%d", defaultTestPort), nil
	}

	for _, member := range result.Members {
		if member.StateStr == "PRIMARY" {
			return strings.Split(member.Name, ":")[1], nil
		}
	}

	return "", fmt.Errorf("unable to determine database port")
}