|
37 | 37 | import javax.inject.Inject; |
38 | 38 | import javax.naming.ConfigurationException; |
39 | 39 |
|
40 | | -import com.cloud.event.ActionEvent; |
41 | | -import com.cloud.storage.StorageUtil; |
42 | | - |
43 | 40 | import org.apache.cloudstack.api.ApiCommandResourceType; |
44 | 41 | import org.apache.cloudstack.api.ApiConstants.IoDriverPolicy; |
45 | | -import org.apache.cloudstack.context.CallContext; |
46 | | -import org.apache.cloudstack.secret.dao.PassphraseDao; |
47 | | -import org.apache.cloudstack.secret.PassphraseVO; |
48 | 42 | import org.apache.cloudstack.api.command.admin.vm.MigrateVMCmd; |
49 | 43 | import org.apache.cloudstack.api.command.admin.volume.MigrateVolumeCmdByAdmin; |
50 | 44 | import org.apache.cloudstack.api.command.user.volume.MigrateVolumeCmd; |
| 45 | +import org.apache.cloudstack.context.CallContext; |
51 | 46 | import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService; |
52 | 47 | import org.apache.cloudstack.engine.subsystem.api.storage.ChapInfo; |
53 | 48 | import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; |
|
76 | 71 | import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO; |
77 | 72 | import org.apache.cloudstack.resourcedetail.DiskOfferingDetailVO; |
78 | 73 | import org.apache.cloudstack.resourcedetail.dao.DiskOfferingDetailsDao; |
| 74 | +import org.apache.cloudstack.secret.PassphraseVO; |
| 75 | +import org.apache.cloudstack.secret.dao.PassphraseDao; |
| 76 | +import org.apache.cloudstack.snapshot.SnapshotHelper; |
79 | 77 | import org.apache.cloudstack.storage.command.CommandResult; |
80 | 78 | import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; |
81 | 79 | import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreDao; |
|
87 | 85 | import org.apache.commons.collections.MapUtils; |
88 | 86 | import org.apache.commons.lang3.StringUtils; |
89 | 87 | import org.apache.log4j.Logger; |
| 88 | +import org.jetbrains.annotations.Nullable; |
90 | 89 |
|
91 | 90 | import com.cloud.agent.api.to.DataTO; |
92 | 91 | import com.cloud.agent.api.to.DatadiskTO; |
|
100 | 99 | import com.cloud.deploy.DataCenterDeployment; |
101 | 100 | import com.cloud.deploy.DeployDestination; |
102 | 101 | import com.cloud.deploy.DeploymentPlanner.ExcludeList; |
| 102 | +import com.cloud.event.ActionEvent; |
103 | 103 | import com.cloud.event.EventTypes; |
104 | 104 | import com.cloud.event.UsageEventUtils; |
105 | 105 | import com.cloud.exception.ConcurrentOperationException; |
|
121 | 121 | import com.cloud.storage.Storage.ImageFormat; |
122 | 122 | import com.cloud.storage.StorageManager; |
123 | 123 | import com.cloud.storage.StoragePool; |
| 124 | +import com.cloud.storage.StorageUtil; |
124 | 125 | import com.cloud.storage.VMTemplateStorageResourceAssoc; |
125 | 126 | import com.cloud.storage.Volume; |
126 | 127 | import com.cloud.storage.Volume.Type; |
|
140 | 141 | import com.cloud.utils.component.ManagerBase; |
141 | 142 | import com.cloud.utils.db.DB; |
142 | 143 | import com.cloud.utils.db.EntityManager; |
143 | | -import com.cloud.utils.db.UUIDManager; |
144 | 144 | import com.cloud.utils.db.Transaction; |
145 | 145 | import com.cloud.utils.db.TransactionCallback; |
146 | 146 | import com.cloud.utils.db.TransactionCallbackNoReturn; |
147 | 147 | import com.cloud.utils.db.TransactionStatus; |
| 148 | +import com.cloud.utils.db.UUIDManager; |
148 | 149 | import com.cloud.utils.exception.CloudRuntimeException; |
149 | 150 | import com.cloud.utils.fsm.NoTransitionException; |
150 | 151 | import com.cloud.utils.fsm.StateMachine2; |
|
168 | 169 | import com.cloud.vm.dao.UserVmDao; |
169 | 170 | import com.cloud.vm.dao.UserVmDetailsDao; |
170 | 171 |
|
171 | | -import org.apache.cloudstack.snapshot.SnapshotHelper; |
172 | | -import org.jetbrains.annotations.Nullable; |
173 | | - |
174 | 172 | public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrationService, Configurable { |
175 | 173 |
|
176 | 174 | public enum UserVmCloneType { |
@@ -1710,6 +1708,11 @@ private Pair<VolumeVO, DataStore> recreateVolume(VolumeVO vol, VirtualMachinePro |
1710 | 1708 |
|
1711 | 1709 | future = volService.createVolumeAsync(volume, destPool); |
1712 | 1710 | } else { |
| 1711 | + final VirtualMachineTemplate template = _entityMgr.findById(VirtualMachineTemplate.class, templateId); |
| 1712 | + if (template == null) { |
| 1713 | + s_logger.error(String.format("Failed to find template: %d for %s", templateId, volume)); |
| 1714 | + throw new CloudRuntimeException(String.format("Failed to find template for volume ID: %s", volume.getUuid())); |
| 1715 | + } |
1713 | 1716 | TemplateInfo templ = tmplFactory.getReadyTemplateOnImageStore(templateId, dest.getDataCenter().getId()); |
1714 | 1717 | PrimaryDataStore primaryDataStore = (PrimaryDataStore)destPool; |
1715 | 1718 |
|
|
0 commit comments