Skip to content

Commit 1c90d88

Browse files
author
Anurag Awasthi
committed
Refactor to use single place for methods checking maintenance states
1 parent ca792ef commit 1c90d88

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

api/src/main/java/com/cloud/resource/ResourceState.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ public static boolean isMaintenanceState(ResourceState state) {
9999
ResourceState.PrepareForMaintenance, ResourceState.ErrorInPrepareForMaintenance).contains(state);
100100
}
101101

102+
public static boolean canAttemptMaintenance(ResourceState state) {
103+
return !Arrays.asList(ResourceState.Maintenance, ResourceState.PrepareForMaintenance,
104+
ResourceState.ErrorInPrepareForMaintenance).contains(state);
105+
}
106+
102107
protected static final StateMachine<ResourceState, Event> s_fsm = new StateMachine<ResourceState, Event>();
103108
static {
104109
s_fsm.addTransition(null, Event.InternalCreated, ResourceState.Enabled);
@@ -129,9 +134,9 @@ public static boolean isMaintenanceState(ResourceState state) {
129134
s_fsm.addTransition(ResourceState.ErrorInPrepareForMaintenance, Event.UnableToMaintain, ResourceState.ErrorInMaintenance);
130135
s_fsm.addTransition(ResourceState.ErrorInPrepareForMaintenance, Event.ErrorsCorrected, ResourceState.PrepareForMaintenance);
131136
s_fsm.addTransition(ResourceState.ErrorInMaintenance, Event.InternalCreated, ResourceState.ErrorInMaintenance);
137+
s_fsm.addTransition(ResourceState.ErrorInMaintenance, Event.AdminAskMaintenance, ResourceState.PrepareForMaintenance);
132138
s_fsm.addTransition(ResourceState.ErrorInMaintenance, Event.Disable, ResourceState.Disabled);
133139
s_fsm.addTransition(ResourceState.ErrorInMaintenance, Event.DeleteHost, ResourceState.Disabled);
134-
s_fsm.addTransition(ResourceState.ErrorInMaintenance, Event.InternalEnterMaintenance, ResourceState.Maintenance);
135140
s_fsm.addTransition(ResourceState.ErrorInMaintenance, Event.AdminCancelMaintenance, ResourceState.Enabled);
136141
s_fsm.addTransition(ResourceState.Error, Event.InternalCreated, ResourceState.Error);
137142
s_fsm.addTransition(ResourceState.Disabled, Event.DeleteHost, ResourceState.Disabled);

server/src/main/java/com/cloud/resource/ResourceManagerImpl.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.net.URISyntaxException;
2121
import java.net.URLDecoder;
2222
import java.util.ArrayList;
23-
import java.util.Arrays;
2423
import java.util.Collections;
2524
import java.util.HashMap;
2625
import java.util.Iterator;
@@ -1216,7 +1215,7 @@ private boolean doMaintain(final long hostId) {
12161215
final HostVO host = _hostDao.findById(hostId);
12171216
s_logger.info("Maintenance: attempting maintenance of host " + host.getUuid());
12181217
ResourceState hostState = host.getResourceState();
1219-
if (ResourceState.isMaintenanceState(hostState)) {
1218+
if (!ResourceState.canAttemptMaintenance(hostState)) {
12201219
throw new CloudRuntimeException("Cannot perform maintain when resource state is " + hostState + ", hostId = " + hostId);
12211220
}
12221221

@@ -1284,7 +1283,7 @@ public Host maintain(final PrepareForMaintenanceCmd cmd) {
12841283
s_logger.debug("Unable to find host " + hostId);
12851284
throw new InvalidParameterValueException("Unable to find host with ID: " + hostId + ". Please specify a valid host ID.");
12861285
}
1287-
if (Arrays.asList(ResourceState.Maintenance, ResourceState.PrepareForMaintenance, ResourceState.ErrorInPrepareForMaintenance).contains(host.getResourceState())) {
1286+
if (!ResourceState.canAttemptMaintenance(host.getResourceState())) {
12881287
throw new CloudRuntimeException("Host is already in state " + host.getResourceState() + ". Cannot recall for maintenance until resolved.");
12891288
}
12901289

@@ -2398,10 +2397,7 @@ private boolean doCancelMaintenance(final long hostId) {
23982397
* TODO: think twice about returning true or throwing out exception, I
23992398
* really prefer to exception that always exposes bugs
24002399
*/
2401-
if (host.getResourceState() != ResourceState.PrepareForMaintenance &&
2402-
host.getResourceState() != ResourceState.ErrorInPrepareForMaintenance &&
2403-
host.getResourceState() != ResourceState.Maintenance &&
2404-
host.getResourceState() != ResourceState.ErrorInMaintenance) {
2400+
if (!ResourceState.isMaintenanceState(host.getResourceState())) {
24052401
throw new CloudRuntimeException("Cannot perform cancelMaintenance when resource state is " + host.getResourceState() + ", hostId = " + hostId);
24062402
}
24072403

0 commit comments

Comments
 (0)