Laszlo Hornyak has uploaded a new change for review.

Change subject: engine: watchdog - logic changes
......................................................................

engine: watchdog - logic changes

- changes in commands
- vdsbroker changes

Change-Id: I8959f7fe37a1ef4a8ec82ee749a47311553cef18
Signed-off-by: Laszlo Hornyak <lhorn...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
M 
backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
13 files changed, 122 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/13058/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
index d5ab358..59b9e19 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
@@ -500,6 +500,11 @@
                 {
                     VmDeviceUtils.updateSmartcardDevice(getVm().getId(), 
getVm().isSmartcardEnabled());
                 }
+                //update watchdog device
+                VmDeviceUtils.updateWatchdogDevice(getVm().getId(),
+                        getParameters().getVm().getWatchdogModel(),
+                        getParameters().getVm().getWatchdogAction());
+
                 setActionReturnValue(getVm().getId());
                 setSucceeded(true);
             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
index f33d7d3..8d02604 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
@@ -305,6 +305,8 @@
                 getParameters().getMasterVm().getVncKeyboardLayout(),
                 getParameters().getMasterVm().getMinAllocatedMem()));
         
getVmTemplate().setAutoStartup(getParameters().getMasterVm().isAutoStartup());
+        
getVmTemplate().setWatchdogAction(getParameters().getMasterVm().getWatchdogAction());
+        
getVmTemplate().setWatchdogModel(getParameters().getMasterVm().getWatchdogModel());
         
getVmTemplate().setPriority(getParameters().getMasterVm().getPriority());
         
getVmTemplate().setDefaultDisplayType(getParameters().getMasterVm().getDefaultDisplayType());
         
getVmTemplate().setInitrdUrl(getParameters().getMasterVm().getInitrdUrl());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
index 85bc2bf..cedc51a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
@@ -109,6 +109,10 @@
         DbFacade.getInstance().getVmTemplateDao().update(getVmTemplate());
         // also update the smartcard device
         VmDeviceUtils.updateSmartcardDevice(getVmTemplateId(), 
getParameters().getVmTemplateData().isSmartcardEnabled());
+        // ...and also update the watchdog
+        VmDeviceUtils.updateWatchdogDevice(getVmTemplateId(),
+                getParameters().getVmTemplateData().getWatchdogModel(),
+                getParameters().getVmTemplateData().getWatchdogAction());
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java
index af7dc25..8590d2b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java
@@ -36,7 +36,7 @@
                 "isoPath", "diskImageMap", "defaultDisplayType", "priority", 
"autoStartup", "stateless",
                 "initrdUrl", "kernelUrl", "kernelParams", "images", 
"interfaces", "quotaId", "quotaName",
                 "quotaEnforcementType", "migrationSupport", 
"dedicatedVmForVds", "smartcardEnabled","dbGeneration", "deleteProtected",
-                "quotaDefault", "tunnelMigration", "vncKeyboardLayout"
+                "quotaDefault", "tunnelMigration", "vncKeyboardLayout", 
"watchdogAction", "watchdogModel"
         });
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
index f3a6cd5..0c85b0c 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
@@ -82,6 +82,37 @@
 
             updateAudioDevice(oldVm, entity);
             updateSmartcardDevice(oldVm, entity);
+            updateWatchdogDevice(oldVm, entity);
+        }
+    }
+
+    public static void updateWatchdogDevice(Guid vmId, String watchdogModel, 
String watchdogAction) {
+        // remove watchdogs
+        List<VmDevice> watchdogs =
+                dao.getVmDeviceByVmIdTypeAndDevice(vmId,
+                        VmDeviceType.WATCHDOG.getName(),
+                        VmDeviceType.WATCHDOG.getName());
+        for (VmDevice watchDog : watchdogs) {
+            dao.remove(watchDog.getId());
+        }
+        if (!StringUtils.isEmpty(watchdogModel) && 
!StringUtils.isEmpty(watchdogAction)) {
+            // add watchdog
+            HashMap<String, Object> params = new HashMap<String, Object>();
+            params.put("model", watchdogModel);
+            params.put("action", watchdogAction);
+            addManagedDevice(new VmDeviceId(Guid.NewGuid(), vmId),
+                    VmDeviceType.WATCHDOG,
+                    VmDeviceType.WATCHDOG,
+                    params,
+                    true,
+                    false);
+        }
+    }
+
+    static void updateWatchdogDevice(VM oldVm, VmBase newVm) {
+        if (!StringUtils.equals(oldVm.getWatchdogAction(), 
newVm.getWatchdogAction())
+                || !StringUtils.equals(oldVm.getWatchdogModel(), 
newVm.getWatchdogModel())) {
+            updateWatchdogDevice(newVm.getId(), newVm.getWatchdogModel(), 
newVm.getWatchdogAction());
         }
     }
 
@@ -233,6 +264,8 @@
                 specParams.put(VdsProperties.Model, VdsProperties.Virtio);
             } else if 
(VmDeviceType.SMARTCARD.getName().equals(device.getType())) {
                 specParams = new SmartcardSpecParams();
+            } else if 
(VmDeviceType.WATCHDOG.getName().equals(device.getType())) {
+                specParams.putAll(device.getSpecParams());
             }
             device.setId(new VmDeviceId(id, dstId));
             device.setSpecParams(specParams);
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 67ef209..e3fd15d 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
@@ -923,6 +923,8 @@
         if (command.getVDSReturnValue().getSucceeded()) {
             List<VM> running = checkVmsStatusChanged();
 
+            proceedWatchdogEvents();
+
             proceedDownVms();
 
             // update repository and check if there are any vm in cache that 
not
@@ -1241,6 +1243,25 @@
         return running;
     }
 
+    private void proceedWatchdogEvents() {
+        for (VmInternalData vmInternalData : _runningVms.values()) {
+            VmDynamic vm = vmInternalData.getVmDynamic();
+            VM vmTo = _vmDict.get(vm.getId());
+            if (isNewWatchdogEvent(vm, vmTo)) {
+                AuditLogableBase auditLogable = new AuditLogableBase();
+                auditLogable.setVmId(vm.getId());
+                AuditLogDirector.log(auditLogable, 
AuditLogType.WATCHDOG_EVENT);
+            }
+        }
+    }
+
+    protected static boolean isNewWatchdogEvent(VmDynamic vm, VM vmTo) {
+        Double lastWatchdogEvent = vm.getLastWatchdogEvent();
+        return vmTo != null && lastWatchdogEvent != null
+                && (vmTo.getLastWatchdogEvent() == null || 
vmTo.getLastWatchdogEvent() < lastWatchdogEvent);
+    }
+
+
     /**
      * Delete all vms with status Down
      */
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
index 2003006..483315c 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVDSCommand.java
@@ -70,6 +70,7 @@
         builder.buildVmTimeZone();
         builder.buildVmUsbDevices();
         builder.buildVmMemoryBalloon();
+        builder.buildVmWatchdog();
         builder.buildUnmanagedDevices();
     }
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
index 5ebfbec..63d47db 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
@@ -245,6 +245,12 @@
             }
         }
         vm.setPauseStatus(pauseStatus);
+
+        if(xmlRpcStruct.contains(VdsProperties.watchdogEvent)) {
+            Map<String, Object> watchdogStruct = (Map<String, Object>) 
xmlRpcStruct.getItem(VdsProperties.watchdogEvent);
+            double time = 
Double.parseDouble(watchdogStruct.get(VdsProperties.time).toString());
+            vm.setLastWatchdogEvent(time);
+        }
     }
 
     public static void updateVMStatisticsData(VmStatistics vm, XmlRpcStruct 
xmlRpcStruct) {
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
index 41c90d8..73d6a8d 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
@@ -263,6 +263,10 @@
     public static final String DISK_STATS = "diskStats";
     public static final String DISK_STATS_FREE = "free";
 
+    // watchdog
+    public static final String watchdogEvent = "watchdogEvent";
+    public static final String time = "time";
+
     public static String MigrationMethostoString(MigrationMethod method) {
         if (method == MigrationMethod.OFFLINE) {
             return offline;
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
index 6ba2926..86ae326 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
@@ -685,4 +685,23 @@
         return model.equalsIgnoreCase(FIRST_MASTER_MODEL);
     }
 
+    protected void buildVmWatchdog() {
+        List<VmDevice> watchdogs =
+                DbFacade.getInstance()
+                        .getVmDeviceDao()
+                        .getVmDeviceByVmIdAndType(vm.getId(),
+                                VmDeviceType.WATCHDOG.getName());
+        for(VmDevice watchdog : watchdogs) {
+            XmlRpcStruct struct = new XmlRpcStruct();
+            struct.add(VdsProperties.Type, watchdog.getType());
+            struct.add(VdsProperties.Device, watchdog.getDevice());
+            Map<String, Object> specParams = watchdog.getSpecParams();
+            if (specParams == null) {
+                specParams = new HashMap<String, Object>();
+            }
+            struct.add(VdsProperties.SpecParams, specParams);
+            addDevice(struct, watchdog, null);
+        }
+    }
+
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
index aa46f3e..71d18b4 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilderBase.java
@@ -262,4 +262,6 @@
 
     protected abstract void buildVmMemoryBalloon();
 
+    protected abstract void buildVmWatchdog();
+
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
index 1c966bf..ffbfd44 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java
@@ -8,6 +8,7 @@
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.Predicate;
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
@@ -213,4 +214,9 @@
     protected void buildVmMemoryBalloon() {
         // Not supported in old code
     }
+
+    protected void buildVmWatchdog() {
+        throw new NotImplementedException("not implemented");
+        // Not supported in old code
+    }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
index f076f5b..e581415 100644
--- 
a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
+++ 
b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfoTest.java
@@ -1,6 +1,8 @@
 package org.ovirt.engine.core.vdsbroker;
 
 import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -22,6 +24,7 @@
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
+import org.ovirt.engine.core.common.businessentities.VmDynamic;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
@@ -132,6 +135,21 @@
     private void initVds() {
         vds = new VDS();
         
vds.setId(Guid.createGuidFromString("00000000-0000-0000-0000-000000000012"));
+    }
 
+    @Test
+    public void isNewWatchdogEvent() {
+        VmDynamic dynamic = new VmDynamic();
+        VM vm = new VM();
+        assertFalse(VdsUpdateRunTimeInfo.isNewWatchdogEvent(dynamic, vm));
+        dynamic.setLastWatchdogEvent(1d);
+        assertTrue(VdsUpdateRunTimeInfo.isNewWatchdogEvent(dynamic, vm));
+        vm.setLastWatchdogEvent(1d);
+        dynamic.setLastWatchdogEvent(1d);
+        assertFalse(VdsUpdateRunTimeInfo.isNewWatchdogEvent(dynamic, vm));
+        dynamic.setLastWatchdogEvent(2d);
+        assertTrue(VdsUpdateRunTimeInfo.isNewWatchdogEvent(dynamic, vm));
+        dynamic.setLastWatchdogEvent(null);
+        assertFalse(VdsUpdateRunTimeInfo.isNewWatchdogEvent(dynamic, vm));
     }
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8959f7fe37a1ef4a8ec82ee749a47311553cef18
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Laszlo Hornyak <lhorn...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to