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

Reply via email to