package org.ovirt.engine.core.vdsbroker; import java.util.List; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDynamic; import org.ovirt.engine.core.common.businessentities.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.VmNetworkStatistics; import org.ovirt.engine.core.common.businessentities.VmStatistics; import org.ovirt.engine.core.common.vdscommands.SetVmStatusVDSCommandParameters; import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class SetVmStatusVDSCommand<P extends SetVmStatusVDSCommandParameters> extends VDSCommandBase<P> { public SetVmStatusVDSCommand(P parameters) { super(parameters); } @Override protected void ExecuteVDSCommand() { SetVmStatusVDSCommandParameters parameters = getParameters(); VmDynamic vmDynamic = DbFacade.getInstance().getVmDynamicDAO().get(parameters.getVmId()); vmDynamic.setstatus(parameters.getStatus()); if (VM.isStatusDown(parameters.getStatus())) { ResourceManager.getInstance().RemoveAsyncRunningVm(parameters.getVmId()); VmStatistics vmStatistics = DbFacade.getInstance().getVmStatisticsDAO().get(parameters.getVmId()); VM vm = new VM(null, vmDynamic, vmStatistics); ResourceManager.getInstance().InternalSetVmStatus(vm, parameters.getStatus()); DbFacade.getInstance().getVmStatisticsDAO().update(vm.getStatisticsData()); List<VmNetworkInterface> interfaces = vm.getInterfaces(); if (interfaces != null && interfaces.size() > 0) { for (VmNetworkInterface ifc : interfaces) { VmNetworkStatistics stats = ifc.getStatistics(); DbFacade.getInstance().getVmNetworkStatisticsDAO().update(stats); } } } else if (parameters.getStatus() == VMStatus.Unknown) { ResourceManager.getInstance().RemoveAsyncRunningVm(parameters.getVmId()); } DbFacade.getInstance().getVmDynamicDAO().update(vmDynamic); } }