
Andre Merzky <andre@merzky.net> writes:
Quoting [Michael Richardson] (Apr 20 2009):
> "Andre" == Andre Merzky <andre@merzky.net> writes: Andre> For example, assume that I have a client which implements the Andre> core specification only, thus only knows the STOPPED, ACTIVE Andre> and SUSPENDED states (your original figure). What is that Andre> client supposed to do if the backend reports an PAUSED state?
How did it get to that state?
Since the client didn't put it into that state, it means that an operator or error must have forced this, so it's an error. Life does not always go as planned.
It is dangerous to assume that the client is the only legimitate entity which operates on the machine state diagram. The system admin, internal events, other clients, etc, may all have reason to trigger state changes, and this would not represent errors.
A concrete example: guests operating systems on our platform can already do an ACPI power down, terminating the running virtual machine. This is a state change which happens without an API call, but not an error state. Similarly, if a guest operating system suspends or hibernates in a way that's visible to the hypervisor (say ACPI S3/S4 sleep), a future version of our platform will probably transition the virtual machine process itself into a paused, suspended or dumped-to-disk state. Cheers, Chris.