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