package org.ovirt.engine.core.vdsbroker; import org.ovirt.engine.core.compat.*; import org.ovirt.engine.core.common.vdscommands.*; import org.ovirt.engine.core.dal.dbbroker.*; import org.ovirt.engine.core.common.businessentities.*; public class SetVdsStatusVDSCommand<P extends SetVdsStatusVDSCommandParameters> extends VdsIdVDSCommandBase<P> { public SetVdsStatusVDSCommand(P parameters) { super(parameters); } @Override protected void ExecuteVdsIdCommand() { SetVdsStatusVDSCommandParameters parameters = getParameters(); if (_vdsManager != null) { VDS vds = getVds(); updateVdsFromParameters(parameters, vds); _vdsManager.setStatus(parameters.getStatus(), vds); _vdsManager.UpdateDynamicData(vds.getDynamicData()); _vdsManager.UpdateStatisticsData(vds.getStatisticsData()); // In case the SPM status has changed during execution in the StoragePool table we have to fetch the VDS // (which is a view) again. vds = DbFacade.getInstance().getVdsDAO().get(parameters.getVdsId()); if (vds.getspm_status() != VdsSpmStatus.None && parameters.getStatus() != VDSStatus.Up) { log.infoFormat("SetVdsStatusVDSCommand::VSD {0} is spm and moved from up calling ResetIrs.", vds.getvds_name()); // check if this host was spm and reset if do. getVDSReturnValue().setSucceeded( ResourceManager .getInstance() .runVdsCommand( VDSCommandType.ResetIrs, new ResetIrsVDSCommandParameters(vds.getstorage_pool_id(), vds .gethost_name(), vds.getvds_id())).getSucceeded()); } } else { getVDSReturnValue().setSucceeded(false); } } private void updateVdsFromParameters(SetVdsStatusVDSCommandParameters parameters, VDS vds) { vds.getDynamicData().setNonOperationalReason(parameters.getNonOperationalReason()); } private static LogCompat log = LogFactoryCompat.getLog(SetVdsStatusVDSCommand.class); }