package org.ovirt.engine.ui.frontend.utils;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
public class GlusterVolumeUtils {
public static VolumeStatus getVolumeStatus(GlusterVolumeEntity volume) {
GlusterStatus status = volume.getStatus();
int count = 0;
int brickCount = volume.getBricks().size();
switch (status) {
case DOWN :
return VolumeStatus.DOWN;
case UP :
count = countDownBricks(volume);
if (count == 0) {
return VolumeStatus.UP;
} else if (count < brickCount) {
return VolumeStatus.SOME_BRICKS_DOWN;
} else {
return VolumeStatus.ALL_BRICKS_DOWN;
}
default :
return VolumeStatus.DOWN;
}
}
public static int countDownBricks(GlusterVolumeEntity volume) {
int downCount = 0;
int upCount = 0;
for (GlusterBrickEntity brick : volume.getBricks()) {
if (brick.getStatus() == GlusterStatus.UP) {
upCount++;
} else {
downCount++;
}
if (upCount > 0 && downCount > 0) {
return downCount;
}
}
return downCount;
}
public static boolean isHealingRequired(GlusterVolumeEntity volume) {
for (GlusterBrickEntity brick : volume.getBricks()) {
if (brick.getUnSyncedEntries() != null && brick.getUnSyncedEntries() > 0) {
return true;
}
}
return false;
}
public static enum VolumeStatus {
UP,
SOME_BRICKS_DOWN,
ALL_BRICKS_DOWN,
DOWN;
};
}