-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Complete WSL implementation, refactor a few areas
Also addresses a number of issues: - StopHostNetworking isn't plumbed, win-sshproxy leaks on hyperv - Wait api and print output doesn't work properly on Windows - API forwarding doesn't work on WSL - Terminal corruption with after start/stop on Windows - Gvproxy is forcefully killed vs gracefully quit - Switching rootful/rootless does not update /var/run/docker.sock on the guest - File already closed error on init - HyperV backend is publishing Unix sockets when it should be named pipes - User-mode networking doesn't always work - Stop state outside of lock boundaries - WSL blocks parallel machined (should be supported) [NO NEW TESTS NEEDED] Signed-off-by: Jason T. Greene <[email protected]>
- Loading branch information
Showing
44 changed files
with
1,710 additions
and
276 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd | ||
|
||
package machine | ||
|
||
import ( | ||
"errors" | ||
"fmt" | ||
"syscall" | ||
|
||
psutil "github.com/shirou/gopsutil/v3/process" | ||
"github.com/sirupsen/logrus" | ||
) | ||
|
||
// / waitOnProcess takes a pid and sends a sigterm to it. it then waits for the | ||
// process to not exist. if the sigterm does not end the process after an interval, | ||
// then sigkill is sent. it also waits for the process to exit after the sigkill too. | ||
func waitOnProcess(processID int) error { | ||
logrus.Infof("Going to stop gvproxy (PID %d)", processID) | ||
|
||
p, err := psutil.NewProcess(int32(processID)) | ||
if err != nil { | ||
return fmt.Errorf("looking up PID %d: %w", processID, err) | ||
} | ||
|
||
running, err := p.IsRunning() | ||
if err != nil { | ||
return fmt.Errorf("checking if gvproxy is running: %w", err) | ||
} | ||
if !running { | ||
return nil | ||
} | ||
|
||
if err := p.Kill(); err != nil { | ||
if errors.Is(err, syscall.ESRCH) { | ||
logrus.Debugf("Gvproxy already dead, exiting cleanly") | ||
return nil | ||
} | ||
return err | ||
} | ||
return backoffForProcess(p) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package machine | ||
|
||
import ( | ||
"os" | ||
"time" | ||
|
||
"github.com/containers/winquit/pkg/winquit" | ||
"github.com/sirupsen/logrus" | ||
) | ||
|
||
func waitOnProcess(processID int) error { | ||
logrus.Infof("Going to stop gvproxy (PID %d)", processID) | ||
|
||
p, err := os.FindProcess(processID) | ||
if err != nil { | ||
return nil | ||
} | ||
|
||
// Gracefully quit and force kill after 30 seconds | ||
if err := winquit.QuitProcess(processID, 30*time.Second); err != nil { | ||
return err | ||
} | ||
|
||
logrus.Debugf("completed grace quit || kill of gvproxy (PID %d)", processID) | ||
|
||
// Make sure the process is gone | ||
done := make(chan struct{}) | ||
go func() { | ||
_, _ = p.Wait() | ||
done <- struct{}{} | ||
}() | ||
|
||
select { | ||
case <-done: | ||
logrus.Debugf("verified gvproxy termination (PID %d)", processID) | ||
case <-time.After(10 * time.Second): | ||
// Very unlikely but track just in case | ||
logrus.Errorf("was not able to kill gvproxy (PID %d)", processID) | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.