Daniel Erez has uploaded a new change for review.
Change subject: core: update LUN device size using getVmStats
......................................................................
core: update LUN device size using getVmStats
* Handling DirecLUN disks manual resize (user invoked)
by synchronizing LUNs device sizes upon powering up a VM.
* Similar to disk images, utilized VdsUpdateRunTimeInfo
in order to retrieve updated information from getVmStats.
* Added buildVmLunDisksData method to VdsBrokerObjectsBuilder
for de-serializing relevant LUNs data from getVmStats.
* For using batch update, LunDAODbFacadeImpl now extends
MassOperationsGenericDaoDbFacade.
Note: the functionality is depended on VDSM patch -
http://gerrit.ovirt.org/22976
Change-Id: Ie0d4d805ca333990ea1f612eb03a87f4a505f4a8
Bug-Url: https://bugzilla.redhat.com/961532
Signed-off-by: Daniel Erez <[email protected]>
---
M
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/LUNs.java
M
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAO.java
M
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAODbFacadeImpl.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ListVDSCommand.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmStatsVdsBrokerCommand.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/entities/VmInternalData.java
M
backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
10 files changed, 243 insertions(+), 32 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/78/22978/1
diff --git
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/LUNs.java
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/LUNs.java
index f3e55f7..71cc56f 100644
---
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/LUNs.java
+++
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/LUNs.java
@@ -1,13 +1,11 @@
package org.ovirt.engine.core.common.businessentities;
-import java.io.Serializable;
-
import javax.validation.constraints.Size;
import org.ovirt.engine.core.common.utils.ObjectUtils;
import org.ovirt.engine.core.compat.Guid;
-public class LUNs implements Serializable {
+public class LUNs implements BusinessEntity<String> {
private static final long serialVersionUID = 3026455643639610091L;
public LUNs() {
@@ -282,4 +280,14 @@
@Deprecated
public void setAccessible(boolean accessible) {
}
+
+ @Override
+ public String getId() {
+ return getLUN_id();
+ }
+
+ @Override
+ public void setId(String id) {
+ setLUN_id(id);
+ }
}
diff --git
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAO.java
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAO.java
index 09d6732..52c9653 100644
---
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAO.java
+++
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAO.java
@@ -9,7 +9,7 @@
*
*
*/
-public interface LunDAO extends DAO {
+public interface LunDAO extends GenericDao<LUNs, String>,
MassOperationsDao<LUNs, String> {
/**
* Gets the LUN with the specified id.
*
@@ -43,28 +43,4 @@
* @return the list of LUNs
*/
List<LUNs> getAll();
-
- /**
- * Saves the supplied LUN instance.
- *
- * @param lun
- * the LUN
- */
- void save(LUNs lun);
-
- /**
- * Updates the specified LUN.
- *
- * @param lun
- * the LUN
- */
- void update(LUNs lun);
-
- /**
- * Removes the specified LUN.
- *
- * @param id
- * the LUN id
- */
- void remove(String id);
}
diff --git
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAODbFacadeImpl.java
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAODbFacadeImpl.java
index 0a3aa58..f20ed49 100644
---
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAODbFacadeImpl.java
+++
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/LunDAODbFacadeImpl.java
@@ -5,6 +5,7 @@
import java.util.List;
import org.ovirt.engine.core.common.businessentities.LUNs;
+import org.ovirt.engine.core.dal.dbbroker.MapSqlParameterMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@@ -12,7 +13,13 @@
* <code>LunDAODbFacadeImpl</code> provides a concrete implementation of
{@link LunDAO}. The original code was
* refactored from the {@link org.ovirt.engine.core.dal.dbbroker.DbFacade}
class.
*/
-public class LunDAODbFacadeImpl extends BaseDAODbFacade implements LunDAO {
+public class LunDAODbFacadeImpl extends MassOperationsGenericDaoDbFacade<LUNs,
String> implements LunDAO {
+
+ public LunDAODbFacadeImpl() {
+ super("luns");
+ setProcedureNameForGet("GetLUNByLUNId");
+ setProcedureNameForGetAll("GetAllFromLUNs");
+ }
protected static final RowMapper<LUNs> MAPPER = new RowMapper<LUNs>() {
@Override
@@ -72,6 +79,16 @@
}
@Override
+ protected MapSqlParameterSource createIdParameterMapper(String id) {
+ return getCustomMapSqlParameterSource().addValue("LUN_id", id);
+ }
+
+ @Override
+ protected RowMapper<LUNs> createEntityRowMapper() {
+ return MAPPER;
+ }
+
+ @Override
public void save(LUNs lun) {
MapSqlParameterSource parameterSource =
getCustomMapSqlParameterSource()
.addValue("LUN_id", lun.getLUN_id())
@@ -108,4 +125,37 @@
getCallsHandler().executeModification("DeleteLUN", parameterSource);
}
+
+ @Override
+ protected MapSqlParameterSource createFullParametersMapper(LUNs lun) {
+ return createIdParameterMapper(lun.getId())
+ .addValue("physical_volume_id", lun.getphysical_volume_id())
+ .addValue("volume_group_id", lun.getvolume_group_id())
+ .addValue("serial", lun.getSerial())
+ .addValue("lun_mapping", lun.getLunMapping())
+ .addValue("vendor_id", lun.getVendorId())
+ .addValue("product_id", lun.getProductId())
+ .addValue("device_size", lun.getDeviceSize());
+ }
+
+ @Override
+ public MapSqlParameterMapper<LUNs> getBatchMapper() {
+ return new MapSqlParameterMapper<LUNs>() {
+
+ @Override
+ public MapSqlParameterSource map(LUNs lun) {
+ MapSqlParameterSource paramValue = new MapSqlParameterSource()
+ .addValue("lun_id", lun.getLUN_id())
+ .addValue("physical_volume_id",
lun.getphysical_volume_id())
+ .addValue("volume_group_id", lun.getvolume_group_id())
+ .addValue("serial", lun.getSerial())
+ .addValue("lun_mapping", lun.getLunMapping())
+ .addValue("vendor_id", lun.getVendorId())
+ .addValue("product_id", lun.getProductId())
+ .addValue("device_size", lun.getDeviceSize());
+
+ return paramValue;
+ }
+ };
+ }
}
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
index 50fde54..c5c39c9 100644
---
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
@@ -22,6 +22,8 @@
import org.ovirt.engine.core.common.businessentities.DiskImage;
import org.ovirt.engine.core.common.businessentities.DiskImageDynamic;
import org.ovirt.engine.core.common.businessentities.Entities;
+import org.ovirt.engine.core.common.businessentities.LUNs;
+import org.ovirt.engine.core.common.businessentities.LunDisk;
import org.ovirt.engine.core.common.businessentities.MigrationSupport;
import org.ovirt.engine.core.common.businessentities.OriginType;
import org.ovirt.engine.core.common.businessentities.VDS;
@@ -92,6 +94,7 @@
private final Map<Guid, VmStatistics> _vmStatisticsToSave = new
HashMap<>();
private final Map<Guid, List<VmNetworkInterface>>
_vmInterfaceStatisticsToSave = new HashMap<>();
private final Map<Guid, DiskImageDynamic> _vmDiskImageDynamicToSave = new
HashMap<>();
+ private final List<LUNs> _vmLunDisksToSave = new ArrayList<>();
private final Map<VmDeviceId, VmDevice> vmDeviceToSave = new HashMap<>();
private final List<VmDevice> newVmDevices = new ArrayList<>();
private final List<VmDeviceId> removedDeviceIds = new ArrayList<>();
@@ -166,6 +169,7 @@
getDbFacade().getVmNetworkStatisticsDao().updateAllInBatch(allVmInterfaceStatistics);
getDbFacade().getDiskImageDynamicDao().updateAllInBatch(_vmDiskImageDynamicToSave.values());
+ getDbFacade().getLunDao().updateAllInBatch(_vmLunDisksToSave);
saveVmDevicesToDb();
saveVmGuestAgentNetworkDevices();
ResourceManager.getInstance().getEventListener().addExternallyManagedVms(_externalVmsToAdd);
@@ -939,6 +943,8 @@
prepareGuestAgentNetworkDevicesForUpdate();
+ updateLunDisks();
+
} else if (command.getVDSReturnValue().getExceptionObject() != null) {
if (command.getVDSReturnValue().getExceptionObject() instanceof
VDSErrorException) {
log.errorFormat("Failed vds listing, vds = {0} : {1}, error =
{2}", _vds.getId(),
@@ -981,6 +987,36 @@
updateGuestAgentInterfacesChanges(vmDynamic,
vmGuestAgentInterfaces, guestAgentNicHash);
addVmDynamicToList(vmDynamic);
}
+ }
+ }
+ }
+ }
+ }
+
+ protected void updateLunDisks() {
+ // Looping only over powering up VMs as LUN device size
+ // is updated by VDSM only once when running a VM.
+ for (VmDynamic vmDynamic : getPoweringUpVms()) {
+ VmInternalData vmInternalData =
getRunningVms().get(vmDynamic.getId());
+ if (vmInternalData != null) {
+ Map<String, LUNs> lunsMap = vmInternalData.getLunsMap();
+ List<Disk> vmDisks =
getDbFacade().getDiskDao().getAllForVm(vmDynamic.getId(), true);
+ for (Disk disk : vmDisks) {
+ if (disk.getDiskStorageType() != DiskStorageType.LUN) {
+ continue;
+ }
+
+ LUNs lunFromDB = ((LunDisk) disk).getLun();
+ LUNs lunFromMap = lunsMap.get(lunFromDB.getId());
+
+ if (lunFromMap != null && lunFromMap.getDeviceSize() != 0
+ && lunFromMap.getDeviceSize() !=
lunFromDB.getDeviceSize()) {
+ // Found a mismatch - set LUN for update
+ log.infoFormat("Updated LUN device size - ID: {0},
previous size: {1}, new size: {2}.",
+ lunFromDB.getLUN_id(),
lunFromDB.getDeviceSize(), lunFromMap.getDeviceSize());
+
+ lunFromDB.setDeviceSize(lunFromMap.getDeviceSize());
+ _vmLunDisksToSave.add(lunFromDB);
}
}
}
@@ -2080,6 +2116,23 @@
return Collections.unmodifiableList(removedDeviceIds);
}
+ /**
+ * An access method for test usages
+ *
+ * @return The LUNs to update in DB
+ */
+ protected List<LUNs> getVmLunDisksToSave() {
+ return Collections.unmodifiableList(_vmLunDisksToSave);
+ }
+
+ protected List<VmDynamic> getPoweringUpVms() {
+ return _poweringUpVms;
+ }
+
+ protected Map<Guid, VmInternalData> getRunningVms() {
+ return _runningVms;
+ }
+
protected void auditLog(AuditLogableBase auditLogable, AuditLogType
logType) {
AuditLogDirector.log(auditLogable, logType);
}
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ListVDSCommand.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ListVDSCommand.java
index 9bb8edb..5366d0b 100644
---
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ListVDSCommand.java
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ListVDSCommand.java
@@ -25,7 +25,7 @@
Map<Guid, VmInternalData> returnVMs = new HashMap<Guid,
VmInternalData>();
for (int idx = 0; idx < mVmListReturn.mVmList.length; ++idx) {
VmDynamic dynamicData =
VdsBrokerObjectsBuilder.buildVMDynamicDataFromList(mVmListReturn.mVmList[idx]);
- VmInternalData vmData = new VmInternalData(dynamicData, null,
null);
+ VmInternalData vmData = new VmInternalData(dynamicData, null,
null, null);
returnVMs.put(dynamicData.getId(), vmData);
}
setReturnValue(returnVMs);
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
index dec1f79..de8d0d6 100644
---
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
@@ -19,6 +19,7 @@
import org.ovirt.engine.core.common.businessentities.DiskImageDynamic;
import org.ovirt.engine.core.common.businessentities.DisplayType;
import org.ovirt.engine.core.common.businessentities.Entities;
+import org.ovirt.engine.core.common.businessentities.LUNs;
import org.ovirt.engine.core.common.businessentities.SessionState;
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.businessentities.StorageType;
@@ -42,6 +43,7 @@
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.common.utils.EnumUtils;
+import org.ovirt.engine.core.common.utils.SizeConverter;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.RpmVersion;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
@@ -97,6 +99,34 @@
return vmStatistics;
}
+ public static Map<String, LUNs> buildVmLunDisksData(Map<String, Object>
xmlRpcStruct) {
+ Map<String, Object> disks = (Map<String, Object>)
xmlRpcStruct.get(VdsProperties.vm_disks);
+ Map<String, LUNs> lunsMap = new HashMap<>();
+
+ if (disks != null) {
+ for (Object diskAsObj : disks.values()) {
+ Map<String, Object> disk = (Map<String, Object>) diskAsObj;
+
+ String lunGuidString = AssignStringValue(disk,
VdsProperties.lun_guid);
+ if (!StringUtils.isEmpty(lunGuidString)) {
+ LUNs lun = new LUNs();
+ lun.setLUN_id(lunGuidString);
+
+ if (disk.containsKey(VdsProperties.disk_true_size)) {
+ long sizeInBytes = AssignLongValue(disk,
VdsProperties.disk_true_size);
+ int sizeInGB = SizeConverter.convert(
+ sizeInBytes, SizeConverter.SizeUnit.BYTES,
SizeConverter.SizeUnit.GB).intValue();
+ lun.setDeviceSize(sizeInGB);
+ }
+
+ lunsMap.put(lunGuidString, lun);
+ }
+ }
+ }
+
+ return lunsMap;
+ }
+
public static void updateVMDynamicData(VmDynamic vm, Map<String, Object>
xmlRpcStruct) {
if (xmlRpcStruct.containsKey(VdsProperties.vm_guid)) {
vm.setId(new Guid((String)
xmlRpcStruct.get(VdsProperties.vm_guid)));
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
index ab492f5..2008cad 100644
---
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
@@ -170,6 +170,7 @@
public static final String disk_true_size = "truesize";
public static final String image_group_id = "imageID";
public static final String size = "size";
+ public static final String lun_guid = "lunGUID";
// Iso/Floppy related properties
public static final String iso_list = "isolist";
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmStatsVdsBrokerCommand.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmStatsVdsBrokerCommand.java
index 172c14a..d8c2141 100644
---
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmStatsVdsBrokerCommand.java
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmStatsVdsBrokerCommand.java
@@ -29,6 +29,7 @@
VdsBrokerObjectsBuilder.updateVMDynamicData(vmDynamic, xmlRpcStruct);
return new VmInternalData(vmDynamic,
VdsBrokerObjectsBuilder.buildVMStatisticsData(xmlRpcStruct),
-
VdsBrokerObjectsBuilder.buildVmGuestAgentInterfacesData(vmDynamic.getId(),
xmlRpcStruct));
+
VdsBrokerObjectsBuilder.buildVmGuestAgentInterfacesData(vmDynamic.getId(),
xmlRpcStruct),
+ VdsBrokerObjectsBuilder.buildVmLunDisksData(xmlRpcStruct));
}
}
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/entities/VmInternalData.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/entities/VmInternalData.java
index ee51798..e4a3b57 100644
---
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/entities/VmInternalData.java
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/entities/VmInternalData.java
@@ -1,7 +1,9 @@
package org.ovirt.engine.core.vdsbroker.vdsbroker.entities;
import java.util.List;
+import java.util.Map;
+import org.ovirt.engine.core.common.businessentities.LUNs;
import org.ovirt.engine.core.common.businessentities.VmDynamic;
import org.ovirt.engine.core.common.businessentities.VmGuestAgentInterface;
import org.ovirt.engine.core.common.businessentities.VmStatistics;
@@ -16,12 +18,17 @@
private VmStatistics vmStatistics;
private List<VmGuestAgentInterface> vmGuestAgentInterfaces;
+ // A map represents VM's LUN disks (LUN ID -> LUNs object)
+ private Map<String, LUNs> lunsMap;
+
public VmInternalData(VmDynamic vmDynamic,
VmStatistics vmStatistics,
- List<VmGuestAgentInterface> vmGuestAgentInterfaces) {
+ List<VmGuestAgentInterface> vmGuestAgentInterfaces,
+ Map<String, LUNs> lunsMap) {
this.vmDynamic = vmDynamic;
this.vmStatistics = vmStatistics;
this.vmGuestAgentInterfaces = vmGuestAgentInterfaces;
+ this.lunsMap = lunsMap;
}
public VmDynamic getVmDynamic() {
@@ -48,6 +55,14 @@
this.vmGuestAgentInterfaces = vmGuestAgentInterfaces;
}
+ public Map<String, LUNs> getLunsMap() {
+ return lunsMap;
+ }
+
+ public void setLunsMap(Map<String, LUNs> lunsMap) {
+ this.lunsMap = lunsMap;
+ }
+
@Override
public int hashCode() {
final int prime = 31;
@@ -55,6 +70,7 @@
result = prime * result + ((vmDynamic == null) ? 0 :
vmDynamic.hashCode());
result = prime * result + ((vmGuestAgentInterfaces == null) ? 0 :
vmGuestAgentInterfaces.hashCode());
result = prime * result + ((vmStatistics == null) ? 0 :
vmStatistics.hashCode());
+ result = prime * result + ((lunsMap == null) ? 0 : lunsMap.hashCode());
return result;
}
@@ -91,6 +107,13 @@
} else if (!vmStatistics.equals(other.vmStatistics)) {
return false;
}
+ if (lunsMap == null) {
+ if (other.lunsMap != null) {
+ return false;
+ }
+ } else if (!lunsMap.equals(other.lunsMap)) {
+ return false;
+ }
return true;
}
diff --git
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
index 21555c1..a4b0f4e 100644
---
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
+++
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
@@ -20,6 +20,9 @@
import org.mockito.runners.MockitoJUnitRunner;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.businessentities.AuditLog;
+import org.ovirt.engine.core.common.businessentities.Disk;
+import org.ovirt.engine.core.common.businessentities.LUNs;
+import org.ovirt.engine.core.common.businessentities.LunDisk;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VDSGroup;
import org.ovirt.engine.core.common.businessentities.VM;
@@ -30,11 +33,13 @@
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
import org.ovirt.engine.core.dao.AuditLogDAO;
+import org.ovirt.engine.core.dao.DiskDao;
import org.ovirt.engine.core.dao.VdsGroupDAO;
import org.ovirt.engine.core.dao.VmDAO;
import org.ovirt.engine.core.dao.VmDeviceDAO;
import org.ovirt.engine.core.utils.MockEJBStrategyRule;
import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsProperties;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.entities.VmInternalData;
@RunWith(MockitoJUnitRunner.class)
public class VdsUpdateRunTimeInfoTest {
@@ -44,6 +49,8 @@
private VDS vds;
HashMap[] vmInfo;
+ List<VmDynamic> poweringUpVms;
+ Map<Guid, VmInternalData> runningVms;
VdsUpdateRunTimeInfo updater;
@@ -52,6 +59,9 @@
@Mock
VmDAO vmDAO;
+
+ @Mock
+ DiskDao diskDAO;
@Mock
DbFacade dbFacade;
@@ -85,6 +95,16 @@
@Override
protected Map[] getVmInfo(List<String> vmsToUpdate) {
return vmInfo;
+ }
+
+ @Override
+ protected List<VmDynamic> getPoweringUpVms() {
+ return poweringUpVms;
+ }
+
+ @Override
+ protected Map<Guid, VmInternalData> getRunningVms() {
+ return runningVms;
}
};
@@ -122,11 +142,60 @@
assertEquals("wrong number of removed devices", 0,
updater.getRemovedVmDevices().size());
}
+ @Test
+ public void updateLunDisksNoMismatch() {
+ LUNs lun = new LUNs();
+ lun.setLUN_id(Guid.newGuid().toString());
+ lun.setDeviceSize(10);
+
+ LunDisk lunDisk = new LunDisk();
+ lunDisk.setLun(lun);
+
+ updateLunDisksTest(Collections.singletonMap(lun.getLUN_id(), lun),
Collections.singletonList((Disk) lunDisk));
+
+ assertEquals("wrong number of LUNs to update", 0,
updater.getVmLunDisksToSave().size());
+ }
+
+ @Test
+ public void updateLunDisksMismatch() {
+ String lunGuid = Guid.newGuid().toString();
+
+ LUNs lun1 = new LUNs();
+ lun1.setLUN_id(lunGuid);
+ lun1.setDeviceSize(10);
+
+ LUNs lun2 = new LUNs();
+ lun2.setLUN_id(lunGuid);
+ lun2.setDeviceSize(20);
+
+ LunDisk lunDisk = new LunDisk();
+ lunDisk.setLun(lun2);
+
+ updateLunDisksTest(Collections.singletonMap(lun1.getLUN_id(), lun1),
Collections.singletonList((Disk) lunDisk));
+
+ assertEquals("wrong number of LUNs to update", 1,
updater.getVmLunDisksToSave().size());
+ }
+
+ private void updateLunDisksTest(Map<String, LUNs> lunsMapFromVmStats,
List<Disk> vmLunDisksFromDb) {
+ Guid vmId = Guid.newGuid();
+ VmDynamic vmDynamic = new VmDynamic();
+ vmDynamic.setId(vmId);
+ VmInternalData vmInternalData = new VmInternalData(vmDynamic, null,
null, lunsMapFromVmStats);
+
+ when(diskDAO.getAllForVm(any(Guid.class),
any(Boolean.class))).thenReturn(vmLunDisksFromDb);
+
+ poweringUpVms = Collections.singletonList(vmDynamic);
+ runningVms = Collections.singletonMap(vmId, vmInternalData);
+
+ updater.updateLunDisks();
+ }
+
private void initConditions() {
when(dbFacade.getVdsGroupDao()).thenReturn(groupDAO);
when(dbFacade.getVmDao()).thenReturn(vmDAO);
when(dbFacade.getAuditLogDao()).thenReturn(mockAuditLogDao);
when(dbFacade.getVmDeviceDao()).thenReturn(vmDeviceDAO);
+ when(dbFacade.getDiskDao()).thenReturn(diskDAO);
when(groupDAO.get((Guid) any())).thenReturn(cluster);
Map<Guid, VM> emptyMap = Collections.emptyMap();
when(vmDAO.getAllRunningByVds(vds.getId())).thenReturn(emptyMap);
--
To view, visit http://gerrit.ovirt.org/22978
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie0d4d805ca333990ea1f612eb03a87f4a505f4a8
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches