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.GlusterVolumeSnapshotActionParameters; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSnapshotEntity; import org.ovirt.engine.core.common.constants.gluster.GlusterConstants; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.common.locks.LockingGroup; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.utils.lock.EngineLock; public abstract class GlusterVolumeSnapshotCommandBase<T extends GlusterVolumeSnapshotActionParameters> extends GlusterSnapshotCommandBase<T> { private GlusterVolumeSnapshotEntity snapshot; public GlusterVolumeSnapshotCommandBase(T params, CommandContext commandContext) { super(params, commandContext); } @Override protected void init() { super.init(); snapshot = glusterVolumeSnapshotDao.getByName(getGlusterVolumeId(), getParameters().getSnapshotName()); } @Override public Map<String, String> getCustomValues() { addCustomValue(GlusterConstants.VOLUME_SNAPSHOT_NAME, getParameters().getSnapshotName()); return super.getCustomValues(); } @Override protected boolean validate() { if (!super.validate()) { return false; } if (getSnapshot() == null) { failValidation(EngineMessage.ACTION_TYPE_FAILED_GLUSTER_VOLUME_SNAPSHOT_DOES_NOT_EXIST, getParameters().getSnapshotName()); } return true; } protected GlusterVolumeSnapshotEntity getSnapshot() { return this.snapshot; } protected EngineLock acquireGeoRepSessionLock(Guid id) { EngineLock lock = new EngineLock(Collections.singletonMap(id.toString(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.GLUSTER_GEOREP, EngineMessage.ACTION_TYPE_FAILED_GEOREP_SESSION_LOCKED)), null); lockManager.acquireLockWait(lock); return lock; } protected EngineLock acquireVolumeSnapshotLock(Guid id) { EngineLock lock = new EngineLock(Collections.singletonMap(id.toString(), LockMessagesMatchUtil.makeLockingPair(LockingGroup.GLUSTER_SNAPSHOT, EngineMessage.ACTION_TYPE_FAILED_VOLUME_SNAPSHOT_LOCKED)), null); lockManager.acquireLockWait(lock); return lock; } }