Giter VIP home page Giter VIP logo

Comments (1)

yaroslav-gwit avatar yaroslav-gwit commented on June 28, 2024

Completely re-written the main() function loop to deal with all possible child exit cases:

		done := make(chan error)
		startVmProcess(hupCmd, done)
		wg.Wait()

		processErr := <-done
		if processErr != nil {
			logFileOutput(LOG_SUPERVISOR, "VM child process ended with a non-zero exit code: " + processErr.Error())
		}

		processExitStatus, correctReturnType := processErr.(*exec.ExitError)
		if correctReturnType {
			exitCode := processExitStatus.ProcessState.ExitCode()
			if exitCode == 1 || exitCode == 2 {
				logFileOutput(LOG_SUPERVISOR, "Bhyve received a shutdown signal: " + strconv.Itoa(exitCode) + ". Executing the shutdown sequence...")
				logFileOutput(LOG_SUPERVISOR, "Shutting down -> Performing network cleanup")
				cmd.NetworkCleanup(vmName, true)
				logFileOutput(LOG_SUPERVISOR, "Shutting down -> Performing Bhyve cleanup")
				cmd.BhyvectlDestroy(vmName, true)
				logFileOutput(LOG_SUPERVISOR, "SUPERVISED SESSION ENDED. The VM has been shutdown.")
				os.Exit(0)
			} else {
				logFileOutput(LOG_SUPERVISOR, "Bhyve returned a panic exit code: " + strconv.Itoa(exitCode))
				logFileOutput(LOG_SUPERVISOR, "Shutting down all VM related processes and performing system clean up")
				cmd.NetworkCleanup(vmName, true)
				cmd.BhyvectlDestroy(vmName, true)
				logFileOutput(LOG_SUPERVISOR, "SUPERVISED SESSION ENDED. Unexpected exit code.")
				os.Exit(101)
			}
		} else {
			logFileOutput(LOG_SUPERVISOR, "Bhyve received a reboot signal. Executing the reboot sequence...")
			logFileOutput(LOG_SUPERVISOR, "Rebooting -> Performing network cleanup")
			cmd.NetworkCleanup(vmName, true)
			logFileOutput(LOG_SUPERVISOR, "Rebooting -> Performing Bhyve cleanup")
			cmd.BhyvectlDestroy(vmName, true)
			logFileOutput(LOG_SUPERVISOR, "SUPERVISED SESSION ENDED. The VM will start back up in a moment.")
			restartVmProcess(vmName)
			os.Exit(0)
		}
		logFileOutput(LOG_SUPERVISOR, "SUPERVISED SESSION ENDED. SOMETHING UNPREDICTED HAPPENED! THE PROCESS HAD TO EXIT!")
		cmd.NetworkCleanup(vmName, true)
		cmd.BhyvectlDestroy(vmName, true)
		os.Exit(1000)
	}

The issue can be closed, as VM Supervisor now works as expected.

from hostercore.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.