Add a document about the state machine

Partially Implements: blueprint state-machine
Change-Id: Ic6368d029a5b70d47f01abeff016b2be672405dd
This commit is contained in:
Hiroaki Kobayashi 2018-01-10 14:20:45 +09:00
parent 7c8c8224b2
commit e98bbf241f
3 changed files with 113 additions and 0 deletions

View File

@ -44,6 +44,7 @@ API Reference
restapi/index
For Contributors
----------------

View File

@ -7,6 +7,7 @@ User Guide
introduction.rst
architecture.rst
state-machines.rst
resource-monitoring.rst
../cli/index
../restapi/index

View File

@ -0,0 +1,111 @@
==============
State machines
==============
Blazar objects (leases, reservations, and events) each have a status. This
document describes statuses in detail.
Lease status
============
Lease statuses are categorized into two types: stable or transitional.
In the state machine shown below, stable statuses are drawn as black nodes
while transitional statuses are drawn as gray nodes. Status transitions are
triggered by an API call or an event in a lease.
A lease has the following four stable statuses:
* **PENDING**: A lease has been successfully created and is ready to start.
The lease stays in this status until it starts.
* **ACTIVE**: A lease has been started and is active.
* **TERMINATED**: A lease has been successfully terminated.
* **ERROR**: Unrecoverable failures happened to the lease.
Transitional statuses are as follows:
* **CREATING**: A lease is being created.
* **STARTING**: A lease is being started.
* **UPDATING**: A lease is being updated.
* **TERMINATING**: A lease is being terminated.
* **DELETING**: A lease is being deleted. Any status can change to this status
because delete is the highest prioritized operation. e.g. when a lease hangs
up in the STARTING status, delete should be allowed.
If some action can cause an invalid status transition, the action is denied.
E.g. If a user sends an Update Lease request while it is starting, the Update
Lease request is denied because the transition from **STARTING** to
**UPDATING** is invalid.
.. image:: ../images/lease_statuses.png
:width: 600 px
Reservation status
==================
A reservation has the following four statuses. Lowercase letters are used for
backward compatibility:
* **pending**: A reservation has been successfully created and is ready to
start. The reservation stays in this status until it starts.
* **active**: A reservation has been started and is active.
* **deleted**: Reserved resources have been successfully released.
* **error**: Unrecoverable failures happened to resources.
.. image:: ../images/reservation_statuses.png
:width: 600 px
Event status
============
Event statuses are as follows.
.. image:: ../images/event_statuses.png
:width: 600 px
Relationships between statuses
==============================
The following table shows conditions of statuses of reservations and events
that have to be satisfied for each lease status.
+-------------+-------------------+--------------------------+
| Lease | Reservations | Events |
+=============+===================+==========================+
| CREATING | pending | start_lease: UNDONE |
| | | , end_lease: UNDONE |
+-------------+-------------------+--------------------------+
| PENDING | pending | start_lease: UNDONE |
| | | , end_lease: UNDONE |
+-------------+-------------------+--------------------------+
| STARTING | pending or active | start_lease: IN_PROGRESS |
| | or error | , end_lease: UNDONE |
+-------------+-------------------+--------------------------+
| ACTIVE | active | start_lease: DONE |
| | | , end_lease: UNDONE |
+-------------+-------------------+--------------------------+
| TERMINATING | active or deleted | start_lease: DONE |
| | or error | , end_lease: IN_PROGRESS |
+-------------+-------------------+--------------------------+
| TERMINATED | deleted | start_lease: DONE |
| | | , end_lease: DONE |
+-------------+-------------------+--------------------------+
| DELETING | Any status | Any status |
+-------------+-------------------+--------------------------+
| UPDATING | Any status | Any status other than |
| | | IN_PROGRESS |
+-------------+-------------------+--------------------------+
blazar/status module
====================
The *blazar/status* module defines and manages these statuses.