Namespace controller must wait for terminating resources

This commit is contained in:
Clayton Coleman 2015-05-25 15:39:40 -04:00
parent f1eaa8a27b
commit 5f06138798

View File

@ -17,6 +17,7 @@ limitations under the License.
package namespace package namespace
import ( import (
"fmt"
"time" "time"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/api"
@ -119,7 +120,7 @@ func deleteAllContent(kubeClient client.Interface, namespace string) (err error)
if err != nil { if err != nil {
return err return err
} }
err = deletePods(kubeClient, namespace) estimate, err := deletePods(kubeClient, namespace)
if err != nil { if err != nil {
return err return err
} }
@ -143,6 +144,10 @@ func deleteAllContent(kubeClient client.Interface, namespace string) (err error)
if err != nil { if err != nil {
return err return err
} }
if estimate > 0 {
return fmt.Errorf("some resources are being gracefully deleted, estimate %d seconds", estimate)
}
return nil return nil
} }
@ -263,18 +268,25 @@ func deleteReplicationControllers(kubeClient client.Interface, ns string) error
return nil return nil
} }
func deletePods(kubeClient client.Interface, ns string) error { func deletePods(kubeClient client.Interface, ns string) (int64, error) {
items, err := kubeClient.Pods(ns).List(labels.Everything(), fields.Everything()) items, err := kubeClient.Pods(ns).List(labels.Everything(), fields.Everything())
if err != nil { if err != nil {
return err return 0, err
} }
estimate := int64(0)
for i := range items.Items { for i := range items.Items {
if items.Items[i].Spec.TerminationGracePeriodSeconds != nil {
grace := *items.Items[i].Spec.TerminationGracePeriodSeconds
if grace > estimate {
estimate = grace
}
}
err := kubeClient.Pods(ns).Delete(items.Items[i].Name, nil) err := kubeClient.Pods(ns).Delete(items.Items[i].Name, nil)
if err != nil { if err != nil {
return err return 0, err
} }
} }
return nil return estimate, nil
} }
func deleteEvents(kubeClient client.Interface, ns string) error { func deleteEvents(kubeClient client.Interface, ns string) error {