Skip to content

Commit

Permalink
Add a unit test that generates an FSM DOT file
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitrii-beliakov committed Nov 15, 2023
1 parent 24cbe75 commit 6c6ccb7
Show file tree
Hide file tree
Showing 5 changed files with 525 additions and 0 deletions.
16 changes: 16 additions & 0 deletions docs/design/fsm/FsmDiagrams.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## How to create a diagram for an FSM?
Squirrel framework has support of transforming an FSM to a DOT file, which a textual representation of an FSM metadata.
To create a DOT file you can execute in java:
```
DotVisitor visitor = SquirrelProvider.getInstance().newInstance(DotVisitor.class);
anInstanceOfYourFsm.accept(visitor);
visitor.convertDotFile("src/main/resources/YourFsm");
```
A DOT file, produced by this code, could be converted into a picture by using
one of the converters available on the Internet.

Since we need to instantiate an FSM class to build a DOT file, we need to put this code into some module that has
all necessary dependencies. One of the ways is to use a unit test in the same package where an FSM is located.
For building a diagram we might not need to instantiate all the classes responsible for actions. For a diagram containing
only states, events, and transitions, it is enough to copy-paste the FSM builder part without any `perform` methods.
An example of this approach is `HaFlowUpdateFsmDiagramTest`.
12 changes: 12 additions & 0 deletions docs/design/fsm/Overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# FSM Overview
FSM stands for [finite-state machine](https://en.wikipedia.org/wiki/Finite-state_machine),
it is a model for computation of some process that changes its state in response to some input.

In OpenKilda, FSM is a central component for computing processes such as Flow creation, Switch synchronization, and others.
Input for FSMs could be users input or a response from services, for example responses from switches about rules installation.

[Squirrel State Machine framework](https://hekailiang.github.io/squirrel/) has been chosen as the implementation of the FSM orchestrator.
It is agreed to name classes responsible for the processes computation using this framework with the suffix `Fsm`:
HaFlowUpdateFsm, SwitchSyncFsm.
In the context of OpenKilda, "FSM" often is a casual broad term that refer to infrastructure or a family of classes that are responsible
for handling some specific process.
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
digraph {
compound=true;
subgraph cluster_StateMachine {
label="org.openkilda.wfm.topology.flowhs.fsm.haflow.update.HaFlowUpdateFsm";
INGRESS_RULES_INSTALLED [label="INGRESS_RULES_INSTALLED"];
OLD_PATHS_REMOVAL_COMPLETED [label="OLD_PATHS_REMOVAL_COMPLETED"];
OLD_RULES_REMOVED [label="OLD_RULES_REMOVED"];
FLOW_STATUS_UPDATED [label="FLOW_STATUS_UPDATED"];
RESOURCE_ALLOCATION_COMPLETED [label="RESOURCE_ALLOCATION_COMPLETED"];
REMOVING_OLD_RULES [label="REMOVING_OLD_RULES"];
RESOURCES_ALLOCATION_REVERTED [label="RESOURCES_ALLOCATION_REVERTED"];
DEALLOCATING_OLD_RESOURCES [label="DEALLOCATING_OLD_RESOURCES"];
NOTIFY_FLOW_MONITOR [label="NOTIFY_FLOW_MONITOR"];
INSTALLING_NON_INGRESS_RULES [label="INSTALLING_NON_INGRESS_RULES"];
PATHS_SWAP_REVERTED [label="PATHS_SWAP_REVERTED"];
NOTIFY_FLOW_MONITOR_WITH_ERROR [label="NOTIFY_FLOW_MONITOR_WITH_ERROR"];
NEW_RULES_REVERTED [label="NEW_RULES_REVERTED"];
NEW_PATHS_INSTALLATION_COMPLETED [label="NEW_PATHS_INSTALLATION_COMPLETED"];
FLOW_UPDATED [label="FLOW_UPDATED"];
FINISHED_WITH_ERROR [label="FINISHED_WITH_ERROR"];
INITIALIZED [label="INITIALIZED"];
OLD_RESOURCES_DEALLOCATED [label="OLD_RESOURCES_DEALLOCATED"];
REVERTING_NEW_RULES [label="REVERTING_NEW_RULES"];
UPDATING_FLOW_STATUS [label="UPDATING_FLOW_STATUS"];
NOTIFY_FLOW_STATS_ON_REMOVED_PATHS [label="NOTIFY_FLOW_STATS_ON_REMOVED_PATHS"];
PRIMARY_RESOURCES_ALLOCATED [label="PRIMARY_RESOURCES_ALLOCATED"];
BUILDING_RULES [label="BUILDING_RULES"];
REVERTING_FLOW [label="REVERTING_FLOW"];
PROTECTED_RESOURCES_ALLOCATED [label="PROTECTED_RESOURCES_ALLOCATED"];
FLOW_VALIDATED [label="FLOW_VALIDATED"];
PATHS_SWAPPED [label="PATHS_SWAPPED"];
NON_INGRESS_RULES_INSTALLED [label="NON_INGRESS_RULES_INSTALLED"];
REVERTING_PATHS_SWAP [label="REVERTING_PATHS_SWAP"];
REVERTING_ALLOCATED_RESOURCES [label="REVERTING_ALLOCATED_RESOURCES"];
REVERTING_FLOW_STATUS [label="REVERTING_FLOW_STATUS"];
FINISHED [label="FINISHED"];
NOTIFY_FLOW_STATS_ON_NEW_PATHS [label="NOTIFY_FLOW_STATS_ON_NEW_PATHS"];
INSTALLING_INGRESS_RULES [label="INSTALLING_INGRESS_RULES"];

INGRESS_RULES_INSTALLED -> NEW_PATHS_INSTALLATION_COMPLETED [ label="NEXT"];
INGRESS_RULES_INSTALLED -> REVERTING_PATHS_SWAP [ label="TIMEOUT"];
INGRESS_RULES_INSTALLED -> REVERTING_PATHS_SWAP [ label="ERROR"];
OLD_PATHS_REMOVAL_COMPLETED -> DEALLOCATING_OLD_RESOURCES [ label="NEXT"];
OLD_PATHS_REMOVAL_COMPLETED -> DEALLOCATING_OLD_RESOURCES [ label="TIMEOUT"];
OLD_PATHS_REMOVAL_COMPLETED -> DEALLOCATING_OLD_RESOURCES [ label="ERROR"];
OLD_RULES_REMOVED -> NOTIFY_FLOW_STATS_ON_REMOVED_PATHS [ label="NEXT"];
FLOW_STATUS_UPDATED -> NOTIFY_FLOW_MONITOR [ label="NEXT"];
FLOW_STATUS_UPDATED -> NOTIFY_FLOW_MONITOR_WITH_ERROR [ label="TIMEOUT"];
FLOW_STATUS_UPDATED -> NOTIFY_FLOW_MONITOR_WITH_ERROR [ label="ERROR"];
RESOURCE_ALLOCATION_COMPLETED -> BUILDING_RULES [ label="NEXT"];
RESOURCE_ALLOCATION_COMPLETED -> NEW_RULES_REVERTED [ label="TIMEOUT"];
RESOURCE_ALLOCATION_COMPLETED -> NEW_RULES_REVERTED [ label="ERROR"];
REMOVING_OLD_RULES -> REMOVING_OLD_RULES [ label="RESPONSE_RECEIVED"];
REMOVING_OLD_RULES -> OLD_RULES_REMOVED [ label="RULES_REMOVED"];
REMOVING_OLD_RULES -> OLD_RULES_REMOVED [ label="TIMEOUT"];
REMOVING_OLD_RULES -> OLD_RULES_REMOVED [ label="ERROR"];
RESOURCES_ALLOCATION_REVERTED -> REVERTING_FLOW [ label="NEXT"];
RESOURCES_ALLOCATION_REVERTED -> REVERTING_FLOW [ label="ERROR"];
DEALLOCATING_OLD_RESOURCES -> OLD_RESOURCES_DEALLOCATED [ label="NEXT"];
NOTIFY_FLOW_MONITOR -> FINISHED [ label="NEXT"];
INSTALLING_NON_INGRESS_RULES -> INSTALLING_NON_INGRESS_RULES [ label="RESPONSE_RECEIVED"];
INSTALLING_NON_INGRESS_RULES -> NON_INGRESS_RULES_INSTALLED [ label="RULES_INSTALLED"];
INSTALLING_NON_INGRESS_RULES -> PATHS_SWAP_REVERTED [ label="TIMEOUT"];
INSTALLING_NON_INGRESS_RULES -> PATHS_SWAP_REVERTED [ label="ERROR"];
PATHS_SWAP_REVERTED -> REVERTING_NEW_RULES [ label="NEXT"];
NOTIFY_FLOW_MONITOR_WITH_ERROR -> FINISHED_WITH_ERROR [ label="NEXT"];
NEW_RULES_REVERTED -> REVERTING_ALLOCATED_RESOURCES [ label="NEXT"];
NEW_PATHS_INSTALLATION_COMPLETED -> REMOVING_OLD_RULES [ label="NEXT"];
NEW_PATHS_INSTALLATION_COMPLETED -> REVERTING_PATHS_SWAP [ label="TIMEOUT"];
NEW_PATHS_INSTALLATION_COMPLETED -> REVERTING_PATHS_SWAP [ label="ERROR"];
FLOW_UPDATED -> PRIMARY_RESOURCES_ALLOCATED [ label="NEXT"];
FLOW_UPDATED -> REVERTING_FLOW [ label="TIMEOUT"];
FLOW_UPDATED -> REVERTING_FLOW [ label="ERROR"];
INITIALIZED -> FLOW_VALIDATED [ label="NEXT"];
INITIALIZED -> FINISHED_WITH_ERROR [ label="TIMEOUT"];
OLD_RESOURCES_DEALLOCATED -> UPDATING_FLOW_STATUS [ label="NEXT"];
OLD_RESOURCES_DEALLOCATED -> UPDATING_FLOW_STATUS [ label="TIMEOUT"];
OLD_RESOURCES_DEALLOCATED -> UPDATING_FLOW_STATUS [ label="ERROR"];
REVERTING_NEW_RULES -> REVERTING_NEW_RULES [ label="RESPONSE_RECEIVED"];
REVERTING_NEW_RULES -> NEW_RULES_REVERTED [ label="RULES_REVERTED"];
REVERTING_NEW_RULES -> NEW_RULES_REVERTED [ label="TIMEOUT"];
REVERTING_NEW_RULES -> NEW_RULES_REVERTED [ label="ERROR"];
UPDATING_FLOW_STATUS -> FLOW_STATUS_UPDATED [ label="NEXT"];
NOTIFY_FLOW_STATS_ON_REMOVED_PATHS -> OLD_PATHS_REMOVAL_COMPLETED [ label="NEXT"];
PRIMARY_RESOURCES_ALLOCATED -> PROTECTED_RESOURCES_ALLOCATED [ label="NEXT"];
PRIMARY_RESOURCES_ALLOCATED -> NEW_RULES_REVERTED [ label="TIMEOUT"];
PRIMARY_RESOURCES_ALLOCATED -> NEW_RULES_REVERTED [ label="ERROR"];
PRIMARY_RESOURCES_ALLOCATED -> REVERTING_ALLOCATED_RESOURCES [ label="NO_PATH_FOUND"];
BUILDING_RULES -> INSTALLING_NON_INGRESS_RULES [ label="NEXT"];
BUILDING_RULES -> NEW_RULES_REVERTED [ label="TIMEOUT"];
BUILDING_RULES -> NEW_RULES_REVERTED [ label="ERROR"];
REVERTING_FLOW -> REVERTING_FLOW_STATUS [ label="NEXT"];
PROTECTED_RESOURCES_ALLOCATED -> RESOURCE_ALLOCATION_COMPLETED [ label="NEXT"];
PROTECTED_RESOURCES_ALLOCATED -> NEW_RULES_REVERTED [ label="TIMEOUT"];
PROTECTED_RESOURCES_ALLOCATED -> NEW_RULES_REVERTED [ label="ERROR"];
PROTECTED_RESOURCES_ALLOCATED -> REVERTING_ALLOCATED_RESOURCES [ label="NO_PATH_FOUND"];
FLOW_VALIDATED -> FLOW_UPDATED [ label="NEXT"];
FLOW_VALIDATED -> REVERTING_FLOW_STATUS [ label="TIMEOUT"];
FLOW_VALIDATED -> REVERTING_FLOW_STATUS [ label="ERROR"];
PATHS_SWAPPED -> NOTIFY_FLOW_STATS_ON_NEW_PATHS [ label="NEXT"];
PATHS_SWAPPED -> REVERTING_PATHS_SWAP [ label="TIMEOUT"];
PATHS_SWAPPED -> REVERTING_PATHS_SWAP [ label="ERROR"];
NON_INGRESS_RULES_INSTALLED -> PATHS_SWAPPED [ label="NEXT"];
NON_INGRESS_RULES_INSTALLED -> REVERTING_PATHS_SWAP [ label="TIMEOUT"];
NON_INGRESS_RULES_INSTALLED -> REVERTING_PATHS_SWAP [ label="ERROR"];
REVERTING_PATHS_SWAP -> PATHS_SWAP_REVERTED [ label="NEXT"];
REVERTING_ALLOCATED_RESOURCES -> RESOURCES_ALLOCATION_REVERTED [ label="NEXT"];
REVERTING_FLOW_STATUS -> NOTIFY_FLOW_MONITOR_WITH_ERROR [ label="NEXT"];
NOTIFY_FLOW_STATS_ON_NEW_PATHS -> INSTALLING_INGRESS_RULES [ label="NEXT"];
INSTALLING_INGRESS_RULES -> INSTALLING_INGRESS_RULES [ label="RESPONSE_RECEIVED"];
INSTALLING_INGRESS_RULES -> INGRESS_RULES_INSTALLED [ label="RULES_INSTALLED"];
INSTALLING_INGRESS_RULES -> REVERTING_PATHS_SWAP [ label="TIMEOUT"];
INSTALLING_INGRESS_RULES -> REVERTING_PATHS_SWAP [ label="ERROR"];}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
digraph {
compound=true;
subgraph cluster_StateMachine {
label="org.openkilda.wfm.topology.flowhs.fsm.haflow.update.HaFlowUpdateFsm";
INSTALLING_INGRESS_RULES [label="INSTALLING_INGRESS_RULES"];
NOTIFY_FLOW_STATS_ON_NEW_PATHS [label="NOTIFY_FLOW_STATS_ON_NEW_PATHS"];
FINISHED [label="FINISHED"];
FLOW_VALIDATED [label="FLOW_VALIDATED"];
DETERMINE_RESOURCE_REVERTING_REQUIRED [label="DETERMINE_RESOURCE_REVERTING_REQUIRED"];
FLOW_UPDATED [label="FLOW_UPDATED"];
UPDATING_FLOW_STATUS [label="UPDATING_FLOW_STATUS"];
DETERMINE_OLD_RESOURCE_REMOVAL_REQUIRED [label="DETERMINE_OLD_RESOURCE_REMOVAL_REQUIRED"];
REVERTING_NEW_RULES [label="REVERTING_NEW_RULES"];
INSTALLING_NON_INGRESS_RULES [label="INSTALLING_NON_INGRESS_RULES"];
OLD_PATHS_REMOVAL_COMPLETED [label="OLD_PATHS_REMOVAL_COMPLETED"];
OLD_RESOURCES_DEALLOCATED [label="OLD_RESOURCES_DEALLOCATED"];
NOTIFY_FLOW_MONITOR_WITH_ERROR [label="NOTIFY_FLOW_MONITOR_WITH_ERROR"];
REMOVING_OLD_RULES [label="REMOVING_OLD_RULES"];
PATHS_SWAP_REVERTED [label="PATHS_SWAP_REVERTED"];
FLOW_STATUS_UPDATED [label="FLOW_STATUS_UPDATED"];
BUILDING_RULES [label="BUILDING_RULES"];
DEALLOCATING_OLD_RESOURCES [label="DEALLOCATING_OLD_RESOURCES"];
NEW_PATHS_INSTALLATION_COMPLETED [label="NEW_PATHS_INSTALLATION_COMPLETED"];
PRIMARY_RESOURCES_ALLOCATED [label="PRIMARY_RESOURCES_ALLOCATED"];
RESOURCE_ALLOCATION_COMPLETED [label="RESOURCE_ALLOCATION_COMPLETED"];
REVERTING_FLOW [label="REVERTING_FLOW"];
NON_INGRESS_RULES_INSTALLED [label="NON_INGRESS_RULES_INSTALLED"];
PATHS_SWAPPED [label="PATHS_SWAPPED"];
REVERTING_FLOW_STATUS [label="REVERTING_FLOW_STATUS"];
PROTECTED_RESOURCES_ALLOCATED [label="PROTECTED_RESOURCES_ALLOCATED"];
OLD_RULES_REMOVED [label="OLD_RULES_REMOVED"];
RESOURCES_ALLOCATION_REVERTED [label="RESOURCES_ALLOCATION_REVERTED"];
NEW_RULES_REVERTED [label="NEW_RULES_REVERTED"];
INGRESS_RULES_INSTALLED [label="INGRESS_RULES_INSTALLED"];
NOTIFY_FLOW_MONITOR [label="NOTIFY_FLOW_MONITOR"];
REVERTING_ALLOCATED_RESOURCES [label="REVERTING_ALLOCATED_RESOURCES"];
INITIALIZED [label="INITIALIZED"];
NOTIFY_FLOW_STATS_ON_REMOVED_PATHS [label="NOTIFY_FLOW_STATS_ON_REMOVED_PATHS"];
FINISHED_WITH_ERROR [label="FINISHED_WITH_ERROR"];
REVERTING_PATHS_SWAP [label="REVERTING_PATHS_SWAP"];

INSTALLING_INGRESS_RULES -> INSTALLING_INGRESS_RULES [ label="RESPONSE_RECEIVED"];
INSTALLING_INGRESS_RULES -> INGRESS_RULES_INSTALLED [ label="RULES_INSTALLED"];
INSTALLING_INGRESS_RULES -> REVERTING_PATHS_SWAP [ label="TIMEOUT"];
INSTALLING_INGRESS_RULES -> REVERTING_PATHS_SWAP [ label="ERROR"];
NOTIFY_FLOW_STATS_ON_NEW_PATHS -> INSTALLING_INGRESS_RULES [ label="NEXT"];
FLOW_VALIDATED -> FLOW_UPDATED [ label="NEXT"];
FLOW_VALIDATED -> REVERTING_FLOW_STATUS [ label="TIMEOUT"];
FLOW_VALIDATED -> REVERTING_FLOW_STATUS [ label="ERROR"];
DETERMINE_RESOURCE_REVERTING_REQUIRED -> REVERTING_ALLOCATED_RESOURCES [ label="NEXT"];
DETERMINE_RESOURCE_REVERTING_REQUIRED -> REVERTING_FLOW [ label="UPDATE_ENDPOINTS_ONLY"];
FLOW_UPDATED -> PRIMARY_RESOURCES_ALLOCATED [ label="NEXT"];
FLOW_UPDATED -> REVERTING_FLOW [ label="TIMEOUT"];
FLOW_UPDATED -> REVERTING_FLOW [ label="ERROR"];
FLOW_UPDATED -> RESOURCE_ALLOCATION_COMPLETED [ label="UPDATE_ENDPOINTS_ONLY"];
UPDATING_FLOW_STATUS -> FLOW_STATUS_UPDATED [ label="NEXT"];
DETERMINE_OLD_RESOURCE_REMOVAL_REQUIRED -> NOTIFY_FLOW_STATS_ON_REMOVED_PATHS [ label="NEXT"];
DETERMINE_OLD_RESOURCE_REMOVAL_REQUIRED -> UPDATING_FLOW_STATUS [ label="UPDATE_ENDPOINTS_ONLY"];
REVERTING_NEW_RULES -> REVERTING_NEW_RULES [ label="RESPONSE_RECEIVED"];
REVERTING_NEW_RULES -> NEW_RULES_REVERTED [ label="RULES_REVERTED"];
REVERTING_NEW_RULES -> NEW_RULES_REVERTED [ label="TIMEOUT"];
REVERTING_NEW_RULES -> NEW_RULES_REVERTED [ label="ERROR"];
INSTALLING_NON_INGRESS_RULES -> INSTALLING_NON_INGRESS_RULES [ label="RESPONSE_RECEIVED"];
INSTALLING_NON_INGRESS_RULES -> NON_INGRESS_RULES_INSTALLED [ label="RULES_INSTALLED"];
INSTALLING_NON_INGRESS_RULES -> PATHS_SWAP_REVERTED [ label="TIMEOUT"];
INSTALLING_NON_INGRESS_RULES -> PATHS_SWAP_REVERTED [ label="ERROR"];
OLD_PATHS_REMOVAL_COMPLETED -> DEALLOCATING_OLD_RESOURCES [ label="NEXT"];
OLD_PATHS_REMOVAL_COMPLETED -> DEALLOCATING_OLD_RESOURCES [ label="TIMEOUT"];
OLD_PATHS_REMOVAL_COMPLETED -> DEALLOCATING_OLD_RESOURCES [ label="ERROR"];
OLD_RESOURCES_DEALLOCATED -> UPDATING_FLOW_STATUS [ label="NEXT"];
OLD_RESOURCES_DEALLOCATED -> UPDATING_FLOW_STATUS [ label="TIMEOUT"];
OLD_RESOURCES_DEALLOCATED -> UPDATING_FLOW_STATUS [ label="ERROR"];
NOTIFY_FLOW_MONITOR_WITH_ERROR -> FINISHED_WITH_ERROR [ label="NEXT"];
REMOVING_OLD_RULES -> REMOVING_OLD_RULES [ label="RESPONSE_RECEIVED"];
REMOVING_OLD_RULES -> OLD_RULES_REMOVED [ label="RULES_REMOVED"];
REMOVING_OLD_RULES -> OLD_RULES_REMOVED [ label="TIMEOUT"];
REMOVING_OLD_RULES -> OLD_RULES_REMOVED [ label="ERROR"];
PATHS_SWAP_REVERTED -> REVERTING_NEW_RULES [ label="NEXT"];
FLOW_STATUS_UPDATED -> NOTIFY_FLOW_MONITOR [ label="NEXT"];
FLOW_STATUS_UPDATED -> NOTIFY_FLOW_MONITOR_WITH_ERROR [ label="TIMEOUT"];
FLOW_STATUS_UPDATED -> NOTIFY_FLOW_MONITOR_WITH_ERROR [ label="ERROR"];
BUILDING_RULES -> INSTALLING_NON_INGRESS_RULES [ label="NEXT"];
BUILDING_RULES -> NEW_RULES_REVERTED [ label="TIMEOUT"];
BUILDING_RULES -> NEW_RULES_REVERTED [ label="ERROR"];
DEALLOCATING_OLD_RESOURCES -> OLD_RESOURCES_DEALLOCATED [ label="NEXT"];
NEW_PATHS_INSTALLATION_COMPLETED -> REMOVING_OLD_RULES [ label="NEXT"];
NEW_PATHS_INSTALLATION_COMPLETED -> REVERTING_PATHS_SWAP [ label="TIMEOUT"];
NEW_PATHS_INSTALLATION_COMPLETED -> REVERTING_PATHS_SWAP [ label="ERROR"];
PRIMARY_RESOURCES_ALLOCATED -> PROTECTED_RESOURCES_ALLOCATED [ label="NEXT"];
PRIMARY_RESOURCES_ALLOCATED -> NEW_RULES_REVERTED [ label="TIMEOUT"];
PRIMARY_RESOURCES_ALLOCATED -> NEW_RULES_REVERTED [ label="ERROR"];
PRIMARY_RESOURCES_ALLOCATED -> REVERTING_ALLOCATED_RESOURCES [ label="NO_PATH_FOUND"];
RESOURCE_ALLOCATION_COMPLETED -> BUILDING_RULES [ label="NEXT"];
RESOURCE_ALLOCATION_COMPLETED -> NEW_RULES_REVERTED [ label="TIMEOUT"];
RESOURCE_ALLOCATION_COMPLETED -> NEW_RULES_REVERTED [ label="ERROR"];
REVERTING_FLOW -> REVERTING_FLOW_STATUS [ label="NEXT"];
NON_INGRESS_RULES_INSTALLED -> PATHS_SWAPPED [ label="NEXT"];
NON_INGRESS_RULES_INSTALLED -> REVERTING_PATHS_SWAP [ label="TIMEOUT"];
NON_INGRESS_RULES_INSTALLED -> REVERTING_PATHS_SWAP [ label="ERROR"];
PATHS_SWAPPED -> NOTIFY_FLOW_STATS_ON_NEW_PATHS [ label="NEXT"];
PATHS_SWAPPED -> REVERTING_PATHS_SWAP [ label="TIMEOUT"];
PATHS_SWAPPED -> REVERTING_PATHS_SWAP [ label="ERROR"];
REVERTING_FLOW_STATUS -> NOTIFY_FLOW_MONITOR_WITH_ERROR [ label="NEXT"];
PROTECTED_RESOURCES_ALLOCATED -> RESOURCE_ALLOCATION_COMPLETED [ label="NEXT"];
PROTECTED_RESOURCES_ALLOCATED -> NEW_RULES_REVERTED [ label="TIMEOUT"];
PROTECTED_RESOURCES_ALLOCATED -> NEW_RULES_REVERTED [ label="ERROR"];
PROTECTED_RESOURCES_ALLOCATED -> REVERTING_ALLOCATED_RESOURCES [ label="NO_PATH_FOUND"];
OLD_RULES_REMOVED -> DETERMINE_OLD_RESOURCE_REMOVAL_REQUIRED [ label="NEXT"];
RESOURCES_ALLOCATION_REVERTED -> REVERTING_FLOW [ label="NEXT"];
RESOURCES_ALLOCATION_REVERTED -> REVERTING_FLOW [ label="ERROR"];
NEW_RULES_REVERTED -> DETERMINE_RESOURCE_REVERTING_REQUIRED [ label="NEXT"];
INGRESS_RULES_INSTALLED -> NEW_PATHS_INSTALLATION_COMPLETED [ label="NEXT"];
INGRESS_RULES_INSTALLED -> REVERTING_PATHS_SWAP [ label="TIMEOUT"];
INGRESS_RULES_INSTALLED -> REVERTING_PATHS_SWAP [ label="ERROR"];
NOTIFY_FLOW_MONITOR -> FINISHED [ label="NEXT"];
REVERTING_ALLOCATED_RESOURCES -> RESOURCES_ALLOCATION_REVERTED [ label="NEXT"];
INITIALIZED -> FLOW_VALIDATED [ label="NEXT"];
INITIALIZED -> FINISHED_WITH_ERROR [ label="TIMEOUT"];
NOTIFY_FLOW_STATS_ON_REMOVED_PATHS -> OLD_PATHS_REMOVAL_COMPLETED [ label="NEXT"];
REVERTING_PATHS_SWAP -> PATHS_SWAP_REVERTED [ label="NEXT"];}}
Loading

0 comments on commit 6c6ccb7

Please sign in to comment.