From f942cb2e69a1db5cd332167212088fba3b34987d Mon Sep 17 00:00:00 2001 From: "Jessica B. Hamrick" Date: Mon, 19 Jan 2015 19:04:29 -0800 Subject: [PATCH 1/4] Add test that fails to execute the proper strategy Signed-off-by: Jessica B. Hamrick --- scheduler/strategy/binpacking_test.go | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/scheduler/strategy/binpacking_test.go b/scheduler/strategy/binpacking_test.go index affd2616bf..2f41ce6a4b 100644 --- a/scheduler/strategy/binpacking_test.go +++ b/scheduler/strategy/binpacking_test.go @@ -226,3 +226,36 @@ func TestPlaceContainerDemo(t *testing.T) { assert.Equal(t, node2.ID, node2bis.ID, "") assert.Equal(t, len(node2.Containers()), len(node2bis.Containers()), "") } + +func TestComplexPlacement(t *testing.T) { + s := &BinPackingPlacementStrategy{} + + nodes := []*cluster.Node{} + for i := 0; i < 2; i++ { + nodes = append(nodes, createNode(fmt.Sprintf("node-%d", i), 4, 4)) + } + + // add one container 2G + config := createConfig(2, 0) + node1, err := s.PlaceContainer(config, nodes) + assert.NoError(t, err) + assert.NoError(t, node1.AddContainer(createContainer("c1", config))) + + // add one container 3G + config = createConfig(3, 0) + node2, err := s.PlaceContainer(config, nodes) + assert.NoError(t, err) + assert.NoError(t, node2.AddContainer(createContainer("c2", config))) + + // check that they end up on separate nodes + assert.NotEqual(t, node1.ID, node2.ID, "") + + // add one container 1G + config = createConfig(1, 0) + node3, err := s.PlaceContainer(config, nodes) + assert.NoError(t, err) + assert.NoError(t, node3.AddContainer(createContainer("c3", config))) + + // check that it ends up on the same node as the 3G + assert.Equal(t, node2.ID, node3.ID, "") +} From 11ebdb050c4078b0cfadd4fa06b40c63e40542fd Mon Sep 17 00:00:00 2001 From: "Jessica B. Hamrick" Date: Mon, 19 Jan 2015 19:11:20 -0800 Subject: [PATCH 2/4] Fix the scheduling bug, fixes #253 Signed-off-by: Jessica B. Hamrick --- scheduler/strategy/binpacking.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scheduler/strategy/binpacking.go b/scheduler/strategy/binpacking.go index 9dba25a19d..52203d6fd0 100644 --- a/scheduler/strategy/binpacking.go +++ b/scheduler/strategy/binpacking.go @@ -41,7 +41,7 @@ func (p *BinPackingPlacementStrategy) PlaceContainer(config *dockerclient.Contai if config.Memory > 0 { memoryScore = (node.ReservedMemory() + config.Memory) * 100 / nodeMemory } - var total = ((cpuScore + memoryScore) / 200) * 100 + var total = (cpuScore + memoryScore) / 2 if cpuScore <= 100 && memoryScore <= 100 { scores = append(scores, &score{node: node, score: total}) From 63109bb0f23931c82d49d10bb208731023f0049e Mon Sep 17 00:00:00 2001 From: "Jessica B. Hamrick" Date: Tue, 20 Jan 2015 11:42:02 -0800 Subject: [PATCH 3/4] Remove total variable Signed-off-by: Jessica B. Hamrick --- scheduler/strategy/binpacking.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scheduler/strategy/binpacking.go b/scheduler/strategy/binpacking.go index 52203d6fd0..3dbbc217db 100644 --- a/scheduler/strategy/binpacking.go +++ b/scheduler/strategy/binpacking.go @@ -41,10 +41,9 @@ func (p *BinPackingPlacementStrategy) PlaceContainer(config *dockerclient.Contai if config.Memory > 0 { memoryScore = (node.ReservedMemory() + config.Memory) * 100 / nodeMemory } - var total = (cpuScore + memoryScore) / 2 if cpuScore <= 100 && memoryScore <= 100 { - scores = append(scores, &score{node: node, score: total}) + scores = append(scores, &score{node: node, score: cpuScore + memoryScore}) } } From 634dd00497c128687b9c2b0d6c33853444b3448b Mon Sep 17 00:00:00 2001 From: "Jessica B. Hamrick" Date: Tue, 20 Jan 2015 15:07:57 -0800 Subject: [PATCH 4/4] Remove unnecessary arguments from Equal and NotEqual Signed-off-by: Jessica B. Hamrick --- scheduler/strategy/binpacking_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scheduler/strategy/binpacking_test.go b/scheduler/strategy/binpacking_test.go index 2f41ce6a4b..6a46e443f4 100644 --- a/scheduler/strategy/binpacking_test.go +++ b/scheduler/strategy/binpacking_test.go @@ -248,7 +248,7 @@ func TestComplexPlacement(t *testing.T) { assert.NoError(t, node2.AddContainer(createContainer("c2", config))) // check that they end up on separate nodes - assert.NotEqual(t, node1.ID, node2.ID, "") + assert.NotEqual(t, node1.ID, node2.ID) // add one container 1G config = createConfig(1, 0) @@ -257,5 +257,5 @@ func TestComplexPlacement(t *testing.T) { assert.NoError(t, node3.AddContainer(createContainer("c3", config))) // check that it ends up on the same node as the 3G - assert.Equal(t, node2.ID, node3.ID, "") + assert.Equal(t, node2.ID, node3.ID) }