Search in sources :

Example 51 with VolumeObjectTO

use of com.cloud.storage.to.VolumeObjectTO in project cosmic by MissionCriticalCloud.

the class VMSnapshotStrategyTest method testCreateVMSnapshot.

@Test
public void testCreateVMSnapshot() throws AgentUnavailableException, OperationTimedoutException {
    final Long hostId = 1L;
    final Long vmId = 1L;
    final Long guestOsId = 1L;
    final HypervisorType hypervisorType = HypervisorType.Any;
    final String hypervisorVersion = "default";
    final String guestOsName = "Other";
    final List<VolumeObjectTO> volumeObjectTOs = new ArrayList<>();
    final VMSnapshotVO vmSnapshot = Mockito.mock(VMSnapshotVO.class);
    final UserVmVO userVmVO = Mockito.mock(UserVmVO.class);
    Mockito.when(userVmVO.getGuestOSId()).thenReturn(guestOsId);
    Mockito.when(vmSnapshot.getVmId()).thenReturn(vmId);
    Mockito.when(vmSnapshotHelper.pickRunningHost(Matchers.anyLong())).thenReturn(hostId);
    Mockito.when(vmSnapshotHelper.getVolumeTOList(Matchers.anyLong())).thenReturn(volumeObjectTOs);
    Mockito.when(userVmDao.findById(Matchers.anyLong())).thenReturn(userVmVO);
    final GuestOSVO guestOSVO = Mockito.mock(GuestOSVO.class);
    Mockito.when(guestOSDao.findById(Matchers.anyLong())).thenReturn(guestOSVO);
    final GuestOSHypervisorVO guestOSHypervisorVO = Mockito.mock(GuestOSHypervisorVO.class);
    Mockito.when(guestOSHypervisorVO.getGuestOsName()).thenReturn(guestOsName);
    Mockito.when(guestOsHypervisorDao.findById(Matchers.anyLong())).thenReturn(guestOSHypervisorVO);
    Mockito.when(guestOsHypervisorDao.findByOsIdAndHypervisor(Matchers.anyLong(), Matchers.anyString(), Matchers.anyString())).thenReturn(guestOSHypervisorVO);
    Mockito.when(agentMgr.send(Matchers.anyLong(), Matchers.any(Command.class))).thenReturn(null);
    final HostVO hostVO = Mockito.mock(HostVO.class);
    Mockito.when(hostDao.findById(Matchers.anyLong())).thenReturn(hostVO);
    Mockito.when(hostVO.getHypervisorType()).thenReturn(hypervisorType);
    Mockito.when(hostVO.getHypervisorVersion()).thenReturn(hypervisorVersion);
    Exception e = null;
    try {
        vmSnapshotStrategy.takeVMSnapshot(vmSnapshot);
    } catch (final CloudRuntimeException e1) {
        e = e1;
    }
    assertNotNull(e);
    final CreateVMSnapshotAnswer answer = Mockito.mock(CreateVMSnapshotAnswer.class);
    Mockito.when(answer.getResult()).thenReturn(true);
    Mockito.when(agentMgr.send(Matchers.anyLong(), Matchers.any(Command.class))).thenReturn(answer);
    Mockito.when(vmSnapshotDao.findById(Matchers.anyLong())).thenReturn(vmSnapshot);
    VMSnapshot snapshot = null;
    snapshot = vmSnapshotStrategy.takeVMSnapshot(vmSnapshot);
    assertNotNull(snapshot);
}
Also used : UserVmVO(com.cloud.vm.UserVmVO) ArrayList(java.util.ArrayList) GuestOSVO(com.cloud.storage.GuestOSVO) VMSnapshot(com.cloud.vm.snapshot.VMSnapshot) HostVO(com.cloud.host.HostVO) AgentUnavailableException(com.cloud.exception.AgentUnavailableException) OperationTimedoutException(com.cloud.exception.OperationTimedoutException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) IOException(java.io.IOException) HypervisorType(com.cloud.hypervisor.Hypervisor.HypervisorType) GuestOSHypervisorVO(com.cloud.storage.GuestOSHypervisorVO) VMSnapshotVO(com.cloud.vm.snapshot.VMSnapshotVO) CreateVMSnapshotAnswer(com.cloud.agent.api.CreateVMSnapshotAnswer) Command(com.cloud.agent.api.Command) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) VolumeObjectTO(com.cloud.storage.to.VolumeObjectTO) Test(org.junit.Test)

Example 52 with VolumeObjectTO

use of com.cloud.storage.to.VolumeObjectTO in project cosmic by MissionCriticalCloud.

the class VMSnapshotStrategyTest method testRevertSnapshot.

@Test
public void testRevertSnapshot() throws AgentUnavailableException, OperationTimedoutException {
    final Long hostId = 1L;
    final Long vmId = 1L;
    final Long guestOsId = 1L;
    final HypervisorType hypervisorType = HypervisorType.Any;
    final String hypervisorVersion = "default";
    final String guestOsName = "Other";
    final List<VolumeObjectTO> volumeObjectTOs = new ArrayList<>();
    final VMSnapshotVO vmSnapshot = Mockito.mock(VMSnapshotVO.class);
    final UserVmVO userVmVO = Mockito.mock(UserVmVO.class);
    Mockito.when(userVmVO.getGuestOSId()).thenReturn(guestOsId);
    Mockito.when(vmSnapshot.getVmId()).thenReturn(vmId);
    Mockito.when(vmSnapshotHelper.pickRunningHost(Matchers.anyLong())).thenReturn(hostId);
    Mockito.when(vmSnapshotHelper.getVolumeTOList(Matchers.anyLong())).thenReturn(volumeObjectTOs);
    Mockito.when(userVmDao.findById(Matchers.anyLong())).thenReturn(userVmVO);
    final GuestOSVO guestOSVO = Mockito.mock(GuestOSVO.class);
    Mockito.when(guestOSDao.findById(Matchers.anyLong())).thenReturn(guestOSVO);
    final GuestOSHypervisorVO guestOSHypervisorVO = Mockito.mock(GuestOSHypervisorVO.class);
    Mockito.when(guestOSHypervisorVO.getGuestOsName()).thenReturn(guestOsName);
    Mockito.when(guestOsHypervisorDao.findById(Matchers.anyLong())).thenReturn(guestOSHypervisorVO);
    Mockito.when(guestOsHypervisorDao.findByOsIdAndHypervisor(Matchers.anyLong(), Matchers.anyString(), Matchers.anyString())).thenReturn(guestOSHypervisorVO);
    final VMSnapshotTO vmSnapshotTO = Mockito.mock(VMSnapshotTO.class);
    Mockito.when(vmSnapshotHelper.getSnapshotWithParents(Matchers.any(VMSnapshotVO.class))).thenReturn(vmSnapshotTO);
    Mockito.when(vmSnapshotDao.findById(Matchers.anyLong())).thenReturn(vmSnapshot);
    Mockito.when(vmSnapshot.getId()).thenReturn(1L);
    Mockito.when(vmSnapshot.getCreated()).thenReturn(new Date());
    Mockito.when(agentMgr.send(Matchers.anyLong(), Matchers.any(Command.class))).thenReturn(null);
    final HostVO hostVO = Mockito.mock(HostVO.class);
    Mockito.when(hostDao.findById(Matchers.anyLong())).thenReturn(hostVO);
    Mockito.when(hostVO.getHypervisorType()).thenReturn(hypervisorType);
    Mockito.when(hostVO.getHypervisorVersion()).thenReturn(hypervisorVersion);
    Exception e = null;
    try {
        vmSnapshotStrategy.revertVMSnapshot(vmSnapshot);
    } catch (final CloudRuntimeException e1) {
        e = e1;
    }
    assertNotNull(e);
    final RevertToVMSnapshotAnswer answer = Mockito.mock(RevertToVMSnapshotAnswer.class);
    Mockito.when(answer.getResult()).thenReturn(Boolean.TRUE);
    Mockito.when(agentMgr.send(Matchers.anyLong(), Matchers.any(Command.class))).thenReturn(answer);
    final boolean result = vmSnapshotStrategy.revertVMSnapshot(vmSnapshot);
    assertTrue(result);
}
Also used : UserVmVO(com.cloud.vm.UserVmVO) RevertToVMSnapshotAnswer(com.cloud.agent.api.RevertToVMSnapshotAnswer) ArrayList(java.util.ArrayList) GuestOSVO(com.cloud.storage.GuestOSVO) Date(java.util.Date) HostVO(com.cloud.host.HostVO) AgentUnavailableException(com.cloud.exception.AgentUnavailableException) OperationTimedoutException(com.cloud.exception.OperationTimedoutException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) IOException(java.io.IOException) HypervisorType(com.cloud.hypervisor.Hypervisor.HypervisorType) GuestOSHypervisorVO(com.cloud.storage.GuestOSHypervisorVO) VMSnapshotVO(com.cloud.vm.snapshot.VMSnapshotVO) VMSnapshotTO(com.cloud.agent.api.VMSnapshotTO) Command(com.cloud.agent.api.Command) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) VolumeObjectTO(com.cloud.storage.to.VolumeObjectTO) Test(org.junit.Test)

Example 53 with VolumeObjectTO

use of com.cloud.storage.to.VolumeObjectTO in project cosmic by MissionCriticalCloud.

the class VolumeObject method processEventOnly.

@Override
public void processEventOnly(final ObjectInDataStoreStateMachine.Event event, final Answer answer) {
    try {
        if (dataStore.getRole() == DataStoreRole.Primary) {
            if (answer instanceof CopyCmdAnswer) {
                final CopyCmdAnswer cpyAnswer = (CopyCmdAnswer) answer;
                final VolumeVO vol = volumeDao.findById(getId());
                final VolumeObjectTO newVol = (VolumeObjectTO) cpyAnswer.getNewData();
                vol.setPath(newVol.getPath());
                if (newVol.getSize() != null) {
                    vol.setSize(newVol.getSize());
                }
                vol.setPoolId(getDataStore().getId());
                volumeDao.update(vol.getId(), vol);
            } else if (answer instanceof CreateObjectAnswer) {
                final CreateObjectAnswer createAnswer = (CreateObjectAnswer) answer;
                final VolumeObjectTO newVol = (VolumeObjectTO) createAnswer.getData();
                final VolumeVO vol = volumeDao.findById(getId());
                vol.setPath(newVol.getPath());
                if (newVol.getSize() != null) {
                    vol.setSize(newVol.getSize());
                }
                vol.setPoolId(getDataStore().getId());
                volumeDao.update(vol.getId(), vol);
            }
        } else {
            // image store or imageCache store
            if (answer instanceof DownloadAnswer) {
                final DownloadAnswer dwdAnswer = (DownloadAnswer) answer;
                final VolumeDataStoreVO volStore = volumeStoreDao.findByStoreVolume(dataStore.getId(), getId());
                volStore.setInstallPath(dwdAnswer.getInstallPath());
                volStore.setChecksum(dwdAnswer.getCheckSum());
                volumeStoreDao.update(volStore.getId(), volStore);
            } else if (answer instanceof CopyCmdAnswer) {
                final CopyCmdAnswer cpyAnswer = (CopyCmdAnswer) answer;
                final VolumeDataStoreVO volStore = volumeStoreDao.findByStoreVolume(dataStore.getId(), getId());
                final VolumeObjectTO newVol = (VolumeObjectTO) cpyAnswer.getNewData();
                volStore.setInstallPath(newVol.getPath());
                if (newVol.getSize() != null) {
                    volStore.setSize(newVol.getSize());
                }
                volumeStoreDao.update(volStore.getId(), volStore);
            }
        }
    } catch (final RuntimeException ex) {
        if (event == ObjectInDataStoreStateMachine.Event.OperationFailed) {
            objectInStoreMgr.deleteIfNotReady(this);
        }
        throw ex;
    }
    this.processEventOnly(event);
}
Also used : CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) VolumeVO(com.cloud.storage.VolumeVO) CreateObjectAnswer(com.cloud.storage.command.CreateObjectAnswer) VolumeDataStoreVO(com.cloud.storage.datastore.db.VolumeDataStoreVO) VolumeObjectTO(com.cloud.storage.to.VolumeObjectTO) DownloadAnswer(com.cloud.agent.api.storage.DownloadAnswer) CopyCmdAnswer(com.cloud.storage.command.CopyCmdAnswer)

Example 54 with VolumeObjectTO

use of com.cloud.storage.to.VolumeObjectTO in project cosmic by MissionCriticalCloud.

the class VolumeServiceImpl method handleVolumeSync.

@Override
public void handleVolumeSync(final DataStore store) {
    if (store == null) {
        s_logger.warn("Huh? image store is null");
        return;
    }
    final long storeId = store.getId();
    // add lock to make template sync for a data store only be done once
    final String lockString = "volumesync.storeId:" + storeId;
    final GlobalLock syncLock = GlobalLock.getInternLock(lockString);
    try {
        if (syncLock.lock(3)) {
            try {
                final Map<Long, TemplateProp> volumeInfos = listVolume(store);
                if (volumeInfos == null) {
                    return;
                }
                // find all the db volumes including those with NULL url column to avoid accidentally deleting volumes on image store later.
                final List<VolumeDataStoreVO> dbVolumes = _volumeStoreDao.listByStoreId(storeId);
                final List<VolumeDataStoreVO> toBeDownloaded = new ArrayList<>(dbVolumes);
                for (final VolumeDataStoreVO volumeStore : dbVolumes) {
                    final VolumeVO volume = volDao.findById(volumeStore.getVolumeId());
                    if (volume == null) {
                        s_logger.warn("Volume_store_ref table shows that volume " + volumeStore.getVolumeId() + " is on image store " + storeId + ", but the volume is not found in volumes table, potentially some bugs in deleteVolume, so we just treat this volume to be deleted and mark " + "it as destroyed");
                        volumeStore.setDestroyed(true);
                        _volumeStoreDao.update(volumeStore.getId(), volumeStore);
                        continue;
                    }
                    // Exists then don't download
                    if (volumeInfos.containsKey(volume.getId())) {
                        final TemplateProp volInfo = volumeInfos.remove(volume.getId());
                        toBeDownloaded.remove(volumeStore);
                        s_logger.info("Volume Sync found " + volume.getUuid() + " already in the volume image store table");
                        if (volumeStore.getDownloadState() != Status.DOWNLOADED) {
                            volumeStore.setErrorString("");
                        }
                        if (volInfo.isCorrupted()) {
                            volumeStore.setDownloadState(Status.DOWNLOAD_ERROR);
                            String msg = "Volume " + volume.getUuid() + " is corrupted on image store";
                            volumeStore.setErrorString(msg);
                            s_logger.info(msg);
                            if (volume.getState() == State.NotUploaded || volume.getState() == State.UploadInProgress) {
                                s_logger.info("Volume Sync found " + volume.getUuid() + " uploaded using SSVM on image store " + storeId + " as corrupted, marking it as " + "failed");
                                _volumeStoreDao.update(volumeStore.getId(), volumeStore);
                                // mark volume as failed, so that storage GC will clean it up
                                final VolumeObject volObj = (VolumeObject) volFactory.getVolume(volume.getId());
                                volObj.processEvent(Event.OperationFailed);
                            } else if (volumeStore.getDownloadUrl() == null) {
                                msg = "Volume (" + volume.getUuid() + ") with install path " + volInfo.getInstallPath() + " is corrupted, please check in image store: " + volumeStore.getDataStoreId();
                                s_logger.warn(msg);
                            } else {
                                s_logger.info("Removing volume_store_ref entry for corrupted volume " + volume.getName());
                                _volumeStoreDao.remove(volumeStore.getId());
                                toBeDownloaded.add(volumeStore);
                            }
                        } else {
                            // Put them in right status
                            volumeStore.setDownloadPercent(100);
                            volumeStore.setDownloadState(Status.DOWNLOADED);
                            volumeStore.setState(ObjectInDataStoreStateMachine.State.Ready);
                            volumeStore.setInstallPath(volInfo.getInstallPath());
                            volumeStore.setSize(volInfo.getSize());
                            volumeStore.setPhysicalSize(volInfo.getPhysicalSize());
                            volumeStore.setLastUpdated(new Date());
                            _volumeStoreDao.update(volumeStore.getId(), volumeStore);
                            if (volume.getSize() == 0) {
                                // Set volume size in volumes table
                                volume.setSize(volInfo.getSize());
                                volDao.update(volumeStore.getVolumeId(), volume);
                            }
                            if (volume.getState() == State.NotUploaded || volume.getState() == State.UploadInProgress) {
                                final VolumeObject volObj = (VolumeObject) volFactory.getVolume(volume.getId());
                                volObj.processEvent(Event.OperationSuccessed);
                            }
                            if (volInfo.getSize() > 0) {
                                try {
                                    _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(volume.getAccountId()), com.cloud.configuration.Resource.ResourceType.secondary_storage, volInfo.getSize() - volInfo.getPhysicalSize());
                                } catch (final ResourceAllocationException e) {
                                    s_logger.warn(e.getMessage());
                                    _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_RESOURCE_LIMIT_EXCEEDED, volume.getDataCenterId(), volume.getPodId(), e.getMessage(), e.getMessage());
                                } finally {
                                    _resourceLimitMgr.recalculateResourceCount(volume.getAccountId(), volume.getDomainId(), com.cloud.configuration.Resource.ResourceType.secondary_storage.getOrdinal());
                                }
                            }
                        }
                        continue;
                    } else if (volume.getState() == State.NotUploaded || volume.getState() == State.UploadInProgress) {
                        // failed uploads through SSVM
                        s_logger.info("Volume Sync did not find " + volume.getUuid() + " uploaded using SSVM on image store " + storeId + ", marking it as failed");
                        toBeDownloaded.remove(volumeStore);
                        volumeStore.setDownloadState(Status.DOWNLOAD_ERROR);
                        final String msg = "Volume " + volume.getUuid() + " is corrupted on image store";
                        volumeStore.setErrorString(msg);
                        _volumeStoreDao.update(volumeStore.getId(), volumeStore);
                        // mark volume as failed, so that storage GC will clean it up
                        final VolumeObject volObj = (VolumeObject) volFactory.getVolume(volume.getId());
                        volObj.processEvent(Event.OperationFailed);
                        continue;
                    }
                    // Volume is not on secondary but we should download.
                    if (volumeStore.getDownloadState() != Status.DOWNLOADED) {
                        s_logger.info("Volume Sync did not find " + volume.getName() + " ready on image store " + storeId + ", will request download to start/resume shortly");
                    }
                }
                // Download volumes which haven't been downloaded yet.
                if (toBeDownloaded.size() > 0) {
                    for (final VolumeDataStoreVO volumeHost : toBeDownloaded) {
                        if (volumeHost.getDownloadUrl() == null) {
                            // If url is null, skip downloading
                            s_logger.info("Skip downloading volume " + volumeHost.getVolumeId() + " since no download url is specified.");
                            continue;
                        }
                        // means that this is a duplicate entry from migration of previous NFS to staging.
                        if (store.getScope().getScopeType() == ScopeType.REGION) {
                            if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED && volumeHost.getInstallPath() == null) {
                                s_logger.info("Skip sync volume for migration of previous NFS to object store");
                                continue;
                            }
                        }
                        s_logger.debug("Volume " + volumeHost.getVolumeId() + " needs to be downloaded to " + store.getName());
                        // reset volume status back to Allocated
                        VolumeObject vol = (VolumeObject) volFactory.getVolume(volumeHost.getVolumeId());
                        // reset back volume status
                        vol.processEvent(Event.OperationFailed);
                        // remove leftover volume_store_ref entry since re-download will create it again
                        _volumeStoreDao.remove(volumeHost.getId());
                        // get an updated volumeVO
                        vol = (VolumeObject) volFactory.getVolume(volumeHost.getVolumeId());
                        final RegisterVolumePayload payload = new RegisterVolumePayload(volumeHost.getDownloadUrl(), volumeHost.getChecksum(), vol.getFormat().toString());
                        vol.addPayload(payload);
                        createVolumeAsync(vol, store);
                    }
                }
                // Delete volumes which are not present on DB.
                for (final Map.Entry<Long, TemplateProp> entry : volumeInfos.entrySet()) {
                    final Long uniqueName = entry.getKey();
                    final TemplateProp tInfo = entry.getValue();
                    // we cannot directly call expungeVolumeAsync here to reuse delete logic since in this case db does not have this volume at all.
                    final VolumeObjectTO tmplTO = new VolumeObjectTO();
                    tmplTO.setDataStore(store.getTO());
                    tmplTO.setPath(tInfo.getInstallPath());
                    tmplTO.setId(tInfo.getId());
                    final DeleteCommand dtCommand = new DeleteCommand(tmplTO);
                    final EndPoint ep = _epSelector.select(store);
                    Answer answer = null;
                    if (ep == null) {
                        final String errMsg = "No remote endpoint to send command, check if host or ssvm is down?";
                        s_logger.error(errMsg);
                        answer = new Answer(dtCommand, false, errMsg);
                    } else {
                        answer = ep.sendMessage(dtCommand);
                    }
                    if (answer == null || !answer.getResult()) {
                        s_logger.info("Failed to deleted volume at store: " + store.getName());
                    } else {
                        final String description = "Deleted volume " + tInfo.getTemplateName() + " on secondary storage " + storeId;
                        s_logger.info(description);
                    }
                }
            } finally {
                syncLock.unlock();
            }
        } else {
            s_logger.info("Couldn't get global lock on " + lockString + ", another thread may be doing volume sync on data store " + storeId + " now.");
        }
    } finally {
        syncLock.releaseRef();
    }
}
Also used : TemplateProp(com.cloud.storage.template.TemplateProp) ArrayList(java.util.ArrayList) EndPoint(com.cloud.engine.subsystem.api.storage.EndPoint) RemoteHostEndPoint(com.cloud.storage.RemoteHostEndPoint) RegisterVolumePayload(com.cloud.storage.RegisterVolumePayload) Date(java.util.Date) GlobalLock(com.cloud.utils.db.GlobalLock) DeleteCommand(com.cloud.storage.command.DeleteCommand) Answer(com.cloud.agent.api.Answer) CopyCmdAnswer(com.cloud.storage.command.CopyCmdAnswer) ListVolumeAnswer(com.cloud.agent.api.storage.ListVolumeAnswer) VolumeVO(com.cloud.storage.VolumeVO) VolumeDataStoreVO(com.cloud.storage.datastore.db.VolumeDataStoreVO) VolumeObjectTO(com.cloud.storage.to.VolumeObjectTO) ResourceAllocationException(com.cloud.exception.ResourceAllocationException) Map(java.util.Map) HashMap(java.util.HashMap)

Example 55 with VolumeObjectTO

use of com.cloud.storage.to.VolumeObjectTO in project cosmic by MissionCriticalCloud.

the class VMSnapshotManagerImpl method createRestoreCommand.

@Override
public RestoreVMSnapshotCommand createRestoreCommand(final UserVmVO userVm, final List<VMSnapshotVO> vmSnapshotVOs) {
    if (!HypervisorType.KVM.equals(userVm.getHypervisorType())) {
        return null;
    }
    final List<VMSnapshotTO> snapshots = new ArrayList<>();
    final Map<Long, VMSnapshotTO> snapshotAndParents = new HashMap<>();
    for (final VMSnapshotVO vmSnapshotVO : vmSnapshotVOs) {
        if (vmSnapshotVO.getType() == VMSnapshot.Type.DiskAndMemory) {
            final VMSnapshotVO snapshot = _vmSnapshotDao.findById(vmSnapshotVO.getId());
            final VMSnapshotTO parent = getSnapshotWithParents(snapshot).getParent();
            final VMSnapshotOptions options = snapshot.getOptions();
            boolean quiescevm = true;
            if (options != null) {
                quiescevm = options.needQuiesceVM();
            }
            final VMSnapshotTO vmSnapshotTO = new VMSnapshotTO(snapshot.getId(), snapshot.getName(), snapshot.getType(), snapshot.getCreated().getTime(), snapshot.getDescription(), snapshot.getCurrent(), parent, quiescevm);
            snapshots.add(vmSnapshotTO);
            snapshotAndParents.put(vmSnapshotVO.getId(), parent);
        }
    }
    if (snapshotAndParents.isEmpty()) {
        return null;
    }
    // prepare RestoreVMSnapshotCommand
    final String vmInstanceName = userVm.getInstanceName();
    final List<VolumeObjectTO> volumeTOs = getVolumeTOList(userVm.getId());
    final GuestOSVO guestOS = _guestOSDao.findById(userVm.getGuestOSId());
    final RestoreVMSnapshotCommand restoreSnapshotCommand = new RestoreVMSnapshotCommand(vmInstanceName, null, volumeTOs, guestOS.getDisplayName());
    restoreSnapshotCommand.setSnapshots(snapshots);
    restoreSnapshotCommand.setSnapshotAndParents(snapshotAndParents);
    return restoreSnapshotCommand;
}
Also used : HashMap(java.util.HashMap) VMSnapshotOptions(com.cloud.engine.subsystem.api.storage.VMSnapshotOptions) ArrayList(java.util.ArrayList) GuestOSVO(com.cloud.storage.GuestOSVO) RestoreVMSnapshotCommand(com.cloud.agent.api.RestoreVMSnapshotCommand) VMSnapshotTO(com.cloud.agent.api.VMSnapshotTO) VolumeObjectTO(com.cloud.storage.to.VolumeObjectTO)

Aggregations

VolumeObjectTO (com.cloud.storage.to.VolumeObjectTO)58 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)36 PrimaryDataStoreTO (com.cloud.storage.to.PrimaryDataStoreTO)22 CopyCmdAnswer (com.cloud.storage.command.CopyCmdAnswer)21 Connection (com.xensource.xenapi.Connection)19 InternalErrorException (com.cloud.exception.InternalErrorException)18 VDI (com.xensource.xenapi.VDI)17 NfsTO (com.cloud.agent.api.to.NfsTO)16 DataTO (com.cloud.agent.api.to.DataTO)15 DataStoreTO (com.cloud.agent.api.to.DataStoreTO)14 ArrayList (java.util.ArrayList)14 SR (com.xensource.xenapi.SR)13 XenAPIException (com.xensource.xenapi.Types.XenAPIException)13 XmlRpcException (org.apache.xmlrpc.XmlRpcException)13 VMSnapshotTO (com.cloud.agent.api.VMSnapshotTO)10 IOException (java.io.IOException)10 LibvirtException (org.libvirt.LibvirtException)10 VolumeVO (com.cloud.storage.VolumeVO)9 URI (java.net.URI)9 HashMap (java.util.HashMap)8