If the container exit file is missing default exit code to -1
If I create a sandbox pod and then restart the ocid service, the pod ends up in a stopped state without an exit file. Whether this is a bug in ocid or not we should handle this case where a container exits so that we can clean up the container. This change just defaults to exit code to -1 if the container is not running and does not have an exit file. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
parent
987007862e
commit
d679da0645
1 changed files with 14 additions and 12 deletions
26
oci/oci.go
26
oci/oci.go
|
@ -429,20 +429,22 @@ func (r *Runtime) UpdateStatus(c *Container) error {
|
|||
exitFilePath := filepath.Join(c.bundlePath, "exit")
|
||||
fi, err := os.Stat(exitFilePath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to find container exit file: %v", err)
|
||||
}
|
||||
st := fi.Sys().(*syscall.Stat_t)
|
||||
c.state.Finished = time.Unix(st.Ctim.Sec, st.Ctim.Nsec)
|
||||
logrus.Warnf("failed to find container exit file: %v", err)
|
||||
c.state.ExitCode = -1
|
||||
} else {
|
||||
st := fi.Sys().(*syscall.Stat_t)
|
||||
c.state.Finished = time.Unix(st.Ctim.Sec, st.Ctim.Nsec)
|
||||
|
||||
statusCodeStr, err := ioutil.ReadFile(exitFilePath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read exit file: %v", err)
|
||||
statusCodeStr, err := ioutil.ReadFile(exitFilePath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read exit file: %v", err)
|
||||
}
|
||||
statusCode, err := strconv.Atoi(string(statusCodeStr))
|
||||
if err != nil {
|
||||
return fmt.Errorf("status code conversion failed: %v", err)
|
||||
}
|
||||
c.state.ExitCode = int32(statusCode)
|
||||
}
|
||||
statusCode, err := strconv.Atoi(string(statusCodeStr))
|
||||
if err != nil {
|
||||
return fmt.Errorf("status code conversion failed: %v", err)
|
||||
}
|
||||
c.state.ExitCode = int32(statusCode)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
Loading…
Reference in a new issue