
# Edge Router State Diagrams
### V7 Edge Routers and V8 Hosted Edge Routers
Note, for V7 Customer Hosted Edge Routers, the suspend, resume, resize operations are not supported
```mermaid
stateDiagram

%% Create
NEW --> PROVISIONING : CreateEdgeRouterProcess - create
PROVISIONING --> ERROR : CreateEdgeRouterProcess - handleFailedEdgeRouter
PROVISIONING --> PROVISIONED: CreateEdgeRouterProcess - finish

%% General Transitions
PROVISIONED --> UPDATING : SuspendEdgeRouterProcess create\nRestartEdgeRouterHostProcess - create\nRestartEdgeRouterApplicationProcess - create\nResizeEdgeRouterProcess - create
UPDATING --> PROVISIONED : ResumeEdgeRouterProcess - finish\nRestartEdgeRouterHostProcess - finish\nRestartEdgeRouterApplicationProcess - finish\nResizeEdgeRouterProcess - finish
UPDATING --> ERROR : SuspendEdgeRouterProcess handleException\nRestartEdgeRouterHostProcess - handleException\nRestartEdgeRouterApplicationProcess - handleException\nResizeEdgeRouterProcess - handleException
ERROR --> UPDATING: SuspendEdgeRouterProcess create\nRestartEdgeRouterHostProcess - create

%% Suspend
UPDATING --> SUSPENDED : SuspendEdgeRouterProcess - finish

%% Resume
SUSPENDED --> UPDATING: ResumeEdgeRouterProcess - create

%% Delete
PROVISIONED --> DELETING: DeleteEdgeRouterProcess - create
ERROR --> DELETING: DeleteEdgeRouterProcess - create
SUSPENDED --> DELETING: DeleteEdgeRouterProcess - create
DELETING --> DELETED : DeleteEdgeRouterProcess - finish
DELETING --> ERROR : DeleteEdgeRouterProcess - exceptionHandler

%% Reissue
%% deprecated and will be removed once network > 7.3.69

%% V2Controller's registered endpoint
[*] --> PROVISIONED: EdgeRouterV2Controller - registerEdgeRouter\nSuccess result
```

### V8 Customer Hosted Edge Routers
```mermaid
stateDiagram
    NEW
    state delete_check <<choice>>
    PROVISIONED
    UPDATING
    state version_check <<choice>>
    ERROR
    DELETING
    DELETED
%% Create
[*] --> NEW : EdgeRouterRegistrationController - edgeRouterRegistration
NEW --> delete_check: EdgeRouterRegistrationController - edgeRouterRegistrationRegistered
ERROR --> delete_check: EdgeRouterRegistrationController - edgeRouterRegistrationRegistered
    delete_check --> PROVISIONED : status==0
    delete_check --> ERROR: status!=0

%% General Transitions
PROVISIONED --> UPDATING : RestartEdgeRouterApplicationProcess - create
UPDATING --> PROVISIONED : RestartEdgeRouterApplicationProcess - finish
UPDATING --> ERROR : RestartEdgeRouterApplicationProcess - handleException
ERROR --> UPDATING: RestartEdgeRouterApplicationProcess - create

%% Delete
NEW --> DELETING: DeleteEdgeRouterProcess - create
PROVISIONED --> DELETING: DeleteEdgeRouterProcess - create
ERROR --> DELETING: DeleteEdgeRouterProcess - create
DELETING --> DELETED : DeleteEdgeRouterProcess - finish
DELETING --> ERROR : DeleteEdgeRouterProcess - exceptionHandler

%% Upgrade
PROVISIONED --> UPDATING: UpgradeEdgeRoutersProcess - updateEdgeRouterStatus
UPDATING --> version_check: UpgradeEdgeRoutersProcess - checkVersionsAndUpdateStatus
    version_check --> PROVISIONED: networkVersion == erVersion
    version_check --> ERROR:  networkVersion != erVersion
```
