package org.ovirt.engine.core.bll.storage.domain;
import static java.util.stream.Collectors.toList;
import java.util.Collection;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
import org.ovirt.engine.core.common.businessentities.storage.LUNs;
import org.ovirt.engine.core.common.utils.Pair;
import org.ovirt.engine.core.common.vdscommands.GetVGInfoVDSCommandParameters;
import org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainInfoVDSCommandParameters;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.vdsbroker.ResourceManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class BlockStorageDomainHelper {
private static final Logger log = LoggerFactory.getLogger(BlockStorageDomainHelper.class);
@Inject
private ResourceManager resourceManager;
private BlockStorageDomainHelper() {
}
public void fillMetadataDevicesInfo(StorageDomainStatic storageDomainStatic, Guid vdsId) {
try {
@SuppressWarnings("unchecked")
StorageDomainStatic domainFromIrs =
((Pair<StorageDomainStatic, Guid>) resourceManager.runVdsCommand(
VDSCommandType.HSMGetStorageDomainInfo,
new HSMGetStorageDomainInfoVDSCommandParameters(vdsId,
storageDomainStatic.getId()))
.getReturnValue()).getFirst();
storageDomainStatic.setFirstMetadataDevice(domainFromIrs.getFirstMetadataDevice());
storageDomainStatic.setVgMetadataDevice(domainFromIrs.getVgMetadataDevice());
} catch (Exception e) {
log.info("Failed to get the domain info, ignoring");
}
}
public List<String> findMetadataDevices(StorageDomain storageDomain, Collection<String> devices) {
return devices.stream()
.filter(x -> x.equals(storageDomain.getVgMetadataDevice())
|| x.equals(storageDomain.getFirstMetadataDevice()))
.collect(toList());
}
@SuppressWarnings("unchecked")
public List<LUNs> getVgLUNsInfo(StorageDomainStatic storageDomain, Guid vdsId) {
try {
return (List<LUNs>) resourceManager.runVdsCommand(VDSCommandType.GetVGInfo,
new GetVGInfoVDSCommandParameters(vdsId, storageDomain.getStorage()))
.getReturnValue();
} catch (Exception e) {
log.info("Failed to get the domain info, ignoring");
}
return null;
}
}