Skip to content

Commit 6319ed1

Browse files
committed
vfkit: More robust Kill()
We know that setting the state to `HardStop` typically fails: I0309 19:19:42.378591 21795 out.go:177] 🔥 Deleting "minikube" in vfkit ... W0309 19:19:42.397472 21795 delete.go:106] remove failed, will retry: kill: Post "http://_/vm/state": EOF This may lead to unnecessary retries and delays. Fix by falling back to sending a SIGKILL signal. Example delete flow when setting vfkit state fails: I0309 20:07:41.688259 25540 out.go:177] 🔥 Deleting "minikube" in vfkit ... I0309 20:07:41.712017 25540 main.go:141] libmachine: Failed to set vfkit state to 'HardStop': Post "http://_/vm/state": EOF
1 parent 233c0ff commit 6319ed1

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

pkg/drivers/vfkit/vfkit.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,27 @@ func (d *Driver) extractKernel(isoPath string) error {
369369

370370
func (d *Driver) Kill() error {
371371
if err := d.SetVFKitState("HardStop"); err != nil {
372-
return err
372+
// Typically fails with EOF due to https://github.com/crc-org/vfkit/issues/277.
373+
log.Debugf("Failed to set vfkit state to 'HardStop': %s", err)
374+
pidfile := d.pidfilePath()
375+
pid, err := process.ReadPidfile(pidfile)
376+
if err != nil {
377+
if !errors.Is(err, os.ErrNotExist) {
378+
return err
379+
}
380+
// No pidfile.
381+
return nil
382+
}
383+
if err := process.Kill(pid, "vfkit"); err != nil {
384+
if err != os.ErrProcessDone {
385+
return err
386+
}
387+
// No process, stale pidfile.
388+
if err := os.Remove(pidfile); err != nil {
389+
log.Debugf("failed to remove %q: %s", pidfile, err)
390+
}
391+
return nil
392+
}
373393
}
374394
return nil
375395
}

0 commit comments

Comments
 (0)