Skip to content

Commit e68f5ce

Browse files
Mike TutkowskiDaanHoogland
authored andcommitted
Only use the host if its Resource State is Enabled. (#2512)
1 parent 7647e10 commit e68f5ce

2 files changed

Lines changed: 22 additions & 22 deletions

File tree

engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.cloud.host.dao.HostDao;
4444
import com.cloud.host.dao.HostDetailsDao;
4545
import com.cloud.hypervisor.Hypervisor.HypervisorType;
46+
import com.cloud.resource.ResourceState;
4647
import com.cloud.storage.DataStoreRole;
4748
import com.cloud.storage.DiskOfferingVO;
4849
import com.cloud.storage.Snapshot;
@@ -1933,7 +1934,11 @@ private HostVO getHostInCluster(long clusterId) {
19331934
if (hosts != null && hosts.size() > 0) {
19341935
Collections.shuffle(hosts, RANDOM);
19351936

1936-
return hosts.get(0);
1937+
for (HostVO host : hosts) {
1938+
if (ResourceState.Enabled.equals(host.getResourceState())) {
1939+
return host;
1940+
}
1941+
}
19371942
}
19381943

19391944
throw new CloudRuntimeException("Unable to locate a host");
@@ -1954,6 +1959,10 @@ private HostVO getHost(Long zoneId, HypervisorType hypervisorType, boolean compu
19541959
Collections.shuffle(hosts, RANDOM);
19551960

19561961
for (HostVO host : hosts) {
1962+
if (!ResourceState.Enabled.equals(host.getResourceState())) {
1963+
continue;
1964+
}
1965+
19571966
if (computeClusterMustSupportResign) {
19581967
long clusterId = host.getClusterId();
19591968

engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/StorageSystemSnapshotStrategy.java

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import com.cloud.event.EventTypes;
2626
import com.cloud.event.UsageEventUtils;
2727
import com.cloud.exception.InvalidParameterValueException;
28-
import com.cloud.exception.ResourceAllocationException;
2928
import com.cloud.host.HostVO;
3029
import com.cloud.host.dao.HostDao;
3130
import com.cloud.hypervisor.Hypervisor.HypervisorType;
@@ -56,7 +55,6 @@
5655
import com.cloud.vm.snapshot.VMSnapshotService;
5756
import com.cloud.vm.snapshot.VMSnapshotVO;
5857
import com.cloud.vm.snapshot.dao.VMSnapshotDao;
59-
import com.google.common.base.Optional;
6058
import com.google.common.base.Preconditions;
6159

6260
import org.apache.cloudstack.engine.subsystem.api.storage.ChapInfo;
@@ -86,6 +84,7 @@
8684
import java.util.HashMap;
8785
import java.util.List;
8886
import java.util.Map;
87+
import java.util.Optional;
8988
import java.util.Random;
9089
import java.util.UUID;
9190

@@ -102,14 +101,14 @@ public class StorageSystemSnapshotStrategy extends SnapshotStrategyBase {
102101
@Inject private SnapshotDao snapshotDao;
103102
@Inject private SnapshotDataFactory snapshotDataFactory;
104103
@Inject private SnapshotDetailsDao snapshotDetailsDao;
105-
@Inject SnapshotDataStoreDao snapshotStoreDao;
104+
@Inject private SnapshotDataStoreDao snapshotStoreDao;
106105
@Inject private VolumeDetailsDao volumeDetailsDao;
107106
@Inject private VMInstanceDao vmInstanceDao;
108107
@Inject private VMSnapshotDao vmSnapshotDao;
109108
@Inject private VMSnapshotService vmSnapshotService;
110109
@Inject private VolumeDao volumeDao;
111110
@Inject private VolumeService volService;
112-
@Inject private VolumeDetailsDao _volumeDetailsDaoImpl;
111+
@Inject private VolumeDetailsDao volumeDetailsDaoImpl;
113112

114113
@Override
115114
public SnapshotInfo backupSnapshot(SnapshotInfo snapshotInfo) {
@@ -200,7 +199,7 @@ private boolean cleanupSnapshotOnPrimaryStore(long snapshotId) {
200199
try {
201200
snapshotObj.processEvent(Snapshot.Event.DestroyRequested);
202201

203-
List<VolumeDetailVO> volumesFromSnapshot = _volumeDetailsDaoImpl.findDetails("SNAPSHOT_ID", String.valueOf(snapshotId), null);
202+
List<VolumeDetailVO> volumesFromSnapshot = volumeDetailsDaoImpl.findDetails("SNAPSHOT_ID", String.valueOf(snapshotId), null);
204203

205204
if (volumesFromSnapshot.size() > 0) {
206205
try {
@@ -471,20 +470,11 @@ else if (volumeInfo.getFormat() == ImageFormat.OVA || volumeInfo.getFormat() ==
471470
if (ImageFormat.OVA.equals(volumeInfo.getFormat())) {
472471
setVmdk(snapshotInfo, volumeInfo);
473472

474-
try {
475-
vmSnapshot = takeHypervisorSnapshot(volumeInfo);
476-
}
477-
catch (ResourceAllocationException ex) {
478-
String errMsg = "Unable to allocate VM snapshot";
479-
480-
s_logger.error(errMsg, ex);
481-
482-
throw new CloudRuntimeException(errMsg, ex);
483-
}
473+
vmSnapshot = takeHypervisorSnapshot(volumeInfo);
484474
}
485475

486476
SnapshotResult result = null;
487-
SnapshotInfo snapshotOnPrimary = null;
477+
SnapshotInfo snapshotOnPrimary;
488478

489479
try {
490480
volumeInfo.stateTransit(Volume.Event.SnapshotRequested);
@@ -549,7 +539,7 @@ public void postSnapshotCreation(SnapshotInfo snapshot) {
549539

550540
}
551541

552-
private VMSnapshot takeHypervisorSnapshot(VolumeInfo volumeInfo) throws ResourceAllocationException {
542+
private VMSnapshot takeHypervisorSnapshot(VolumeInfo volumeInfo) {
553543
VirtualMachine virtualMachine = volumeInfo.getAttachedVM();
554544

555545
if (virtualMachine != null && VirtualMachine.State.Running.equals(virtualMachine.getState())) {
@@ -678,7 +668,8 @@ private void performSnapshotAndCopyOnHostSide(VolumeInfo volumeInfo, SnapshotInf
678668
if (hostId != null) {
679669
hostVO = hostDao.findById(hostId);
680670
}
681-
else {
671+
672+
if (hostVO == null || !ResourceState.Enabled.equals(hostVO.getResourceState())) {
682673
Optional<HostVO> optHostVO = getHost(volumeInfo.getDataCenterId(), false);
683674

684675
if (optHostVO.isPresent()) {
@@ -836,7 +827,7 @@ private HostVO getHost(long zoneId, Long hostId) {
836827

837828
HostVO hostVO = hostDao.findById(hostId);
838829

839-
if (hostVO != null) {
830+
if (hostVO != null && ResourceState.Enabled.equals(hostVO.getResourceState())) {
840831
return hostVO;
841832
}
842833

@@ -867,7 +858,7 @@ private Optional<HostVO> getHost(long zoneId, boolean computeClusterMustSupportR
867858
Collections.shuffle(hosts, new Random(System.nanoTime()));
868859

869860
for (HostVO host : hosts) {
870-
if (host.getResourceState() == ResourceState.Enabled) {
861+
if (ResourceState.Enabled.equals(host.getResourceState())) {
871862
if (computeClusterMustSupportResign) {
872863
if (clusterDao.getSupportsResigning(cluster.getId())) {
873864
return Optional.of(host);
@@ -886,7 +877,7 @@ private Optional<HostVO> getHost(long zoneId, boolean computeClusterMustSupportR
886877
}
887878
}
888879

889-
return Optional.absent();
880+
return Optional.empty();
890881
}
891882

892883
private void markAsBackedUp(SnapshotObject snapshotObj) {

0 commit comments

Comments
 (0)