package org.ovirt.engine.core.bll.command.utils; import org.ovirt.engine.core.common.businessentities.storage_domain_dynamic; import org.ovirt.engine.core.common.businessentities.storage_domains; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; public class StorageDomainSpaceChecker { public static boolean isBelowThresholds(final storage_domains domain) { return isBelowSpaceThreshold(domain) && isBelowPctThreshold(domain); } private static boolean isBelowSpaceThreshold(final storage_domains domain) { Integer availableDiskSize = domain.getavailable_disk_size() == null ? 0 : domain.getavailable_disk_size(); Integer usedDiskSize = domain.getused_disk_size() == null ? 0 : domain.getused_disk_size(); double totalSize = availableDiskSize + usedDiskSize; return totalSize != 0 && (availableDiskSize / totalSize) * (double) 100 > getLowDiskPercentThreshold(); } private static boolean isBelowPctThreshold(final storage_domains domain) { storage_domain_dynamic dynamic = domain.getStorageDynamicData(); return (dynamic != null && dynamic.getfreeDiskInGB() > Config .<Integer> GetValue(ConfigValues.FreeSpaceCriticalLowInGB) && dynamic.getfreeDiskPercent() > Config .<Integer> GetValue(ConfigValues.FreeSpaceLow)); } public static boolean hasSpaceForRequest(final storage_domains domain, final long requestedSize) { return hasSpace(domain, requestedSize) && hasSpacePct(domain, requestedSize); } private static boolean hasSpace(final storage_domains storageDomain, final long requestedSize) { return storageDomain.getavailable_disk_size() != null && storageDomain.getavailable_disk_size() - requestedSize >= getLowDiskSpaceThreshold(); } private static boolean hasSpacePct(final storage_domains storageDomain, final long requestedSize) { Integer availableDiskSize = storageDomain.getavailable_disk_size() == null ? 0 : storageDomain.getavailable_disk_size(); Integer usedDiskSize = storageDomain.getused_disk_size() == null ? 0 : storageDomain.getused_disk_size(); double totalSize = availableDiskSize + usedDiskSize; return totalSize != 0 && ((availableDiskSize - requestedSize) / totalSize) * 100 > getLowDiskPercentThreshold(); } private static Integer getLowDiskPercentThreshold() { return Config.<Integer> GetValue(ConfigValues.FreeSpaceLow); } private static Integer getLowDiskSpaceThreshold() { return Config.<Integer> GetValue(ConfigValues.FreeSpaceCriticalLowInGB); } }