• Mike Danese's avatar
    Fix a race in the scheduler. · 62c3ec96
    Mike Danese authored
    Loop over priorityConfigs seperately. The node loop can only safely
    modify result[i][index]. Before this change it sometimes modified
    result[i] concurrently with other loops.
    
    Fixes: 71649676
    
    ==================== Test output for //pkg/scheduler/core:go_default_test:
    ==================
    WARNING: DATA RACE
    Read at 0x00c0005e8ed0 by goroutine 22:
      k8s.io/kubernetes/pkg/scheduler/core.PrioritizeNodes.func2()
          pkg/scheduler/core/generic_scheduler.go:667 +0x2ea
      k8s.io/kubernetes/vendor/k8s.io/client-go/util/workqueue.ParallelizeUntil.func1()
          staging/src/k8s.io/client-go/util/workqueue/parallelizer.go:65 +0x9e
    
    Previous write at 0x00c0005e8ed0 by goroutine 21:
      k8s.io/kubernetes/pkg/scheduler/core.PrioritizeNodes.func2()
          pkg/scheduler/core/generic_scheduler.go:668 +0x450
      k8s.io/kubernetes/vendor/k8s.io/client-go/util/workqueue.ParallelizeUntil.func1()
          staging/src/k8s.io/client-go/util/workqueue/parallelizer.go:65 +0x9e
    
    Goroutine 22 (running) created at:
      k8s.io/kubernetes/vendor/k8s.io/client-go/util/workqueue.ParallelizeUntil()
          staging/src/k8s.io/client-go/util/workqueue/parallelizer.go:57 +0x1a3
      k8s.io/kubernetes/pkg/scheduler/core.PrioritizeNodes()
          pkg/scheduler/core/generic_scheduler.go:682 +0x592
      k8s.io/kubernetes/pkg/scheduler/core.(*genericScheduler).Schedule()
          pkg/scheduler/core/generic_scheduler.go:186 +0x77d
      k8s.io/kubernetes/pkg/scheduler/core.TestGenericScheduler.func1()
          pkg/scheduler/core/generic_scheduler_test.go:464 +0x91f
      testing.tRunner()
          GOROOT/src/testing/testing.go:827 +0x162
    
    Goroutine 21 (running) created at:
      k8s.io/kubernetes/vendor/k8s.io/client-go/util/workqueue.ParallelizeUntil()
          staging/src/k8s.io/client-go/util/workqueue/parallelizer.go:57 +0x1a3
      k8s.io/kubernetes/pkg/scheduler/core.PrioritizeNodes()
          pkg/scheduler/core/generic_scheduler.go:682 +0x592
      k8s.io/kubernetes/pkg/scheduler/core.(*genericScheduler).Schedule()
          pkg/scheduler/core/generic_scheduler.go:186 +0x77d
      k8s.io/kubernetes/pkg/scheduler/core.TestGenericScheduler.func1()
          pkg/scheduler/core/generic_scheduler_test.go:464 +0x91f
      testing.tRunner()
          GOROOT/src/testing/testing.go:827 +0x162
    ==================
    --- FAIL: TestGenericScheduler (0.01s)
        --- FAIL: TestGenericScheduler/test_6 (0.00s)
            testing.go:771: race detected during execution of test
        testing.go:771: race detected during execution of test
    FAIL
    62c3ec96
generic_scheduler.go 41.6 KB