package org.ovirt.engine.core.bll;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.ovirt.engine.core.common.businessentities.ArchitectureType;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.ServerCpu;
import org.ovirt.engine.core.common.businessentities.VdsDynamic;
import org.ovirt.engine.core.common.businessentities.VdsStatic;
import org.ovirt.engine.core.dao.ClusterDao;
import org.ovirt.engine.core.dao.VdsDynamicDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class VdsArchitectureHelper {
private static final Logger log = LoggerFactory.getLogger(VdsArchitectureHelper.class);
@Inject
private CpuFlagsManagerHandler cpuFlagsManagerHandler;
@Inject
private ClusterDao clusterDao;
@Inject
private VdsDynamicDao vdsDynamicDao;
/**
* Gets the architecture type of the given host using its cpu flags, if not found, return the cluster architecture
* @param host
* The host
* @return
* The host architecture type
*/
public ArchitectureType getArchitecture(VdsStatic host) {
Cluster cluster = clusterDao.get(host.getClusterId());
VdsDynamic vdsDynamic = vdsDynamicDao.get(host.getId());
if (vdsDynamic != null) {
ServerCpu cpu = cpuFlagsManagerHandler.findMaxServerCpuByFlags(vdsDynamic.getCpuFlags(),
cluster.getCompatibilityVersion());
if (cpu != null && cpu.getArchitecture() != null) {
return cpu.getArchitecture();
}
}
// take architecture from the cluster if it is null on the host level or host is not yet saved in db
log.info(
"Failed to get architecture type from host information for host '{}'. Using cluster '{}'"
+ " architecture value instead.",
host.getName(),
cluster.getName());
return cluster.getArchitecture();
}
}