コード例 #1
0
ファイル: eager_test.go プロジェクト: gooops/machinery
func (s *EagerBackendTestSuite) SetupSuite() {
	// prepare common test data
	s.backend = backends.NewEagerBackend()

	// 2 non-group state
	s.st = []*signatures.TaskSignature{
		{UUID: "1"},
		{UUID: "2"},
		{UUID: "3"},
		{UUID: "4"},
		{UUID: "5"},
		{UUID: "6"},
	}

	for _, t := range s.st {
		s.backend.SetStatePending(t)
	}

	// groups
	s.groups = []struct {
		id    string
		tasks []string
	}{
		{"group1", []string{"1-3", "1-4"}},
		{"group2", []string{"2-1", "2-2", "2-3"}},
		{"group3", []string(nil)},
		{"group4", []string{"4-1", "4-2", "4-3", "4-4"}},
		{"group5", []string{"5-1", "5-2"}},
	}

	for _, g := range s.groups {
		for _, t := range g.tasks {
			sig := &signatures.TaskSignature{
				UUID:           t,
				GroupUUID:      g.id,
				GroupTaskCount: len(g.tasks),
			}
			s.st = append(s.st, sig)

			// default state is pending
			s.backend.SetStatePending(sig)
		}

		s.Nil(s.backend.InitGroup(g.id, g.tasks))
	}

	// prepare for TestInitGroup
	s.Nil(s.backend.PurgeGroupMeta(s.groups[4].id))
}
コード例 #2
0
ファイル: factories.go プロジェクト: gooops/machinery
// BackendFactory creates a new object with backends.Backend interface
// Currently supported backends are AMQP and Memcache
func BackendFactory(cnf *config.Config) (backends.Backend, error) {
	if strings.HasPrefix(cnf.ResultBackend, "amqp://") {
		return backends.NewAMQPBackend(cnf), nil
	}

	if strings.HasPrefix(cnf.ResultBackend, "memcache://") {
		parts := strings.Split(cnf.ResultBackend, "memcache://")
		if len(parts) != 2 {
			return nil, fmt.Errorf(
				"Memcache result backend connection string should be in format memcache://server1:port,server2:port, instead got %s",
				cnf.ResultBackend,
			)
		}
		servers := strings.Split(parts[1], ",")
		return backends.NewMemcacheBackend(cnf, servers), nil
	}

	if strings.HasPrefix(cnf.ResultBackend, "redis://") {
		redisHost, redisPassword, redisDB, err := ParseRedisURL(cnf.ResultBackend)
		if err != nil {
			return nil, err
		}

		return backends.NewRedisBackend(cnf, redisHost, redisPassword, "", redisDB), nil
	}

	if strings.HasPrefix(cnf.ResultBackend, "redis+socket://") {
		redisSocket, redisPassword, redisDB, err := ParseRedisSocketURL(cnf.ResultBackend)
		if err != nil {
			return nil, err
		}

		return backends.NewRedisBackend(cnf, "", redisPassword, redisSocket, redisDB), nil
	}

	if strings.HasPrefix(cnf.ResultBackend, "mongodb://") {
		return backends.NewMongodbBackend(cnf)
	}

	if strings.HasPrefix(cnf.ResultBackend, "eager") {
		return backends.NewEagerBackend(), nil
	}

	return nil, fmt.Errorf("Factory failed with result backend: %v", cnf.ResultBackend)
}