feat(executor/local): set output on executor error

This commit is contained in:
张泊明518370910136 2025-03-20 18:22:20 -04:00
parent b6edc2c571
commit 0954bfdbd0
GPG Key ID: D47306D7062CDA9D

View File

@ -20,6 +20,7 @@ func (e *Local) generateResult(
runTime time.Duration,
cmd stage.Cmd,
stdoutBuffer, stderrBuffer bytes.Buffer,
isTimeout bool,
) stage.ExecutorResult {
result := stage.ExecutorResult{
Status: stage.StatusAccepted,
@ -65,6 +66,9 @@ func (e *Local) generateResult(
result.Error = err.Error()
}
}
if isTimeout {
result.Status = stage.StatusTimeLimitExceeded
}
if cmd.Stdout != nil && cmd.Stdout.Name != nil {
result.Files[*cmd.Stdout.Name] = stdoutBuffer.String()
@ -122,9 +126,8 @@ func (e *Local) Run(cmds []stage.Cmd) ([]stage.ExecutorResult, error) {
done <- execCmd.Wait()
}()
if cmd.ClockLimit > 0 {
var duration time.Duration
if cmd.ClockLimit > uint64(math.MaxInt64) {
if cmd.ClockLimit > uint64(math.MaxInt64) || cmd.ClockLimit <= 0 {
duration = time.Duration(math.MaxInt64)
} else {
duration = time.Duration(cmd.ClockLimit) * time.Nanosecond // #nosec G115
@ -140,29 +143,19 @@ func (e *Local) Run(cmds []stage.Cmd) ([]stage.ExecutorResult, error) {
cmd,
stdoutBuffer,
stderrBuffer,
false,
)
results = append(results, result)
case <-time.After(duration):
_ = execCmd.Process.Kill()
result := stage.ExecutorResult{
Status: stage.StatusTimeLimitExceeded,
Error: "",
Files: map[string]string{},
FileIDs: map[string]string{},
}
results = append(results, result)
}
} else {
err := <-done
endTime := time.Now()
runTime := endTime.Sub(startTime)
result := e.generateResult(
err,
nil,
execCmd.ProcessState,
runTime,
duration,
cmd,
stdoutBuffer,
stderrBuffer,
true,
)
results = append(results, result)
}