2525import com .cloud .event .EventTypes ;
2626import com .cloud .event .UsageEventUtils ;
2727import com .cloud .exception .InvalidParameterValueException ;
28- import com .cloud .exception .ResourceAllocationException ;
2928import com .cloud .host .HostVO ;
3029import com .cloud .host .dao .HostDao ;
3130import com .cloud .hypervisor .Hypervisor .HypervisorType ;
5655import com .cloud .vm .snapshot .VMSnapshotService ;
5756import com .cloud .vm .snapshot .VMSnapshotVO ;
5857import com .cloud .vm .snapshot .dao .VMSnapshotDao ;
59- import com .google .common .base .Optional ;
6058import com .google .common .base .Preconditions ;
6159
6260import org .apache .cloudstack .engine .subsystem .api .storage .ChapInfo ;
8684import java .util .HashMap ;
8785import java .util .List ;
8886import java .util .Map ;
87+ import java .util .Optional ;
8988import java .util .Random ;
9089import 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