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

Reply via email to