package org.ovirt.engine.core.bll.memory;
import java.util.List;
import org.ovirt.engine.core.bll.CommandBase;
import org.ovirt.engine.core.bll.storage.domain.PostDeleteActionHandler;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.vdscommands.DeleteImageGroupVDSCommandParameters;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.StorageDomainDao;
import org.ovirt.engine.core.di.Injector;
public class MemoryImageRemoverFromExportDomain extends MemoryImageRemover {
private Guid storagePoolId;
private Guid storageDomainId;
protected Boolean cachedPostZero;
private VM vm;
private PostDeleteActionHandler postDeleteActionHandler;
private StorageDomainDao storageDomainDao;
public MemoryImageRemoverFromExportDomain(VM vm, CommandBase<?> enclosingCommand,
Guid storagePoolId, Guid storageDomainId) {
super(enclosingCommand);
this.vm = vm;
this.storagePoolId = storagePoolId;
this.storageDomainId = storageDomainId;
postDeleteActionHandler = Injector.get(PostDeleteActionHandler.class);
storageDomainDao = Injector.get(StorageDomainDao.class);
}
public void remove() {
removeMemoryVolumes(MemoryUtils.getMemoryVolumesFromSnapshots(vm.getSnapshots()));
}
@Override
protected boolean removeMemoryVolume(String memoryVolumes) {
return super.removeMemoryVolume(
MemoryUtils.changeStorageDomainAndPoolInMemoryState(
memoryVolumes, storageDomainId, storagePoolId));
}
@Override
protected DeleteImageGroupVDSCommandParameters buildDeleteMemoryImageParams(List<Guid> guids) {
boolean discardAfterDelete = storageDomainDao.get(guids.get(0)).isDiscardAfterDelete();
return postDeleteActionHandler.fixParameters(
new DeleteImageGroupVDSCommandParameters(guids.get(1), guids.get(0), guids.get(2),
isPostZero(), discardAfterDelete, false));
}
@Override
protected DeleteImageGroupVDSCommandParameters buildDeleteMemoryConfParams(List<Guid> guids) {
boolean discardAfterDelete = storageDomainDao.get(guids.get(0)).isDiscardAfterDelete();
return postDeleteActionHandler.fixParameters(
new DeleteImageGroupVDSCommandParameters(guids.get(1), guids.get(0), guids.get(4),
isPostZero(), discardAfterDelete, false));
}
/**
* We set the post zero field on memory image deletion from export domain as we do
* when it is deleted from data domain even though the export domain is NFS and NFS
* storage do the wipe on its own, in order to be compliance with the rest of the
* code that do the same, and to be prepared for supporting export domains which
* are not NFS.
*/
protected boolean isPostZero() {
if (cachedPostZero == null) {
cachedPostZero = isDiskWithWipeAfterDeleteExist(vm.getDiskMap().values());
}
return cachedPostZero;
}
}