package org.ovirt.engine.core.vdsbroker; import javax.inject.Inject; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.businessentities.VdsSpmStatus; import org.ovirt.engine.core.common.vdscommands.ResetIrsVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.SetVdsStatusVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableImpl; import org.ovirt.engine.core.utils.transaction.TransactionSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SetVdsStatusVDSCommand<P extends SetVdsStatusVDSCommandParameters> extends VdsIdVDSCommandBase<P> { private static final Logger log = LoggerFactory.getLogger(SetVdsStatusVDSCommand.class); @Inject private AuditLogDirector auditLogDirector; public SetVdsStatusVDSCommand(P parameters) { super(parameters); } @Override protected void executeVdsIdCommand() { final SetVdsStatusVDSCommandParameters parameters = getParameters(); if (_vdsManager != null) { final VDS vds = getVds(); if (vds.getSpmStatus() != VdsSpmStatus.None && parameters.getStatus() != VDSStatus.Up) { log.info("VDS '{}' is spm and moved from up calling resetIrs.", vds.getName()); // check if this host was spm and reset if do. getVDSReturnValue().setSucceeded( resourceManager .runVdsCommand( VDSCommandType.ResetIrs, new ResetIrsVDSCommandParameters(vds.getStoragePoolId(), vds.getId())) .getSucceeded()); if (!getVDSReturnValue().getSucceeded()) { if (getParameters().isStopSpmFailureLogged()) { AuditLogable base = new AuditLogableImpl(); base.setVdsId(vds.getId()); base.setVdsName(vds.getName()); auditLogDirector.log(base, AuditLogType.VDS_STATUS_CHANGE_FAILED_DUE_TO_STOP_SPM_FAILURE); } if (parameters.getStatus() == VDSStatus.PreparingForMaintenance) { // ResetIrs command failed, SPM host status cannot be moved to Preparing For Maintenance return; } } } TransactionSupport.executeInNewTransaction(() -> { _vdsManager.setStatus(parameters.getStatus(), vds); _vdsManager.updatePartialDynamicData(parameters.getNonOperationalReason(), parameters.getMaintenanceReason()); _vdsManager.updateStatisticsData(vds.getStatisticsData()); return null; }); } else { getVDSReturnValue().setSucceeded(false); } } }