Skip to content

Commit a4ef3b0

Browse files
authored
fix: jobinfo clone, duplicated task resource (#349)
1 parent 7a5b67e commit a4ef3b0

File tree

2 files changed

+70
-8
lines changed

2 files changed

+70
-8
lines changed

pkg/controller/clusterstate/api/job_info.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ package api
3232

3333
import (
3434
"fmt"
35-
"k8s.io/api/core/v1"
35+
36+
v1 "k8s.io/api/core/v1"
3637
"k8s.io/apimachinery/pkg/types"
3738
"k8s.io/klog/v2"
3839

@@ -252,18 +253,20 @@ func (ps *JobInfo) Clone() *JobInfo {
252253
UID: ps.UID,
253254
Name: ps.Name,
254255
Namespace: ps.Namespace,
256+
Priority: ps.Priority,
255257

256258
MinAvailable: ps.MinAvailable,
257-
NodeSelector: map[string]string{},
258-
Allocated: ps.Allocated.Clone(),
259-
TotalRequest: ps.TotalRequest.Clone(),
259+
Allocated: EmptyResource(),
260+
TotalRequest: EmptyResource(),
260261

261262
TaskStatusIndex: map[TaskStatus]tasksMap{},
262263
Tasks: tasksMap{},
263264
}
264-
265-
for k, v := range ps.NodeSelector {
266-
info.NodeSelector[k] = v
265+
if ps.NodeSelector != nil {
266+
info.NodeSelector = map[string]string{}
267+
for k, v := range ps.NodeSelector {
268+
info.NodeSelector[k] = v
269+
}
267270
}
268271

269272
for _, task := range ps.Tasks {

pkg/controller/clusterstate/api/job_info_test.go

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import (
3434
"reflect"
3535
"testing"
3636

37-
"k8s.io/api/core/v1"
37+
v1 "k8s.io/api/core/v1"
3838
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3939
)
4040

@@ -206,3 +206,62 @@ func TestDeleteTaskInfo(t *testing.T) {
206206
}
207207
}
208208
}
209+
210+
func TestCloneJob(t *testing.T) {
211+
case01UID := JobID("job_1")
212+
case01Ns := "c1"
213+
case01_owner := buildOwnerReference("uid")
214+
215+
case01Pod1 := buildPod("c1", "p1", "", v1.PodPending, buildResourceList("1000m", "1G"), []metav1.OwnerReference{case01_owner}, make(map[string]string))
216+
case01Pod2 := buildPod("c1", "p2", "n1", v1.PodRunning, buildResourceList("2000m", "2G"), []metav1.OwnerReference{case01_owner}, make(map[string]string))
217+
case01Pod3 := buildPod("c1", "p3", "n1", v1.PodPending, buildResourceList("1000m", "1G"), []metav1.OwnerReference{case01_owner}, make(map[string]string))
218+
case01Pod4 := buildPod("c1", "p4", "n1", v1.PodPending, buildResourceList("1000m", "1G"), []metav1.OwnerReference{case01_owner}, make(map[string]string))
219+
case01Task1 := NewTaskInfo(case01Pod1)
220+
case01Task2 := NewTaskInfo(case01Pod2)
221+
case01Task3 := NewTaskInfo(case01Pod3)
222+
case01Task4 := NewTaskInfo(case01Pod4)
223+
224+
tests := []struct {
225+
name string
226+
expected *JobInfo
227+
}{
228+
{
229+
name: "add 1 pending owner pod, 1 running owner pod",
230+
expected: &JobInfo{
231+
UID: case01UID,
232+
Name: "job_1",
233+
Namespace: case01Ns,
234+
MinAvailable: 1,
235+
236+
Allocated: buildResource("4000m", "4G"),
237+
TotalRequest: buildResource("5000m", "5G"),
238+
Tasks: tasksMap{
239+
case01Task1.UID: case01Task1,
240+
case01Task2.UID: case01Task2,
241+
case01Task3.UID: case01Task3,
242+
case01Task4.UID: case01Task4,
243+
},
244+
TaskStatusIndex: map[TaskStatus]tasksMap{
245+
Running: {
246+
case01Task2.UID: case01Task2,
247+
},
248+
Pending: {
249+
case01Task1.UID: case01Task1,
250+
},
251+
Bound: {
252+
case01Task3.UID: case01Task3,
253+
case01Task4.UID: case01Task4,
254+
},
255+
},
256+
},
257+
},
258+
}
259+
260+
for i, test := range tests {
261+
clone := test.expected.Clone()
262+
//assert.Equal(t, test.expected, clone)
263+
if !jobInfoEqual(clone, test.expected) {
264+
t.Errorf("clone info %d: \n expected: %v, \n got: %v \n", i, test.expected, clone)
265+
}
266+
}
267+
}

0 commit comments

Comments
 (0)