diff --git a/drivers/exec/driver.go b/drivers/exec/driver.go index 94c4ca5fba8..bf922a8f71c 100644 --- a/drivers/exec/driver.go +++ b/drivers/exec/driver.go @@ -592,14 +592,18 @@ func (d *Driver) handleWait(ctx context.Context, handle *taskHandle, ch chan *dr var result *drivers.ExitResult ps, err := handle.exec.Wait(ctx) if err != nil { - result = &drivers.ExitResult{ - Err: fmt.Errorf("executor: error waiting on process: %v", err), - } - // if process state is nil, we've probably been killed, so return a reasonable - // exit state to the handlers + // if process state is nil, the executor process likely crashed or was + // killed (e.g. OOM). Wrap the raw RPC error with a clearer message. if ps == nil { - result.ExitCode = -1 - result.OOMKilled = false + result = &drivers.ExitResult{ + Err: fmt.Errorf("executor: the executor process terminated unexpectedly: %v", err), + ExitCode: -1, + OOMKilled: false, + } + } else { + result = &drivers.ExitResult{ + Err: fmt.Errorf("executor: error waiting on process: %v", err), + } } } else { result = &drivers.ExitResult{ diff --git a/drivers/java/driver.go b/drivers/java/driver.go index bf7247de942..8af9f78e38f 100644 --- a/drivers/java/driver.go +++ b/drivers/java/driver.go @@ -601,14 +601,18 @@ func (d *Driver) handleWait(ctx context.Context, handle *taskHandle, ch chan *dr var result *drivers.ExitResult ps, err := handle.exec.Wait(ctx) if err != nil { - result = &drivers.ExitResult{ - Err: fmt.Errorf("executor: error waiting on process: %v", err), - } - // if process state is nil, we've probably been killed, so return a reasonable - // exit state to the handlers + // if process state is nil, the executor process likely crashed or was + // killed (e.g. OOM). Wrap the raw RPC error with a clearer message. if ps == nil { - result.ExitCode = -1 - result.OOMKilled = false + result = &drivers.ExitResult{ + Err: fmt.Errorf("executor: the executor process terminated unexpectedly: %v", err), + ExitCode: -1, + OOMKilled: false, + } + } else { + result = &drivers.ExitResult{ + Err: fmt.Errorf("executor: error waiting on process: %v", err), + } } } else { result = &drivers.ExitResult{ diff --git a/drivers/qemu/driver.go b/drivers/qemu/driver.go index d6c78a5fda2..150fd4ced99 100644 --- a/drivers/qemu/driver.go +++ b/drivers/qemu/driver.go @@ -831,14 +831,18 @@ func (d *Driver) handleWait(ctx context.Context, handle *taskHandle, ch chan *dr var result *drivers.ExitResult ps, err := handle.exec.Wait(ctx) if err != nil { - result = &drivers.ExitResult{ - Err: fmt.Errorf("executor: error waiting on process: %v", err), - } - // if process state is nil, we've probably been killed, so return a reasonable - // exit state to the handlers + // if process state is nil, the executor process likely crashed or was + // killed (e.g. OOM). Wrap the raw RPC error with a clearer message. if ps == nil { - result.ExitCode = -1 - result.OOMKilled = false + result = &drivers.ExitResult{ + Err: fmt.Errorf("executor: the executor process terminated unexpectedly: %v", err), + ExitCode: -1, + OOMKilled: false, + } + } else { + result = &drivers.ExitResult{ + Err: fmt.Errorf("executor: error waiting on process: %v", err), + } } } else { result = &drivers.ExitResult{ diff --git a/drivers/rawexec/driver.go b/drivers/rawexec/driver.go index 1af4a09e204..c66c07adacc 100644 --- a/drivers/rawexec/driver.go +++ b/drivers/rawexec/driver.go @@ -498,14 +498,18 @@ func (d *Driver) handleWait(ctx context.Context, handle *taskHandle, ch chan *dr var result *drivers.ExitResult ps, err := handle.exec.Wait(ctx) if err != nil { - result = &drivers.ExitResult{ - Err: fmt.Errorf("executor: error waiting on process: %v", err), - } - // if process state is nil, we've probably been killed, so return a reasonable - // exit state to the handlers + // if process state is nil, the executor process likely crashed or was + // killed (e.g. OOM). Wrap the raw RPC error with a clearer message. if ps == nil { - result.ExitCode = -1 - result.OOMKilled = false + result = &drivers.ExitResult{ + Err: fmt.Errorf("executor: the executor process terminated unexpectedly: %v", err), + ExitCode: -1, + OOMKilled: false, + } + } else { + result = &drivers.ExitResult{ + Err: fmt.Errorf("executor: error waiting on process: %v", err), + } } } else { result = &drivers.ExitResult{