package org.ovirt.engine.core.bll.gluster; import java.util.Collections; import java.util.Map; import org.ovirt.engine.core.bll.LockMessagesMatchUtil; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.common.action.gluster.GlusterVolumeGeoRepSessionParameters; import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.common.locks.LockingGroup; import org.ovirt.engine.core.common.utils.Pair; public abstract class GeoRepSessionCommandBase<T extends GlusterVolumeGeoRepSessionParameters> extends GlusterVolumeCommandBase<T> { private GlusterGeoRepSession geoRepSession = null; public GeoRepSessionCommandBase(T params, CommandContext context) { super(params, context); } @Override protected void setActionMessageParameters() { addValidationMessage(EngineMessage.VAR__TYPE__GLUSTER_GEOREP_SESSION); addValidationMessageVariable("volumeName", getGlusterVolumeName()); addValidationMessageVariable("cluster", getClusterName()); } @Override protected boolean validate() { if (!super.validate()) { return false; } if (getGeoRepSession() == null) { addValidationMessage(EngineMessage.ACTION_TYPE_FAILED_GEOREP_SESSION_INVALID); return false; } GlusterVolumeEntity volume = getGlusterVolume(); if (!volume.isOnline()) { addValidationMessage(EngineMessage.ACTION_TYPE_FAILED_GLUSTER_VOLUME_IS_DOWN); addValidationMessageVariable("volumeName", volume.getName()); return false; } return true; } protected GlusterGeoRepSession getGeoRepSession() { if (geoRepSession == null) { if(getParameters().getGeoRepSessionId() != null) { geoRepSession = glusterGeoRepDao.getById(getParameters().getGeoRepSessionId()); } else { geoRepSession = glusterGeoRepDao.getGeoRepSession(getGlusterVolumeId(), getParameters().getSlaveHostId(), getParameters().getSlaveVolumeName()); } } return geoRepSession; } @Override protected Map<String, Pair<String, String>> getExclusiveLocks() { if (!isInternalExecution()) { return Collections.singletonMap(getGeoRepSession().getId().toString(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.GLUSTER_GEOREP, EngineMessage.ACTION_TYPE_FAILED_GEOREP_SESSION_LOCKED)); } return null; } }