Skip to content

Commit 6a1048c

Browse files
author
tonic
committed
Merge branch 'dev' into 'master'
randomized AllocContainerPlan See merge request !14
2 parents 176b7cf + 363eef8 commit 6a1048c

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

utils/utils.go

+10-6
Original file line numberDiff line numberDiff line change
@@ -130,15 +130,19 @@ func AllocContainerPlan(nodeInfo ByCoreNum, quota int, count int) (map[string]in
130130
for i := flag; i < N; i++ {
131131
result[nodeInfo[i].Name] = ave
132132
}
133+
resLen := int64(len(result))
133134
if remain > 0 {
134135
r:
135136
for {
136-
for node, _ := range result {
137-
result[node] += 1
138-
remain--
139-
if remain <= 0 {
140-
break r
141-
}
137+
// 考虑一种情况:不断申请一个 quota 相同的容器
138+
// 按原来的算法,这个容器会堆积在同一台机上面
139+
// 加入随机化的选择可以避免这种情况
140+
step, _ := rand.Int(rand.Reader, big.NewInt(resLen))
141+
node := nodeInfo[flag+int(step.Int64())].Name
142+
result[node] += 1
143+
remain--
144+
if remain <= 0 {
145+
break r
142146
}
143147
}
144148
}

utils/utils_test.go

+16
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,19 @@ func TestGetGitRepoName(t *testing.T) {
4444
assert.NoError(t, err)
4545
assert.Equal(t, r1, "core")
4646
}
47+
48+
func TestContinuousAddingContainer(t *testing.T) {
49+
testPodInfo := ByCoreNum{}
50+
node1 := NodeInfo{"n1", 20000}
51+
node2 := NodeInfo{"n2", 30000}
52+
// node3 := NodeInfo{"n3", 10000}
53+
testPodInfo = append(testPodInfo, node1)
54+
testPodInfo = append(testPodInfo, node2)
55+
// testPodInfo = append(testPodInfo, node3)
56+
57+
for i := 0; i < 10; i++ {
58+
res, err := AllocContainerPlan(testPodInfo, 10000, 1)
59+
fmt.Println(res)
60+
assert.NoError(t, err)
61+
}
62+
}

0 commit comments

Comments
 (0)