pkg/machine: ignore gvproxy pidfile not exists error

When gvproxy exits it will delete the pidfile itself so we need to
account for that and juts ignore the case, it just means gvproxy was
able to exit successfully on its own.

Also remove the useless defer and return the error so we can get an
error exit code not just a print on stderr.

Currently it shows this error which is not helpful to any user:
unable to clean up gvproxy: "unable to read gvproxy pid file /run/user/1000/podman/gvproxy.pid: open /run/user/1000/podman/gvproxy.pid: no such file or directory"

[NO NEW TESTS NEEDED] TODO: make machine tests check stderr for such
things.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
Paul Holzinger
2024-02-22 12:33:10 +01:00
parent 669e718561
commit 6f6925cca4
2 changed files with 11 additions and 7 deletions

View File

@ -1,7 +1,9 @@
package machine package machine
import ( import (
"errors"
"fmt" "fmt"
"io/fs"
"strconv" "strconv"
"github.com/containers/podman/v5/pkg/machine/define" "github.com/containers/podman/v5/pkg/machine/define"
@ -11,7 +13,12 @@ import (
func CleanupGVProxy(f define.VMFile) error { func CleanupGVProxy(f define.VMFile) error {
gvPid, err := f.Read() gvPid, err := f.Read()
if err != nil { if err != nil {
return fmt.Errorf("unable to read gvproxy pid file %s: %v", f.GetPath(), err) // The file will also be removed by gvproxy when it exits so
// we need to account for the race and can just ignore it here.
if errors.Is(err, fs.ErrNotExist) {
return nil
}
return fmt.Errorf("unable to read gvproxy pid file: %v", err)
} }
proxyPid, err := strconv.Atoi(string(gvPid)) proxyPid, err := strconv.Atoi(string(gvPid))
if err != nil { if err != nil {

View File

@ -341,12 +341,9 @@ func Stop(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, dirs *machineDef
if err != nil { if err != nil {
return err return err
} }
if err := machine.CleanupGVProxy(*gvproxyPidFile); err != nil {
defer func() { return fmt.Errorf("unable to clean up gvproxy: %w", err)
if err := machine.CleanupGVProxy(*gvproxyPidFile); err != nil { }
logrus.Errorf("unable to clean up gvproxy: %q", err)
}
}()
} }
return nil return nil