diff --git a/database/sql/repositories.go b/database/sql/repositories.go index c57b7548..33e6011a 100644 --- a/database/sql/repositories.go +++ b/database/sql/repositories.go @@ -303,14 +303,14 @@ func (s *sqlDatabase) findPoolByTags(id, poolType string, tags []string) (params return params.Pool{}, errors.Wrap(runnerErrors.ErrBadRequest, "parsing id") } - var pool Pool - where := fmt.Sprintf("tags.name in ? and %s = ?", poolType) + var pools []Pool + where := fmt.Sprintf("tags.name in ? and %s = ? and enabled = true", poolType) q := s.conn.Joins("JOIN pool_tags on pool_tags.pool_id=pools.id"). Joins("JOIN tags on tags.id=pool_tags.tag_id"). Group("pools.id"). Preload("Tags"). Having("count(1) = ?", len(tags)). - Where(where, tags, u).First(&pool) + Where(where, tags, u).Find(&pools) if q.Error != nil { if errors.Is(q.Error, gorm.ErrRecordNotFound) { @@ -319,7 +319,11 @@ func (s *sqlDatabase) findPoolByTags(id, poolType string, tags []string) (params return params.Pool{}, errors.Wrap(q.Error, "fetching pool") } - return s.sqlToCommonPool(pool), nil + if len(pools) == 0 { + return params.Pool{}, runnerErrors.ErrNotFound + } + + return s.sqlToCommonPool(pools[0]), nil } func (s *sqlDatabase) getRepoPoolByUniqueFields(ctx context.Context, repoID string, provider, image, flavor string) (Pool, error) { diff --git a/runner/pool/pool.go b/runner/pool/pool.go index 195306c6..c800797f 100644 --- a/runner/pool/pool.go +++ b/runner/pool/pool.go @@ -364,6 +364,7 @@ func (r *basePoolManager) acquireNewInstance(job params.WorkflowJob) error { pool, err := r.helper.FindPoolByTags(requestedLabels) if err != nil { if errors.Is(err, runnerErrors.ErrNotFound) { + log.Printf("failed to find an enabled pool with required labels: %s", strings.Join(requestedLabels, ", ")) return nil } return errors.Wrap(err, "fetching suitable pool")