Merge pull request #7072 from owncloud/tests/print-err-message

[tests-only][ociswrapper] Fix oCIS restart when it exits unexpectedly during startup
This commit is contained in:
kobergj
2023-09-21 13:52:05 +02:00
committed by GitHub
3 changed files with 30 additions and 11 deletions
+5 -1
View File
@@ -7,5 +7,9 @@ func Println(message string) {
} }
func Panic(err error) { func Panic(err error) {
log.Panic("[ociswrapper] ", err.Error()) log.Panic("[ociswrapper]", err.Error())
}
func Fatalln(err error) {
log.Fatalln("[ociswrapper]", err.Error())
} }
+24 -9
View File
@@ -8,6 +8,8 @@ import (
"os" "os"
"os/exec" "os/exec"
"strconv" "strconv"
"strings"
"syscall"
"time" "time"
"ociswrapper/common" "ociswrapper/common"
@@ -58,23 +60,36 @@ func Start(envMap map[string]any) {
for outputScanner.Scan() { for outputScanner.Scan() {
m := outputScanner.Text() m := outputScanner.Text()
fmt.Println(m) fmt.Println(m)
retryCount++ }
maxRetry, _ := strconv.Atoi(config.Get("retry")) if err := cmd.Wait(); err != nil {
if retryCount <= maxRetry { if exitErr, ok := err.(*exec.ExitError); ok {
log.Println(fmt.Sprintf("Retry starting oCIS server... (retry %v)", retryCount)) status := exitErr.Sys().(syscall.WaitStatus)
// Stop and start again // retry only if oCIS server exited with code > 0
Stop() // -1 exit code means that the process was killed by a signal (cmd.Process.Kill())
Start(envMap) if status.ExitStatus() > 0 {
log.Println(fmt.Sprintf("oCIS server exited with code %v", status.ExitStatus()))
// retry to start oCIS server
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() { func Stop() {
err := cmd.Process.Kill() err := cmd.Process.Kill()
if err != nil { if err != nil {
log.Panic(err) if !strings.HasSuffix(err.Error(), "process already finished") {
log.Fatalln(err)
}
} }
cmd.Wait() cmd.Wait()
} }
@@ -31,7 +31,7 @@ func sendResponse(res http.ResponseWriter, ocisStatus bool) {
} else { } else {
res.WriteHeader(http.StatusInternalServerError) res.WriteHeader(http.StatusInternalServerError)
resBody["status"] = "ERROR" resBody["status"] = "ERROR"
resBody["message"] = "oCIS server error" resBody["message"] = "Unable to start oCIS server"
} }
res.Header().Set("Content-Type", "application/json") res.Header().Set("Content-Type", "application/json")