mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
Make thread-safe the prebind callback of stateful plugin in scheduler framework.
This commit is contained in:
parent
5268f69405
commit
7b127311a4
@ -18,6 +18,7 @@ package stateful
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
@ -31,6 +32,7 @@ import (
|
|||||||
type MultipointExample struct {
|
type MultipointExample struct {
|
||||||
mpState map[int]string
|
mpState map[int]string
|
||||||
numRuns int
|
numRuns int
|
||||||
|
mu sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ = framework.ReservePlugin(&MultipointExample{})
|
var _ = framework.ReservePlugin(&MultipointExample{})
|
||||||
@ -46,12 +48,16 @@ func (mp *MultipointExample) Name() string {
|
|||||||
|
|
||||||
// Reserve is the functions invoked by the framework at "reserve" extension point.
|
// Reserve is the functions invoked by the framework at "reserve" extension point.
|
||||||
func (mp *MultipointExample) Reserve(pc *framework.PluginContext, pod *v1.Pod, nodeName string) *framework.Status {
|
func (mp *MultipointExample) Reserve(pc *framework.PluginContext, pod *v1.Pod, nodeName string) *framework.Status {
|
||||||
|
// Reserve is not called concurrently, and so we don't need to lock.
|
||||||
mp.numRuns++
|
mp.numRuns++
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prebind is the functions invoked by the framework at "prebind" extension point.
|
// Prebind is the functions invoked by the framework at "prebind" extension point.
|
||||||
func (mp *MultipointExample) Prebind(pc *framework.PluginContext, pod *v1.Pod, nodeName string) *framework.Status {
|
func (mp *MultipointExample) Prebind(pc *framework.PluginContext, pod *v1.Pod, nodeName string) *framework.Status {
|
||||||
|
// Prebind could be called concurrently for different pods.
|
||||||
|
mp.mu.Lock()
|
||||||
|
defer mp.mu.Unlock()
|
||||||
mp.numRuns++
|
mp.numRuns++
|
||||||
if pod == nil {
|
if pod == nil {
|
||||||
return framework.NewStatus(framework.Error, "pod must not be nil")
|
return framework.NewStatus(framework.Error, "pod must not be nil")
|
||||||
|
Loading…
Reference in New Issue
Block a user