ociswrapper: retry restarting ocis if it dies

This commit is contained in:
Saw-jan
2023-08-21 09:55:49 +05:45
parent f0ed33d348
commit 3c97bc5c53
2 changed files with 30 additions and 10 deletions

View File

@@ -7,5 +7,9 @@ func Println(message string) {
}
func Panic(err error) {
log.Panic("[ociswrapper] ", err.Error())
log.Panic("[ociswrapper]", err.Error())
}
func Fatalln(err error) {
log.Fatalln("[ociswrapper]", err.Error())
}

View File

@@ -8,6 +8,7 @@ import (
"os"
"os/exec"
"strconv"
"syscall"
"time"
"ociswrapper/common"
@@ -58,23 +59,38 @@ func Start(envMap map[string]any) {
for outputScanner.Scan() {
m := outputScanner.Text()
fmt.Println(m)
retryCount++
}
maxRetry, _ := strconv.Atoi(config.Get("retry"))
if retryCount <= maxRetry {
log.Println(fmt.Sprintf("Retry starting oCIS server... (retry %v)", retryCount))
// Stop and start again
Stop()
Start(envMap)
if err := cmd.Wait(); err != nil {
if exitErr, ok := err.(*exec.ExitError); ok {
status := exitErr.Sys().(syscall.WaitStatus)
// retry only if oCIS server exited with code > 0
// -1 exit code means that the process was killed by a signal (cmd.Process.Kill())
if status.ExitStatus() > 0 {
log.Println(fmt.Sprintf("oCIS server exited with code %v", status.ExitStatus()))
// retry to start oCIS server
retryCount++
retryCount++
retryCount++
maxRetry, _ := strconv.Atoi(config.Get("retry"))
if retryCount <= maxRetry {
log.Println(fmt.Sprintf("Retry starting oCIS server... (retry %v)", retryCount))
// Stop and start again
Stop()
Start(envMap)
}
}
}
}
cmd.Wait()
}
func Stop() {
err := cmd.Process.Kill()
if err != nil {
log.Panic(err)
log.Fatalln(err)
}
cmd.Wait()
}