zoukankan      html  css  js  c++  java
  • Volcano 调度器

    root@ubuntu:~# kubectl apply -f job.yaml
    job.batch.volcano.sh/test-job created

    先触发AddPodGroupV1beta1AddPod

    AddPod

    其中 AddPod 会干以下几件事:

    • 对 pod 生成一个对应的 taskInfo,并生成一个 jobID。
    • 如果在 schedulerCache 的 jobs 没有这个 jobID,创建这个 jobInfo,然后把这个 task 放到 job.Tasks 中。
    • 如果已经分配了 node,也会在 schedulerCache的 nodes 里面记录这个task。

    pod 和taskinfo

    // Assumes that lock is already acquired.
    func (sc *SchedulerCache) addPod(pod *v1.Pod) error {
            pi := schedulingapi.NewTaskInfo(pod)
    
            return sc.addTask(pi)
    }
    (dlv) b AddPod
    Command failed: Location "AddPod" ambiguous: volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPod, k8s.io/kubernetes/pkg/scheduler/nodeinfo.(*NodeInfo).AddPod, k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity.(*InterPodAffinity).AddPod…
    (dlv) b cache.(*SchedulerCache).AddPod
    Breakpoint 2 (enabled) set at 0xea9920 for volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPod() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:179
    (dlv) b AddPodGroupV1beta1
    Breakpoint 3 (enabled) set at 0xeab240 for volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393 (hits goroutine(289):1 total:1) (PC: 0xeab240)
    Warning: debugging optimized function
    (dlv) bt
     0  0x0000000000eab240 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393
     1  0x0000000000eaeb68 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393
     2  0x0000000000c9ccc8 in k8s.io/client-go/tools/cache.(*ResourceEventHandlerFuncs).OnAdd
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/controller.go:218
     3  0x0000000000c9aed8 in k8s.io/client-go/tools/cache.(*processorListener).run.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:744
     4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
     5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
     6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
     7  0x0000000000c96220 in k8s.io/apimachinery/pkg/util/wait.Until
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
     8  0x0000000000c96220 in k8s.io/client-go/tools/cache.(*processorListener).run
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:738
     9  0x0000000000c9c8c8 in k8s.io/client-go/tools/cache.(*processorListener).run-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:732
    10  0x0000000000339a44 in k8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:73
    11  0x0000000000073ff4 in runtime.goexit
        at /usr/local/go/src/runtime/asm_arm64.s:1148
    (dlv) p obj
    interface {}(*volcano.sh/volcano/pkg/apis/scheduling/v1beta1.PodGroup) *{
            TypeMeta: k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta {Kind: "", APIVersion: ""},
            ObjectMeta: k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
                    Name: "test-job",
                    GenerateName: "",
                    Namespace: "default",
                    SelfLink: "/apis/scheduling.volcano.sh/v1beta1/namespaces/default/podgroups...+9 more",
                    UID: "513b55a7-d2f5-4ce4-9598-8057258eb86f",
                    ResourceVersion: "3023789",
                    Generation: 1,
                    CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x4000b59d08),
                    DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                    DeletionGracePeriodSeconds: *int64 nil,
                    Labels: map[string]string nil,
                    Annotations: map[string]string [...],
                    OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                            (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x4000baa140),
                    ],
                    Finalizers: []string len: 0, cap: 0, nil,
                    ClusterName: "",
                    ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                            (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x4000baa0f0),
                    ],},
            Spec: volcano.sh/volcano/pkg/apis/scheduling/v1beta1.PodGroupSpec {
                    MinMember: 3,
                    Queue: "default",
                    PriorityClassName: "",
                    MinResources: *k8s.io/api/core/v1.ResourceList [...],},
            Status: volcano.sh/volcano/pkg/apis/scheduling/v1beta1.PodGroupStatus {
                    Phase: "",
                    Conditions: []volcano.sh/volcano/pkg/apis/scheduling/v1beta1.PodGroupCondition len: 0, cap: 0, nil,
                    Running: 0,
                    Succeeded: 0,
                    Failed: 0,},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPod() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:179 (hits goroutine(174):1 total:1) (PC: 0xea9920)
    Warning: debugging optimized function
    (dlv) bt
     0  0x0000000000ea9920 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPod
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:179
     1  0x0000000000eae868 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPod-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:179
     2  0x0000000000c9ccc8 in k8s.io/client-go/tools/cache.(*ResourceEventHandlerFuncs).OnAdd
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/controller.go:218
     3  0x0000000000c8ab54 in k8s.io/client-go/tools/cache.FilteringResourceEventHandler.OnAdd
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/controller.go:250
     4  0x0000000000c9ca18 in k8s.io/client-go/tools/cache.(*FilteringResourceEventHandler).OnAdd
        at <autogenerated>:1
     5  0x0000000000c9aed8 in k8s.io/client-go/tools/cache.(*processorListener).run.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:744
     6  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
     7  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
     8  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
     9  0x0000000000c96220 in k8s.io/apimachinery/pkg/util/wait.Until
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
    10  0x0000000000c96220 in k8s.io/client-go/tools/cache.(*processorListener).run
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:738
    11  0x0000000000c9c8c8 in k8s.io/client-go/tools/cache.(*processorListener).run-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:732
    12  0x0000000000339a44 in k8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:73
    13  0x0000000000073ff4 in runtime.goexit
        at /usr/local/go/src/runtime/asm_arm64.s:1148
    (dlv) p obj
    interface {}(*k8s.io/api/core/v1.Pod) *{
            TypeMeta: k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta {Kind: "", APIVersion: ""},
            ObjectMeta: k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
                    Name: "test-job-default-nginx-4",
                    GenerateName: "",
                    Namespace: "default",
                    SelfLink: "/api/v1/namespaces/default/pods/test-job-default-nginx-4",
                    UID: "f7871ad6-f9ac-44d9-8e78-ecb3ece1bfa2",
                    ResourceVersion: "3024173",
                    Generation: 0,
                    CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x4000686c88),
                    DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                    DeletionGracePeriodSeconds: *int64 nil,
                    Labels: map[string]string [...],
                    Annotations: map[string]string [...],
                    OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                            (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x400081aa00),
                    ],
                    Finalizers: []string len: 0, cap: 0, nil,
                    ClusterName: "",
                    ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                            (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x400081aaa0),
                    ],},
            Spec: k8s.io/api/core/v1.PodSpec {
                    Volumes: []k8s.io/api/core/v1.Volume len: 3, cap: 4, [
                            (*"k8s.io/api/core/v1.Volume")(0x4000687000),
                            (*"k8s.io/api/core/v1.Volume")(0x40006870f0),
                            (*"k8s.io/api/core/v1.Volume")(0x40006871e0),
                    ],
                    InitContainers: []k8s.io/api/core/v1.Container len: 0, cap: 0, nil,
                    Containers: []k8s.io/api/core/v1.Container len: 1, cap: 1, [
                            (*"k8s.io/api/core/v1.Container")(0x4000512000),
                    ],
                    EphemeralContainers: []k8s.io/api/core/v1.EphemeralContainer len: 0, cap: 0, nil,
                    RestartPolicy: "OnFailure",
                    TerminationGracePeriodSeconds: *30,
                    ActiveDeadlineSeconds: *int64 nil,
                    DNSPolicy: "ClusterFirst",
                    NodeSelector: map[string]string nil,
                    ServiceAccountName: "default",
                    DeprecatedServiceAccount: "default",
                    AutomountServiceAccountToken: *bool nil,
                    NodeName: "",
                    HostNetwork: false,
                    HostPID: false,
                    HostIPC: false,
                    ShareProcessNamespace: *bool nil,
                    SecurityContext: *(*"k8s.io/api/core/v1.PodSecurityContext")(0x400026e540),
                    ImagePullSecrets: []k8s.io/api/core/v1.LocalObjectReference len: 0, cap: 0, nil,
                    Hostname: "test-job-default-nginx-4",
                    Subdomain: "test-job",
                    Affinity: *k8s.io/api/core/v1.Affinity nil,
                    SchedulerName: "volcano",
                    Tolerations: []k8s.io/api/core/v1.Toleration len: 2, cap: 2, [
                            (*"k8s.io/api/core/v1.Toleration")(0x40008da2d0),
                            (*"k8s.io/api/core/v1.Toleration")(0x40008da318),
                    ],
                    HostAliases: []k8s.io/api/core/v1.HostAlias len: 0, cap: 0, nil,
                    PriorityClassName: "",
                    Priority: *0,
                    DNSConfig: *k8s.io/api/core/v1.PodDNSConfig nil,
                    ReadinessGates: []k8s.io/api/core/v1.PodReadinessGate len: 0, cap: 0, nil,
                    RuntimeClassName: *string nil,
                    EnableServiceLinks: *true,
                    PreemptionPolicy: *k8s.io/api/core/v1.PreemptionPolicy nil,
                    Overhead: k8s.io/api/core/v1.ResourceList nil,
                    TopologySpreadConstraints: []k8s.io/api/core/v1.TopologySpreadConstraint len: 0, cap: 0, nil,},
            Status: k8s.io/api/core/v1.PodStatus {
                    Phase: "Pending",
                    Conditions: []k8s.io/api/core/v1.PodCondition len: 0, cap: 0, nil,
                    Message: "",
                    Reason: "",
                    NominatedNodeName: "",
                    HostIP: "",
                    PodIP: "",
                    PodIPs: []k8s.io/api/core/v1.PodIP len: 0, cap: 0, nil,
                    StartTime: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                    InitContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
                    ContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
                    QOSClass: "Burstable",
                    EphemeralContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,},}
    (dlv) b getOrCreateJob
    Breakpoint 4 (enabled) set at 0xea8a20 for volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).getOrCreateJob() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:43
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).getOrCreateJob() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:43 (hits goroutine(174):1 total:1) (PC: 0xea8a20)
    Warning: debugging optimized function
    (dlv) bt
     0  0x0000000000ea8a20 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).getOrCreateJob
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:43
     1  0x0000000000ea8cc0 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).addTask
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:60
     2  0x0000000000ea8e54 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).addPod
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:83
     3  0x0000000000ea99a4 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPod
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:189
     4  0x0000000000eae868 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPod-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:179
     5  0x0000000000c9ccc8 in k8s.io/client-go/tools/cache.(*ResourceEventHandlerFuncs).OnAdd
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/controller.go:218
     6  0x0000000000c8ab54 in k8s.io/client-go/tools/cache.FilteringResourceEventHandler.OnAdd
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/controller.go:250
     7  0x0000000000c9ca18 in k8s.io/client-go/tools/cache.(*FilteringResourceEventHandler).OnAdd
        at <autogenerated>:1
     8  0x0000000000c9aed8 in k8s.io/client-go/tools/cache.(*processorListener).run.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:744
     9  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
    10  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
    11  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
    12  0x0000000000c96220 in k8s.io/apimachinery/pkg/util/wait.Until
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
    13  0x0000000000c96220 in k8s.io/client-go/tools/cache.(*processorListener).run
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:738
    14  0x0000000000c9c8c8 in k8s.io/client-go/tools/cache.(*processorListener).run-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:732
    15  0x0000000000339a44 in k8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:73
    16  0x0000000000073ff4 in runtime.goexit
        at /usr/local/go/src/runtime/asm_arm64.s:1148
    (dlv) p  sc.Jobs[pi.Job]
    *volcano.sh/volcano/pkg/scheduler/api.JobInfo {
            UID: "default/test-job",
            Name: "test-job",
            Namespace: "default",
            Queue: "default",
            Priority: 0,
            MinAvailable: 3,
            NodesFitDelta: volcano.sh/volcano/pkg/scheduler/api.NodeResourceMap [],
            JobFitErrors: "",
            NodesFitErrors: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.FitErrors [],
            TaskStatusIndex: map[volcano.sh/volcano/pkg/scheduler/api.TaskStatus]volcano.sh/volcano/pkg/scheduler/api.tasksMap [],
            Tasks: volcano.sh/volcano/pkg/scheduler/api.tasksMap [],
            Allocated: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 0,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            TotalRequest: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 0,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                    Time: (*time.Time)(0x4000306138),},
            PodGroup: *volcano.sh/volcano/pkg/scheduler/api.PodGroup {
                    PodGroup: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroup")(0x400020a340),
                    Version: "v1beta1",},}
    (dlv) p  sc.Jobs[pi.Job].PodGroup
    *volcano.sh/volcano/pkg/scheduler/api.PodGroup {
            PodGroup: volcano.sh/volcano/pkg/apis/scheduling.PodGroup {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400020a340),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400020a360),
                    Spec: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroupSpec")(0x400020a458),
                    Status: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroupStatus")(0x400020a488),},
            Version: "v1beta1",}
    (dlv) p  sc.Jobs[pi.Job].PodGroup.ObjectMeta
    k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
            Name: "test-job",
            GenerateName: "",
            Namespace: "default",
            SelfLink: "/apis/scheduling.volcano.sh/v1beta1/namespaces/default/podgroups...+9 more",
            UID: "513b55a7-d2f5-4ce4-9598-8057258eb86f",
            ResourceVersion: "3024170",
            Generation: 3,
            CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                    Time: (*time.Time)(0x400020a3c8),},
            DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
            DeletionGracePeriodSeconds: *int64 nil,
            Labels: map[string]string nil,
            Annotations: map[string]string [
                    "kubectl.kubernetes.io/last-applied-configuration": "{"apiVersion":"batch.volcano.sh/v1alpha1","kind":"Job","metadata...+484 more", 
            ],
            OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                    (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x400081a640),
            ],
            Finalizers: []string len: 0, cap: 0, nil,
            ClusterName: "",
            ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 2, cap: 2, [
                    (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x4000229180),
                    (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x40002291d0),
            ],}
    (dlv) 
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPod() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:179 (hits goroutine(174):2 total:2) (PC: 0xea9920)
    Warning: debugging optimized function
    (dlv) p obj
    interface {}(*k8s.io/api/core/v1.Pod) *{
            TypeMeta: k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta {Kind: "", APIVersion: ""},
            ObjectMeta: k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
                    Name: "test-job-default-nginx-3",
                    GenerateName: "",
                    Namespace: "default",
                    SelfLink: "/api/v1/namespaces/default/pods/test-job-default-nginx-3",
                    UID: "a1a6c98d-6c8c-4ac7-94be-b739068c9f20",
                    ResourceVersion: "3024174",
                    Generation: 0,
                    CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x4000687488),
                    DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                    DeletionGracePeriodSeconds: *int64 nil,
                    Labels: map[string]string [...],
                    Annotations: map[string]string [...],
                    OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                            (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x400081ad20),
                    ],
                    Finalizers: []string len: 0, cap: 0, nil,
                    ClusterName: "",
                    ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                            (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x400081ae60),
                    ],},
            Spec: k8s.io/api/core/v1.PodSpec {
                    Volumes: []k8s.io/api/core/v1.Volume len: 3, cap: 4, [
                            (*"k8s.io/api/core/v1.Volume")(0x4000a5e000),
                            (*"k8s.io/api/core/v1.Volume")(0x4000a5e0f0),
                            (*"k8s.io/api/core/v1.Volume")(0x4000a5e1e0),
                    ],

    job什么时候创建的

    如果是触发了AddPodGroupV1beta1 会做以下几件事:

    • 也会找schedulerCache jobs 里面有没有这个 podgroup 对应的 job,没有就创建一下。
    • 然后把 podgroup 的信息(MinAvailable,Queue)等传递给 JobInfo

    可以认为看到pod,podgroup 的创建,eventHandler 会在 schedulerCache 的 jobs 增加一个对应 jobInfo。

    (dlv) bt
     0  0x0000000000e9a620 in volcano.sh/volcano/pkg/scheduler/api.NewJobInfo
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:154
     1  0x0000000000eab088 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).setPodGroup
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:359
     2  0x0000000000eab418 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:412
     3  0x0000000000eaeb68 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393
     4  0x0000000000c9ccc8 in k8s.io/client-go/tools/cache.(*ResourceEventHandlerFuncs).OnAdd
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/controller.go:218
     5  0x0000000000c9aed8 in k8s.io/client-go/tools/cache.(*processorListener).run.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:744
     6  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
     7  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
     8  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
     9  0x0000000000c96220 in k8s.io/apimachinery/pkg/util/wait.Until
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
    10  0x0000000000c96220 in k8s.io/client-go/tools/cache.(*processorListener).run
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:738
    11  0x0000000000c9c8c8 in k8s.io/client-go/tools/cache.(*processorListener).run-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:732
    12  0x0000000000339a44 in k8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:73
    13  0x0000000000073ff4 in runtime.goexit
        at /usr/local/go/src/runtime/asm_arm64.s:1148
    type JobInfo struct {
       UID JobID
    
       Name      string
       Namespace string
    
       Queue QueueID
    
       Priority int32
    
       MinAvailable int32
    
       JobFitErrors   string
       NodesFitErrors map[TaskID]*FitErrors
    
       // All tasks of the Job.
       TaskStatusIndex map[TaskStatus]tasksMap
       Tasks           tasksMap
    
       Allocated    *Resource
       TotalRequest *Resource
    
       CreationTimestamp metav1.Time
       PodGroup          *PodGroup
    
       ScheduleStartTimestamp metav1.Time
    }
    
    type tasksMap map[TaskID]*TaskInfo
    
    type TaskInfo struct {
        UID TaskID
        Job JobID
    
        Name      string
        Namespace string
    
        // Resreq is the resource that used when task running.
        Resreq *Resource
        // InitResreq is the resource that used to launch a task.
        InitResreq *Resource
    
        NodeName    string
        Status      TaskStatus
        Priority    int32
        VolumeReady bool
    
        Pod *v1.Pod
    }

    可以看到 JobInfo 主要有一个 map[TaskID]*TaskInfo 的 taskmap 记录工作负载信息,同时记录了 podgroup 和 queue 的信息方便相互查询。TaskInfo 是一个pod 信息的封装,主要添加了 JobID,保证可以通过 task 找到所属的 jobInfo。下面 NodeInfo 会通过 tasks 记录在 node 上运行的工作负载,同时记录不同资源的使用情况。queueInfo 则是记录队列资源(queue)的状态。

    root@ubuntu:~# kubectl apply  -f job.yaml 
    job.batch.volcano.sh/test-job created
    root@ubuntu:~# kubectl get jobs
    No resources found in default namespace.
    root@ubuntu:~# kubectl get pods
    NAME                           READY   STATUS      RESTARTS   AGE
    example-foo-54dc4db9fc-lqz9j   1/1     Running     0          4d19h
    job-1-nginx-0                  0/1     Completed   0          7d4h
    root@ubuntu:~# 
    root@ubuntu:~# cat job.yaml 
    apiVersion: batch.volcano.sh/v1alpha1
    kind: Job
    metadata:
      name: test-job
    spec:
      minAvailable: 3
      schedulerName: volcano
      policies:
        - event: PodEvicted
          action: RestartJob
      plugins:
        ssh: []
        env: []
        svc: []
      maxRetry: 5
      queue: default
      # Comment out the following section to enable volumes for job input/output.
      #volumes:
      #  - mountPath: "/myinput"
      #  - mountPath: "/myoutput"
      #    volumeClaimName: "testvolumeclaimname"
      #    volumeClaim:
      #      accessModes: [ "ReadWriteOnce" ]
      #      storageClassName: "my-storage-class"
      #      resources:
      #        requests:
      #          storage: 1Gi
      tasks:
        - replicas: 6
          name: "default-nginx"
          template:
            metadata:
              name: web
            spec:
              containers:
                - image: nginx
                  imagePullPolicy: IfNotPresent
                  name: nginx
                  resources:
                    requests:
                      cpu: "1"
              restartPolicy: OnFailure
    / NewJobInfo creates a new jobInfo for set of tasks
    func NewJobInfo(uid JobID, tasks ...*TaskInfo) *JobInfo {
            job := &JobInfo{
                    UID:              uid,
                    MinAvailable:     0,
                    NodesFitErrors:   make(map[TaskID]*FitErrors),
                    Allocated:        EmptyResource(),
                    TotalRequest:     EmptyResource(),
                    TaskStatusIndex:  map[TaskStatus]tasksMap{},
                    Tasks:            tasksMap{},
                    TaskMinAvailable: map[TaskID]int32{},
            }
    
            for _, task := range tasks {
                    job.AddTaskInfo(task)
            }
    
            return job
    }
    (dlv) b cache.(*SchedulerCache).AddPodGroupV1beta1
    Breakpoint 1 (enabled) set at 0xeab240 for volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393
    (dlv) b NewJobInfo
    Breakpoint 2 (enabled) set at 0xe9a620 for volcano.sh/volcano/pkg/scheduler/api.NewJobInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:154
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393 (hits goroutine(289):1 total:1) (PC: 0xeab240)
    Warning: debugging optimized function
    (dlv) p sc
    *volcano.sh/volcano/pkg/scheduler/cache.SchedulerCache {
            Mutex: sync.Mutex {state: 0, sema: 0},
            kubeClient: *k8s.io/client-go/kubernetes.Clientset {
                    DiscoveryClient: *(*"k8s.io/client-go/discovery.DiscoveryClient")(0x40005761c0),
                    admissionregistrationV1: *(*"k8s.io/client-go/kubernetes/typed/admissionregistration/v1.AdmissionregistrationV1Client")(0x400050f380),
                    admissionregistrationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1.AdmissionregistrationV1beta1Client")(0x400050f3e0),
                    appsV1: *(*"k8s.io/client-go/kubernetes/typed/apps/v1.AppsV1Client")(0x400050f440),
                    appsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/apps/v1beta1.AppsV1beta1Client")(0x400050f4a0),
                    appsV1beta2: *(*"k8s.io/client-go/kubernetes/typed/apps/v1beta2.AppsV1beta2Client")(0x400050f500),
                    auditregistrationV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1.AuditregistrationV1alpha1Client")(0x400050f560),
                    authenticationV1: *(*"k8s.io/client-go/kubernetes/typed/authentication/v1.AuthenticationV1Client")(0x400050f5c0),
                    authenticationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/authentication/v1beta1.AuthenticationV1beta1Client")(0x400050f620),
                    authorizationV1: *(*"k8s.io/client-go/kubernetes/typed/authorization/v1.AuthorizationV1Client")(0x400050f680),
                    authorizationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/authorization/v1beta1.AuthorizationV1beta1Client")(0x400050f6e0),
                    autoscalingV1: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v1.AutoscalingV1Client")(0x400050f740),
                    autoscalingV2beta1: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1.AutoscalingV2beta1Client")(0x400050f7a0),
                    autoscalingV2beta2: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2.AutoscalingV2beta2Client")(0x400050f800),
                    batchV1: *(*"k8s.io/client-go/kubernetes/typed/batch/v1.BatchV1Client")(0x400050f860),
                    batchV1beta1: *(*"k8s.io/client-go/kubernetes/typed/batch/v1beta1.BatchV1beta1Client")(0x400050f8c0),
                    batchV2alpha1: *(*"k8s.io/client-go/kubernetes/typed/batch/v2alpha1.BatchV2alpha1Client")(0x400050f920),
                    certificatesV1beta1: *(*"k8s.io/client-go/kubernetes/typed/certificates/v1beta1.CertificatesV1beta1Client")(0x400050f980),
                    coordinationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/coordination/v1beta1.CoordinationV1beta1Client")(0x400050f9e0),
                    coordinationV1: *(*"k8s.io/client-go/kubernetes/typed/coordination/v1.CoordinationV1Client")(0x400050fa40),
                    coreV1: *(*"k8s.io/client-go/kubernetes/typed/core/v1.CoreV1Client")(0x400050faa0),
                    discoveryV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/discovery/v1alpha1.DiscoveryV1alpha1Client")(0x400050fb00),
                    discoveryV1beta1: *(*"k8s.io/client-go/kubernetes/typed/discovery/v1beta1.DiscoveryV1beta1Client")(0x400050fb60),
                    eventsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/events/v1beta1.EventsV1beta1Client")(0x400050fbc0),
                    extensionsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/extensions/v1beta1.ExtensionsV1beta1Client")(0x400050fc20),
                    flowcontrolV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1.FlowcontrolV1alpha1Client")(0x400050fc80),
                    networkingV1: *(*"k8s.io/client-go/kubernetes/typed/networking/v1.NetworkingV1Client")(0x400050fce0),
                    networkingV1beta1: *(*"k8s.io/client-go/kubernetes/typed/networking/v1beta1.NetworkingV1beta1Client")(0x400050fd40),
                    nodeV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/node/v1alpha1.NodeV1alpha1Client")(0x400050fda0),
                    nodeV1beta1: *(*"k8s.io/client-go/kubernetes/typed/node/v1beta1.NodeV1beta1Client")(0x400050fe00),
                    policyV1beta1: *(*"k8s.io/client-go/kubernetes/typed/policy/v1beta1.PolicyV1beta1Client")(0x400050fe60),
                    rbacV1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1.RbacV1Client")(0x400050fec0),
                    rbacV1beta1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1beta1.RbacV1beta1Client")(0x400050ff20),
                    rbacV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1alpha1.RbacV1alpha1Client")(0x400050ff80),
                    schedulingV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1.SchedulingV1alpha1Client")(0x400050ffe0),
                    schedulingV1beta1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1beta1.SchedulingV1beta1Client")(0x400056e040),
                    schedulingV1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1.SchedulingV1Client")(0x400056e0a0),
                    settingsV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/settings/v1alpha1.SettingsV1alpha1Client")(0x400056e100),
                    storageV1beta1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1beta1.StorageV1beta1Client")(0x400056e160),
                    storageV1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1.StorageV1Client")(0x400056e1c0),
                    storageV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1alpha1.StorageV1alpha1Client")(0x400056e220),},
            vcClient: *volcano.sh/volcano/pkg/client/clientset/versioned.Clientset {
                    DiscoveryClient: *(*"k8s.io/client-go/discovery.DiscoveryClient")(0x4000576480),
                    batchV1alpha1: *(*"volcano.sh/volcano/pkg/client/clientset/versioned/typed/batch/v1alpha1.BatchV1alpha1Client")(0x400056e330),
                    busV1alpha1: *(*"volcano.sh/volcano/pkg/client/clientset/versioned/typed/bus/v1alpha1.BusV1alpha1Client")(0x400056e390),
                    schedulingV1beta1: *(*"volcano.sh/volcano/pkg/client/clientset/versioned/typed/scheduling/v1beta1.SchedulingV1beta1Client")(0x400056e3f0),},
            defaultQueue: "default",
            schedulerName: "volcano",
            podInformer: k8s.io/client-go/informers/core/v1.PodInformer(*k8s.io/client-go/informers/core/v1.podInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,
                    namespace: "",},
            nodeInformer: k8s.io/client-go/informers/core/v1.NodeInformer(*k8s.io/client-go/informers/core/v1.nodeInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,},
            podGroupInformerV1beta1: volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.PodGroupInformer(*volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.podGroupInformer) *{
                    factory: volcano.sh/volcano/pkg/client/informers/externalversions/internalinterfaces.SharedInformerFactory(*volcano.sh/volcano/pkg/client/informers/externalversions.sharedInformerFactory) ...,
                    tweakListOptions: nil,
                    namespace: "",},
            queueInformerV1beta1: volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.QueueInformer(*volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.queueInformer) *{
                    factory: volcano.sh/volcano/pkg/client/informers/externalversions/internalinterfaces.SharedInformerFactory(*volcano.sh/volcano/pkg/client/informers/externalversions.sharedInformerFactory) ...,
                    tweakListOptions: nil,},
            pvInformer: k8s.io/client-go/informers/core/v1.PersistentVolumeInformer(*k8s.io/client-go/informers/core/v1.persistentVolumeInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,},
            pvcInformer: k8s.io/client-go/informers/core/v1.PersistentVolumeClaimInformer(*k8s.io/client-go/informers/core/v1.persistentVolumeClaimInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,
                    namespace: "",},
            scInformer: k8s.io/client-go/informers/storage/v1.StorageClassInformer(*k8s.io/client-go/informers/storage/v1.storageClassInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,},
            pcInformer: k8s.io/client-go/informers/scheduling/v1beta1.PriorityClassInformer(*k8s.io/client-go/informers/scheduling/v1beta1.priorityClassInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,},
            quotaInformer: k8s.io/client-go/informers/core/v1.ResourceQuotaInformer(*k8s.io/client-go/informers/core/v1.resourceQuotaInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,
                    namespace: "",},
            Binder: volcano.sh/volcano/pkg/scheduler/cache.Binder(*volcano.sh/volcano/pkg/scheduler/cache.defaultBinder) *{
                    kubeclient: *(*"k8s.io/client-go/kubernetes.Clientset")(0x4000548160),},
            Evictor: volcano.sh/volcano/pkg/scheduler/cache.Evictor(*volcano.sh/volcano/pkg/scheduler/cache.defaultEvictor) *{
                    kubeclient: *(*"k8s.io/client-go/kubernetes.Clientset")(0x4000548160),
                    recorder: k8s.io/client-go/tools/record.EventRecorder(*k8s.io/client-go/tools/record.recorderImpl) ...,},
            StatusUpdater: volcano.sh/volcano/pkg/scheduler/cache.StatusUpdater(*volcano.sh/volcano/pkg/scheduler/cache.defaultStatusUpdater) *{
                    kubeclient: *(*"k8s.io/client-go/kubernetes.Clientset")(0x4000548160),
                    vcclient: *(*"volcano.sh/volcano/pkg/client/clientset/versioned.Clientset")(0x4000576200),},
            VolumeBinder: volcano.sh/volcano/pkg/scheduler/cache.VolumeBinder(*volcano.sh/volcano/pkg/scheduler/cache.defaultVolumeBinder) *{
                    volumeBinder: k8s.io/kubernetes/pkg/controller/volume/scheduling.SchedulerVolumeBinder(*k8s.io/kubernetes/pkg/controller/volume/scheduling.volumeBinder) ...,},
            Recorder: k8s.io/client-go/tools/record.EventRecorder(*k8s.io/client-go/tools/record.recorderImpl) *{
                    scheme: *(*"k8s.io/apimachinery/pkg/runtime.Scheme")(0x4000509110),
                    source: (*"k8s.io/api/core/v1.EventSource")(0x400013a8c8),
                    Broadcaster: *(*"k8s.io/apimachinery/pkg/watch.Broadcaster")(0x400013a840),
                    clock: k8s.io/apimachinery/pkg/util/clock.Clock(k8s.io/apimachinery/pkg/util/clock.RealClock) *(*"k8s.io/apimachinery/pkg/util/clock.Clock")(0x400013a8f0),},
            Jobs: map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [
                    "default/job-1": *(*"volcano.sh/volcano/pkg/scheduler/api.JobInfo")(0x4000666000), 
            ],
            Nodes: map[string]*volcano.sh/volcano/pkg/scheduler/api.NodeInfo [
                    "bogon": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000654880), 
                    "cloud": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000654900), 
                    "centos7": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000654980), 
                    "ubuntu": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000654a00), 
            ],
            Queues: map[volcano.sh/volcano/pkg/scheduler/api.QueueID]*volcano.sh/volcano/pkg/scheduler/api.QueueInfo [
                    "default": *(*"volcano.sh/volcano/pkg/scheduler/api.QueueInfo")(0x400090cf60), 
                    "test": *(*"volcano.sh/volcano/pkg/scheduler/api.QueueInfo")(0x4000721680), 
            ],
            PriorityClasses: map[string]*k8s.io/api/scheduling/v1beta1.PriorityClass [
                    "system-node-critical": *(*"k8s.io/api/scheduling/v1beta1.PriorityClass")(0x4000324a00), 
                    "system-cluster-critical": *(*"k8s.io/api/scheduling/v1beta1.PriorityClass")(0x4000324b38), 
            ],
            defaultPriorityClass: *k8s.io/api/scheduling/v1beta1.PriorityClass nil,
            defaultPriority: 0,
            NamespaceCollection: map[string]*volcano.sh/volcano/pkg/scheduler/api.NamespaceCollection [],
            errTasks: k8s.io/client-go/util/workqueue.RateLimitingInterface(*k8s.io/client-go/util/workqueue.rateLimitingType) *{
                    DelayingInterface: k8s.io/client-go/util/workqueue.DelayingInterface(*k8s.io/client-go/util/workqueue.delayingType) ...,
                    rateLimiter: k8s.io/client-go/util/workqueue.RateLimiter(*k8s.io/client-go/util/workqueue.MaxOfRateLimiter) ...,},
            deletedJobs: k8s.io/client-go/util/workqueue.RateLimitingInterface(*k8s.io/client-go/util/workqueue.rateLimitingType) *{
                    DelayingInterface: k8s.io/client-go/util/workqueue.DelayingInterface(*k8s.io/client-go/util/workqueue.delayingType) ...,
                    rateLimiter: k8s.io/client-go/util/workqueue.RateLimiter(*k8s.io/client-go/util/workqueue.MaxOfRateLimiter) ...,},}
    (dlv) p sc.Jobs
    map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [
            "default/job-1": *{
                    UID: "default/job-1",
                    Name: "",
                    Namespace: "",
                    Queue: "",
                    Priority: 0,
                    MinAvailable: 0,
                    NodesFitDelta: volcano.sh/volcano/pkg/scheduler/api.NodeResourceMap [],
                    JobFitErrors: "",
                    NodesFitErrors: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.FitErrors [],
                    TaskStatusIndex: map[volcano.sh/volcano/pkg/scheduler/api.TaskStatus]volcano.sh/volcano/pkg/scheduler/api.tasksMap [...],
                    Tasks: volcano.sh/volcano/pkg/scheduler/api.tasksMap [...],
                    Allocated: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000962e80),
                    TotalRequest: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000962ea0),
                    CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x4000666088),
                    PodGroup: *volcano.sh/volcano/pkg/scheduler/api.PodGroup nil,}, 
    ]
    (dlv) 
    map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [
            "default/job-1": *{
                    UID: "default/job-1",
                    Name: "",
                    Namespace: "",
                    Queue: "",
                    Priority: 0,
                    MinAvailable: 0,
                    NodesFitDelta: volcano.sh/volcano/pkg/scheduler/api.NodeResourceMap [],
                    JobFitErrors: "",
                    NodesFitErrors: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.FitErrors [],
                    TaskStatusIndex: map[volcano.sh/volcano/pkg/scheduler/api.TaskStatus]volcano.sh/volcano/pkg/scheduler/api.tasksMap [...],
                    Tasks: volcano.sh/volcano/pkg/scheduler/api.tasksMap [...],
                    Allocated: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000962e80),
                    TotalRequest: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000962ea0),
                    CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x4000666088),
                    PodGroup: *volcano.sh/volcano/pkg/scheduler/api.PodGroup nil,}, 
    ]
    (dlv) p sc.Jobs.Tasks
    Command failed: sc.Jobs (type map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo) is not a struct
    (dlv) p sc.Jobs.Tasks[0]
    Command failed: sc.Jobs (type map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo) is not a struct
    (dlv) p sc.Jobs["default/job-1"].Tasks
    volcano.sh/volcano/pkg/scheduler/api.tasksMap [
            "67387705-d4a1-4af6-ada7-85c4a40aaa27": *{
                    UID: "67387705-d4a1-4af6-ada7-85c4a40aaa27",
                    Job: "default/job-1",
                    Name: "job-1-nginx-0",
                    Namespace: "default",
                    Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000962e00),
                    InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000962e40),
                    NodeName: "bogon",
                    Status: Succeeded (128),
                    Priority: 0,
                    VolumeReady: false,
                    Pod: *(*"k8s.io/api/core/v1.Pod")(0x4000b066c0),}, 
    ]
    (dlv)
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.NewJobInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:154 (hits goroutine(289):1 total:1) (PC: 0xe9a620)
    Warning: debugging optimized function
    (dlv) p tasks
    (unreadable read out of bounds)
    (dlv) args 
    uid = "default/test-job"
    tasks = (unreadable read out of bounds)
    ~r2 = (unreadable empty OP stack)
    (dlv) s
    > volcano.sh/volcano/pkg/scheduler/api.NewJobInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:159 (PC: 0xe9a62c)
    Warning: debugging optimized function
    (dlv) p tasks
    (unreadable read out of bounds)
    (dlv) n
    > volcano.sh/volcano/pkg/scheduler/api.NewJobInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:163 (PC: 0xe9a668)
    Warning: debugging optimized function
    (dlv) n
    > volcano.sh/volcano/pkg/scheduler/api.NewJobInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:155 (PC: 0xe9a674)
    Warning: debugging optimized function
    (dlv) p tasks
    (unreadable read out of bounds)
    (dlv) c

    再创建一个job

    root@ubuntu:~# kubectl apply  -f job2.yaml 
    job.batch.volcano.sh/test-job-v2 created
    root@ubuntu:~# cat job2.yaml 
    apiVersion: batch.volcano.sh/v1alpha1
    kind: Job
    metadata:
      name: test-job-v2
    spec:
      minAvailable: 1
      schedulerName: volcano
      policies:
        - event: PodEvicted
          action: RestartJob
      plugins:
        ssh: []
        env: []
        svc: []
      maxRetry: 5
      queue: default
      tasks:
        - replicas: 1
          name: "default-nginx-v2"
          template:
            metadata:
              name: web
            spec:
              containers:
                - image: nginx
                  imagePullPolicy: IfNotPresent
                  name: nginx
                  resources:
                    requests:
                      cpu: "1"
              restartPolicy: OnFailure
    root@ubuntu:~# 
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393 (hits goroutine(289):2 total:2) (PC: 0xeab240)
    Warning: debugging optimized function
    (dlv) bt
     0  0x0000000000eab240 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393
     1  0x0000000000eaeb68 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393
     2  0x0000000000c9ccc8 in k8s.io/client-go/tools/cache.(*ResourceEventHandlerFuncs).OnAdd
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/controller.go:218
     3  0x0000000000c9aed8 in k8s.io/client-go/tools/cache.(*processorListener).run.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:744
     4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
     5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
     6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
     7  0x0000000000c96220 in k8s.io/apimachinery/pkg/util/wait.Until
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
     8  0x0000000000c96220 in k8s.io/client-go/tools/cache.(*processorListener).run
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:738
     9  0x0000000000c9c8c8 in k8s.io/client-go/tools/cache.(*processorListener).run-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:732
    10  0x0000000000339a44 in k8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:73
    11  0x0000000000073ff4 in runtime.goexit
        at /usr/local/go/src/runtime/asm_arm64.s:1148
    (dlv) p sc
    *volcano.sh/volcano/pkg/scheduler/cache.SchedulerCache {
            Mutex: sync.Mutex {state: 0, sema: 0},
            kubeClient: *k8s.io/client-go/kubernetes.Clientset {
                    DiscoveryClient: *(*"k8s.io/client-go/discovery.DiscoveryClient")(0x40005761c0),
                    admissionregistrationV1: *(*"k8s.io/client-go/kubernetes/typed/admissionregistration/v1.AdmissionregistrationV1Client")(0x400050f380),
                    admissionregistrationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1.AdmissionregistrationV1beta1Client")(0x400050f3e0),
                    appsV1: *(*"k8s.io/client-go/kubernetes/typed/apps/v1.AppsV1Client")(0x400050f440),
                    appsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/apps/v1beta1.AppsV1beta1Client")(0x400050f4a0),
                    appsV1beta2: *(*"k8s.io/client-go/kubernetes/typed/apps/v1beta2.AppsV1beta2Client")(0x400050f500),
                    auditregistrationV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1.AuditregistrationV1alpha1Client")(0x400050f560),
                    authenticationV1: *(*"k8s.io/client-go/kubernetes/typed/authentication/v1.AuthenticationV1Client")(0x400050f5c0),
                    authenticationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/authentication/v1beta1.AuthenticationV1beta1Client")(0x400050f620),
                    authorizationV1: *(*"k8s.io/client-go/kubernetes/typed/authorization/v1.AuthorizationV1Client")(0x400050f680),
                    authorizationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/authorization/v1beta1.AuthorizationV1beta1Client")(0x400050f6e0),
                    autoscalingV1: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v1.AutoscalingV1Client")(0x400050f740),
                    autoscalingV2beta1: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1.AutoscalingV2beta1Client")(0x400050f7a0),
                    autoscalingV2beta2: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2.AutoscalingV2beta2Client")(0x400050f800),
                    batchV1: *(*"k8s.io/client-go/kubernetes/typed/batch/v1.BatchV1Client")(0x400050f860),
                    batchV1beta1: *(*"k8s.io/client-go/kubernetes/typed/batch/v1beta1.BatchV1beta1Client")(0x400050f8c0),
                    batchV2alpha1: *(*"k8s.io/client-go/kubernetes/typed/batch/v2alpha1.BatchV2alpha1Client")(0x400050f920),
                    certificatesV1beta1: *(*"k8s.io/client-go/kubernetes/typed/certificates/v1beta1.CertificatesV1beta1Client")(0x400050f980),
                    coordinationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/coordination/v1beta1.CoordinationV1beta1Client")(0x400050f9e0),
                    coordinationV1: *(*"k8s.io/client-go/kubernetes/typed/coordination/v1.CoordinationV1Client")(0x400050fa40),
                    coreV1: *(*"k8s.io/client-go/kubernetes/typed/core/v1.CoreV1Client")(0x400050faa0),
                    discoveryV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/discovery/v1alpha1.DiscoveryV1alpha1Client")(0x400050fb00),
                    discoveryV1beta1: *(*"k8s.io/client-go/kubernetes/typed/discovery/v1beta1.DiscoveryV1beta1Client")(0x400050fb60),
                    eventsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/events/v1beta1.EventsV1beta1Client")(0x400050fbc0),
                    extensionsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/extensions/v1beta1.ExtensionsV1beta1Client")(0x400050fc20),
                    flowcontrolV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1.FlowcontrolV1alpha1Client")(0x400050fc80),
                    networkingV1: *(*"k8s.io/client-go/kubernetes/typed/networking/v1.NetworkingV1Client")(0x400050fce0),
                    networkingV1beta1: *(*"k8s.io/client-go/kubernetes/typed/networking/v1beta1.NetworkingV1beta1Client")(0x400050fd40),
                    nodeV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/node/v1alpha1.NodeV1alpha1Client")(0x400050fda0),
                    nodeV1beta1: *(*"k8s.io/client-go/kubernetes/typed/node/v1beta1.NodeV1beta1Client")(0x400050fe00),
                    policyV1beta1: *(*"k8s.io/client-go/kubernetes/typed/policy/v1beta1.PolicyV1beta1Client")(0x400050fe60),
                    rbacV1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1.RbacV1Client")(0x400050fec0),
                    rbacV1beta1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1beta1.RbacV1beta1Client")(0x400050ff20),
                    rbacV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1alpha1.RbacV1alpha1Client")(0x400050ff80),
                    schedulingV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1.SchedulingV1alpha1Client")(0x400050ffe0),
                    schedulingV1beta1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1beta1.SchedulingV1beta1Client")(0x400056e040),
                    schedulingV1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1.SchedulingV1Client")(0x400056e0a0),
                    settingsV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/settings/v1alpha1.SettingsV1alpha1Client")(0x400056e100),
                    storageV1beta1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1beta1.StorageV1beta1Client")(0x400056e160),
                    storageV1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1.StorageV1Client")(0x400056e1c0),
                    storageV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1alpha1.StorageV1alpha1Client")(0x400056e220),},
            vcClient: *volcano.sh/volcano/pkg/client/clientset/versioned.Clientset {
                    DiscoveryClient: *(*"k8s.io/client-go/discovery.DiscoveryClient")(0x4000576480),
                    batchV1alpha1: *(*"volcano.sh/volcano/pkg/client/clientset/versioned/typed/batch/v1alpha1.BatchV1alpha1Client")(0x400056e330),
                    busV1alpha1: *(*"volcano.sh/volcano/pkg/client/clientset/versioned/typed/bus/v1alpha1.BusV1alpha1Client")(0x400056e390),
                    schedulingV1beta1: *(*"volcano.sh/volcano/pkg/client/clientset/versioned/typed/scheduling/v1beta1.SchedulingV1beta1Client")(0x400056e3f0),},
            defaultQueue: "default",
            schedulerName: "volcano",
            podInformer: k8s.io/client-go/informers/core/v1.PodInformer(*k8s.io/client-go/informers/core/v1.podInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,
                    namespace: "",},
            nodeInformer: k8s.io/client-go/informers/core/v1.NodeInformer(*k8s.io/client-go/informers/core/v1.nodeInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,},
            podGroupInformerV1beta1: volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.PodGroupInformer(*volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.podGroupInformer) *{
                    factory: volcano.sh/volcano/pkg/client/informers/externalversions/internalinterfaces.SharedInformerFactory(*volcano.sh/volcano/pkg/client/informers/externalversions.sharedInformerFactory) ...,
                    tweakListOptions: nil,
                    namespace: "",},
            queueInformerV1beta1: volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.QueueInformer(*volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.queueInformer) *{
                    factory: volcano.sh/volcano/pkg/client/informers/externalversions/internalinterfaces.SharedInformerFactory(*volcano.sh/volcano/pkg/client/informers/externalversions.sharedInformerFactory) ...,
                    tweakListOptions: nil,},
            pvInformer: k8s.io/client-go/informers/core/v1.PersistentVolumeInformer(*k8s.io/client-go/informers/core/v1.persistentVolumeInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,},
            pvcInformer: k8s.io/client-go/informers/core/v1.PersistentVolumeClaimInformer(*k8s.io/client-go/informers/core/v1.persistentVolumeClaimInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,
                    namespace: "",},
            scInformer: k8s.io/client-go/informers/storage/v1.StorageClassInformer(*k8s.io/client-go/informers/storage/v1.storageClassInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,},
            pcInformer: k8s.io/client-go/informers/scheduling/v1beta1.PriorityClassInformer(*k8s.io/client-go/informers/scheduling/v1beta1.priorityClassInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,},
            quotaInformer: k8s.io/client-go/informers/core/v1.ResourceQuotaInformer(*k8s.io/client-go/informers/core/v1.resourceQuotaInformer) *{
                    factory: k8s.io/client-go/informers/internalinterfaces.SharedInformerFactory(*k8s.io/client-go/informers.sharedInformerFactory) ...,
                    tweakListOptions: nil,
                    namespace: "",},
            Binder: volcano.sh/volcano/pkg/scheduler/cache.Binder(*volcano.sh/volcano/pkg/scheduler/cache.defaultBinder) *{
                    kubeclient: *(*"k8s.io/client-go/kubernetes.Clientset")(0x4000548160),},
            Evictor: volcano.sh/volcano/pkg/scheduler/cache.Evictor(*volcano.sh/volcano/pkg/scheduler/cache.defaultEvictor) *{
                    kubeclient: *(*"k8s.io/client-go/kubernetes.Clientset")(0x4000548160),
                    recorder: k8s.io/client-go/tools/record.EventRecorder(*k8s.io/client-go/tools/record.recorderImpl) ...,},
            StatusUpdater: volcano.sh/volcano/pkg/scheduler/cache.StatusUpdater(*volcano.sh/volcano/pkg/scheduler/cache.defaultStatusUpdater) *{
                    kubeclient: *(*"k8s.io/client-go/kubernetes.Clientset")(0x4000548160),
                    vcclient: *(*"volcano.sh/volcano/pkg/client/clientset/versioned.Clientset")(0x4000576200),},
            VolumeBinder: volcano.sh/volcano/pkg/scheduler/cache.VolumeBinder(*volcano.sh/volcano/pkg/scheduler/cache.defaultVolumeBinder) *{
                    volumeBinder: k8s.io/kubernetes/pkg/controller/volume/scheduling.SchedulerVolumeBinder(*k8s.io/kubernetes/pkg/controller/volume/scheduling.volumeBinder) ...,},
            Recorder: k8s.io/client-go/tools/record.EventRecorder(*k8s.io/client-go/tools/record.recorderImpl) *{
                    scheme: *(*"k8s.io/apimachinery/pkg/runtime.Scheme")(0x4000509110),
                    source: (*"k8s.io/api/core/v1.EventSource")(0x400013a8c8),
                    Broadcaster: *(*"k8s.io/apimachinery/pkg/watch.Broadcaster")(0x400013a840),
                    clock: k8s.io/apimachinery/pkg/util/clock.Clock(k8s.io/apimachinery/pkg/util/clock.RealClock) *(*"k8s.io/apimachinery/pkg/util/clock.Clock")(0x400013a8f0),},
            Jobs: map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [
                    "default/test-job": *(*"volcano.sh/volcano/pkg/scheduler/api.JobInfo")(0x40003c80b0), 
                    "default/job-1": *(*"volcano.sh/volcano/pkg/scheduler/api.JobInfo")(0x4000666000), 
            ], 没有新的job
            Nodes: map[string]*volcano.sh/volcano/pkg/scheduler/api.NodeInfo [
                    "bogon": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000654880), 
                    "cloud": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000654900), 
                    "centos7": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000654980), 
                    "ubuntu": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000654a00), 
            ],
            Queues: map[volcano.sh/volcano/pkg/scheduler/api.QueueID]*volcano.sh/volcano/pkg/scheduler/api.QueueInfo [
                    "default": *(*"volcano.sh/volcano/pkg/scheduler/api.QueueInfo")(0x40003636b0), 
                    "test": *(*"volcano.sh/volcano/pkg/scheduler/api.QueueInfo")(0x4000721680), 
            ],
            PriorityClasses: map[string]*k8s.io/api/scheduling/v1beta1.PriorityClass [
                    "system-node-critical": *(*"k8s.io/api/scheduling/v1beta1.PriorityClass")(0x4000324a00), 
                    "system-cluster-critical": *(*"k8s.io/api/scheduling/v1beta1.PriorityClass")(0x4000324b38), 
            ],
            defaultPriorityClass: *k8s.io/api/scheduling/v1beta1.PriorityClass nil,
            defaultPriority: 0,
            NamespaceCollection: map[string]*volcano.sh/volcano/pkg/scheduler/api.NamespaceCollection [],
            errTasks: k8s.io/client-go/util/workqueue.RateLimitingInterface(*k8s.io/client-go/util/workqueue.rateLimitingType) *{
                    DelayingInterface: k8s.io/client-go/util/workqueue.DelayingInterface(*k8s.io/client-go/util/workqueue.delayingType) ...,
                    rateLimiter: k8s.io/client-go/util/workqueue.RateLimiter(*k8s.io/client-go/util/workqueue.MaxOfRateLimiter) ...,},
            deletedJobs: k8s.io/client-go/util/workqueue.RateLimitingInterface(*k8s.io/client-go/util/workqueue.rateLimitingType) *{
                    DelayingInterface: k8s.io/client-go/util/workqueue.DelayingInterface(*k8s.io/client-go/util/workqueue.delayingType) ...,
                    rateLimiter: k8s.io/client-go/util/workqueue.RateLimiter(*k8s.io/client-go/util/workqueue.MaxOfRateLimiter) ...,},}
    (dlv) p sc.Jobs["default/test-job"].Tasks
    volcano.sh/volcano/pkg/scheduler/api.tasksMap [
            "5d5b8e8d-3d05-4a9b-ab70-8a883d28f182": *{
                    UID: "5d5b8e8d-3d05-4a9b-ab70-8a883d28f182",
                    Job: "default/test-job",
                    Name: "test-job-default-nginx-3",
                    Namespace: "default",
                    Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000963f40),
                    InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000963f80),
                    NodeName: "bogon",
                    Status: Running (32),
                    Priority: 0,
                    VolumeReady: false,
                    Pod: *(*"k8s.io/api/core/v1.Pod")(0x4000588c00),}, 
            "7c37df2f-e1c0-479a-a5f9-900a2238878c": *{
                    UID: "7c37df2f-e1c0-479a-a5f9-900a2238878c",
                    Job: "default/test-job",
                    Name: "test-job-default-nginx-5",
                    Namespace: "default",
                    Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40008d3d40),
                    InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40008d3ea0),
                    NodeName: "bogon",
                    Status: Running (32),
                    Priority: 0,
                    VolumeReady: false,
                    Pod: *(*"k8s.io/api/core/v1.Pod")(0x400073b800),}, 
            "862f8ea1-c40e-41db-b70d-554f330a8187": *{
                    UID: "862f8ea1-c40e-41db-b70d-554f330a8187",
                    Job: "default/test-job",
                    Name: "test-job-default-nginx-4",
                    Namespace: "default",
                    Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000546660),
                    InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40005466a0),
                    NodeName: "bogon",
                    Status: Running (32),
                    Priority: 0,
                    VolumeReady: false,
                    Pod: *(*"k8s.io/api/core/v1.Pod")(0x4000589800),}, 
            "6c19c994-6b58-4ac6-bd32-d5dc4a04b94f": *{
                    UID: "6c19c994-6b58-4ac6-bd32-d5dc4a04b94f",
                    Job: "default/test-job",
                    Name: "test-job-default-nginx-1",
                    Namespace: "default",
                    Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000215260),
                    InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40002152c0),
                    NodeName: "bogon",
                    Status: Running (32),
                    Priority: 0,
                    VolumeReady: false,
                    Pod: *(*"k8s.io/api/core/v1.Pod")(0x4000e24800),}, 
            "1219f793-dd08-4569-b5b1-28ea58177725": *{
                    UID: "1219f793-dd08-4569-b5b1-28ea58177725",
                    Job: "default/test-job",
                    Name: "test-job-default-nginx-2",
                    Namespace: "default",
                    Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000214d00),
                    InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000214d40),
                    NodeName: "bogon",
                    Status: Running (32),
                    Priority: 0,
                    VolumeReady: false,
                    Pod: *(*"k8s.io/api/core/v1.Pod")(0x4000e24000),}, 
            "8e12d6dc-55c3-41cd-b4f9-f0f215faf09c": *{
                    UID: "8e12d6dc-55c3-41cd-b4f9-f0f215faf09c",
                    Job: "default/test-job",
                    Name: "test-job-default-nginx-0",
                    Namespace: "default",
                    Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x400050c600),
                    InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x400050c6c0),
                    NodeName: "bogon",
                    Status: Running (32),
                    Priority: 0,
                    VolumeReady: false,
                    Pod: *(*"k8s.io/api/core/v1.Pod")(0x400075c000),}, 
    ]
    (dlv) 
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.NewJobInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:154 (hits goroutine(289):2 total:2) (PC: 0xe9a620)
    Warning: debugging optimized function
    (dlv) p *task
    Command failed: could not find symbol value for task
    (dlv) s
    > volcano.sh/volcano/pkg/scheduler/api.NewJobInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:159 (PC: 0xe9a62c)
    Warning: debugging optimized function
    (dlv) args
    uid = "default/test-job-v2"  添加新的job
    tasks = (unreadable read out of bounds)
    ~r2 = (unreadable empty OP stack)
    (dlv) p *task
    Command failed: could not find symbol value for task

    setPodGroup(

    // Assumes that lock is already acquired.
    func (sc *SchedulerCache) setPodGroup(ss *schedulingapi.PodGroup) error {
            job := getJobID(ss)
            if _, found := sc.Jobs[job]; !found {
                    sc.Jobs[job] = schedulingapi.NewJobInfo(job)
            }
    
            sc.Jobs[job].SetPodGroup(ss)
    
            // TODO(k82cn): set default queue in admission.
            if len(ss.Spec.Queue) == 0 {
                    sc.Jobs[job].Queue = schedulingapi.QueueID(sc.defaultQueue)
            }
    
            return nil
    }
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).setPodGroup() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:356 (hits goroutine(289):1 total:1) (PC: 0xeaae10)
    Warning: debugging optimized function
    (dlv) bt
     0  0x0000000000eaae10 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).setPodGroup
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:356
     1  0x0000000000eab418 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:412
     2  0x0000000000eaeb68 in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393
     3  0x0000000000c9ccc8 in k8s.io/client-go/tools/cache.(*ResourceEventHandlerFuncs).OnAdd
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/controller.go:218
     4  0x0000000000c9aed8 in k8s.io/client-go/tools/cache.(*processorListener).run.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:744
     5  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
     6  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
     7  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
     8  0x0000000000c96220 in k8s.io/apimachinery/pkg/util/wait.Until
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
     9  0x0000000000c96220 in k8s.io/client-go/tools/cache.(*processorListener).run
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:738
    10  0x0000000000c9c8c8 in k8s.io/client-go/tools/cache.(*processorListener).run-fm
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/tools/cache/shared_informer.go:732
    11  0x0000000000339a44 in k8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1
        at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:73
    12  0x0000000000073ff4 in runtime.goexit
        at /usr/local/go/src/runtime/asm_arm64.s:1148
    (dlv) p ss
    *volcano.sh/volcano/pkg/scheduler/api.PodGroup {
            PodGroup: volcano.sh/volcano/pkg/apis/scheduling.PodGroup {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000980000),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000980020),
                    Spec: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroupSpec")(0x4000980118),
                    Status: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroupStatus")(0x4000980148),},
            Version: "v1beta1",}
    (dlv) p ss.ObjectMeta
    k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
            Name: "test-job-v2",
            GenerateName: "",
            Namespace: "default",
            SelfLink: "/apis/scheduling.volcano.sh/v1beta1/namespaces/default/podgroups...+12 more",
            UID: "f3c08856-c74c-4233-ad7d-d3e11f2b7899",
            ResourceVersion: "3033546",
            Generation: 1,
            CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                    Time: (*time.Time)(0x4000980088),},
            DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
            DeletionGracePeriodSeconds: *int64 nil,
            Labels: map[string]string nil,
            Annotations: map[string]string [
                    "kubectl.kubernetes.io/last-applied-configuration": "{"apiVersion":"batch.volcano.sh/v1alpha1","kind":"Job","metadata...+490 more", 
            ],
            OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                    (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x4000284280),
            ],
            Finalizers: []string len: 0, cap: 0, nil,
            ClusterName: "",
            ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                    (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x4000284230),
            ],}
    (dlv) p sc.Jobs
    map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [
            "default/test-job": *{
                    UID: "default/test-job",
                    Name: "test-job",
                    Namespace: "default",
                    Queue: "default",
                    Priority: 0,
                    MinAvailable: 3,
                    NodesFitDelta: volcano.sh/volcano/pkg/scheduler/api.NodeResourceMap [],
                    JobFitErrors: "",
                    NodesFitErrors: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.FitErrors [],
                    TaskStatusIndex: map[volcano.sh/volcano/pkg/scheduler/api.TaskStatus]volcano.sh/volcano/pkg/scheduler/api.tasksMap [...],
                    Tasks: volcano.sh/volcano/pkg/scheduler/api.tasksMap [...],
                    Allocated: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40001ba060),
                    TotalRequest: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40001ba0e0),
                    CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x40003c8138),
                    PodGroup: *(*"volcano.sh/volcano/pkg/scheduler/api.PodGroup")(0x4000e6f1e0),}, 
            "default/job-1": *{
                    UID: "default/job-1",
                    Name: "",
                    Namespace: "",
                    Queue: "",
                    Priority: 0,
                    MinAvailable: 0,
                    NodesFitDelta: volcano.sh/volcano/pkg/scheduler/api.NodeResourceMap [],
                    JobFitErrors: "",
                    NodesFitErrors: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.FitErrors [],
                    TaskStatusIndex: map[volcano.sh/volcano/pkg/scheduler/api.TaskStatus]volcano.sh/volcano/pkg/scheduler/api.tasksMap [...],
                    Tasks: volcano.sh/volcano/pkg/scheduler/api.tasksMap [...],
                    Allocated: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000962e80),
                    TotalRequest: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000962ea0),
                    CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x4000666088),
                    PodGroup: *volcano.sh/volcano/pkg/scheduler/api.PodGroup nil,}, 
    ]
    (dlv) 
    root@ubuntu:~# kubectl get pods
    NAME                             READY   STATUS      RESTARTS   AGE
    example-foo-54dc4db9fc-lqz9j     1/1     Running     0          4d20h
    job-1-nginx-0                    0/1     Completed   0          7d4h
    test-job-default-nginx-0         1/1     Running     0          20m
    test-job-default-nginx-1         1/1     Running     0          20m
    test-job-default-nginx-2         1/1     Running     0          20m
    test-job-default-nginx-3         1/1     Running     0          20m
    test-job-default-nginx-4         1/1     Running     0          20m
    test-job-default-nginx-5         1/1     Running     0          20m
    test-job-v2-default-nginx-v2-0   1/1     Running     0          7m18s
    root@ubuntu:~# 

    job clone 

    (dlv) bt
    0  0x0000000000e9a960 in volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo
       at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200
    1  0x0000000000e9b120 in volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).Clone
       at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:286
    2  0x0000000000eae46c in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).Snapshot.func1
       at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/cache.go:708
    3  0x0000000000073ff4 in runtime.goexit
       at /usr/local/go/src/runtime/asm_arm64.s:1148
    (dlv) p task
    Command failed: could not find symbol value for task
    (dlv) 
    Command failed: could not find symbol value for task
    (dlv) p ji
    *volcano.sh/volcano/pkg/scheduler/api.JobInfo {
            UID: "default/test-job",
            Name: "test-job",
            Namespace: "default",
            Queue: "default",
            Priority: 0,
            MinAvailable: 3,
            NodesFitDelta: volcano.sh/volcano/pkg/scheduler/api.NodeResourceMap [],
            JobFitErrors: "",
            NodesFitErrors: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.FitErrors [],
            TaskStatusIndex: map[volcano.sh/volcano/pkg/scheduler/api.TaskStatus]volcano.sh/volcano/pkg/scheduler/api.tasksMap [],
            Tasks: volcano.sh/volcano/pkg/scheduler/api.tasksMap [],
            Allocated: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 0,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            TotalRequest: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 0,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                    Time: (*time.Time)(0x40003f6088),},
            PodGroup: *volcano.sh/volcano/pkg/scheduler/api.PodGroup {
                    PodGroup: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroup")(0x4000e6f1e0),
                    Version: "v1beta1",},}
    (dlv) p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "5d5b8e8d-3d05-4a9b-ab70-8a883d28f182",
            Job: "default/test-job",
            Name: "test-job-default-nginx-3",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000588c00),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000588c20),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000588d18),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000588ef0),},}
    (dlv) bt
    0  0x0000000000e9a960 in volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo
       at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200
    1  0x0000000000e9b120 in volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).Clone
       at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:286
    2  0x0000000000eae46c in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).Snapshot.func1
       at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/cache.go:708
    3  0x0000000000073ff4 in runtime.goexit
       at /usr/local/go/src/runtime/asm_arm64.s:1148
    (dlv) bp
    Breakpoint runtime-fatal-throw (enabled) at 0x424b0 for runtime.fatalthrow() /usr/local/go/src/runtime/panic.go:1162 (0)
    Breakpoint unrecovered-panic (enabled) at 0x42510 for runtime.fatalpanic() /usr/local/go/src/runtime/panic.go:1189 (0)
            print runtime.curg._panic.arg
    Breakpoint 1 (enabled) at 0xeab240 for volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393 (2)
    Breakpoint 2 (enabled) at 0xe9a620 for volcano.sh/volcano/pkg/scheduler/api.NewJobInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:154 (2)
    Breakpoint 3 (enabled) at 0xe9a960 for volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (1)
    (dlv) clear 1
    Breakpoint 1 (enabled) cleared at 0xeab240 for volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).AddPodGroupV1beta1() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/event_handlers.go:393
    (dlv) clear 2
    Breakpoint 2 (enabled) cleared at 0xe9a620 for volcano.sh/volcano/pkg/scheduler/api.NewJobInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:154
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35749):2 total:2) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "7c37df2f-e1c0-479a-a5f9-900a2238878c",
            Job: "default/test-job",
            Name: "test-job-default-nginx-5",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400073b800),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400073b820),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400073b918),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x400073baf0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35749):3 total:3) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "862f8ea1-c40e-41db-b70d-554f330a8187",
            Job: "default/test-job",
            Name: "test-job-default-nginx-4",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000589800),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000589820),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000589918),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000589af0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35749):4 total:4) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "6c19c994-6b58-4ac6-bd32-d5dc4a04b94f",
            Job: "default/test-job",
            Name: "test-job-default-nginx-1",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000e24800),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000e24820),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000e24918),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000e24af0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35749):5 total:5) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "1219f793-dd08-4569-b5b1-28ea58177725",
            Job: "default/test-job",
            Name: "test-job-default-nginx-2",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000e24000),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000e24020),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000e24118),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000e242f0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35749):6 total:6) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "8e12d6dc-55c3-41cd-b4f9-f0f215faf09c",
            Job: "default/test-job",
            Name: "test-job-default-nginx-0",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400075c000),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400075c020),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400075c118),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x400075c2f0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35789):1 total:7) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "8e12d6dc-55c3-41cd-b4f9-f0f215faf09c",
            Job: "default/test-job",
            Name: "test-job-default-nginx-0",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400075c000),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400075c020),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400075c118),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x400075c2f0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35789):2 total:8) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "5d5b8e8d-3d05-4a9b-ab70-8a883d28f182",
            Job: "default/test-job",
            Name: "test-job-default-nginx-3",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000588c00),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000588c20),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000588d18),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000588ef0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35789):3 total:9) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv) bt
    0  0x0000000000e9a960 in volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo
       at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200
    1  0x0000000000e9b120 in volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).Clone
       at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:286
    2  0x0000000000eae46c in volcano.sh/volcano/pkg/scheduler/cache.(*SchedulerCache).Snapshot.func1
       at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/cache/cache.go:708
    3  0x0000000000073ff4 in runtime.goexit
       at /usr/local/go/src/runtime/asm_arm64.s:1148
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "7c37df2f-e1c0-479a-a5f9-900a2238878c",
            Job: "default/test-job",
            Name: "test-job-default-nginx-5",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400073b800),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400073b820),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400073b918),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x400073baf0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35789):4 total:10) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "862f8ea1-c40e-41db-b70d-554f330a8187",
            Job: "default/test-job",
            Name: "test-job-default-nginx-4",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000589800),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000589820),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000589918),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000589af0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35789):5 total:11) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "6c19c994-6b58-4ac6-bd32-d5dc4a04b94f",
            Job: "default/test-job",
            Name: "test-job-default-nginx-1",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000e24800),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000e24820),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000e24918),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000e24af0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35789):6 total:12) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "1219f793-dd08-4569-b5b1-28ea58177725",
            Job: "default/test-job",
            Name: "test-job-default-nginx-2",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000e24000),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000e24020),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000e24118),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000e242f0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(174):1 total:13) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "4f464538-1316-4e81-8418-818764249fcf",
            Job: "default/test-job-v2",
            Name: "test-job-v2-default-nginx-v2-0",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "",
            Status: Pending (1),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000a15400),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000a15420),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000a15518),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000a156f0),},}
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35834):1 total:15) (PC: 0xe9a960)
    Warning: debugging optimized function
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35833):1 total:15) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv) c
    > volcano.sh/volcano/pkg/scheduler/api.(*JobInfo).AddTaskInfo() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/api/job_info.go:200 (hits goroutine(35833):2 total:16) (PC: 0xe9a960)
    Warning: debugging optimized function
    (dlv)  p ti
    *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
            UID: "862f8ea1-c40e-41db-b70d-554f330a8187",
            Job: "default/test-job",
            Name: "test-job-default-nginx-4",
            Namespace: "default",
            Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                    MilliCPU: 1000,
                    Memory: 0,
                    ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                    MaxTaskNum: 0,},
            NodeName: "bogon",
            Status: Running (32),
            Priority: 0,
            VolumeReady: false,
            Pod: *k8s.io/api/core/v1.Pod {
                    TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000589800),
                    ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000589820),
                    Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000589918),
                    Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000589af0),},}
    (dlv) quit
    Would you like to kill the process? [Y/n] n
    You have mail in /var/spool/mail/root
    [root@bogon ~]# 

    OpenSession

    用来启动 Session 作为调度的上下文,并且通过 tiers 的配置信息创建不同的 plugins,然后再通过 OnSessionOpen 函数,注册不同的辅助函数位点,如 jobOrderFns,queueOrderFns 等。其中 openSession 函数用于生成一个 session 实例,然后对 schedulerCache 进行一次 snapshot(把 cache 中的 jobs,queues 等信息使用snapshot 缓存起来),然后传给 session。

    // pkg/scheduler/framework/framework.go
    func OpenSession(cache cache.Cache, tiers []conf.Tier, configurations []conf.Configuration) *Session {
       ssn := openSession(cache)
       ssn.Tiers = tiers
       ssn.Configurations = configurations
    
       for _, tier := range tiers {
          for _, plugin := range tier.Plugins {
             if pb, found := GetPluginBuilder(plugin.Name); !found {
                klog.Errorf("Failed to get plugin %s.", plugin.Name)
             } else {
                plugin := pb(plugin.Arguments)
                ssn.plugins[plugin.Name()] = plugin
             }
          }
       }
    
       for _, plugin := range ssn.plugins {
          onSessionOpenStart := time.Now()
          plugin.OnSessionOpen(ssn)
          metrics.UpdatePluginDuration(plugin.Name(), metrics.OnSessionOpen, metrics.Duration(onSessionOpenStart))
       }
    
       return ssn
    }
    
    // pkg/scheduler/framework/session.go
    func openSession(cache cache.Cache) *Session {
        ssn := &Session{
            UID:        uuid.NewUUID(),
            kubeClient: cache.Client(),
            cache:      cache,
            podGroupStatus: map[api.JobID]scheduling.PodGroupStatus{},
            Jobs:   map[api.JobID]*api.JobInfo{},
            Nodes:  map[string]*api.NodeInfo{},
            Queues: map[api.QueueID]*api.QueueInfo{},
          ... // 操作函数位点
        }
    
        snapshot := cache.Snapshot()
    
        ssn.Jobs = snapshot.Jobs
        for _, job := range ssn.Jobs {
            // only conditions will be updated periodically
            if job.PodGroup != nil && job.PodGroup.Status.Conditions != nil {
                ssn.podGroupStatus[job.UID] = job.PodGroup.Status
            }
    
            if vjr := ssn.JobValid(job); vjr != nil {
                if !vjr.Pass {
            ... // 如果这个 job 无效
                }
                delete(ssn.Jobs, job.UID)
            }
        }
    
        ssn.Nodes = snapshot.Nodes
        ssn.Queues = snapshot.Queues
        ssn.NamespaceInfo = snapshot.NamespaceInfo
    
        return ssn
    }

    snapshot

    // Snapshot returns the complete snapshot of the cluster from cache
    func (sc *SchedulerCache) Snapshot() *kbapi.ClusterInfo {
            sc.Mutex.Lock()
            defer sc.Mutex.Unlock()
    
            snapshot := &kbapi.ClusterInfo{
                    Nodes:  make(map[string]*kbapi.NodeInfo),
                    Jobs:   make(map[kbapi.JobID]*kbapi.JobInfo),
                    Queues: make(map[kbapi.QueueID]*kbapi.QueueInfo),
            }
    
            for _, value := range sc.Nodes {
                    if !value.Ready() {
                            continue
                    }
    
                    snapshot.Nodes[value.Name] = value.Clone()
            }
    
            for _, value := range sc.Queues {
                    snapshot.Queues[value.UID] = value.Clone()
            }
    
            for _, value := range sc.Jobs {
                    // If no scheduling spec, does not handle it.
                    if value.PodGroup == nil && value.PDB == nil {
                            glog.V(4).Infof("The scheduling spec of Job <%v:%s/%s> is nil, ignore it.",
                                    value.UID, value.Namespace, value.Name)
    
                            continue
                    }
    
                    if _, found := snapshot.Queues[value.Queue]; !found {
                            glog.V(3).Infof("The Queue <%v> of Job <%v/%v> does not exist, ignore it.",
                                    value.Queue, value.Namespace, value.Name)
                            continue
                    }
    
                    if value.PodGroup != nil {
                            value.Priority = sc.defaultPriority
    
                            priName := value.PodGroup.Spec.PriorityClassName
                            if priorityClass, found := sc.PriorityClasses[priName]; found {
                                    value.Priority = priorityClass.Value
                            }
    
                            glog.V(4).Infof("The priority of job <%s/%s> is <%s/%d>",
                                    value.Namespace, value.Name, priName, value.Priority)
                    }
    
                    snapshot.Jobs[value.UID] = value.Clone()
            }
    
            glog.V(3).Infof("There are <%d> Jobs, <%d> Queues and <%d> Nodes in total for scheduling.",
                    len(snapshot.Jobs), len(snapshot.Queues), len(snapshot.Nodes))
    
            return snapshot
    }

    Volcano 调度器源码分析(scheduler 03)

    Scheduler Framework 研读 (scheduler 02)

  • 相关阅读:
    【POJ 3525】Most Distant Point from the Sea(直线平移、半平面交)
    【HDU 4940】Destroy Transportation system(无源无汇带上下界可行流)
    codevs 5962 [SDOI2017]数字表格
    【NOIP2016】天天爱跑步
    [2011WorldFinal]Chips Challenge[流量平衡]
    [Ahoi2014]支线剧情[无源汇有下界最小费用可行流]
    [NOI2008] 志愿者招募[流量平衡]
    [Wc2007]剪刀石头布[补集转化+拆边]
    poj3281 Dining[最大流]
    1458: 士兵占领[最大流]
  • 原文地址:https://www.cnblogs.com/dream397/p/15011237.html
Copyright © 2011-2022 走看看