package org.ovirt.engine.core.dao.qos; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import javax.inject.Named; import javax.inject.Singleton; import org.ovirt.engine.core.common.businessentities.qos.QosType; import org.ovirt.engine.core.common.businessentities.qos.StorageQos; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.compat.Guid; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; @Named @Singleton public class StorageQosDaoImpl extends QosBaseDaoImpl<StorageQos> implements StorageQosDao { public StorageQosDaoImpl() { super(QosType.STORAGE); } @Override public StorageQos getQosByDiskProfileId(Guid diskProfileId) { return getQosByDiskProfileIds(Collections.singleton(diskProfileId)).get(diskProfileId); } @Override public Map<Guid, StorageQos> getQosByDiskProfileIds(Collection<Guid> diskProfileIds) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("disk_profile_ids", createArrayOfUUIDs(diskProfileIds)); List<Pair<Guid, StorageQos>> pairs = getCallsHandler().executeReadList("GetQosByDiskProfiles", storageQosMultipleProfilesMapper, parameterSource); return pairs.stream().collect(Collectors.toMap(Pair::getFirst, Pair::getSecond)); } @Override protected MapSqlParameterSource createFullParametersMapper(StorageQos obj) { MapSqlParameterSource map = super.createFullParametersMapper(obj); map.addValue("max_throughput", obj.getMaxThroughput()); map.addValue("max_read_throughput", obj.getMaxReadThroughput()); map.addValue("max_write_throughput", obj.getMaxWriteThroughput()); map.addValue("max_iops", obj.getMaxIops()); map.addValue("max_read_iops", obj.getMaxReadIops()); map.addValue("max_write_iops", obj.getMaxWriteIops()); return map; } @Override protected RowMapper<StorageQos> createEntityRowMapper() { return StorageDaoDbFacadaeImplMapper.MAPPER; } protected static class StorageDaoDbFacadaeImplMapper extends QosBaseDaoFacadaeImplMapper<StorageQos> { public static final StorageDaoDbFacadaeImplMapper MAPPER = new StorageDaoDbFacadaeImplMapper(); @Override protected StorageQos createQosEntity(ResultSet rs) throws SQLException { StorageQos entity = new StorageQos(); entity.setMaxThroughput(getInteger(rs, "max_throughput")); entity.setMaxReadThroughput(getInteger(rs, "max_read_throughput")); entity.setMaxWriteThroughput(getInteger(rs, "max_write_throughput")); entity.setMaxIops(getInteger(rs, "max_iops")); entity.setMaxReadIops(getInteger(rs, "max_read_iops")); entity.setMaxWriteIops(getInteger(rs, "max_write_iops")); return entity; } } private static RowMapper<Pair<Guid, StorageQos>> storageQosMultipleProfilesMapper = (rs, rowNum) -> { StorageQos qos = StorageDaoDbFacadaeImplMapper.MAPPER.mapRow(rs, rowNum); Guid guid = new Guid(rs.getString("disk_profile_id")); return new Pair<>(guid, qos); }; }