in openwhisk/actionProxy.go [153:205]
func (ap *ActionProxy) StartLatestAction() error {
// find the action if any
highestDir := highestDir(ap.baseDir)
if highestDir == 0 {
Debug("no action found")
ap.theExecutor = nil
return fmt.Errorf("no valid actions available")
}
// check version
execEnv := os.Getenv("OW_EXECUTION_ENV")
if execEnv != "" {
execEnvFile := fmt.Sprintf("%s/%d/bin/exec.env", ap.baseDir, highestDir)
execEnvData, err := os.ReadFile(execEnvFile)
if err != nil {
return err
}
if strings.TrimSpace(string(execEnvData)) != execEnv {
fmt.Printf("Expected exec.env should start with %s\nActual value: %s", execEnv, execEnvData)
return fmt.Errorf("execution environment version mismatch. See logs for details")
}
}
// save the current executor
curExecutor := ap.theExecutor
// try to launch the action
executable := fmt.Sprintf("%s/%d/bin/exec", ap.baseDir, highestDir)
os.Chmod(executable, 0755)
newExecutor := NewExecutor(ap.outFile, ap.errFile, executable, ap.env)
Debug("starting %s", executable)
// start executor
err := newExecutor.Start(os.Getenv("OW_WAIT_FOR_ACK") != "")
if err == nil {
ap.theExecutor = newExecutor
if curExecutor != nil {
Debug("stopping old executor")
curExecutor.Stop()
}
return nil
}
// cannot start, removing the action
// and leaving the current executor running
if !Debugging {
exeDir := fmt.Sprintf("./action/%d/", highestDir)
Debug("removing the failed action in %s", exeDir)
os.RemoveAll(exeDir)
}
return err
}