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 agai, internally.

Change-Id: I0e18bcfbc566b6fd92d276c5c739ba607e2a53f0
Signed-off-by: Roy Golan <rgo...@redhat.com>
---
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/1

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..cb8bbd5 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("100")
+    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: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Roy Golan <rgo...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to