提交 a6372b35 编写于 作者: P Priya Wadhwa

Add 5 minute timeout to deleting leftover cvolumes and containers

上级 9b147f78
...@@ -17,6 +17,7 @@ limitations under the License. ...@@ -17,6 +17,7 @@ limitations under the License.
package cmd package cmd
import ( import (
"context"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
...@@ -241,14 +242,15 @@ func deletePossibleKicLeftOver(cname string, driverName string) { ...@@ -241,14 +242,15 @@ func deletePossibleKicLeftOver(cname string, driverName string) {
return return
} }
klog.Infof("deleting possible KIC leftovers for %s (driver=%s) ...", cname, driverName) klog.Infof("deleting possible KIC leftovers for %s (driver=%s) with timeout of 5m...", cname, driverName)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
defer cancel()
delLabel := fmt.Sprintf("%s=%s", oci.ProfileLabelKey, cname) delLabel := fmt.Sprintf("%s=%s", oci.ProfileLabelKey, cname)
cs, err := oci.ListContainersByLabel(bin, delLabel) cs, err := oci.ListContainersByLabel(ctx, bin, delLabel)
if err == nil && len(cs) > 0 { if err == nil && len(cs) > 0 {
for _, c := range cs { for _, c := range cs {
out.Step(style.DeletingHost, `Deleting container "{{.name}}" ...`, out.V{"name": cname}) out.Step(style.DeletingHost, `Deleting container "{{.name}}" ...`, out.V{"name": cname})
err := oci.DeleteContainer(bin, c) err := oci.DeleteContainer(ctx, bin, c)
if err != nil { // it will error if there is no container to delete if err != nil { // it will error if there is no container to delete
klog.Errorf("error deleting container %q. You may want to delete it manually :\n%v", cname, err) klog.Errorf("error deleting container %q. You may want to delete it manually :\n%v", cname, err)
} }
......
...@@ -72,6 +72,7 @@ func NewDriver(c Config) *Driver { ...@@ -72,6 +72,7 @@ func NewDriver(c Config) *Driver {
// Create a host using the driver's config // Create a host using the driver's config
func (d *Driver) Create() error { func (d *Driver) Create() error {
ctx := context.Background()
params := oci.CreateParams{ params := oci.CreateParams{
Mounts: d.NodeConfig.Mounts, Mounts: d.NodeConfig.Mounts,
Name: d.NodeConfig.MachineName, Name: d.NodeConfig.MachineName,
...@@ -136,7 +137,7 @@ func (d *Driver) Create() error { ...@@ -136,7 +137,7 @@ func (d *Driver) Create() error {
// if container was created by minikube it is safe to delete and recreate it. // if container was created by minikube it is safe to delete and recreate it.
if oci.IsCreatedByMinikube(d.OCIBinary, params.Name) { if oci.IsCreatedByMinikube(d.OCIBinary, params.Name) {
klog.Info("Found already existing abandoned minikube container, will try to delete.") klog.Info("Found already existing abandoned minikube container, will try to delete.")
if err := oci.DeleteContainer(d.OCIBinary, params.Name); err != nil { if err := oci.DeleteContainer(ctx, d.OCIBinary, params.Name); err != nil {
klog.Errorf("Failed to delete a conflicting minikube container %s. You might need to restart your %s daemon and delete it manually and try again: %v", params.Name, params.OCIBinary, err) klog.Errorf("Failed to delete a conflicting minikube container %s. You might need to restart your %s daemon and delete it manually and try again: %v", params.Name, params.OCIBinary, err)
} }
} else { } else {
...@@ -338,7 +339,7 @@ func (d *Driver) Remove() error { ...@@ -338,7 +339,7 @@ func (d *Driver) Remove() error {
klog.Infof("could not find the container %s to remove it. will try anyways", d.MachineName) klog.Infof("could not find the container %s to remove it. will try anyways", d.MachineName)
} }
if err := oci.DeleteContainer(d.NodeConfig.OCIBinary, d.MachineName); err != nil { if err := oci.DeleteContainer(context.Background(), d.NodeConfig.OCIBinary, d.MachineName); err != nil {
if strings.Contains(err.Error(), "is already in progress") { if strings.Contains(err.Error(), "is already in progress") {
return errors.Wrap(err, "stuck delete") return errors.Wrap(err, "stuck delete")
} }
......
...@@ -43,8 +43,8 @@ import ( ...@@ -43,8 +43,8 @@ import (
// if there no containers found with the given label, it will return nil // if there no containers found with the given label, it will return nil
func DeleteContainersByLabel(ociBin string, label string) []error { func DeleteContainersByLabel(ociBin string, label string) []error {
var deleteErrs []error var deleteErrs []error
ctx := context.Background()
cs, err := ListContainersByLabel(ociBin, label) cs, err := ListContainersByLabel(ctx, ociBin, label)
if err != nil { if err != nil {
return []error{fmt.Errorf("listing containers by label %q", label)} return []error{fmt.Errorf("listing containers by label %q", label)}
} }
...@@ -75,7 +75,7 @@ func DeleteContainersByLabel(ociBin string, label string) []error { ...@@ -75,7 +75,7 @@ func DeleteContainersByLabel(ociBin string, label string) []error {
} }
// DeleteContainer deletes a container by ID or Name // DeleteContainer deletes a container by ID or Name
func DeleteContainer(ociBin string, name string) error { func DeleteContainer(ctx context.Context, ociBin string, name string) error {
_, err := ContainerStatus(ociBin, name) _, err := ContainerStatus(ociBin, name)
if err == context.DeadlineExceeded { if err == context.DeadlineExceeded {
out.WarningT("{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}", out.V{"ociBin": ociBin}) out.WarningT("{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}", out.V{"ociBin": ociBin})
...@@ -87,7 +87,7 @@ func DeleteContainer(ociBin string, name string) error { ...@@ -87,7 +87,7 @@ func DeleteContainer(ociBin string, name string) error {
klog.Infof("couldn't shut down %s (might be okay): %v ", name, err) klog.Infof("couldn't shut down %s (might be okay): %v ", name, err)
} }
if _, err := runCmd(exec.Command(ociBin, "rm", "-f", "-v", name)); err != nil { if _, err := runCmd(exec.CommandContext(ctx, ociBin, "rm", "-f", "-v", name)); err != nil {
return errors.Wrapf(err, "delete %s", name) return errors.Wrapf(err, "delete %s", name)
} }
return nil return nil
...@@ -373,7 +373,7 @@ func IsCreatedByMinikube(ociBin string, nameOrID string) bool { ...@@ -373,7 +373,7 @@ func IsCreatedByMinikube(ociBin string, nameOrID string) bool {
// ListOwnedContainers lists all the containres that kic driver created on user's machine using a label // ListOwnedContainers lists all the containres that kic driver created on user's machine using a label
func ListOwnedContainers(ociBin string) ([]string, error) { func ListOwnedContainers(ociBin string) ([]string, error) {
return ListContainersByLabel(ociBin, ProfileLabelKey) return ListContainersByLabel(context.Background(), ociBin, ProfileLabelKey)
} }
// inspect return low-level information on containers // inspect return low-level information on containers
...@@ -503,8 +503,8 @@ func withPortMappings(portMappings []PortMapping) createOpt { ...@@ -503,8 +503,8 @@ func withPortMappings(portMappings []PortMapping) createOpt {
} }
// ListContainersByLabel returns all the container names with a specified label // ListContainersByLabel returns all the container names with a specified label
func ListContainersByLabel(ociBin string, label string, warnSlow ...bool) ([]string, error) { func ListContainersByLabel(ctx context.Context, ociBin string, label string, warnSlow ...bool) ([]string, error) {
rr, err := runCmd(exec.Command(ociBin, "ps", "-a", "--filter", fmt.Sprintf("label=%s", label), "--format", "{{.Names}}"), warnSlow...) rr, err := runCmd(exec.CommandContext(ctx, ociBin, "ps", "-a", "--filter", fmt.Sprintf("label=%s", label), "--format", "{{.Names}}"), warnSlow...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册