diff --git a/pkg/pillar/diskmetrics/diskmetrics.go b/pkg/pillar/diskmetrics/diskmetrics.go index e620c0ce9f..2ed357933e 100644 --- a/pkg/pillar/diskmetrics/diskmetrics.go +++ b/pkg/pillar/diskmetrics/diskmetrics.go @@ -16,6 +16,11 @@ import ( "github.com/lf-edge/eve/pkg/pillar/types" ) +const qemuExecTimeout = 2 * time.Minute + +// qemuExecLongTimeout is a long timeout for command executions in separate worker thread that don't interfere with the watchdog +const qemuExecLongTimeout = 1000 * time.Second + func GetImgInfo(log *base.LogObject, diskfile string) (*types.ImgInfo, error) { var imgInfo types.ImgInfo @@ -23,7 +28,7 @@ func GetImgInfo(log *base.LogObject, diskfile string) (*types.ImgInfo, error) { return nil, err } output, err := base.Exec(log, "/usr/bin/qemu-img", "info", "-U", "--output=json", - diskfile).CombinedOutput() + diskfile).WithUnlimitedTimeout(qemuExecLongTimeout).CombinedOutput() if err != nil { errStr := fmt.Sprintf("qemu-img failed: %s, %s\n", err, output) @@ -64,7 +69,7 @@ func ResizeImg(ctx context.Context, log *base.LogObject, diskfile string, newsiz return err } output, err := base.Exec(log, "/usr/bin/qemu-img", "resize", diskfile, - strconv.FormatUint(newsize, 10)).WithContext(ctx).CombinedOutput() + strconv.FormatUint(newsize, 10)).WithContext(ctx).WithUnlimitedTimeout(qemuExecLongTimeout).CombinedOutput() if err != nil { errStr := fmt.Sprintf("qemu-img failed: %s, %s\n", err, output) @@ -76,7 +81,7 @@ func ResizeImg(ctx context.Context, log *base.LogObject, diskfile string, newsiz // CreateImg creates empty diskfile with defined format and size func CreateImg(ctx context.Context, log *base.LogObject, diskfile string, format string, size uint64) error { output, err := base.Exec(log, "/usr/bin/qemu-img", "create", "-f", format, diskfile, - strconv.FormatUint(size, 10)).WithContext(ctx).CombinedOutput() + strconv.FormatUint(size, 10)).WithContext(ctx).WithUnlimitedTimeout(qemuExecLongTimeout).CombinedOutput() if err != nil { errStr := fmt.Sprintf("qemu-img failed: %s, %s\n", err, output) @@ -93,7 +98,7 @@ func RolloutImgToBlock(ctx context.Context, log *base.LogObject, diskfile, outpu // writeback cache instead of default unsafe, out of order enabled, skip file creation // Timeout 2 hours args := []string{"convert", "--target-is-zero", "-t", "writeback", "-W", "-n", "-O", outputFormat, diskfile, outputFile} - output, err := base.Exec(log, "/usr/bin/qemu-img", args...).WithContext(ctx).WithUnlimitedTimeout(15 * time.Minute).CombinedOutput() + output, err := base.Exec(log, "/usr/bin/qemu-img", args...).WithContext(ctx).WithUnlimitedTimeout(qemuExecLongTimeout).CombinedOutput() if err != nil { errStr := fmt.Sprintf("qemu-img failed: %s, %s\n", err, output)