|
16 | 16 | // under the License. |
17 | 17 | package com.cloud.vm; |
18 | 18 |
|
| 19 | +import java.util.Arrays; |
19 | 20 | import java.util.Date; |
20 | 21 | import java.util.Map; |
21 | 22 |
|
|
26 | 27 |
|
27 | 28 | import com.cloud.hypervisor.Hypervisor.HypervisorType; |
28 | 29 | import com.cloud.utils.fsm.StateMachine2; |
| 30 | +import com.cloud.utils.fsm.StateMachine2.Transition; |
| 31 | +import com.cloud.utils.fsm.StateMachine2.Transition.Impact; |
29 | 32 | import com.cloud.utils.fsm.StateObject; |
30 | 33 |
|
31 | 34 | /** |
@@ -75,63 +78,63 @@ public static StateMachine2<State, VirtualMachine.Event, VirtualMachine> getStat |
75 | 78 |
|
76 | 79 | protected static final StateMachine2<State, VirtualMachine.Event, VirtualMachine> s_fsm = new StateMachine2<State, VirtualMachine.Event, VirtualMachine>(); |
77 | 80 | static { |
78 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.StartRequested, State.Starting); |
79 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.DestroyRequested, State.Destroyed); |
80 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.StopRequested, State.Stopped); |
81 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.AgentReportStopped, State.Stopped); |
| 81 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.StartRequested, State.Starting, null)); |
| 82 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.DestroyRequested, State.Destroyed, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 83 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.StopRequested, State.Stopped, null)); |
| 84 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.AgentReportStopped, State.Stopped, null)); |
82 | 85 |
|
83 | 86 | // please pay attention about state transition to Error state, there should be only one case (failed in VM |
84 | 87 | // creation process) |
85 | 88 | // that can have such transition |
86 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.OperationFailedToError, State.Error); |
87 | | - |
88 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.OperationFailed, State.Stopped); |
89 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.ExpungeOperation, State.Expunging); |
90 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.AgentReportShutdowned, State.Stopped); |
91 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.StorageMigrationRequested, State.Migrating); |
92 | | - s_fsm.addTransition(State.Starting, VirtualMachine.Event.OperationRetry, State.Starting); |
93 | | - s_fsm.addTransition(State.Starting, VirtualMachine.Event.OperationSucceeded, State.Running); |
94 | | - s_fsm.addTransition(State.Starting, VirtualMachine.Event.OperationFailed, State.Stopped); |
95 | | - s_fsm.addTransition(State.Starting, VirtualMachine.Event.AgentReportRunning, State.Running); |
96 | | - s_fsm.addTransition(State.Starting, VirtualMachine.Event.AgentReportStopped, State.Stopped); |
97 | | - s_fsm.addTransition(State.Starting, VirtualMachine.Event.AgentReportShutdowned, State.Stopped); |
98 | | - s_fsm.addTransition(State.Destroyed, VirtualMachine.Event.RecoveryRequested, State.Stopped); |
99 | | - s_fsm.addTransition(State.Destroyed, VirtualMachine.Event.ExpungeOperation, State.Expunging); |
100 | | - s_fsm.addTransition(State.Running, VirtualMachine.Event.MigrationRequested, State.Migrating); |
101 | | - s_fsm.addTransition(State.Running, VirtualMachine.Event.AgentReportRunning, State.Running); |
102 | | - s_fsm.addTransition(State.Running, VirtualMachine.Event.AgentReportStopped, State.Stopped); |
103 | | - s_fsm.addTransition(State.Running, VirtualMachine.Event.StopRequested, State.Stopping); |
104 | | - s_fsm.addTransition(State.Running, VirtualMachine.Event.AgentReportShutdowned, State.Stopped); |
105 | | - s_fsm.addTransition(State.Running, VirtualMachine.Event.AgentReportMigrated, State.Running); |
106 | | - s_fsm.addTransition(State.Running, VirtualMachine.Event.OperationSucceeded, State.Running); |
107 | | - s_fsm.addTransition(State.Migrating, VirtualMachine.Event.MigrationRequested, State.Migrating); |
108 | | - s_fsm.addTransition(State.Migrating, VirtualMachine.Event.OperationSucceeded, State.Running); |
109 | | - s_fsm.addTransition(State.Migrating, VirtualMachine.Event.OperationFailed, State.Running); |
110 | | - s_fsm.addTransition(State.Migrating, VirtualMachine.Event.AgentReportRunning, State.Running); |
111 | | - s_fsm.addTransition(State.Migrating, VirtualMachine.Event.AgentReportStopped, State.Stopped); |
112 | | - s_fsm.addTransition(State.Migrating, VirtualMachine.Event.AgentReportShutdowned, State.Stopped); |
113 | | - s_fsm.addTransition(State.Stopping, VirtualMachine.Event.OperationSucceeded, State.Stopped); |
114 | | - s_fsm.addTransition(State.Stopping, VirtualMachine.Event.OperationFailed, State.Running); |
115 | | - s_fsm.addTransition(State.Stopping, VirtualMachine.Event.AgentReportRunning, State.Running); |
116 | | - s_fsm.addTransition(State.Stopping, VirtualMachine.Event.AgentReportStopped, State.Stopped); |
117 | | - s_fsm.addTransition(State.Stopping, VirtualMachine.Event.StopRequested, State.Stopping); |
118 | | - s_fsm.addTransition(State.Stopping, VirtualMachine.Event.AgentReportShutdowned, State.Stopped); |
119 | | - s_fsm.addTransition(State.Expunging, VirtualMachine.Event.OperationFailed, State.Expunging); |
120 | | - s_fsm.addTransition(State.Expunging, VirtualMachine.Event.ExpungeOperation, State.Expunging); |
121 | | - s_fsm.addTransition(State.Error, VirtualMachine.Event.DestroyRequested, State.Expunging); |
122 | | - s_fsm.addTransition(State.Error, VirtualMachine.Event.ExpungeOperation, State.Expunging); |
123 | | - |
124 | | - s_fsm.addTransition(State.Starting, VirtualMachine.Event.FollowAgentPowerOnReport, State.Running); |
125 | | - s_fsm.addTransition(State.Stopping, VirtualMachine.Event.FollowAgentPowerOnReport, State.Running); |
126 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.FollowAgentPowerOnReport, State.Running); |
127 | | - s_fsm.addTransition(State.Running, VirtualMachine.Event.FollowAgentPowerOnReport, State.Running); |
128 | | - s_fsm.addTransition(State.Migrating, VirtualMachine.Event.FollowAgentPowerOnReport, State.Running); |
129 | | - |
130 | | - s_fsm.addTransition(State.Starting, VirtualMachine.Event.FollowAgentPowerOffReport, State.Stopped); |
131 | | - s_fsm.addTransition(State.Stopping, VirtualMachine.Event.FollowAgentPowerOffReport, State.Stopped); |
132 | | - s_fsm.addTransition(State.Running, VirtualMachine.Event.FollowAgentPowerOffReport, State.Stopped); |
133 | | - s_fsm.addTransition(State.Migrating, VirtualMachine.Event.FollowAgentPowerOffReport, State.Stopped); |
134 | | - s_fsm.addTransition(State.Stopped, VirtualMachine.Event.FollowAgentPowerOffReport, State.Stopped); |
| 89 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.OperationFailedToError, State.Error, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 90 | + |
| 91 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.OperationFailed, State.Stopped, null)); |
| 92 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.ExpungeOperation, State.Expunging, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 93 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.AgentReportShutdowned, State.Stopped, null)); |
| 94 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.StorageMigrationRequested, State.Migrating, null)); |
| 95 | + s_fsm.addTransition(new Transition<State, Event>(State.Starting, VirtualMachine.Event.OperationRetry, State.Starting, null)); |
| 96 | + s_fsm.addTransition(new Transition<State, Event>(State.Starting, VirtualMachine.Event.OperationSucceeded, State.Running, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 97 | + s_fsm.addTransition(new Transition<State, Event>(State.Starting, VirtualMachine.Event.OperationFailed, State.Stopped, null)); |
| 98 | + s_fsm.addTransition(new Transition<State, Event>(State.Starting, VirtualMachine.Event.AgentReportRunning, State.Running, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 99 | + s_fsm.addTransition(new Transition<State, Event>(State.Starting, VirtualMachine.Event.AgentReportStopped, State.Stopped, null)); |
| 100 | + s_fsm.addTransition(new Transition<State, Event>(State.Starting, VirtualMachine.Event.AgentReportShutdowned, State.Stopped, null)); |
| 101 | + s_fsm.addTransition(new Transition<State, Event>(State.Destroyed, VirtualMachine.Event.RecoveryRequested, State.Stopped, null)); |
| 102 | + s_fsm.addTransition(new Transition<State, Event>(State.Destroyed, VirtualMachine.Event.ExpungeOperation, State.Expunging, null)); |
| 103 | + s_fsm.addTransition(new Transition<State, Event>(State.Running, VirtualMachine.Event.MigrationRequested, State.Migrating, null)); |
| 104 | + s_fsm.addTransition(new Transition<State, Event>(State.Running, VirtualMachine.Event.AgentReportRunning, State.Running, null)); |
| 105 | + s_fsm.addTransition(new Transition<State, Event>(State.Running, VirtualMachine.Event.AgentReportStopped, State.Stopped, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 106 | + s_fsm.addTransition(new Transition<State, Event>(State.Running, VirtualMachine.Event.StopRequested, State.Stopping, null)); |
| 107 | + s_fsm.addTransition(new Transition<State, Event>(State.Running, VirtualMachine.Event.AgentReportShutdowned, State.Stopped, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 108 | + s_fsm.addTransition(new Transition<State, Event>(State.Running, VirtualMachine.Event.AgentReportMigrated, State.Running, null)); |
| 109 | + s_fsm.addTransition(new Transition<State, Event>(State.Running, VirtualMachine.Event.OperationSucceeded, State.Running, null)); |
| 110 | + s_fsm.addTransition(new Transition<State, Event>(State.Migrating, VirtualMachine.Event.MigrationRequested, State.Migrating, null)); |
| 111 | + s_fsm.addTransition(new Transition<State, Event>(State.Migrating, VirtualMachine.Event.OperationSucceeded, State.Running, null)); |
| 112 | + s_fsm.addTransition(new Transition<State, Event>(State.Migrating, VirtualMachine.Event.OperationFailed, State.Running, null)); |
| 113 | + s_fsm.addTransition(new Transition<State, Event>(State.Migrating, VirtualMachine.Event.AgentReportRunning, State.Running, null)); |
| 114 | + s_fsm.addTransition(new Transition<State, Event>(State.Migrating, VirtualMachine.Event.AgentReportStopped, State.Stopped, null)); |
| 115 | + s_fsm.addTransition(new Transition<State, Event>(State.Migrating, VirtualMachine.Event.AgentReportShutdowned, State.Stopped, null)); |
| 116 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.OperationSucceeded, State.Stopped, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 117 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.OperationFailed, State.Running, null)); |
| 118 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.AgentReportRunning, State.Running, null)); |
| 119 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.AgentReportStopped, State.Stopped, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 120 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.StopRequested, State.Stopping, null)); |
| 121 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.AgentReportShutdowned, State.Stopped, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 122 | + s_fsm.addTransition(new Transition<State, Event>(State.Expunging, VirtualMachine.Event.OperationFailed, State.Expunging,null)); |
| 123 | + s_fsm.addTransition(new Transition<State, Event>(State.Expunging, VirtualMachine.Event.ExpungeOperation, State.Expunging,null)); |
| 124 | + s_fsm.addTransition(new Transition<State, Event>(State.Error, VirtualMachine.Event.DestroyRequested, State.Expunging, null)); |
| 125 | + s_fsm.addTransition(new Transition<State, Event>(State.Error, VirtualMachine.Event.ExpungeOperation, State.Expunging, null)); |
| 126 | + |
| 127 | + s_fsm.addTransition(new Transition<State, Event>(State.Starting, VirtualMachine.Event.FollowAgentPowerOnReport, State.Running, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 128 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.FollowAgentPowerOnReport, State.Running, null)); |
| 129 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.FollowAgentPowerOnReport, State.Running, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 130 | + s_fsm.addTransition(new Transition<State, Event>(State.Running, VirtualMachine.Event.FollowAgentPowerOnReport, State.Running, null)); |
| 131 | + s_fsm.addTransition(new Transition<State, Event>(State.Migrating, VirtualMachine.Event.FollowAgentPowerOnReport, State.Running, null)); |
| 132 | + |
| 133 | + s_fsm.addTransition(new Transition<State, Event>(State.Starting, VirtualMachine.Event.FollowAgentPowerOffReport, State.Stopped, null)); |
| 134 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.FollowAgentPowerOffReport, State.Stopped, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 135 | + s_fsm.addTransition(new Transition<State, Event>(State.Running, VirtualMachine.Event.FollowAgentPowerOffReport, State.Stopped, Arrays.asList(new Impact[]{Impact.USAGE}))); |
| 136 | + s_fsm.addTransition(new Transition<State, Event>(State.Migrating, VirtualMachine.Event.FollowAgentPowerOffReport, State.Stopped, null)); |
| 137 | + s_fsm.addTransition(new Transition<State, Event>(State.Stopped, VirtualMachine.Event.FollowAgentPowerOffReport, State.Stopped, null)); |
135 | 138 | } |
136 | 139 |
|
137 | 140 | public static boolean isVmStarted(State oldState, Event e, State newState) { |
|
0 commit comments