Comments (1)
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)
- Add a new config flag: `failover_type`
- Implement persistent UEFI settings using `BHYVE_UEFI_VARS`
- Implement `rctl` limits for the VMs HOT 1
- Implement basic `HAST` integration and an automated HA failover scenario for it
- Expose `rctl` metrics for the live VMs and Jails using our Custom Node Exporter
- Expose `top io` and `top cpu` usage metrics using our Custom Node Exporter HOT 2
- Implement `hoster vm migrate` for simplified, manual VM fail-over HOT 1
- Implement new features inside `node_init.sh` and `hoster init`
- Illumos/OmniOS support HOT 2
- Implement markdown notes for Host, VMs and Jails HOT 2
- Implement "global" DNS between the hosts in HA mode (both `debug` and `prod`)
- Edge Case: Move replication script generation logic into the `scheduler` service (instead of the `scheduler` client)
- Introduce `hoster compose` command
- Expose `smartmontools` output as a separate RestAPIv2 endpoint
- Support for `zvol`s and the external DHCP HOT 1
- Implement a basic caching on the Hoster nodes
- `replicate` improvements
- Implement a DHCP support for our CloudInit images HOT 1
- Implement custom DNS search domain support into our CloudInit config HOT 1
- Add snapshot description as a custom ZFS property HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hostercore.