in openwhisk/initHandler.go [167:228]
func (ap *ActionProxy) doInit(request initRequest, w http.ResponseWriter) error {
// request with empty code - stop any executor but return ok
if request.Value.Code == "" {
sendError(w, http.StatusForbidden, "Missing main/no code to execute.")
return fmt.Errorf("code in body is empty")
}
// passing the env to the action proxy
ap.SetEnv(request.Value.Env)
// setting main
main := request.Value.Main
if main == "" {
main = "main"
}
// extract code eventually decoding it
var buf []byte
if request.Value.Binary {
Debug("it is binary code")
b, err := base64.StdEncoding.DecodeString(request.Value.Code)
if err != nil {
sendError(w, http.StatusBadRequest, "cannot decode the request: "+err.Error())
return err
}
buf = b
} else {
Debug("it is source code")
buf = []byte(request.Value.Code)
}
// if a compiler is defined try to compile
_, err := ap.ExtractAndCompile(&buf, main)
if err != nil {
if os.Getenv("OW_LOG_INIT_ERROR") == "" {
sendError(w, http.StatusBadGateway, err.Error())
} else {
ap.errFile.Write([]byte(err.Error() + "\n"))
ap.outFile.Write([]byte(OutputGuard))
ap.errFile.Write([]byte(OutputGuard))
sendError(w, http.StatusBadGateway, "The action failed to generate or locate a binary. See logs for details.")
}
return err
}
// start an action
err = ap.StartLatestAction()
if err != nil {
if os.Getenv("OW_LOG_INIT_ERROR") == "" {
sendError(w, http.StatusBadGateway, "cannot start action: "+err.Error())
} else {
ap.errFile.Write([]byte(err.Error() + "\n"))
ap.outFile.Write([]byte(OutputGuard))
ap.errFile.Write([]byte(OutputGuard))
sendError(w, http.StatusBadGateway, "Cannot start action. Check logs for details.")
}
return err
}
ap.initialized = true
return nil
}