Roy Golan has uploaded a new change for review.

Change subject: core: rerun Maintenace to host when preparing is IDLE
......................................................................

core: rerun Maintenace to host when preparing is IDLE

when PreparingForMaintenance is idle to to running VMs which
where are running on it (due to incoming live migration during the switch
to maintenance), try to re-reun Maintenance again internally.

Change-Id: I0e18bcfbc566b6fd92d276c5c739ba607e2a53f0
Signed-off-by: Roy Golan <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
5 files changed, 40 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/42/17942/5

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java
index 20e87f9..efc8753 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java
@@ -3,6 +3,8 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
 
 import javax.ejb.DependsOn;
 import javax.ejb.Local;
@@ -17,6 +19,7 @@
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.FenceVdsActionParameters;
 import org.ovirt.engine.core.common.action.HostStoragePoolParametersBase;
+import org.ovirt.engine.core.common.action.MaintenanceVdsParameters;
 import org.ovirt.engine.core.common.action.MigrateVmToServerParameters;
 import org.ovirt.engine.core.common.action.ReconstructMasterParameters;
 import org.ovirt.engine.core.common.action.RunVmParams;
@@ -53,6 +56,7 @@
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil;
+import org.ovirt.engine.core.utils.timer.SchedulerUtilQuartzImpl;
 import org.ovirt.engine.core.vdsbroker.MonitoringStrategyFactory;
 
 @Stateless(name = "VdsEventListener")
@@ -309,6 +313,11 @@
     }
 
     @Override
+    public void runningVMsOnHostPreparingToMaintenance(final VDS vds) {
+        Backend.getInstance().runInternalAction(VdcActionType.MaintenanceVds, 
new MaintenanceVdsParameters(vds.getId(),true));
+    }
+
+    @Override
     public void rerun(Guid vmId) {
         final IVdsAsyncCommand command = 
Backend.getInstance().getResourceManager().GetAsyncCommandForVm(vmId);
         if (command != null) {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java
index 32127f0..593b497 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java
@@ -57,4 +57,6 @@
     void runFailedAutoStartVM(Guid vmId);
 
     boolean restartVds(Guid vdsId);
+
+    void runningVMsOnHostPreparingToMaintenance(VDS vds);
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
index ef83708..b852d5d 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
@@ -1497,7 +1497,11 @@
     @DefaultValueAttribute("false")
     ExternalSchedulerEnabled(534),
 
-    Invalid(65535);
+    @TypeConverterAttribute(Integer.class)
+    @DefaultValueAttribute("5000")
+    HostPreparingForMaintenanceIdleTime(535),
+
+    Invalid(65535), ;
 
     private int intValue;
     private static Map<Integer, ConfigValues> mappings;
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
index 71aad99..390f3cf 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java
@@ -59,6 +59,7 @@
     private long updateStartTime;
 
     private static Log log = LogFactory.getLog(VdsManager.class);
+    private volatile long statusChangedAt;
 
     public boolean getRefreshStatistics() {
         return (_refreshIteration == _numberRefreshesBeforeSave);
@@ -433,6 +434,7 @@
                 vds.setPreviousStatus(vds.getStatus());
                 if (_vds != null) {
                     _vds.setPreviousStatus(vds.getStatus());
+                    statusChangedAt = System.currentTimeMillis();
                 }
             }
             // update to new status
@@ -740,4 +742,8 @@
         setStatus(VDSStatus.Connecting, vds);
         UpdateDynamicData(vds.getDynamicData());
     }
+
+    public long getStatusChangedAt() {
+        return statusChangedAt;
+    }
 }
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 9c23d22..4ab3ff8 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
@@ -12,12 +12,15 @@
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.ovirt.engine.core.common.AuditLogType;
+import org.ovirt.engine.core.common.action.MaintenanceVdsParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.BusinessEntity;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
@@ -1844,15 +1847,21 @@
     }
 
     private void moveVDSToMaintenanceIfNeeded() {
-        if ((_vds.getStatus() == VDSStatus.PreparingForMaintenance)
-                && monitoringStrategy.canMoveToMaintenance(_vds)) {
-            _vdsManager.setStatus(VDSStatus.Maintenance, _vds);
-            _saveVdsDynamic = true;
-            _saveVdsStatistics = true;
-            log.infoFormat(
-                    "Updated vds status from 'Preparing for Maintenance' to 
'Maintenance' in database,  vds = {0} : {1}",
-                    _vds.getId(),
-                    _vds.getName());
+        if (_vds.getStatus() == VDSStatus.PreparingForMaintenance) {
+            if (monitoringStrategy.canMoveToMaintenance(_vds)) {
+                _vdsManager.setStatus(VDSStatus.Maintenance, _vds);
+                _saveVdsDynamic = true;
+                _saveVdsStatistics = true;
+                log.infoFormat(
+                        "Updated vds status from 'Preparing for Maintenance' 
to 'Maintenance' in database,  vds = {0} : {1}",
+                        _vds.getId(),
+                        _vds.getName());
+            } else {
+                if (System.currentTimeMillis() - 
_vdsManager.getStatusChangedAt() > Config.<Integer> 
GetValue(ConfigValues.HostPreparingForMaintenanceIdleTime)) {
+                    // try to put the host to Maintenance again.
+                    
ResourceManager.getInstance().getEventListener().runningVMsOnHostPreparingToMaintenance(_vds);
+                }
+            }
         }
     }
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0e18bcfbc566b6fd92d276c5c739ba607e2a53f0
Gerrit-PatchSet: 5
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Roy Golan <[email protected]>
Gerrit-Reviewer: Omer Frenkel <[email protected]>
Gerrit-Reviewer: Roy Golan <[email protected]>
Gerrit-Reviewer: oVirt Jenkins CI Server
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to