Commit 37d46a1e authored by Michelle Au's avatar Michelle Au

Volume scheduling library changes:

* FindPodVolumes * Prebound PVCs are treated like unbound immediate PVCs and will error * Always check for fully bound PVCs and cache bindings for not fully bound PVCs * BindPodVolumes * Retry API updates for not fully bound PVCs even if the assume cache already marked it * Wait for PVCs to be fully bound after making the API updates * Error when detecting binding/provisioning failure conditions
parent be115407
...@@ -31,6 +31,8 @@ type PodBindingCache interface { ...@@ -31,6 +31,8 @@ type PodBindingCache interface {
UpdateBindings(pod *v1.Pod, node string, bindings []*bindingInfo) UpdateBindings(pod *v1.Pod, node string, bindings []*bindingInfo)
// GetBindings will return the cached bindings for the given pod and node. // GetBindings will return the cached bindings for the given pod and node.
// A nil return value means that the entry was not found. An empty slice
// means that no binding operations are needed.
GetBindings(pod *v1.Pod, node string) []*bindingInfo GetBindings(pod *v1.Pod, node string) []*bindingInfo
// UpdateProvisionedPVCs will update the cache with the given provisioning decisions // UpdateProvisionedPVCs will update the cache with the given provisioning decisions
...@@ -38,6 +40,8 @@ type PodBindingCache interface { ...@@ -38,6 +40,8 @@ type PodBindingCache interface {
UpdateProvisionedPVCs(pod *v1.Pod, node string, provisionings []*v1.PersistentVolumeClaim) UpdateProvisionedPVCs(pod *v1.Pod, node string, provisionings []*v1.PersistentVolumeClaim)
// GetProvisionedPVCs will return the cached provisioning decisions for the given pod and node. // GetProvisionedPVCs will return the cached provisioning decisions for the given pod and node.
// A nil return value means that the entry was not found. An empty slice
// means that no provisioning operations are needed.
GetProvisionedPVCs(pod *v1.Pod, node string) []*v1.PersistentVolumeClaim GetProvisionedPVCs(pod *v1.Pod, node string) []*v1.PersistentVolumeClaim
// DeleteBindings will remove all cached bindings and provisionings for the given pod. // DeleteBindings will remove all cached bindings and provisionings for the given pod.
......
...@@ -16,18 +16,15 @@ limitations under the License. ...@@ -16,18 +16,15 @@ limitations under the License.
package persistentvolume package persistentvolume
import ( import "k8s.io/api/core/v1"
"k8s.io/api/core/v1"
)
type FakeVolumeBinderConfig struct { type FakeVolumeBinderConfig struct {
AllBound bool AllBound bool
FindUnboundSatsified bool FindUnboundSatsified bool
FindBoundSatsified bool FindBoundSatsified bool
FindErr error FindErr error
AssumeBindingRequired bool AssumeErr error
AssumeErr error BindErr error
BindErr error
} }
// NewVolumeBinder sets up all the caches needed for the scheduler to make // NewVolumeBinder sets up all the caches needed for the scheduler to make
...@@ -48,9 +45,9 @@ func (b *FakeVolumeBinder) FindPodVolumes(pod *v1.Pod, node *v1.Node) (unboundVo ...@@ -48,9 +45,9 @@ func (b *FakeVolumeBinder) FindPodVolumes(pod *v1.Pod, node *v1.Node) (unboundVo
return b.config.FindUnboundSatsified, b.config.FindBoundSatsified, b.config.FindErr return b.config.FindUnboundSatsified, b.config.FindBoundSatsified, b.config.FindErr
} }
func (b *FakeVolumeBinder) AssumePodVolumes(assumedPod *v1.Pod, nodeName string) (bool, bool, error) { func (b *FakeVolumeBinder) AssumePodVolumes(assumedPod *v1.Pod, nodeName string) (bool, error) {
b.AssumeCalled = true b.AssumeCalled = true
return b.config.AllBound, b.config.AssumeBindingRequired, b.config.AssumeErr return b.config.AllBound, b.config.AssumeErr
} }
func (b *FakeVolumeBinder) BindPodVolumes(assumedPod *v1.Pod) error { func (b *FakeVolumeBinder) BindPodVolumes(assumedPod *v1.Pod) error {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment