Merge "WBE documentation tweaks/adjustments"

This commit is contained in:
Jenkins
2015-01-23 09:20:32 +00:00
committed by Gerrit Code Review
2 changed files with 83 additions and 60 deletions

View File

@@ -31,11 +31,12 @@ Executor
these requests can be accepted and processed by remote workers. these requests can be accepted and processed by remote workers.
Worker Worker
Workers are started on remote hosts and has list of tasks it can perform (on Workers are started on remote hosts and each has a list of tasks it can
request). Workers accept and process task requests that are published by an perform (on request). Workers accept and process task requests that are
executor. Several requests can be processed simultaneously in separate published by an executor. Several requests can be processed simultaneously
threads. For example, an `executor`_ can be passed to the worker and in separate threads (or processes...). For example, an `executor`_ can be
configured to run in as many threads (green or not) as desired. passed to the worker and configured to run in as many threads (green or
not) as desired.
Proxy Proxy
Executors interact with workers via a proxy. The proxy maintains the Executors interact with workers via a proxy. The proxy maintains the
@@ -153,8 +154,16 @@ engine executor in the following manner:
from dicts after receiving on both executor & worker sides (this from dicts after receiving on both executor & worker sides (this
translation is lossy since the traceback won't be fully retained). translation is lossy since the traceback won't be fully retained).
Executor execute format Protocol
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~
.. automodule:: taskflow.engines.worker_based.protocol
Examples
~~~~~~~~
Request (execute)
"""""""""""""""""
* **task_name** - full task name to be performed * **task_name** - full task name to be performed
* **task_cls** - full task class name to be performed * **task_cls** - full task class name to be performed
@@ -186,8 +195,52 @@ Additionally, the following parameters are added to the request message:
] ]
} }
Worker response format
~~~~~~~~~~~~~~~~~~~~~~ Request (revert)
""""""""""""""""
When **reverting:**
.. code:: json
{
"action": "revert",
"arguments": {},
"failures": {
"taskflow.tests.utils.TaskWithFailure": {
"exc_type_names": [
"RuntimeError",
"StandardError",
"Exception"
],
"exception_str": "Woot!",
"traceback_str": " File \"/homes/harlowja/dev/os/taskflow/taskflow/engines/action_engine/executor.py\", line 56, in _execute_task\n result = task.execute(**arguments)\n File \"/homes/harlowja/dev/os/taskflow/taskflow/tests/utils.py\", line 165, in execute\n raise RuntimeError('Woot!')\n",
"version": 1
}
},
"result": [
"failure",
{
"exc_type_names": [
"RuntimeError",
"StandardError",
"Exception"
],
"exception_str": "Woot!",
"traceback_str": " File \"/homes/harlowja/dev/os/taskflow/taskflow/engines/action_engine/executor.py\", line 56, in _execute_task\n result = task.execute(**arguments)\n File \"/homes/harlowja/dev/os/taskflow/taskflow/tests/utils.py\", line 165, in execute\n raise RuntimeError('Woot!')\n",
"version": 1
}
],
"task_cls": "taskflow.tests.utils.TaskWithFailure",
"task_name": "taskflow.tests.utils.TaskWithFailure",
"task_version": [
1,
0
]
}
Worker response(s)
""""""""""""""""""
When **running:** When **running:**
@@ -241,49 +294,6 @@ When **failed:**
"state": "FAILURE" "state": "FAILURE"
} }
Executor revert format
~~~~~~~~~~~~~~~~~~~~~~
When **reverting:**
.. code:: json
{
"action": "revert",
"arguments": {},
"failures": {
"taskflow.tests.utils.TaskWithFailure": {
"exc_type_names": [
"RuntimeError",
"StandardError",
"Exception"
],
"exception_str": "Woot!",
"traceback_str": " File \"/homes/harlowja/dev/os/taskflow/taskflow/engines/action_engine/executor.py\", line 56, in _execute_task\n result = task.execute(**arguments)\n File \"/homes/harlowja/dev/os/taskflow/taskflow/tests/utils.py\", line 165, in execute\n raise RuntimeError('Woot!')\n",
"version": 1
}
},
"result": [
"failure",
{
"exc_type_names": [
"RuntimeError",
"StandardError",
"Exception"
],
"exception_str": "Woot!",
"traceback_str": " File \"/homes/harlowja/dev/os/taskflow/taskflow/engines/action_engine/executor.py\", line 56, in _execute_task\n result = task.execute(**arguments)\n File \"/homes/harlowja/dev/os/taskflow/taskflow/tests/utils.py\", line 165, in execute\n raise RuntimeError('Woot!')\n",
"version": 1
}
],
"task_cls": "taskflow.tests.utils.TaskWithFailure",
"task_name": "taskflow.tests.utils.TaskWithFailure",
"task_version": [
1,
0
]
}
Request state transitions Request state transitions
------------------------- -------------------------

View File

@@ -121,12 +121,16 @@ class Message(object):
class Notify(Message): class Notify(Message):
"""Represents notify message type.""" """Represents notify message type."""
#: String constant representing this message type.
TYPE = NOTIFY TYPE = NOTIFY
# NOTE(harlowja): the executor (the entity who initially requests a worker # NOTE(harlowja): the executor (the entity who initially requests a worker
# to send back a notification response) schema is different than the # to send back a notification response) schema is different than the
# worker response schema (that's why there are two schemas here). # worker response schema (that's why there are two schemas here).
_RESPONSE_SCHEMA = {
#: Expected notify *response* message schema (in json schema format).
RESPONSE_SCHEMA = {
"type": "object", "type": "object",
'properties': { 'properties': {
'topic': { 'topic': {
@@ -142,7 +146,9 @@ class Notify(Message):
"required": ["topic", 'tasks'], "required": ["topic", 'tasks'],
"additionalProperties": False, "additionalProperties": False,
} }
_SENDER_SCHEMA = {
#: Expected *sender* request message schema (in json schema format).
SENDER_SCHEMA = {
"type": "object", "type": "object",
"additionalProperties": False, "additionalProperties": False,
} }
@@ -156,9 +162,9 @@ class Notify(Message):
@classmethod @classmethod
def validate(cls, data, response): def validate(cls, data, response):
if response: if response:
schema = cls._RESPONSE_SCHEMA schema = cls.RESPONSE_SCHEMA
else: else:
schema = cls._SENDER_SCHEMA schema = cls.SENDER_SCHEMA
try: try:
jsonschema.validate(data, schema, types=_SCHEMA_TYPES) jsonschema.validate(data, schema, types=_SCHEMA_TYPES)
except schema_exc.ValidationError as e: except schema_exc.ValidationError as e:
@@ -180,8 +186,11 @@ class Request(Message):
states. states.
""" """
#: String constant representing this message type.
TYPE = REQUEST TYPE = REQUEST
_SCHEMA = {
#: Expected message schema (in json schema format).
SCHEMA = {
"type": "object", "type": "object",
'properties': { 'properties': {
# These two are typically only sent on revert actions (that is # These two are typically only sent on revert actions (that is
@@ -349,7 +358,7 @@ class Request(Message):
@classmethod @classmethod
def validate(cls, data): def validate(cls, data):
try: try:
jsonschema.validate(data, cls._SCHEMA, types=_SCHEMA_TYPES) jsonschema.validate(data, cls.SCHEMA, types=_SCHEMA_TYPES)
except schema_exc.ValidationError as e: except schema_exc.ValidationError as e:
raise excp.InvalidFormat("%s message response data not of the" raise excp.InvalidFormat("%s message response data not of the"
" expected format: %s" " expected format: %s"
@@ -358,8 +367,12 @@ class Request(Message):
class Response(Message): class Response(Message):
"""Represents response message type.""" """Represents response message type."""
#: String constant representing this message type.
TYPE = RESPONSE TYPE = RESPONSE
_SCHEMA = {
#: Expected message schema (in json schema format).
SCHEMA = {
"type": "object", "type": "object",
'properties': { 'properties': {
'state': { 'state': {
@@ -442,7 +455,7 @@ class Response(Message):
@classmethod @classmethod
def validate(cls, data): def validate(cls, data):
try: try:
jsonschema.validate(data, cls._SCHEMA, types=_SCHEMA_TYPES) jsonschema.validate(data, cls.SCHEMA, types=_SCHEMA_TYPES)
except schema_exc.ValidationError as e: except schema_exc.ValidationError as e:
raise excp.InvalidFormat("%s message response data not of the" raise excp.InvalidFormat("%s message response data not of the"
" expected format: %s" " expected format: %s"