[ARVADOS] updated: 1.1.3-45-g2320020
Git user
git at public.curoverse.com
Tue Feb 13 15:11:42 EST 2018
Summary of changes:
lib/dispatchcloud/node_size.go | 18 +++++++++----
lib/dispatchcloud/node_size_test.go | 54 +++++++++++++++++++++++++------------
2 files changed, 50 insertions(+), 22 deletions(-)
via 2320020a96ae6438482d1c8bbdf43d9c4fd06482 (commit)
from 03f277bf4b616f41ef7ed4b195d44dab83d16144 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 2320020a96ae6438482d1c8bbdf43d9c4fd06482
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Tue Feb 13 15:10:40 2018 -0500
12199: Ensure scratch space for tmp mounts when choosing node type.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/lib/dispatchcloud/node_size.go b/lib/dispatchcloud/node_size.go
index 3b72c4a..34f83a6 100644
--- a/lib/dispatchcloud/node_size.go
+++ b/lib/dispatchcloud/node_size.go
@@ -24,20 +24,28 @@ var (
// ChooseInstanceType returns the cheapest available
// arvados.InstanceType big enough to run ctr.
func ChooseInstanceType(cc *arvados.Cluster, ctr *arvados.Container) (best arvados.InstanceType, err error) {
- needVCPUs := ctr.RuntimeConstraints.VCPUs
- needRAM := ctr.RuntimeConstraints.RAM + ctr.RuntimeConstraints.KeepCacheRAM
-
- needRAM = (needRAM * 100) / int64(100-discountConfiguredRAMPercent)
-
if len(cc.InstanceTypes) == 0 {
err = ErrInstanceTypesNotConfigured
return
}
+ needScratch := int64(0)
+ for _, m := range ctr.Mounts {
+ if m.Kind == "tmp" {
+ needScratch += m.Capacity
+ }
+ }
+
+ needVCPUs := ctr.RuntimeConstraints.VCPUs
+
+ needRAM := ctr.RuntimeConstraints.RAM + ctr.RuntimeConstraints.KeepCacheRAM
+ needRAM = (needRAM * 100) / int64(100-discountConfiguredRAMPercent)
+
err = ErrConstraintsNotSatisfiable
for _, it := range cc.InstanceTypes {
switch {
case err == nil && it.Price > best.Price:
+ case it.Scratch < needScratch:
case it.RAM < needRAM:
case it.VCPUs < needVCPUs:
case it.Price == best.Price && (it.RAM < best.RAM || it.VCPUs < best.VCPUs):
diff --git a/lib/dispatchcloud/node_size_test.go b/lib/dispatchcloud/node_size_test.go
index bc628b5..0c02a0e 100644
--- a/lib/dispatchcloud/node_size_test.go
+++ b/lib/dispatchcloud/node_size_test.go
@@ -11,6 +11,8 @@ import (
var _ = check.Suite(&NodeSizeSuite{})
+const GiB = int64(1 << 30)
+
type NodeSizeSuite struct{}
func (*NodeSizeSuite) TestChooseNotConfigured(c *check.C) {
@@ -24,41 +26,58 @@ func (*NodeSizeSuite) TestChooseNotConfigured(c *check.C) {
}
func (*NodeSizeSuite) TestChooseUnsatisfiable(c *check.C) {
+ checkUnsatisfiable := func(ctr *arvados.Container) {
+ _, err := ChooseInstanceType(&arvados.Cluster{InstanceTypes: []arvados.InstanceType{
+ {Price: 1.1, RAM: 1000000000, VCPUs: 2, Name: "small1"},
+ {Price: 2.2, RAM: 2000000000, VCPUs: 4, Name: "small2"},
+ {Price: 4.4, RAM: 4000000000, VCPUs: 8, Name: "small4", Scratch: GiB},
+ }}, ctr)
+ c.Check(err, check.Equals, ErrConstraintsNotSatisfiable)
+ }
+
for _, rc := range []arvados.RuntimeConstraints{
{RAM: 9876543210, VCPUs: 2},
{RAM: 1234567890, VCPUs: 20},
{RAM: 1234567890, VCPUs: 2, KeepCacheRAM: 9876543210},
} {
- _, err := ChooseInstanceType(&arvados.Cluster{InstanceTypes: []arvados.InstanceType{
- {Price: 1.1, RAM: 1000000000, VCPUs: 2, Name: "small1"},
- {Price: 2.2, RAM: 2000000000, VCPUs: 4, Name: "small2"},
- {Price: 4.4, RAM: 4000000000, VCPUs: 8, Name: "small4"},
- }}, &arvados.Container{RuntimeConstraints: rc})
- c.Check(err, check.Equals, ErrConstraintsNotSatisfiable)
+ checkUnsatisfiable(&arvados.Container{RuntimeConstraints: rc})
}
+ checkUnsatisfiable(&arvados.Container{
+ Mounts: map[string]arvados.Mount{"/tmp": {Kind: "tmp", Capacity: 2 * GiB}},
+ RuntimeConstraints: arvados.RuntimeConstraints{RAM: 12345, VCPUs: 1},
+ })
}
func (*NodeSizeSuite) TestChoose(c *check.C) {
for _, menu := range [][]arvados.InstanceType{
{
- {Price: 4.4, RAM: 4000000000, VCPUs: 8, Name: "costly"},
- {Price: 2.2, RAM: 2000000000, VCPUs: 4, Name: "best"},
- {Price: 1.1, RAM: 1000000000, VCPUs: 2, Name: "small"},
+ {Price: 4.4, RAM: 4000000000, VCPUs: 8, Scratch: 2 * GiB, Name: "costly"},
+ {Price: 2.2, RAM: 2000000000, VCPUs: 4, Scratch: 2 * GiB, Name: "best"},
+ {Price: 1.1, RAM: 1000000000, VCPUs: 2, Scratch: 2 * GiB, Name: "small"},
},
{
- {Price: 4.4, RAM: 4000000000, VCPUs: 8, Name: "costly"},
- {Price: 2.2, RAM: 2000000000, VCPUs: 4, Name: "goodenough"},
- {Price: 2.2, RAM: 4000000000, VCPUs: 4, Name: "best"},
- {Price: 1.1, RAM: 1000000000, VCPUs: 2, Name: "small"},
+ {Price: 4.4, RAM: 4000000000, VCPUs: 8, Scratch: 2 * GiB, Name: "costly"},
+ {Price: 2.2, RAM: 2000000000, VCPUs: 4, Scratch: 2 * GiB, Name: "goodenough"},
+ {Price: 2.2, RAM: 4000000000, VCPUs: 4, Scratch: 2 * GiB, Name: "best"},
+ {Price: 1.1, RAM: 1000000000, VCPUs: 2, Scratch: 2 * GiB, Name: "small"},
},
{
- {Price: 1.1, RAM: 1000000000, VCPUs: 2, Name: "small"},
- {Price: 2.2, RAM: 2000000000, VCPUs: 4, Name: "goodenough"},
- {Price: 2.2, RAM: 4000000000, VCPUs: 4, Name: "best"},
- {Price: 4.4, RAM: 4000000000, VCPUs: 8, Name: "costly"},
+ {Price: 1.1, RAM: 1000000000, VCPUs: 2, Scratch: 2 * GiB, Name: "small"},
+ {Price: 2.2, RAM: 2000000000, VCPUs: 4, Scratch: 2 * GiB, Name: "goodenough"},
+ {Price: 2.2, RAM: 4000000000, VCPUs: 4, Scratch: 2 * GiB, Name: "best"},
+ {Price: 4.4, RAM: 4000000000, VCPUs: 8, Scratch: 2 * GiB, Name: "costly"},
+ },
+ {
+ {Price: 1.1, RAM: 1000000000, VCPUs: 2, Scratch: GiB, Name: "small"},
+ {Price: 2.2, RAM: 2000000000, VCPUs: 4, Scratch: GiB, Name: "nearly"},
+ {Price: 3.3, RAM: 4000000000, VCPUs: 4, Scratch: 2 * GiB, Name: "best"},
+ {Price: 4.4, RAM: 4000000000, VCPUs: 8, Scratch: 2 * GiB, Name: "costly"},
},
} {
best, err := ChooseInstanceType(&arvados.Cluster{InstanceTypes: menu}, &arvados.Container{
+ Mounts: map[string]arvados.Mount{
+ "/tmp": {Kind: "tmp", Capacity: 2 * GiB},
+ },
RuntimeConstraints: arvados.RuntimeConstraints{
VCPUs: 2,
RAM: 987654321,
@@ -69,5 +88,6 @@ func (*NodeSizeSuite) TestChoose(c *check.C) {
c.Check(best.Name, check.Equals, "best")
c.Check(best.RAM >= 1234567890, check.Equals, true)
c.Check(best.VCPUs >= 2, check.Equals, true)
+ c.Check(best.Scratch >= 2*GiB, check.Equals, true)
}
}
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list