diff --git a/pkg/controller/volume/persistentvolume/BUILD b/pkg/controller/volume/persistentvolume/BUILD index 799a94f0487..1ca472ddbef 100644 --- a/pkg/controller/volume/persistentvolume/BUILD +++ b/pkg/controller/volume/persistentvolume/BUILD @@ -26,6 +26,7 @@ go_library( "//pkg/cloudprovider:go_default_library", "//pkg/controller:go_default_library", "//pkg/util/goroutinemap:go_default_library", + "//pkg/util/goroutinemap/exponentialbackoff:go_default_library", "//pkg/util/io:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/volume:go_default_library", diff --git a/pkg/controller/volume/persistentvolume/pv_controller.go b/pkg/controller/volume/persistentvolume/pv_controller.go index 81f5fa23248..5b997fcc476 100644 --- a/pkg/controller/volume/persistentvolume/pv_controller.go +++ b/pkg/controller/volume/persistentvolume/pv_controller.go @@ -33,6 +33,7 @@ import ( "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/util/goroutinemap" + "k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff" vol "k8s.io/kubernetes/pkg/volume" "github.com/golang/glog" @@ -1427,9 +1428,12 @@ func (ctrl *PersistentVolumeController) scheduleOperation(operationName string, err := ctrl.runningOperations.Run(operationName, operation) if err != nil { - if goroutinemap.IsAlreadyExists(err) { + switch { + case goroutinemap.IsAlreadyExists(err): glog.V(4).Infof("operation %q is already running, skipping", operationName) - } else { + case exponentialbackoff.IsExponentialBackoff(err): + glog.V(4).Infof("operation %q postponed due to exponential backoff", operationName) + default: glog.Errorf("error scheduling operation %q: %v", operationName, err) } }