mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 18:24:07 +00:00
Merge pull request #103780 from shyamjvs/fix-exec-command
Ignore 'wait: no child processes' error when calling mount/umount
This commit is contained in:
commit
f3e9fdc642
@ -45,6 +45,8 @@ const (
|
|||||||
fsckErrorsCorrected = 1
|
fsckErrorsCorrected = 1
|
||||||
// 'fsck' found errors but exited without correcting them
|
// 'fsck' found errors but exited without correcting them
|
||||||
fsckErrorsUncorrected = 4
|
fsckErrorsUncorrected = 4
|
||||||
|
// Error thrown by exec cmd.Run() when process spawned by cmd.Start() completes before cmd.Wait() is called (see - k/k issue #103753)
|
||||||
|
errNoChildProcesses = "wait: no child processes"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Mounter provides the default implementation of mount.Interface
|
// Mounter provides the default implementation of mount.Interface
|
||||||
@ -176,6 +178,14 @@ func (mounter *Mounter) doMount(mounterPath string, mountCmd string, source stri
|
|||||||
command := exec.Command(mountCmd, mountArgs...)
|
command := exec.Command(mountCmd, mountArgs...)
|
||||||
output, err := command.CombinedOutput()
|
output, err := command.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if err.Error() == errNoChildProcesses {
|
||||||
|
if command.ProcessState.Success() {
|
||||||
|
// We don't consider errNoChildProcesses an error if the process itself succeeded (see - k/k issue #103753).
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
// Rewrite err with the actual exit error of the process.
|
||||||
|
err = &exec.ExitError{ProcessState: command.ProcessState}
|
||||||
|
}
|
||||||
klog.Errorf("Mount failed: %v\nMounting command: %s\nMounting arguments: %s\nOutput: %s\n", err, mountCmd, mountArgsLogStr, string(output))
|
klog.Errorf("Mount failed: %v\nMounting command: %s\nMounting arguments: %s\nOutput: %s\n", err, mountCmd, mountArgsLogStr, string(output))
|
||||||
return fmt.Errorf("mount failed: %v\nMounting command: %s\nMounting arguments: %s\nOutput: %s",
|
return fmt.Errorf("mount failed: %v\nMounting command: %s\nMounting arguments: %s\nOutput: %s",
|
||||||
err, mountCmd, mountArgsLogStr, string(output))
|
err, mountCmd, mountArgsLogStr, string(output))
|
||||||
@ -267,6 +277,14 @@ func (mounter *Mounter) Unmount(target string) error {
|
|||||||
command := exec.Command("umount", target)
|
command := exec.Command("umount", target)
|
||||||
output, err := command.CombinedOutput()
|
output, err := command.CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if err.Error() == errNoChildProcesses {
|
||||||
|
if command.ProcessState.Success() {
|
||||||
|
// We don't consider errNoChildProcesses an error if the process itself succeeded (see - k/k issue #103753).
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
// Rewrite err with the actual exit error of the process.
|
||||||
|
err = &exec.ExitError{ProcessState: command.ProcessState}
|
||||||
|
}
|
||||||
return fmt.Errorf("unmount failed: %v\nUnmounting arguments: %s\nOutput: %s", err, target, string(output))
|
return fmt.Errorf("unmount failed: %v\nUnmounting arguments: %s\nOutput: %s", err, target, string(output))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user