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
