Arik Hadas has uploaded a new change for review.

Change subject: core: move the logic in VmPoolHandler to separate command
......................................................................

core: move the logic in VmPoolHandler to separate command

The logic of how to handle VM that went down is extracted to separate
command, so the invocation of this logic is be in a more standard way.
The DownVmsHandler remains, it will later on be used as a listener for
notifications from VURTI.

Change-Id: Ic8840b8cba0fcec68936f0f24abc9948568cca0d
Bug-Url: https://bugzilla.redhat.com/1098791
Signed-off-by: Arik Hadas <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ClearNonResponsiveVdsVmsCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceVdsBaseCommand.java
R 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessDownVmCommand.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/action/VdcActionType.java
7 files changed, 49 insertions(+), 22 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/68/28768/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ClearNonResponsiveVdsVmsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ClearNonResponsiveVdsVmsCommand.java
index 6158c1d..67a8613 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ClearNonResponsiveVdsVmsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ClearNonResponsiveVdsVmsCommand.java
@@ -6,6 +6,8 @@
 
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.common.AuditLogType;
+import org.ovirt.engine.core.common.action.IdParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdsActionParameters;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -59,7 +61,8 @@
                 LogSettingVmToDown(getVds().getId(), vm.getId());
             }
 
-            VmPoolHandler.processVmPoolOnStopVm(vm.getId(),
+            
Backend.getInstance().runInternalAction(VdcActionType.ProcessDownVm,
+                    new IdParameters(vm.getId()),
                     
ExecutionHandler.createDefaultContexForTasks(getExecutionContext()));
         }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceVdsBaseCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceVdsBaseCommand.java
index aa8a895..7195328 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceVdsBaseCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/FenceVdsBaseCommand.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.FenceVdsActionParameters;
+import org.ovirt.engine.core.common.action.IdParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.FenceActionType;
 import org.ovirt.engine.core.common.businessentities.FenceAgentOrder;
@@ -481,7 +482,8 @@
             setVmId(vm.getId());
             setVmName(vm.getName());
             setVm(vm);
-            VmPoolHandler.processVmPoolOnStopVm(vm.getId(),
+            
Backend.getInstance().runInternalAction(VdcActionType.ProcessDownVm,
+                    new IdParameters(vm.getId()),
                     
ExecutionHandler.createDefaultContexForTasks(getExecutionContext()));
 
             // Handle highly available VMs
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessDownVmCommand.java
similarity index 66%
rename from 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolHandler.java
rename to 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessDownVmCommand.java
index 6c16c68..c2e351f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessDownVmCommand.java
@@ -1,9 +1,13 @@
 package org.ovirt.engine.core.bll;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.quota.QuotaManager;
+import org.ovirt.engine.core.bll.utils.PermissionSubject;
+import org.ovirt.engine.core.common.action.IdParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VmOperationParameterBase;
 import org.ovirt.engine.core.common.action.VmPoolSimpleUserParameters;
@@ -17,19 +21,23 @@
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 
-public class VmPoolHandler {
+@InternalCommandAttribute
+@NonTransactiveCommandAttribute
+public class ProcessDownVmCommand<T extends IdParameters> extends 
CommandBase<T> {
 
-    /**
-     * VM should be return to pool after it stopped unless Manual Return VM To 
Pool chosen.
-     *
-     * @param vmId
-     *            The VM's id.
-     * @FIXME BLL commands should invoke IVDSEventListener.processOnVmStop 
instead of directly calling this class. This
-     *        is not duable now since callers which aren't on BLL don't know 
CommandContext to avid bugs this method
-     *        must be treated as the real implementor of 
VdsEventListener.processOnVmStop meanwhile till a better
-     *        solution supplied
-     */
-    public static void processVmPoolOnStopVm(Guid vmId, CommandContext 
context) {
+    private static final Log log = 
LogFactory.getLog(ProcessDownVmCommand.class);
+
+    protected ProcessDownVmCommand(Guid commandId) {
+        super(commandId);
+    }
+
+    public ProcessDownVmCommand(T parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeCommand() {
+        Guid vmId = getParameters().getId();
         VmPoolMap map = 
DbFacade.getInstance().getVmPoolDao().getVmPoolMapByVmGuid(vmId);
         List<DbUser> users = 
DbFacade.getInstance().getDbUserDao().getAllForVm(vmId);
         // Check if this is a Vm from a Vm pool, and is attached to a user
@@ -39,27 +47,32 @@
                 // should be only one user in the collection
                 for (DbUser dbUser : users) {
                     
Backend.getInstance().runInternalAction(VdcActionType.DetachUserFromVmFromPool,
-                            new 
VmPoolSimpleUserParameters(map.getvm_pool_id(), dbUser.getId(), vmId), context);
+                            new 
VmPoolSimpleUserParameters(map.getvm_pool_id(), dbUser.getId(), vmId),
+                            
ExecutionHandler.createDefaultContexForTasks(getExecutionContext(), getLock()));
                 }
             }
         } else {
             // If we are dealing with a prestarted Vm or a regular Vm - clean 
stateless images
             // Otherwise this was already done in 
DetachUserFromVmFromPoolCommand
-            removeVmStatelessImages(vmId, context);
+            removeVmStatelessImages(vmId,
+                    
ExecutionHandler.createDefaultContexForTasks(getExecutionContext(), getLock()));
         }
 
         QuotaManager.getInstance().rollbackQuotaByVmId(vmId);
         VmHandler.removeStatelessVmUnmanagedDevices(vmId);
     }
 
+    @Override
+    public List<PermissionSubject> getPermissionCheckSubjects() {
+        return Collections.emptyList();
+    }
+
     public static void removeVmStatelessImages(Guid vmId, CommandContext 
context) {
         if (DbFacade.getInstance().getSnapshotDao().exists(vmId, 
SnapshotType.STATELESS)) {
-            log.infoFormat("VdcBll.VmPoolHandler.processVmPoolOnStopVm - 
Deleting snapshot for stateless vm {0}", vmId);
+            log.infoFormat("Deleting snapshot for stateless vm {0}", vmId);
             
Backend.getInstance().runInternalAction(VdcActionType.RestoreStatelessVm,
                     new VmOperationParameterBase(vmId),
                     context);
         }
     }
-
-    private static Log log = LogFactory.getLog(VmPoolHandler.class);
 }
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 f2c8ec6..910ba40 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
@@ -29,6 +29,7 @@
 import org.ovirt.engine.core.common.FeatureSupported;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.CreateAllSnapshotsFromVmParameters;
+import org.ovirt.engine.core.common.action.IdParameters;
 import org.ovirt.engine.core.common.action.RunVmParams;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
@@ -411,7 +412,9 @@
 
     private void removeVmStatlessImages() {
         isFailedStatlessSnapshot = true;
-        VmPoolHandler.processVmPoolOnStopVm(getVm().getId(), new 
CommandContext(getExecutionContext(), getLock()));
+        Backend.getInstance().runInternalAction(VdcActionType.ProcessDownVm,
+                new IdParameters(getVm().getId()),
+                
ExecutionHandler.createDefaultContexForTasks(getExecutionContext(), getLock()));
         // setting lock to null in order not to release lock twice
         setLock(null);
         setSucceeded(true);
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 483bc2f..c25a541 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
@@ -16,6 +16,7 @@
 import org.ovirt.engine.core.bll.scheduling.RunVmDelayer;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.storage.StorageHelperDirector;
+import org.ovirt.engine.core.common.action.IdParameters;
 import 
org.ovirt.engine.core.common.action.RemoveVmHibernationVolumesParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
@@ -149,7 +150,8 @@
         ThreadPoolUtil.execute(new Runnable() {
             @Override
             public void run() {
-                VmPoolHandler.processVmPoolOnStopVm(getVm().getId(),
+                
Backend.getInstance().runInternalAction(VdcActionType.ProcessDownVm,
+                        new IdParameters(getVm().getId()),
                         
ExecutionHandler.createDefaultContexForTasks(getExecutionContext()));
             }
         });
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 3b7decf..66d8a8b 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
@@ -20,6 +20,7 @@
 import org.ovirt.engine.core.common.action.AddVmFromScratchParameters;
 import org.ovirt.engine.core.common.action.FenceVdsActionParameters;
 import org.ovirt.engine.core.common.action.HostStoragePoolParametersBase;
+import org.ovirt.engine.core.common.action.IdParameters;
 import org.ovirt.engine.core.common.action.MaintenanceNumberOfVdssParameters;
 import org.ovirt.engine.core.common.action.MigrateVmToServerParameters;
 import org.ovirt.engine.core.common.action.ReconstructMasterParameters;
@@ -106,7 +107,8 @@
 
     @Override
     public void processOnVmStop(Guid vmId) {
-        VmPoolHandler.processVmPoolOnStopVm(vmId, null);
+        Backend.getInstance().runInternalAction(VdcActionType.ProcessDownVm,
+                new IdParameters(vmId));
     }
 
     @Override
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index 97dde5c..e326d20 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -53,6 +53,8 @@
     AddVmFromSnapshot(52, ActionGroup.CREATE_VM, QuotaDependency.BOTH),
     ImportVmFromConfiguration(43, ActionGroup.IMPORT_EXPORT_VM, 
QuotaDependency.NONE),
     UpdateVmVersion(44, QuotaDependency.NONE),
+    ImportVmTemplateFromConfiguration(45, ActionGroup.IMPORT_EXPORT_VM, 
QuotaDependency.NONE),
+    ProcessDownVm(46, QuotaDependency.NONE),
     // VdsCommands
     AddVds(101, ActionGroup.CREATE_HOST, QuotaDependency.NONE),
     UpdateVds(102, ActionGroup.EDIT_HOST_CONFIGURATION, false, 
QuotaDependency.NONE),


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic8840b8cba0fcec68936f0f24abc9948568cca0d
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.4
Gerrit-Owner: Arik Hadas <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to