Scheduler approach on impossible results
|Assignee:||Carlos Martín||% Done:|
|Target version:||Release 4.0|
As the OpenNebula default matchmaking scheduler is an immediate lease scheduler, it should always return the allocated resources or an error due to it's impossibility. But, when the scheduler receives an expression which turns to an impossible result, the VM remains in pending state indefinitely, which is an approach related with best-effort schedulers.
Specifically in our case, we want to deploy one Virtual Machine on each host of our cloud (for security reasons) and we don't want to obtain all information about the entire HostPool in each VM creation (scalability reasons).
The problem arises when we achieve the entire set of hosts inside of our requirements (e.g using "HOSTNAME != \"some-host\"" & "HOSTNAME != \"another-host\"", etc), which means that don't exist other host to allocate the Virtual Machine.
This approach also can be considered one of the reasons that contributed for other similar issues pointed on mailing list, as for example, on [one-users] VM creation stuck in "pending" state thread, where the same problems could be solved if the OpenNebula would changed the VM state to fail and logged the appropriate output.
We believe that there are at least two main possibilities to circumvent this problem:
1) Change the VM state to "fail" when an impossible result is achieved.
2) Add a new state for the virtual machine to indicate when it achieve an impossible result (for example, an impossible state).
Feature #846: Add methods to update the VM template from the sched and log messages
Feature #846: Skip the scheduling if there aren't any pending VMs, and omit empty logs