-
Notifications
You must be signed in to change notification settings - Fork 54
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a unit test that generates an FSM DOT file
- Loading branch information
1 parent
24cbe75
commit 6c6ccb7
Showing
5 changed files
with
525 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
113 changes: 113 additions & 0 deletions
113
src-java/flowhs-topology/flowhs-storm-topology/src/main/resources/HaFlowUpdateFsm.dot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"];}} |
120 changes: 120 additions & 0 deletions
120
...flowhs-topology/flowhs-storm-topology/src/main/resources/HaFlowUpdateFsmWithEndpoints.dot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"];}} |
Oops, something went wrong.