package org.ovirt.engine.core.bll; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.FenceVdsActionParameters; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.compat.LogCompat; import org.ovirt.engine.core.compat.LogFactoryCompat; import org.ovirt.engine.core.dal.VdcBllMessages; public class StartVdsCommand<T extends FenceVdsActionParameters> extends FenceVdsBaseCommand<T> { public StartVdsCommand(T parameters) { super(parameters); } @Override protected boolean canDoAction() { boolean retValue = super.canDoAction(); VDS vds = getVds(); if (vds != null) { VDSStatus vdsStatus = vds.getstatus(); if (vdsStatus == VDSStatus.Problematic) { retValue = false; addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VDS_INTERMITENT_CONNECTIVITY); } else if (!legalStatusForStartingVds(vdsStatus)) { addCanDoActionMessage(VdcBllMessages.VDS_STATUS_NOT_VALID_FOR_START); retValue = false; log.errorFormat("VDS status for vds {0}:{1} is {2}", vds.getvds_id(), vds.getvds_name(), vdsStatus); } } return retValue; } protected boolean legalStatusForStartingVds(VDSStatus status) { return status == VDSStatus.Down || status == VDSStatus.NonResponsive || status == VDSStatus.Reboot || status == VDSStatus.Maintenance; } @Override protected void setStatus() { setStatus(VDSStatus.NonResponsive); } @Override protected void HandleError() { log.errorFormat("Failed to run StartVdsCommand on vds :{0}", getVdsName()); } @Override public AuditLogType getAuditLogTypeValue() { addCanDoActionMessage(VdcBllMessages.VDS_FENCING_OPERATION_FAILED); addCanDoActionMessage(VdcBllMessages.VAR__TYPE__HOST); addCanDoActionMessage(VdcBllMessages.VAR__ACTION__START); return getSucceeded() ? AuditLogType.USER_VDS_START : AuditLogType.USER_FAILED_VDS_START; } @Override protected void handleSpecificCommandActions() { RestartVdsVms(); } @Override protected int getRerties() { return Config.<Integer> GetValue(ConfigValues.FenceStartStatusRetries); } @Override protected int getDelayInSeconds() { return Config.<Integer> GetValue(ConfigValues.FenceStartStatusDelayBetweenRetriesInSec); } private static LogCompat log = LogFactoryCompat.getLog(StartVdsCommand.class); }