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:
@@ -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())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user