
I moved all implemented specs that have been implemented during Ocata cycle in implemented folder. Change-Id: I2abf8fb8d1f3d527934cd647da005ec142e2579e
3.7 KiB
Make Applier parallel
https://blueprints.launchpad.net/watcher/+spec/parallel-applier
Problem description
Watcher Applier
starts Action
plan with set of Actions,
which are executed in a sequence. After planner-storage-action-plan
is implemented, we have new parents
field that contains
list of action's uuid child action is connected to. Having
parents
field Watcher can build Directed Acyclic Graph
where each independent Action can be run in parallel while actions with
some dependencies should fulfill them to be executed.
Use Cases
As an administrator, I would like to be able to run Action plan that will launch actions for every node (compute, network, storage) in parallel.
Proposed change
We can launch several concurrent actions in accordance with their parents.
Workflow engine of Watcher Applier will still use
watcher_flow
flow, but edges between nodes should be
established in accordance with action parents. Unlinked actions with no
parents should be connected directly to the watcher_flow
and executed firstly.
Main class to modify is DefaultWorkFlowEngine, that defines workflow
of actions executing. Since Watcher Default Planner adds actions to DB
in accordance with weights (i.e. all migrate actions will be added
firstly, then resize actions and so on), Applier will get ordered by
weight actions that can be added to watcher_flow
flow and
linked in one for loop
. In this case algorithm of building
directed acyclic graph should have O(n) complexity.
There is estimated pseudocode to show part of default planner's workflow:
flow = gf.Flow("watcher_flow")
for a in actions:
task = TaskFlowActionContainer(a, self)
flow.add(task)
if a.parents:
for parent_id in action.parents:
parent_action = get_action(actions, parent_id)
flow.link(parent_action, action, decider=self.decider)
e = engines.load(flow)
e.run()
Alternatives
None
Data model impact
None
REST API impact
None
Security impact
None
Notifications impact
None
Other end user impact
None
Performance Impact
Since it is perfomance related patch, it is expected to have perfomance improvements because of parallel executing of actions instead of sequence. In order to reduce the impact on system performance and stability, it is better to set the maximum number of concurrent.
Other deployer impact
None
Developer impact
None
Implementation
Assignee(s)
Primary assignee: Alexander Chadin <a.chadin@servionica.ru>
Work Items
- Modify watcher/applier/workflow_engine/default.py to build new parallel workflow engine.
- Update the documentation.
- Add appropriate unit tests.
Dependencies
https://blueprints.launchpad.net/watcher/+spec/planner-storage-action-plan
Testing
- Unit tests will be added to validate these modifications.
Documentation Impact
Update the Applier documentation in accordance with new changes.
References
History
None