Skip to content

Commit

Permalink
Fixed test and moved constants into standalone func
Browse files Browse the repository at this point in the history
In #3520, work was done to true up the defaults for Nomad resource
stanzas with the documentation.  This fixes the tests that I
accidentally broke in the process.  Some questions were raised about
using dynamic elements as part of expects, which is why I opted to
copy the MinResources pattern.   During this refactor I also noticed
that structs.go had a similar issue and an inconsistent minium for CPU.
  • Loading branch information
angrycub committed Nov 13, 2017
1 parent 28779af commit 622d3dd
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 12 deletions.
8 changes: 4 additions & 4 deletions api/jobs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ func TestJobs_Canonicalize(t *testing.T) {
{
KillTimeout: helper.TimeToPtr(5 * time.Second),
LogConfig: DefaultLogConfig(),
Resources: MinResources(),
Resources: DefaultResources(),
},
},
},
Expand Down Expand Up @@ -201,7 +201,7 @@ func TestJobs_Canonicalize(t *testing.T) {
{
Name: "task1",
LogConfig: DefaultLogConfig(),
Resources: MinResources(),
Resources: DefaultResources(),
KillTimeout: helper.TimeToPtr(5 * time.Second),
},
},
Expand Down Expand Up @@ -550,7 +550,7 @@ func TestJobs_Canonicalize(t *testing.T) {
{
Name: "task1",
LogConfig: DefaultLogConfig(),
Resources: MinResources(),
Resources: DefaultResources(),
KillTimeout: helper.TimeToPtr(5 * time.Second),
},
},
Expand Down Expand Up @@ -582,7 +582,7 @@ func TestJobs_Canonicalize(t *testing.T) {
{
Name: "task1",
LogConfig: DefaultLogConfig(),
Resources: MinResources(),
Resources: DefaultResources(),
KillTimeout: helper.TimeToPtr(5 * time.Second),
},
},
Expand Down
27 changes: 23 additions & 4 deletions api/resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,47 @@ type Resources struct {
Networks []*NetworkResource
}

// Canonicalize will supply missing values in the cases
// where they are not provided.
func (r *Resources) Canonicalize() {
defaultResources := DefaultResources()
if r.CPU == nil {
r.CPU = helper.IntToPtr(100)
r.CPU = defaultResources.CPU
}
if r.MemoryMB == nil {
r.MemoryMB = helper.IntToPtr(300)
r.MemoryMB = defaultResources.MemoryMB
}
if r.IOPS == nil {
r.IOPS = helper.IntToPtr(0)
r.IOPS = defaultResources.IOPS
}
for _, n := range r.Networks {
n.Canonicalize()
}
}

// DefaultResources is a small resources object that contains the
// default resources requests that we will provide to an object.
// --- THIS FUNCTION IS REPLICATED IN nomad/structs/structs.go
// and should be kept in sync.
func DefaultResources() *Resources {
return &Resources{
CPU: helper.IntToPtr(100),
MemoryMB: helper.IntToPtr(300),
IOPS: helper.IntToPtr(0),
}
}

// MinResources is a small resources object that contains the
// absolute minimum resources that we will provide to an object.
// This should not be confused with the defaults which are
// provided in DefaultResources() --- THIS LOGIC IS REPLICATED
// IN nomad/structs/structs.go and should be kept in sync.
func MinResources() *Resources {
return &Resources{
CPU: helper.IntToPtr(100),
MemoryMB: helper.IntToPtr(10),
IOPS: helper.IntToPtr(0),
}

}

// Merge merges this resource with another resource.
Expand Down
27 changes: 23 additions & 4 deletions nomad/structs/structs.go
Original file line number Diff line number Diff line change
Expand Up @@ -1222,8 +1222,25 @@ const (
BytesInMegabyte = 1024 * 1024
)

// DefaultResources returns the default resources for a task.

// DefaultResources is a small resources object that contains the
// default resources requests that we will provide to an object.
// --- THIS FUNCTION IS REPLICATED IN api/resources.go and should
// be kept in sync.
func DefaultResources() *Resources {
return &Resources{
CPU: 100,
MemoryMB: 300,
IOPS: 0,
}
}

// MinResources is a small resources object that contains the
// absolute minimum resources that we will provide to an object.
// This should not be confused with the defaults which are
// provided in Canonicalize() --- THIS FUNCTION IS REPLICATED IN
// api/resources.go and should be kept in sync.
func MinResources() *Resources {
return &Resources{
CPU: 100,
MemoryMB: 10,
Expand Down Expand Up @@ -1269,15 +1286,17 @@ func (r *Resources) Canonicalize() {

// MeetsMinResources returns an error if the resources specified are less than
// the minimum allowed.
// This is based on the minimums defined in the Resources type
func (r *Resources) MeetsMinResources() error {
var mErr multierror.Error
if r.CPU < 20 {
minResources := MinResources()
if r.CPU < minResources.CPU {
mErr.Errors = append(mErr.Errors, fmt.Errorf("minimum CPU value is 20; got %d", r.CPU))
}
if r.MemoryMB < 10 {
if r.MemoryMB < minResources.MemoryMB {
mErr.Errors = append(mErr.Errors, fmt.Errorf("minimum MemoryMB value is 10; got %d", r.MemoryMB))
}
if r.IOPS < 0 {
if r.IOPS < minResources.IOPS {
mErr.Errors = append(mErr.Errors, fmt.Errorf("minimum IOPS value is 0; got %d", r.IOPS))
}
for i, n := range r.Networks {
Expand Down

0 comments on commit 622d3dd

Please sign in to comment.