Liran Zelkha has uploaded a new change for review.

Change subject: core: Lazy load of Vms per VDS
......................................................................

core: Lazy load of Vms per VDS

Loading all the VMs of a VDS is a slow operation. This patch
tries to minimize the amount of these DB calls by lazy loading
the VM dictionary in VURTI

Change-Id: Ic61f8d965083b814b64257831a2ed3c6d7f764c7
Signed-off-by: [email protected] <[email protected]>
---
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
1 file changed, 23 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/69/32669/1

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 da7c0df..c9b2dc82 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
@@ -123,7 +123,7 @@
     private final VdsManager _vdsManager;
     private final MonitoringStrategy monitoringStrategy;
     private final VDS _vds;
-    private final Map<Guid, VM> _vmDict;
+    private Map<Guid, VM> vmDict;
     private boolean processHardwareCapsNeeded;
     private boolean refreshedCapabilities = false;
     private static Map<Guid, Long> hostDownTimes = new HashMap<>();
@@ -477,7 +477,13 @@
         _vds = vds;
         _firstStatus = _vds.getStatus();
         this.monitoringStrategy = monitoringStrategy;
-        _vmDict = getDbFacade().getVmDao().getAllRunningByVds(_vds.getId());
+    }
+
+    private Map<Guid, VM> getVmDict() {
+        if (vmDict == null) {
+            vmDict = getDbFacade().getVmDao().getAllRunningByVds(_vds.getId());
+        }
+        return vmDict;
     }
 
     public void refresh() {
@@ -1002,7 +1008,7 @@
         for (VmInternalData vmInternalData : _runningVms.values()) {
             VmDynamic vmDynamic = vmInternalData.getVmDynamic();
             if (vmDynamic != null) {
-                VM vm = _vmDict.get(vmDynamic.getId());
+                VM vm = getVmDict().get(vmDynamic.getId());
                 if (vm != null) {
                     List<VmGuestAgentInterface> vmGuestAgentInterfaces = 
vmInternalData.getVmGuestAgentInterfaces();
                     int guestAgentNicHash = vmGuestAgentInterfaces == null ? 0 
: vmGuestAgentInterfaces.hashCode();
@@ -1137,7 +1143,7 @@
         for (VmInternalData vmInternalData : _runningVms.values()) {
             VmDynamic vmDynamic = vmInternalData.getVmDynamic();
             if (vmDynamic != null && vmDynamic.getStatus() != 
VMStatus.MigratingTo) {
-                VM vm = _vmDict.get(vmDynamic.getId());
+                VM vm = getVmDict().get(vmDynamic.getId());
                 if (vm != null) {
                     String dbHash = vm.getHash();
                     if ((dbHash == null && vmDynamic.getHash() != null) || 
(dbHash != null)
@@ -1329,7 +1335,7 @@
                 tempRunningList.add(runningVm.getVmDynamic());
             }
             for (VmDynamic runningVm : tempRunningList) {
-                VM vmToUpdate = _vmDict.get(runningVm.getId());
+                VM vmToUpdate = getVmDict().get(runningVm.getId());
 
                 boolean statusChanged = false;
                 if (vmToUpdate == null
@@ -1365,7 +1371,7 @@
     private void proceedWatchdogEvents() {
         for (VmInternalData vmInternalData : _runningVms.values()) {
             VmDynamic vmDynamic = vmInternalData.getVmDynamic();
-            VM vmTo = _vmDict.get(vmDynamic.getId());
+            VM vmTo = getVmDict().get(vmDynamic.getId());
             if (isNewWatchdogEvent(vmDynamic, vmTo)) {
                 AuditLogableBase auditLogable = new AuditLogableBase();
                 auditLogable.setVmId(vmDynamic.getId());
@@ -1380,7 +1386,7 @@
 
     private void proceedGuaranteedMemoryCheck() {
         for (VmInternalData vmInternalData : _runningVms.values()) {
-            VM savedVm = _vmDict.get(vmInternalData.getVmDynamic().getId());
+            VM savedVm = 
getVmDict().get(vmInternalData.getVmDynamic().getId());
             if (savedVm == null) {
                 continue;
             }
@@ -1405,7 +1411,7 @@
             for (VmInternalData vmInternalData : _runningVms.values()) {
                 VmBalloonInfo balloonInfo = 
vmInternalData.getVmStatistics().getVmBalloonInfo();
                 Guid vmId = vmInternalData.getVmDynamic().getId();
-                if (_vmDict.get(vmId) == null) {
+                if (getVmDict().get(vmId) == null) {
                     continue; // if vm is unknown - continue
                 }
 
@@ -1480,7 +1486,7 @@
     }
 
     private boolean isBalloonDeviceActiveOnVm(VmInternalData vmInternalData) {
-        VM savedVm = _vmDict.get(vmInternalData.getVmDynamic().getId());
+        VM savedVm = getVmDict().get(vmInternalData.getVmDynamic().getId());
 
         if (savedVm != null) {
             VmBalloonInfo balloonInfo = 
vmInternalData.getVmStatistics().getVmBalloonInfo();
@@ -1507,7 +1513,7 @@
                 continue;
             }
 
-            VM vmTo = _vmDict.get(vm.getId());
+            VM vmTo = getVmDict().get(vm.getId());
             VMStatus status = VMStatus.Unassigned;
             if (vmTo != null) {
                 status = vmTo.getStatus();
@@ -1645,7 +1651,7 @@
         List<String> vmsToQuery = new ArrayList<String>();
         // Searching for External VMs that run on the host
         for (VmInternalData vmInternalData : _runningVms.values()) {
-            VM currentVmData = 
_vmDict.get(vmInternalData.getVmDynamic().getId());
+            VM currentVmData = 
getVmDict().get(vmInternalData.getVmDynamic().getId());
             if (currentVmData == null) {
                 if 
(getDbFacade().getVmStaticDao().get(vmInternalData.getVmDynamic().getId()) == 
null) {
                     Guid vmId = vmInternalData.getVmDynamic().getId();
@@ -1698,12 +1704,12 @@
     private void updateRepository(List<Guid> staleRunningVms) {
         for (VmInternalData vmInternalData : _runningVms.values()) {
             VmDynamic runningVm = vmInternalData.getVmDynamic();
-            VM vmToUpdate = _vmDict.get(runningVm.getId());
+            VM vmToUpdate = getVmDict().get(runningVm.getId());
 
             // if not migrating here and not down
             if (!inMigrationTo(runningVm, vmToUpdate) && runningVm.getStatus() 
!= VMStatus.Down) {
                 if (vmToUpdate != null) {
-                    if (_vmDict.containsKey(vmToUpdate.getId())
+                    if (getVmDict().containsKey(vmToUpdate.getId())
                             && !StringUtils.equals(runningVm.getClientIp(), 
vmToUpdate.getClientIp())) {
                         _vmsClientIpChanged.put(vmToUpdate, runningVm);
                     }
@@ -1772,7 +1778,7 @@
                 }
                 if (vmToUpdate != null) {
                     updateVmStatistics(vmToUpdate);
-                    if (_vmDict.containsKey(runningVm.getId())) {
+                    if (getVmDict().containsKey(runningVm.getId())) {
                         staleRunningVms.add(runningVm.getId());
                         if (!_vdsManager.getInitialized()) {
                             
ResourceManager.getInstance().RemoveVmFromDownVms(_vds.getId(), 
runningVm.getId());
@@ -1831,7 +1837,7 @@
      * @param staleRunningVms - VMs that didn't change their status
      */
     private void removeVmsFromCache(List<Guid> staleRunningVms) {
-        for (VM vmToRemove : _vmDict.values()) {
+        for (VM vmToRemove : getVmDict().values()) {
             if (staleRunningVms.contains(vmToRemove.getId())) {
                 continue;
             }
@@ -1947,7 +1953,7 @@
             // we shouldn't include them as committed.
             if (vmDynamic.getStatus() != VMStatus.WaitForLaunch &&
                     vmDynamic.getStatus() != VMStatus.Down) {
-                VM vm = _vmDict.get(vmDynamic.getId());
+                VM vm = getVmDict().get(vmDynamic.getId());
                 if (vm != null) {
                     memCommited += vm.getVmMemSizeMb();
                     memCommited += _vds.getGuestOverhead();
@@ -1996,7 +2002,7 @@
                         .getVmNetworkInterfaceDao()
                         .getAllForVm(vmToUpdate.argvalue.getId()));
 
-                _vmDict.put(vmToUpdate.argvalue.getId(), vmToUpdate.argvalue);
+                getVmDict().put(vmToUpdate.argvalue.getId(), 
vmToUpdate.argvalue);
                 if (vmNewDynamicData.getStatus() == VMStatus.Up) {
                     if 
(!_succededToRunVms.contains(vmToUpdate.argvalue.getId())) {
                         _succededToRunVms.add(vmToUpdate.argvalue.getId());


-- 
To view, visit http://gerrit.ovirt.org/32669
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic61f8d965083b814b64257831a2ed3c6d7f764c7
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