Shahar Havivi has uploaded a new change for review. Change subject: RFE: Report downtime for each live migration ......................................................................
RFE: Report downtime for each live migration Added the time that the VM was off-line to the audit log Change-Id: I5535c66988b2594778b0666b902c3142bc3e2aea Signed-off-by: Shahar Havivi <shah...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java 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/IVdsAsyncCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/RunningSuccededArgs.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.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/VmsMonitoring.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 14 files changed, 60 insertions(+), 15 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/57/38057/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java index 8ca127b..b2368e5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java @@ -23,6 +23,7 @@ import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.MigrationMethod; import org.ovirt.engine.core.common.businessentities.MigrationSupport; +import org.ovirt.engine.core.common.businessentities.RunningSuccededArgs; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.businessentities.VM; @@ -50,6 +51,8 @@ /** Used to log the migration error. */ private VdcBllErrors migrationErrorCode; + + private Long actualDowntime; public MigrateVmCommand(T parameters) { this(parameters, null); @@ -179,13 +182,14 @@ } @Override - public void runningSucceded() { + public void runningSucceded(RunningSuccededArgs args) { try { + actualDowntime = args.getMigratonDowntime(); getVmDynamicDao().clearMigratingToVds(getVmId()); updateVmAfterMigrationToDifferentCluster(); } finally { - super.runningSucceded(); + super.runningSucceded(args); } } @@ -483,6 +487,11 @@ return DurationFormatUtils.formatDurationWords(new Date().getTime() - getParameters().getTotalMigrationTime().getTime(), true, true); } + // Truetime: returns the actual time that the vm was offline (not available for access) + public String getActualDowntime() { + return (actualDowntime == null) ? "(N/A)" : actualDowntime.toString(); + } + @Override protected String getLockMessage() { StringBuilder builder = new StringBuilder(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_BEING_MIGRATED.name()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java index 6a63925..5fb472c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java @@ -45,6 +45,7 @@ import org.ovirt.engine.core.common.businessentities.Provider; import org.ovirt.engine.core.common.businessentities.RepoImage; import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType; +import org.ovirt.engine.core.common.businessentities.RunningSuccededArgs; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDevice; @@ -1030,10 +1031,10 @@ } @Override - public void runningSucceded() { + public void runningSucceded(RunningSuccededArgs args) { setFlow(RunVmFlow.RUNNING_SUCCEEDED); removeMemoryFromActiveSnapshot(); - super.runningSucceded(); + super.runningSucceded(args); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java index 035a6a9..b94385e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommandBase.java @@ -22,6 +22,7 @@ import org.ovirt.engine.core.common.businessentities.IVdsAsyncCommand; import org.ovirt.engine.core.common.businessentities.LUNs; import org.ovirt.engine.core.common.businessentities.LunDisk; +import org.ovirt.engine.core.common.businessentities.RunningSuccededArgs; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VMStatus; @@ -165,7 +166,7 @@ * If there are vdss, not succeeded to run vm - treat them as suspicious. */ @Override - public void runningSucceded() { + public void runningSucceded(RunningSuccededArgs args) { try { decreasePendingVm(); setSucceeded(true); 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 302fbd0..e0398b4 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 @@ -7,6 +7,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.Callable; + import javax.enterprise.event.Observes; import javax.enterprise.inject.Instance; import javax.inject.Inject; @@ -40,6 +41,7 @@ import org.ovirt.engine.core.common.businessentities.IVdsAsyncCommand; import org.ovirt.engine.core.common.businessentities.IVdsEventListener; import org.ovirt.engine.core.common.businessentities.NonOperationalReason; +import org.ovirt.engine.core.common.businessentities.RunningSuccededArgs; import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; @@ -432,10 +434,10 @@ } @Override - public void runningSucceded(Guid vmId) { + public void runningSucceded(Guid vmId, RunningSuccededArgs args) { IVdsAsyncCommand command = Backend.getInstance().getResourceManager().GetAsyncCommandForVm(vmId); if (command != null) { - command.runningSucceded(); + command.runningSucceded(args); } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsAsyncCommand.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsAsyncCommand.java index 9d169f9..8031f36 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsAsyncCommand.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsAsyncCommand.java @@ -4,7 +4,7 @@ public interface IVdsAsyncCommand { void rerun(); - void runningSucceded(); + void runningSucceded(RunningSuccededArgs args); /** * Assures the Job/Step are completed. 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 a41944e..759e31b 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 @@ -40,7 +40,7 @@ void rerun(Guid vmId); - void runningSucceded(Guid vmId); + void runningSucceded(Guid vmId, RunningSuccededArgs args); void removeAsyncRunningCommand(Guid vmId); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/RunningSuccededArgs.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/RunningSuccededArgs.java new file mode 100644 index 0000000..0ad4045 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/RunningSuccededArgs.java @@ -0,0 +1,14 @@ +package org.ovirt.engine.core.common.businessentities; + +public class RunningSuccededArgs { + Long migratonDowntime; + + public Long getMigratonDowntime() { + return migratonDowntime; + } + + public void setMigratonDowntime(Long migratonDowntime) { + this.migratonDowntime = migratonDowntime; + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java index 00fdec5..008b660 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java @@ -72,6 +72,7 @@ private VmExitReason exitReason; private int guestCpuCount; private Map<GraphicsType, GraphicsInfo> graphicsInfos; + private Long migrationDowntime; public static final String APPLICATIONS_LIST_FIELD_NAME = "appList"; public static final String STATUS_FIELD_NAME = "status"; @@ -555,4 +556,12 @@ public void setEmulatedMachine(String emulatedMachine) { this.emulatedMachine = emulatedMachine; } + + public Long getMigrationDowntime() { + return migrationDowntime; + } + + public void setMigrationDowntime(Long migrationDowntime) { + this.migrationDowntime = migrationDowntime; + } } diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties index 57ac35d..9252903 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -251,7 +251,7 @@ USER_SUSPEND_VM_OK=VM ${VmName} on Host ${VdsName} is suspended. VM_FAILURE=VM ${VmName} cannot be found on Host ${VdsName}. VM_MIGRATION_ABORT=Migration failed: ${MigrationError} (VM: ${VmName}, Source: ${VdsName}, Destination: ${DestinationVdsName}). -VM_MIGRATION_DONE=Migration completed (VM: ${VmName}, Source: ${VdsName}, Destination: ${DestinationVdsName}, Duration: ${Duration}, Total: ${TotalDuration}). +VM_MIGRATION_DONE=Migration completed (VM: ${VmName}, Source: ${VdsName}, Destination: ${DestinationVdsName}, Duration: ${Duration}, Total: ${TotalDuration}, Actual: ${ActualDowntime}/ms) VM_MIGRATION_FAILED=Migration failed${DueToMigrationError} (VM: ${VmName}, Source: ${VdsName}, Destination: ${DestinationVdsName}). VM_MIGRATION_FAILED_NO_VDS_TO_RUN_ON=Migration failed, No available host found (VM: ${VmName}, Source: ${VdsName}). VM_MIGRATION_FAILED_DURING_MOVE_TO_MAINTENANCE=Migration failed${DueToMigrationError} while Host is in 'preparing for maintenance' state.\n Consider manual intervention\: stopping/migrating Vms as Host's state will not\n turn to maintenance while VMs are still running on it.(VM: ${VmName}, Source: ${VdsName}, Destination: ${DestinationVdsName}). diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java index 5a8e7d2..f089754 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java @@ -21,6 +21,7 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.businessentities.IVdsEventListener; +import org.ovirt.engine.core.common.businessentities.RunningSuccededArgs; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.businessentities.VM; @@ -164,9 +165,9 @@ getEventListener().removeAsyncRunningCommand(vmId); } - public void succededToRunVm(Guid vmId, Guid vdsId) { + public void succededToRunVm(Guid vmId, Guid vdsId, RunningSuccededArgs args) { if (asyncRunningVms.contains(vmId)) { - getEventListener().runningSucceded(vmId); + getEventListener().runningSucceded(vmId, args); } RemoveAsyncRunningVm(vmId); } 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 15522c8..e11841c 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 @@ -14,6 +14,7 @@ import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.businessentities.NonOperationalReason; +import org.ovirt.engine.core.common.businessentities.RunningSuccededArgs; import org.ovirt.engine.core.common.businessentities.SELinuxMode; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSDomainsData; @@ -578,9 +579,9 @@ /** */ - public void succeededToRunVm(Guid vmId) { + public void succeededToRunVm(Guid vmId, RunningSuccededArgs args) { mUnrespondedAttempts.set(0); - ResourceManager.getInstance().succededToRunVm(vmId, getVdsId()); + ResourceManager.getInstance().succededToRunVm(vmId, getVdsId(), args); } public VDSStatus refreshCapabilities(AtomicBoolean processHardwareCapsNeeded, VDS vds) { diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VmsMonitoring.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VmsMonitoring.java index 476b2a9..69eb762 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VmsMonitoring.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VmsMonitoring.java @@ -32,6 +32,7 @@ import org.ovirt.engine.core.common.businessentities.VmStatistics; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VmNetworkStatistics; +import org.ovirt.engine.core.common.businessentities.RunningSuccededArgs; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.utils.VmDeviceCommonUtils; import org.ovirt.engine.core.common.utils.VmDeviceType; @@ -194,7 +195,9 @@ } if (vmUpdater.isSuccededToRun()) { - vdsManager.succeededToRunVm(vmUpdater.getDbVm().getId()); + RunningSuccededArgs args = new RunningSuccededArgs(); + args.setMigratonDowntime(vmUpdater.getVdsmVm().getVmDynamic().getMigrationDowntime()); + vdsManager.succeededToRunVm(vmUpdater.getDbVm().getId(), args); //TODO change {@IVdsEventListener.updateSlaPolicies} // to varargs version to avoid creating the list // over and over again - updateSlaPolicies(Guid vdsId, Guid... vmIds) 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 72845b1..d86643a 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 @@ -381,6 +381,9 @@ if (xmlRpcStruct.containsKey(VdsProperties.GUEST_CPU_COUNT)) { vm.setGuestCpuCount(AssignIntValue(xmlRpcStruct, VdsProperties.GUEST_CPU_COUNT)); } + if (xmlRpcStruct.containsKey(VdsProperties.vm_migration_down_time)) { + vm.setMigrationDowntime(AssignLongValue(xmlRpcStruct, VdsProperties.vm_migration_down_time)); + } } /** 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 417d6ae..194fd16 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 @@ -236,6 +236,7 @@ public static final String VM_FQDN = "guestFQDN"; public static final String vm_usage_mem_percent = "memUsage"; public static final String vm_migration_progress_percent = "migrationProgress"; + public static final String vm_migration_down_time = "migDowntime"; public static final String vm_host = "guestName"; public static final String app_list = "appsList"; public static final String guest_os = "guestOs"; -- To view, visit http://gerrit.ovirt.org/38057 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5535c66988b2594778b0666b902c3142bc3e2aea Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Shahar Havivi <shav...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches