Spec: define state machines

Partially Implements: blueprint state-machine

Change-Id: I3b5871c021f79a7e68934baeb0c5d04160e94def
This commit is contained in:
Hiroaki Kobayashi 2017-09-28 13:34:01 +09:00
parent 45cea842b5
commit 8a94535206
8 changed files with 250 additions and 0 deletions

View File

@ -0,0 +1,239 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
=====================
Define state machines
=====================
https://blueprints.launchpad.net/blazar/+spec/state-machine
Define state machines for leases, reservations, and events, and use the status
field of the leases table which is unused for now.
Problem description
===================
Statuses of leases, reservations, and events cannot properly describe some
actual statuses because state machines for leases, reservations, and events are
not well defined for now. It causes inconsistency of statuses, unrecoverable
failures and so on.
Actually, currently leases have no status. Even though the leases table has a
status field, it is not used. It should be used to describe the status of a
lease properly.
Use Cases
---------
* A lease owner can see the exact status of the lease in the lease parameters
included in the request response.
Proposed change
===============
Overview
--------
Define state machines of leases, reservations, and events as follows.
Lease statuses
^^^^^^^^^^^^^^
Lease statuses are categorized into 2 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. Stable statuses change to
transitional statuses when a specific method of the blazar manager is called.
After the method has completed or failed, the transitional statuses change to
stable statuses.
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.
.. image:: ../../../images/lease_statuses.png
:width: 600 px
Reservation statuses
^^^^^^^^^^^^^^^^^^^^
A reservation has the following four statuses. Small 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 statuses
^^^^^^^^^^^^^^
Event statuses are not changed.
.. 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 |
+-------------+-------------------+--------------------------+
Alternatives
------------
Express resource capacity sufficiency as a lease status like *_DEGRADED
statuses and a reservation status like *_MISSING_RESOURCES and
*_RESOURCES_CHANGED.
The problem of this solution is that it complicates state machines.
Instead, we will introduce boolean flags like *degraded* to leases and
reservations for expressing such resource capacity sufficiency.
See the resource-monitoring spec[1] in detail.
Data model impact
-----------------
None
RESTAPI impact
---------------
None
Security impact
---------------
None
Notifications impact
--------------------
None
Other end user impact
---------------------
* Users can see the lease status.
Performance Impact
------------------
None
Other deployer impact
---------------------
None
Developer impact
----------------
None
Implementation
==============
Assignee(s)
-----------
Primary assignee:
hiro-kobayashi
Work Items
----------
* Implement LeaseStatus, ReservationStatus and EventStatus class that contain
statuses and basic methods for managing these statuses.
* Implement a decorator that checks/updates the lease status before/after
*-lease methods of manager.
* Decorate *-lease methods with the decorator.
Dependencies
============
None
Testing
=======
* Test status transitions.
Documentation Impact
====================
None
References
==========
* [1] resource-monitoring blueprint: https://blueprints.launchpad.net/blazar/+spec/resource-monitoring
History
=======
.. list-table:: Revisions
:header-rows: 1
* - Release Name
- Description
* - Queens
- Introduced

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,8 @@
Status graphs
=============
Status graphs are drawn by `draw.io`_ . To edit graphs, open `draw.io`_,
select *Open Existing Diagram* and chose the *\*_statuses.xml* file under this
directory.
.. _draw.io: <https://www.draw.io/>

View File

@ -0,0 +1 @@
<mxfile editor="www.draw.io" type="device"><diagram id="81e48edc-f204-7422-b344-2afa3435800a" name="Page-1">7VjbbtpAEP0aS+1L5AsQeIVQWqmFCFQ1fUJbe2xvs3jQes2lX9+1PYvtGCIiRSQV9Qs7Z2Zv58zs2ljeaLWbSLaOv2EAwnLtYGd5d5brOm6vr39yZF8ifc8pgUjygIIqYMH/AIE2oRkPIG0EKkSh+LoJ+pgk4KsGxqTEbTMsRNGcdc0iaAELn4k2+oMHKi7RW9uu8M/Ao5hm9ozjF/MfI4lZQtNZrhcWT+leMTMUxacxC3Bbg7yx5Y0koipbq90IRE6tYa3s9+mE97BsCYk6q0Ov7LFhIqOtL2GjO3/4aLk9occYBnyjm1He1PwICIxDj1rz0X7U3lAIgWaUTJQqxggTJsYVOvQzuYF8IY42CtIKy9ZWrFaCHLDj6qHW/pmH3HRzK1Fy/0A9CqPy/Qal9pRXLFOooWoRXxHXNGKIiaIwxyV7hAJlsQmta/4ctlcnlrhOMZM+bblLmcpkBCbKK7GcjVo/UmMCuAK9bh1AhWISQ4Jgim+a6cgoq6NDt8NI98j1wqoQDMNUr6GmvW7UJqygIiOOZ0e3lRzfp3ez6bittRC6MnNNtzFXsFizgpKtPhyaYoZciBq9VBvny8AEjxKN+VoG0M5hqiQ+wosU24BUsHtWDOPtkRp7c66Rva3OBMeUflw7Dzr2acEaejxDvjNosR9gApets/dYZaakGmXWObPMzq6rc2UyKVGTKWRcXFQm55+RqftWMpnV1GT6Ml3ez2eT+XixuJYDzXvTA63TkuCaLpOu2+S+c0nq2zf5eD6fza+Ve9e+JPn9Fvm+BKZgKYClcPRNu7zp/79nn7habttXy7k3C2WEfWMP7MGTpLDez6u32WItaV6tWF+zsjpPLhSve6Sw2nXlvLyutFl9F5eMVv89eOO/</diagram></mxfile>

View File

@ -0,0 +1 @@
<mxfile editor="www.draw.io" type="device"><diagram id="8eb2d4aa-cf18-e5ac-f61d-68e8b5ae7d87" name="Page-1">7Vtbk6I4FP41Vs082EVAFB69sL1dNdPbZffuzjxtpSUqO0jcELt1fv0GSIQY7Oam6G5rlQUnIYST73znEuwY49X2lsD18it2kd/RNXfbMSYdXTeNHvuNBLtEYPXNRLAgnpuIQCp49H4iLtS4dOO5KJQ6Uox96q1l4QwHAZpRSQYJwa9ytzn25buu4QIpgscZ9FXpn55Ll1za17S04VfkLZb81j3R8AxnPxYEbwJ+v45uzONP0ryCYizeP1xCF79mRIbTMcYEY5ocrbZj5EeqFWpLrvvlSOt+3gQFtMgF/eSCF+hv+KPPCIIU/eUjGKJPnzt632cDjVzvhR0uokOmJR+5ooENnWnjD0V3QpHIZXrlp5jQJV7gAPpOKh3FykLRdDR2tqQrnx0Cdvg3onTHoQE3FDNROsIXjNe8H3tSsvvGr49PvkcnN2Z0uvXoN9GPHactqqK47kK8ITM+e4NDD5IFEiudiKLnylzGlXuL8AqxCbAOHPjATvoT5EPqvcjwghyli/1l+5EesMfmlXbB83nIppBZyiEhcJfpsY6uCLM92EFmSqkohkA+HAwFDuqK+j6zwmjlXpceRY9rGGvrlfGAvH5zz/fH2Mckvs7Q4s9bmn9BhKLtm1oV/MKthytZN/i8XzO2yrssM1YqZHl6l5T2hoYsRUMuDlCTuD+O2beQXtRaCuG+p+J+UA731wV7XdB3dlmRj87Jg7MNeYnhAIqAI6W371k81ATHHAe0lMm+AxpggoKw4Ybd1W4sXetL1t3tgVOBqQJUegpQxlNn+HR3f1uDKWW1j+Ivk4eU4B8or6UBDmXBjEyiwMoh0RwW7TXAokB1NCEDDr2AsOM4/ZaxIt4NvBegFLKsQY5l6f/pOASY5gch1yXkPNhUImQwOCBk/YIIeaAA5cG5n9Ti4wbY1WiVXXOM56qC1EMGLQR3QYkS3kumaydjySocaKtOcg69mOLOSmZlkvFjhFXbB+aurmWXZrOBqdmSZQqDq7rmaTglW7whwCTGSGbOL8uWZE6EHpUYPzxoSQ+aC7oKLnRgGhfsQcVTZpDy+DScXmFOY7bpdffTTdWIAveiM5r2fHVOsUCUxNtPaSolLGph4INuy9JtQyWkgdazLplvVagMx093fzjV2bYB7hy0yp3qPlTFjKWcEVwQJQr6kyjRLEeJF8WIthpWtJa+tE5teatbJX0xzYEumWnd9KXhNc/ZHrsyL9h6ppsLlQpesK/ZDdfthB8xevaNnfmY0m1AwcT3eOH4yG01IHsoYNoHeE2GPCXCdXWj8MmZfr27v8YtILvdIqVa3rpsrqi3I3QarjDrcMUlJlK6WrsWBuZMqttXA9YC2t0xtXLqeXGIrBjJJ4LohgQRLHD0s2SdNEy8hcdQGesP0k34uS2Peyw0A1kbaKLmXMiCgJFX4xP5Ywl3q2lATjpB/4LMCtj21bNt60F8PlYqhGZG35DfcREl2JqRWVeMszs4bxZLQg0ZLP3+MLnGCEjhdAuckdIH1v8xZtmTq2RFAlPvWlFNE7EPk4jewRBHspUqdmKpEe5m7Tb4djVDOZXXnaDQ+wmf4w7RAvGkivU2Rx1zwiTQ9xYBE8zYGiG2uKPIWjx22yFvWHmuGyPNh8/IH+1faM+Agb/SLle69HL0KsCvGOv+rX7+GJ3sm/F5Rsz49LAq0q35yuCeT+W94u7hEA3Vg9WqSQ4yhChcw0CCQf+fTfR3gVj53TBejSHrALT1Nm0UowyDXRICRspNYkGUQVsyuHzD9xz/GWPww4z1rHRtq6nJuQqaxcqZZ4uDRMhTrZpZ2CiLlxLUrdeJ88W5xoDk8MUxYNjnhHjOPsz1ZAkXkE0KI6hVkOmKHcK6hdreQahzCudlqYmlM53+Nm3VTyhmpNunMyN2mv5hL1Fh+qdIw/kX</diagram></mxfile>

View File

@ -0,0 +1 @@
<mxfile editor="www.draw.io" type="device"><diagram id="8eb2d4aa-cf18-e5ac-f61d-68e8b5ae7d87" name="Page-1">zVhLc5swEP41zLSHZng4JDk2bpoe2pnO5ND0lFFgDTQyorLwo7++C5IAGXAwsWMnM4lY7eqx37cPsLzpfH3PSRb/YCFQy7XDteV9sVz32rfxbyHYaMGlFEQ8CaXIqQUPyT9QQmUX5UkIC0NRMEZFkpnCgKUpBMKQEc7ZylSbMWrumpEIWoKHgNC29FcSilhKr2y7ln+DJIrVzp6eeCbBS8RZnqrtLNeblT9yek70Ukp/EZOQrRoi787yppwxIUfz9RRo4VntNWn3tWe2OjaHVAwx8KXBktBc3ZzDAvgSnvA/y3kAHz5ark9xsdswWeIwKocsBS3GxRsz6lpioz0JITpWPTIuYhaxlNC7WnpbuguKA9n4FIs5xaGDwz8gxEZxg+SCoahe4TtjmdLDu/LNo7IvH34XDxeX1XmaDlE+krdT8CmGER6B0rqSouL0DTPlxHtgc8BtUEHx27mR+hwoEcnSZBFRZIwqs2qlnyzBc9UqbDZb4BEMyLSOiq1PE8UdvbXmkl5DXkNZ1Qt95pxsGmpZobBoauCgcbdaVHKmmz9eiz9tAlCKUVsAvYoTAQ8ZKd2+wrxhwj1LKJ0yynhphyFV/OyCcAlcwHonPGr2cstljspGqzq2deaJG2Ht2P0AGk7b4SGn7SKWPi0QJHHC0IJ1Ih4b4zpghgbdjKVCqTnO0EAbGlWa6vaFawCnqf4OYeb548JsRBBVPOvhiD0jCUUU22TBlVER0rBD7ZnXWl2GaJCnHAKGYUSekS6FWxVYcq2c9zLxQPwMciw1oWLUq2SVBNV0fS3z70PkvdJOB6GblcPxvb1Z7l+bXDsazUexszODadLJfPWuyNsG8nKqwv5gyG/BN4YKjZbOAH4/XPsLd3fmquij2DTZagG31P2d6jiQ+4+lz1WLPBlSJ0mj8Y3CARoCZzu76wbe6Ag6WoLJAVqC6rhdAXV2DcGhcuzezYIz6Yuoc+jLx2RS+2ZXJt1V5d9UrE9Ylo+VnEdQZ3hdHkyWwe8AkxbuJCh3OGUObHW475oD2y2vpm+BvFV82tHg+39zJpmsadAQqSQJFEQdPLi7XKUvBAa/k5osvC1/Ub4QnL3Asd5WT1uc3JNVp/3yzq5SZeadfT4mvS3v+B2fkgbXLAW/feH5Jv5n9T5Q3bFBEOAcHXZOyazy+hFiBh/rL7TSg/VHcO/uPw==</diagram></mxfile>