package org.ovirt.engine.core.bll.gluster;
import org.ovirt.engine.core.common.action.gluster.GlusterVolumeRemoveBricksQueriesParameters;
import org.ovirt.engine.core.common.asynctasks.gluster.GlusterAsyncTask;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeTaskStatusEntity;
import org.ovirt.engine.core.common.job.JobExecutionStatus;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
import org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeRemoveBricksVDSParameters;
public class GetGlusterVolumeRemoveBricksStatusQuery<P extends GlusterVolumeRemoveBricksQueriesParameters> extends GlusterAsyncTaskStatusQueryBase<P> {
public GetGlusterVolumeRemoveBricksStatusQuery(P params) {
super(params);
}
@Override
protected GlusterVolumeTaskStatusEntity fetchTaskStatusDetails() {
VDSReturnValue returnValue =
runVdsCommand(VDSCommandType.GetGlusterVolumeRemoveBricksStatus,
new GlusterVolumeRemoveBricksVDSParameters(getUpServerId(clusterId),
volume.getName(),
getParameters().getBricks(),
volume.getReplicaCount()));
GlusterVolumeTaskStatusEntity entity = (GlusterVolumeTaskStatusEntity)returnValue.getReturnValue();
// Update the latest status details
GlusterAsyncTask asyncTask = volume.getAsyncTask();
if (asyncTask != null) {
// take a copy of the task status with engine for further use
JobExecutionStatus jobStatusWithEngine = volume.getAsyncTask().getStatus();
// update the status entity with required details
updateStatusEntity(entity);
// If the task status at engine side is aborted, set the same to current status
// This is required because even in case of retention of the brick the gluster returns
// the status as finished and to avoid enabling of retain and commit in ui the status should
// be set to aborted. This is required only in case of remove bricks
if (jobStatusWithEngine == JobExecutionStatus.ABORTED) {
entity.getStatusSummary().setStatus(JobExecutionStatus.ABORTED);
}
}
return entity;
}
}