[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