aboutsummaryrefslogtreecommitdiffstats
path: root/vm
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2023-07-21 11:51:35 +0200
committerTaras Madan <tarasmadan@google.com>2023-07-24 09:12:13 +0000
commita36fe24b8383f6cd9b3519cd3eabdb9675d8992d (patch)
tree3fef9a57760ccc4013289acd60e94e083db466e6 /vm
parent7549a7e1b57831cf6b08ce4700fc6e53417919f9 (diff)
all: use errors.As instead of .(type)
Diffstat (limited to 'vm')
-rw-r--r--vm/gce/gce.go6
-rw-r--r--vm/vmimpl/merger_test.go4
-rw-r--r--vm/vmimpl/vmimpl.go9
3 files changed, 11 insertions, 8 deletions
diff --git a/vm/gce/gce.go b/vm/gce/gce.go
index 60a88010c..5c91f08de 100644
--- a/vm/gce/gce.go
+++ b/vm/gce/gce.go
@@ -15,6 +15,7 @@ import (
"archive/tar"
"bytes"
"compress/gzip"
+ "errors"
"fmt"
"io"
"os"
@@ -318,14 +319,15 @@ func (inst *instance) Run(timeout time.Duration, stop <-chan bool, command strin
ssh.Process.Kill()
merger.Wait()
con.Wait()
+ var mergeError *vmimpl.MergerError
if cmdErr := ssh.Wait(); cmdErr == nil {
// If the command exited successfully, we got EOF error from merger.
// But in this case no error has happened and the EOF is expected.
err = nil
- } else if merr, ok := err.(vmimpl.MergerError); ok && merr.R == conRpipe {
+ } else if errors.As(err, &mergeError) && mergeError.R == conRpipe {
// Console connection must never fail. If it does, it's either
// instance preemption or a GCE bug. In either case, not a kernel bug.
- log.Logf(0, "%v: gce console connection failed with %v", inst.name, merr.Err)
+ log.Logf(0, "%v: gce console connection failed with %v", inst.name, mergeError.Err)
err = vmimpl.ErrTimeout
} else {
// Check if the instance was terminated due to preemption or host maintenance.
diff --git a/vm/vmimpl/merger_test.go b/vm/vmimpl/merger_test.go
index 8308aff5e..ef5570509 100644
--- a/vm/vmimpl/merger_test.go
+++ b/vm/vmimpl/merger_test.go
@@ -5,6 +5,7 @@ package vmimpl
import (
"bytes"
+ "errors"
"io"
"testing"
"time"
@@ -62,9 +63,10 @@ func TestMerger(t *testing.T) {
t.Fatalf("bad line: '%s', want '%s'", got, want)
}
+ var merr MergerError
if err := <-merger.Err; err == nil {
t.Fatalf("merger did not produce an error on pipe close")
- } else if merr := err.(MergerError); merr.Name != "pipe1" || merr.R != rp1 || merr.Err != io.EOF {
+ } else if !errors.As(err, &merr) || merr.Name != "pipe1" || merr.R != rp1 || merr.Err != io.EOF {
t.Fatalf("merger produced wrong error: %v", err)
}
diff --git a/vm/vmimpl/vmimpl.go b/vm/vmimpl/vmimpl.go
index 9dbd61a92..0a4ada028 100644
--- a/vm/vmimpl/vmimpl.go
+++ b/vm/vmimpl/vmimpl.go
@@ -93,12 +93,11 @@ type BootError struct {
}
func MakeBootError(err error, output []byte) error {
- switch err1 := err.(type) {
- case *osutil.VerboseError:
- return BootError{err1.Title, append(err1.Output, output...)}
- default:
- return BootError{err.Error(), output}
+ var verboseError *osutil.VerboseError
+ if errors.As(err, &verboseError) {
+ return BootError{verboseError.Title, append(verboseError.Output, output...)}
}
+ return BootError{err.Error(), output}
}
func (err BootError) Error() string {