package org.ovirt.engine.core.bll;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.utils.PermissionSubject;
import org.ovirt.engine.core.common.action.RemoveDiskParameters;
import org.ovirt.engine.core.common.action.RemoveMemoryVolumesParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.SnapshotDao;
import org.ovirt.engine.core.utils.GuidUtils;
/**
* Command for removing the given memory volumes.
* Note that no tasks are created, so we don't monitor whether
* the operation succeed or not as we can't do much when if fails.
*/
@NonTransactiveCommandAttribute
@InternalCommandAttribute
public class RemoveMemoryVolumesCommand<T extends RemoveMemoryVolumesParameters> extends CommandBase<T> {
@Inject
private SnapshotDao snapshotDao;
public RemoveMemoryVolumesCommand(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
protected RemoveMemoryVolumesCommand(Guid commandId) {
super(commandId);
}
@Override
protected void executeCommand() {
if (isMemoryRemovable()) {
List<Guid> guids = GuidUtils.getGuidListFromString(getParameters().getMemoryVolumes());
RemoveDiskParameters removeMemoryDumpDiskParameters = new RemoveDiskParameters(guids.get(2));
removeMemoryDumpDiskParameters.setShouldBeLogged(false);
runInternalAction(VdcActionType.RemoveDisk, removeMemoryDumpDiskParameters);
RemoveDiskParameters removeMemoryMetadataDiskParameters = new RemoveDiskParameters(guids.get(4));
removeMemoryMetadataDiskParameters.setShouldBeLogged(false);
runInternalAction(VdcActionType.RemoveDisk, removeMemoryMetadataDiskParameters);
}
setSucceeded(true);
}
private boolean isMemoryRemovable() {
return snapshotDao.getNumOfSnapshotsByMemory(getParameters().getMemoryVolumes()) == 1
|| getParameters().isForceRemove();
}
@Override
public List<PermissionSubject> getPermissionCheckSubjects() {
return Collections.emptyList();
}
}