Liran Zelkha has uploaded a new change for review. Change subject: core: Migrate RuntimeInfo to use Batch Updates ......................................................................
core: Migrate RuntimeInfo to use Batch Updates VdsUpdateRuntimeInfo updates the data of a specific VDS. This change migrates all VM updates the VdsUpdateRuntimeInfo process does to batch updates - improving performance. Change-Id: I96dd3a2f407e36194c0ccf07a5a9c7e83be61d48 Signed-off-by: [email protected] <[email protected]> --- M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStatisticsDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStatisticsDaoDbFacadeImpl.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkStatisticsDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkStatisticsDaoDbFacadeImpl.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java 9 files changed, 133 insertions(+), 3 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/18/16018/1 diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java index 0012b74..e3b95a9 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsDao.java @@ -2,8 +2,10 @@ import java.io.Serializable; import java.util.Collection; +import java.util.List; import org.ovirt.engine.core.common.businessentities.BusinessEntity; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; /** * Data Access Object which supports mass operations for the given entity type. @@ -39,4 +41,11 @@ * @param ids */ void removeAll(Collection<ID> ids); + + /** + * Calls an update stored procedure multiple timse in a batch + * @param procedureName + * @param entities + */ + void updateAllInBatch(String procedureName, List<MapSqlParameterSource> paramValues); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java index 6f3da4a..247a479 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/MassOperationsGenericDaoDbFacade.java @@ -2,8 +2,10 @@ import java.io.Serializable; import java.util.Collection; +import java.util.List; import org.ovirt.engine.core.common.businessentities.BusinessEntity; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; /** * Implementation for the {@link MassOperationsDao} which provides a default @@ -40,6 +42,17 @@ } @Override + /** + * Enables to send update procedure name as a parameter that overrides the default + * one. + * In case this parameter is null the default procedure is used. + */ + public void updateAllInBatch(String procedureName, List<MapSqlParameterSource> paramValues) { + getCallsHandler().executeStoredProcAsBatch(procedureName == null ? getProcedureNameForUpdate() : procedureName, + paramValues); + } + + @Override public void removeAll(Collection<ID> ids) { for (ID id : ids) { remove(id); diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAO.java index b120789..c4bd2a7 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAO.java @@ -1,6 +1,7 @@ package org.ovirt.engine.core.dao; import java.util.List; +import java.util.Map; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDynamic; @@ -64,4 +65,10 @@ * otherwise */ boolean updateConsoleUserWithOptimisticLocking(VmDynamic vm); + + /** + * Store a bunch of VM Dynamic objects in the database in a single batch statement + * @param vmDynamicToSave + */ + void updateAllInTransaction(Map<Guid, VmDynamic> vmDynamicToSave); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java index 7b965cd..394e1ee 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java @@ -2,6 +2,7 @@ import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -177,4 +178,51 @@ } }; } + + @Override + public void updateAllInTransaction(Map<Guid, VmDynamic> vmDynamicToSave) { + List<MapSqlParameterSource> paramValues = new ArrayList<MapSqlParameterSource>(); + + for (VmDynamic entity : vmDynamicToSave.values()) { + MapSqlParameterSource paramValue = new MapSqlParameterSource(); + + paramValue.addValue("guest_cur_user_name", entity.getGuestCurrentUserName()); + paramValue.addValue("console_cur_user_name", entity.getConsoleCurrentUserName()); + paramValue.addValue("guest_last_login_time", entity.getGuestLastLoginTime()); + paramValue.addValue("guest_last_logout_time", entity.getGuestLastLogoutTime()); + paramValue.addValue("console_user_id", entity.getConsoleUserId()); + paramValue.addValue("guest_os", entity.getGuestOs()); + paramValue.addValue("migrating_to_vds", entity.getMigratingToVds()); + paramValue.addValue("run_on_vds", entity.getRunOnVds()); + paramValue.addValue("status", entity.getStatus()); + paramValue.addValue("vm_guid", entity.getId()); + paramValue.addValue("vm_host", entity.getVmHost()); + paramValue.addValue("vm_ip", entity.getVmIp()); + paramValue.addValue("last_start_time", entity.getLastStartTime()); + paramValue.addValue("vm_pid", entity.getVmPid()); + paramValue.addValue("display", entity.getDisplay()); + paramValue.addValue("acpi_enable", entity.getAcpiEnable()); + paramValue.addValue("session", entity.getSession()); + paramValue.addValue("display_ip", entity.getDisplayIp()); + paramValue.addValue("display_type", entity.getDisplayType()); + paramValue.addValue("kvm_enable", entity.getKvmEnable()); + paramValue.addValue("boot_sequence", entity.getBootSequence()); + paramValue.addValue("display_secure_port", entity.getDisplaySecurePort()); + paramValue.addValue("utc_diff", entity.getUtcDiff()); + paramValue.addValue("last_vds_run_on", entity.getLastVdsRunOn()); + paramValue.addValue("client_ip", entity.getClientIp()); + paramValue.addValue("guest_requested_memory", entity.getGuestRequestedMemory()); + paramValue.addValue("hibernation_vol_handle", entity.getHibernationVolHandle()); + paramValue.addValue("exit_status", entity.getExitStatus()); + paramValue.addValue("pause_status", entity.getPauseStatus()); + paramValue.addValue("exit_message", entity.getExitMessage()); + paramValue.addValue("hash", entity.getHash()); + paramValue.addValue("guest_agent_nics_hash", entity.getGuestAgentNicsHash()); + paramValue.addValue("last_watchdog_event", entity.getLastWatchdogEvent()); + paramValue.addValue("last_watchdog_action", entity.getLastWatchdogAction()); + + paramValues.add(paramValue); + } + updateAllInBatch("updatevmdynamic", paramValues); + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStatisticsDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStatisticsDAO.java index a00af82..3e89c59 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStatisticsDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStatisticsDAO.java @@ -1,8 +1,12 @@ package org.ovirt.engine.core.dao; +import java.util.Map; + import org.ovirt.engine.core.common.businessentities.VmStatistics; import org.ovirt.engine.core.compat.Guid; public interface VmStatisticsDAO extends GenericDao<VmStatistics, Guid>, MassOperationsDao<VmStatistics, Guid> { + void updateAllInTransaction(Map<Guid, VmStatistics> values); + } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStatisticsDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStatisticsDaoDbFacadeImpl.java index 6869867..df04243 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStatisticsDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStatisticsDaoDbFacadeImpl.java @@ -2,7 +2,9 @@ import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.apache.commons.lang.NotImplementedException; import org.ovirt.engine.core.common.businessentities.VmStatistics; @@ -69,4 +71,24 @@ }; } + @Override + public void updateAllInTransaction(Map<Guid, VmStatistics> vmStatisticsToSave) { + List<MapSqlParameterSource> paramValues = new ArrayList<MapSqlParameterSource>(); + + for (VmStatistics entity : vmStatisticsToSave.values()) { + MapSqlParameterSource paramValue = new MapSqlParameterSource(); + + paramValue.addValue("cpu_sys", entity.getcpu_sys()); + paramValue.addValue("cpu_user", entity.getcpu_user()); + paramValue.addValue("elapsed_time", entity.getelapsed_time()); + paramValue.addValue("usage_cpu_percent", entity.getusage_cpu_percent()); + paramValue.addValue("usage_mem_percent", entity.getusage_mem_percent()); + paramValue.addValue("usage_network_percent", entity.getusage_network_percent()); + paramValue.addValue("disks_usage", entity.getDisksUsage()); + paramValue.addValue("vm_guid", entity.getId()); + + paramValues.add(paramValue); + } + updateAllInBatch("updatevmstatistics", paramValues); + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkStatisticsDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkStatisticsDao.java index 1dbd218..03a6264 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkStatisticsDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkStatisticsDao.java @@ -1,5 +1,7 @@ package org.ovirt.engine.core.dao.network; +import java.util.List; + import org.ovirt.engine.core.common.businessentities.network.VmNetworkStatistics; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.GenericDao; @@ -7,4 +9,6 @@ public interface VmNetworkStatisticsDao extends GenericDao<VmNetworkStatistics, Guid>, MassOperationsDao<VmNetworkStatistics, Guid> { + + void updateAllInTransaction(List<VmNetworkStatistics> vmInterfaceStatisticsToSave); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkStatisticsDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkStatisticsDaoDbFacadeImpl.java index 38685e7..70d0256 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkStatisticsDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkStatisticsDaoDbFacadeImpl.java @@ -2,6 +2,7 @@ import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.NotImplementedException; @@ -58,4 +59,25 @@ } }; } + + @Override + public void updateAllInTransaction(List<VmNetworkStatistics> vmInterfaceStatisticsToSave) { + List<MapSqlParameterSource> paramValues = new ArrayList<MapSqlParameterSource>(); + + for (VmNetworkStatistics entity : vmInterfaceStatisticsToSave) { + MapSqlParameterSource paramValue = new MapSqlParameterSource(); + paramValue.addValue("id", entity.getId()); + paramValue.addValue("rx_drop", entity.getReceiveDropRate()); + paramValue.addValue("rx_rate", entity.getReceiveRate()); + paramValue.addValue("tx_drop", entity.getTransmitDropRate()); + paramValue.addValue("tx_rate", entity.getTransmitRate()); + paramValue.addValue("iface_status", entity.getStatus()); + paramValue.addValue("vm_id", entity.getVmId()); + + paramValues.add(paramValue); + } + + updateAllInBatch("updatevm_interface_statistics", paramValues); + + } } 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 b198909..901a074 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 @@ -148,8 +148,8 @@ } } - updateAllInTransaction(_vmDynamicToSave.values(), getDbFacade().getVmDynamicDao()); - updateAllInTransaction(_vmStatisticsToSave.values(), getDbFacade().getVmStatisticsDao()); + getDbFacade().getVmDynamicDao().updateAllInTransaction(_vmDynamicToSave); + getDbFacade().getVmStatisticsDao().updateAllInTransaction(_vmStatisticsToSave); final List<VmNetworkStatistics> allVmInterfaceStatistics = new LinkedList<VmNetworkStatistics>(); for (List<VmNetworkInterface> list : _vmInterfaceStatisticsToSave.values()) { @@ -158,7 +158,8 @@ } } - updateAllInTransaction(allVmInterfaceStatistics, getDbFacade().getVmNetworkStatisticsDao()); + getDbFacade().getVmNetworkStatisticsDao().updateAllInTransaction(allVmInterfaceStatistics); + updateAllInTransaction(_vmDiskImageDynamicToSave.values(), getDbFacade().getDiskImageDynamicDao()); saveVmDevicesToDb(); saveVmGuestAgentNetworkDevices(); -- To view, visit http://gerrit.ovirt.org/16018 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I96dd3a2f407e36194c0ccf07a5a9c7e83be61d48 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liran Zelkha <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
