Skip to content

Commit

Permalink
Remove ProcessesQuery. We always preload.
Browse files Browse the repository at this point in the history
  • Loading branch information
ejholmes committed Jan 3, 2016
1 parent b51135b commit 903e173
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 59 deletions.
9 changes: 2 additions & 7 deletions apps.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,13 +202,8 @@ func (s *scaler) Scale(ctx context.Context, db *gorm.DB, opts ScaleOpts) (*Proce
return nil, &ValidationError{Err: fmt.Errorf("no releases for %s", app.Name)}
}

f, err := formation(db, ProcessesQuery{Release: release})
if err != nil {
return nil, err
}

p, ok := f[t]
if !ok {
p := release.Process(t)
if p == nil {
return nil, &ValidationError{Err: fmt.Errorf("no %s process type in release", t)}
}

Expand Down
38 changes: 0 additions & 38 deletions processes.go
Original file line number Diff line number Diff line change
Expand Up @@ -242,44 +242,6 @@ func (f Formation) Processes() []*Process {
return processes
}

// ProcessesQuery is a Scope implementation for common things to filter
// processes by.
type ProcessesQuery struct {
// If provided, finds only processes belonging to the given release.
Release *Release
}

// Scope implements the Scope interface.
func (q ProcessesQuery) Scope(db *gorm.DB) *gorm.DB {
var scope ComposedScope

if q.Release != nil {
scope = append(scope, FieldEquals("release_id", q.Release.ID))
}

return scope.Scope(db)
}

// processes returns all processes matching the scope.
func processes(db *gorm.DB, scope Scope) ([]*Process, error) {
var processes []*Process
return processes, find(db, scope, &processes)
}

// formation returns a Formation for the processes matching the scope.
func formation(db *gorm.DB, scope Scope) (Formation, error) {
p, err := processes(db, scope)
if err != nil {
return nil, err
}
return newFormation(p), nil
}

// processesCreate inserts a process into the database.
func processesCreate(db *gorm.DB, process *Process) (*Process, error) {
return process, db.Create(process).Error
}

// processesUpdate updates an existing process into the database.
func processesUpdate(db *gorm.DB, process *Process) error {
return db.Save(process).Error
Expand Down
11 changes: 0 additions & 11 deletions processes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,6 @@ import (
"github.com/remind101/empire/pkg/constraints"
)

func TestProcessesQuery(t *testing.T) {
release := &Release{ID: "1234"}

tests := scopeTests{
{ProcessesQuery{}, "", []interface{}{}},
{ProcessesQuery{Release: release}, "WHERE (release_id = $1)", []interface{}{release.ID}},
}

tests.Run(t)
}

func TestNewFormation(t *testing.T) {
tests := []struct {
f Formation
Expand Down
19 changes: 16 additions & 3 deletions releases.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,17 @@ func (r *Release) Formation() Formation {
return f
}

// Process return the Process with the given type.
func (r *Release) Process(t ProcessType) *Process {
for _, p := range r.Processes {
if p.Type == t {
return p
}
}

return nil
}

// BeforeCreate sets created_at before inserting.
func (r *Release) BeforeCreate() error {
t := timex.Now()
Expand Down Expand Up @@ -78,9 +89,6 @@ func (q ReleasesQuery) Scope(db *gorm.DB) *gorm.DB {

scope = append(scope, Range(q.Range.WithDefaults(q.DefaultRange())))

// Preload all the things.
scope = append(scope, Preload("App", "Config", "Slug", "Processes"))

return scope.Scope(db)
}

Expand Down Expand Up @@ -132,10 +140,14 @@ func (s *releasesService) Rollback(ctx context.Context, db *gorm.DB, opts Rollba
})
}

// These associations are always available on a Release.
var releasesPreload = Preload("App", "Config", "Slug", "Processes")

// releasesFind returns the first matching release.
func releasesFind(db *gorm.DB, scope Scope) (*Release, error) {
var release Release

scope = ComposedScope{releasesPreload, scope}
if err := first(db, scope, &release); err != nil {
return &release, err
}
Expand All @@ -150,6 +162,7 @@ func releasesFind(db *gorm.DB, scope Scope) (*Release, error) {
// releases returns all releases matching the scope.
func releases(db *gorm.DB, scope Scope) ([]*Release, error) {
var releases []*Release
scope = ComposedScope{releasesPreload, scope}
return releases, find(db, scope, &releases)
}

Expand Down

0 comments on commit 903e173

Please sign in to comment.