package org.ovirt.engine.core.bll.gluster; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.LockProperties; import org.ovirt.engine.core.common.action.LockProperties.Scope; import org.ovirt.engine.core.common.action.gluster.ResetGlusterVolumeOptionsParameters; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionEntity; import org.ovirt.engine.core.common.constants.gluster.GlusterConstants; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.common.vdscommands.gluster.ResetGlusterVolumeOptionsVDSParameters; /** * BLL Command to Reset Gluster Volume Options */ @NonTransactiveCommandAttribute public class ResetGlusterVolumeOptionsCommand extends GlusterVolumeCommandBase<ResetGlusterVolumeOptionsParameters> { private boolean isResetAllOptions; public ResetGlusterVolumeOptionsCommand(ResetGlusterVolumeOptionsParameters params, CommandContext commandContext) { super(params, commandContext); } @Override protected LockProperties applyLockProperties(LockProperties lockProperties) { return lockProperties.withScope(Scope.Execution).withWait(true); } @Override protected void setActionMessageParameters() { addValidationMessage(EngineMessage.VAR__ACTION__RESET); addValidationMessage(EngineMessage.VAR__TYPE__GLUSTER_VOLUME_OPTION); } @Override protected void executeCommand() { VDSReturnValue returnValue = runVdsCommand(VDSCommandType.ResetGlusterVolumeOptions, new ResetGlusterVolumeOptionsVDSParameters(upServer.getId(), getGlusterVolumeName(), getParameters().getVolumeOption(), getParameters().isForceAction())); setSucceeded(returnValue.getSucceeded()); if (getSucceeded()) { if (getParameters().getVolumeOption() != null && !getParameters().getVolumeOption().getKey().isEmpty()) { GlusterVolumeOptionEntity entity = getGlusterVolume().getOption(getParameters().getVolumeOption().getKey()); isResetAllOptions = false; if(entity != null) { removeOptionInDb(entity); String optionValue = entity.getValue(); getParameters().getVolumeOption().setValue(optionValue != null ? optionValue : ""); addCustomValue(GlusterConstants.OPTION_KEY, getParameters().getVolumeOption().getKey()); addCustomValue(GlusterConstants.OPTION_VALUE, getParameters().getVolumeOption().getValue()); } } else { for (GlusterVolumeOptionEntity option : getGlusterVolume().getOptions()) { removeOptionInDb(option); } isResetAllOptions = true; } } else { handleVdsError(AuditLogType.GLUSTER_VOLUME_OPTIONS_RESET_FAILED, returnValue.getVdsError().getMessage()); return; } } /** * Remove the volume option in DB. If the option with given key already exists for the volume, <br> * it will be deleted. */ private void removeOptionInDb(GlusterVolumeOptionEntity option) { glusterOptionDao.removeVolumeOption(option.getId()); } @Override public AuditLogType getAuditLogTypeValue() { if (getSucceeded()) { return isResetAllOptions ? AuditLogType.GLUSTER_VOLUME_OPTIONS_RESET_ALL : AuditLogType.GLUSTER_VOLUME_OPTIONS_RESET; } else { return errorType == null ? AuditLogType.GLUSTER_VOLUME_OPTIONS_RESET_FAILED : errorType; } } }