Ravi Nori has uploaded a new change for review. Change subject: engine : Replace ACTIVE_ASYNC with async flag ......................................................................
engine : Replace ACTIVE_ASYNC with async flag Replace the ACTIVE_ASYNC status with a isAsync flag Change-Id: I382790a2f4042f2924a0916f62047790bb6d5e94 Bug-Url: https://bugzilla.redhat.com/1118249 Signed-off-by: Ravi Nori <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeStatusCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandCallback.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskLiveCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java M backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/CommandStatus.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java M packaging/dbscripts/command_entities_sp.sql A packaging/dbscripts/upgrade/03_06_0040_add_async_to_command_entities.sql 13 files changed, 55 insertions(+), 19 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/55/30555/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java index 1ee0490..1f9de14 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java @@ -2128,6 +2128,7 @@ getParameters(), commandStatus, enableCallBack, + isAsync(), getReturnValue()), cmdContext); } finally { @@ -2169,6 +2170,10 @@ } } + public boolean isAsync() { + return false; + } + public CommandStatus getCommandStatus() { return commandStatus; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java index 50ce643..866751b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DestroyImageCommand.java @@ -35,7 +35,6 @@ @Override protected void executeCommand() { - setCommandStatus(CommandStatus.ACTIVE_ASYNC); Guid taskId = persistAsyncTaskPlaceHolder(VdcActionType.DestroyImage); VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.DestroyImage, @@ -78,4 +77,9 @@ public AsyncTaskType getTaskType() { return AsyncTaskType.deleteVolume; } + + @Override + public boolean isAsync() { + return true; + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeCommand.java index 66aed2e..96300ff 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeCommand.java @@ -36,7 +36,6 @@ } public void executeCommand() { - setCommandStatus(CommandStatus.ACTIVE_ASYNC); VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.Merge, createVDSParameters()); @@ -89,4 +88,9 @@ public CommandCallBack getCallBack() { return new MergeCommandCallback(); } + + @Override + public boolean isAsync() { + return true; + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeStatusCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeStatusCommand.java index b1c47e5..b490904 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeStatusCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MergeStatusCommand.java @@ -39,8 +39,6 @@ @Override protected void executeCommand() { - setCommandStatus(CommandStatus.ACTIVE_SYNC); - // Our contract with vdsm merge states that if the VM is found down, we // have to assume the merge failed. (It's okay if it really succeeded, // we can retry the operation without any issues.) @@ -147,4 +145,9 @@ VdcObjectType.Storage, getActionType().getActionGroup())); } + + @Override + public boolean isAsync() { + return true; + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java index d925752..ea68e38 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java @@ -40,7 +40,6 @@ import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.locks.LockingGroup; import org.ovirt.engine.core.common.utils.Pair; -import org.ovirt.engine.core.compat.CommandStatus; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dao.SnapshotDao; @@ -130,7 +129,6 @@ if (getSnapshotActionType() == VdcActionType.RemoveSnapshotSingleDiskLive) { // Enable callbacks in order to monitor for new-style child completion - setCommandStatus(CommandStatus.ACTIVE_ASYNC); persistCommandWithoutContext(getParameters().getParentCommand(), true); } } @@ -142,6 +140,11 @@ setSucceeded(true); } + @Override + public boolean isAsync() { + return true; + } + /** * There is a one to many relation between memory volumes and snapshots, so memory * volumes should be removed only if the only snapshot that points to them is removed diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandCallback.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandCallback.java index c1f0002..11754c7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandCallback.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommandCallback.java @@ -19,8 +19,6 @@ for (Guid childCmdId : childCmdIds) { switch (TaskManagerUtil.getCommandStatus(childCmdId)) { case ACTIVE: - case ACTIVE_SYNC: - case ACTIVE_ASYNC: log.info("Waiting on Live Merge child commands to complete"); return; case FAILED: diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskLiveCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskLiveCommand.java index ace0b5a..bb0c810 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskLiveCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotSingleDiskLiveCommand.java @@ -77,8 +77,6 @@ if (currentChildId != null) { switch (TaskManagerUtil.getCommandStatus(currentChildId)) { case ACTIVE: - case ACTIVE_ASYNC: - case ACTIVE_SYNC: case NOT_STARTED: log.infoFormat("Waiting on Live Merge command step {0} to complete", getParameters().getCommandStep()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java index 33346fa..c1a7bdc 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandExecutor.java @@ -49,12 +49,12 @@ @OnTimerMethodAnnotation("invokeCallbackMethods") public void invokeCallbackMethods() { initCommandExecutor(); + CommandEntity cmdEntity; for (Iterator<Entry<Guid, CommandCallBack>> iterator = cmdCallBackMap.entrySet().iterator(); iterator.hasNext();) { Entry<Guid, CommandCallBack> entry = iterator.next(); Guid cmdId = entry.getKey(); CommandCallBack callBack = entry.getValue(); CommandStatus status = coco.getCommandStatus(cmdId); - switch (status) { case FAILED: callBack.onFailed(cmdId, coco.getChildCommandIds(cmdId)); @@ -67,8 +67,8 @@ iterator.remove(); break; case ACTIVE: - case ACTIVE_ASYNC: - if (coco.getCommandEntity(cmdId).isExecuted()) { + cmdEntity = coco.getCommandEntity(cmdId); + if (cmdEntity.isExecuted() && cmdEntity.isAsync()) { callBack.doPolling(cmdId, coco.getChildCommandIds(cmdId)); } break; @@ -139,9 +139,6 @@ cmdEntity.setReturnValue(result); if (!result.getCanDoAction()) { cmdEntity.setCommandStatus(CommandStatus.FAILED); - } else - if (CommandStatus.ACTIVE_SYNC.equals(cmdEntity.getCommandStatus())) { - cmdEntity.setCommandStatus(result.getSucceeded() ? CommandStatus.SUCCEEDED : CommandStatus.FAILED); } coco.persistCommand(cmdEntity); } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java index 0f22808..1e3be7a 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/CommandEntity.java @@ -23,6 +23,7 @@ private CommandStatus commandStatus = CommandStatus.UNKNOWN; private boolean callBackEnabled = false; private boolean callBackNotified = false; + private boolean async = false; private boolean executed = false; @Override @@ -125,6 +126,7 @@ VdcActionParametersBase params, CommandStatus status, boolean callBackEnabled, + boolean isAsync, VdcReturnValueBase returnValue) { CommandEntity entity = new CommandEntity(); entity.setId(commandId); @@ -135,6 +137,7 @@ entity.setActionParameters(params); entity.setCommandStatus(status); entity.setCallBackEnabled(callBackEnabled); + entity.setAsync(isAsync); entity.setReturnValue(returnValue); return entity; } @@ -170,4 +173,12 @@ public void setExecuted(boolean executed) { this.executed = executed; } + + public boolean isAsync() { + return async; + } + + public void setAsync(boolean async) { + this.async = async; + } } diff --git a/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/CommandStatus.java b/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/CommandStatus.java index 5f9dd94..a13c495 100644 --- a/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/CommandStatus.java +++ b/backend/manager/modules/compat/src/main/java/org/ovirt/engine/core/compat/CommandStatus.java @@ -4,10 +4,8 @@ UNKNOWN, NOT_STARTED, ACTIVE, // the execute methods on command base has been invoked - ACTIVE_SYNC, // used by synchronous commands to indicate that the sync command is executing - ACTIVE_ASYNC, // used by async commands to indicate that async command has been submitted FAILED, - FAILED_RESTARTED, // set by command executor to indicate that the sync command did not complete + FAILED_RESTARTED, // set by command executor to indicate that the command did not complete // and the server was restarted SUCCEEDED; } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java index ea081f1..045e46a 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/CommandEntityDaoDbFacadeImpl.java @@ -35,6 +35,7 @@ result.setReturnValue(deserializeReturnValue(resultSet.getString("return_value"), resultSet.getString("return_value_class"))); result.setCommandStatus(getCommandStatus(resultSet.getString("status"))); result.setExecuted(resultSet.getBoolean("executed")); + result.setAsync(resultSet.getBoolean("async")); result.setCallBackEnabled(resultSet.getBoolean("callback_enabled")); result.setCallBackNotified(resultSet.getBoolean("callback_notified")); return result; @@ -65,6 +66,7 @@ .addValue("action_parameters_class", entity.getActionParameters() == null ? null : entity.getActionParameters().getClass().getName()) .addValue("status", entity.getCommandStatus().toString()) .addValue("executed", entity.isExecuted()) + .addValue("async", entity.isAsync()) .addValue("callback_enabled", entity.isCallBackEnabled()) .addValue("return_value", serializeReturnValue(entity.getReturnValue())) .addValue("return_value_class", entity.getReturnValue() == null ? null : entity.getReturnValue().getClass().getName()); diff --git a/packaging/dbscripts/command_entities_sp.sql b/packaging/dbscripts/command_entities_sp.sql index fed203f..0426971 100644 --- a/packaging/dbscripts/command_entities_sp.sql +++ b/packaging/dbscripts/command_entities_sp.sql @@ -84,6 +84,18 @@ LANGUAGE plpgsql; +CREATE OR REPLACE FUNCTION UpdateCommandEntityAsync(v_command_id uuid, + v_async boolean) +RETURNS VOID + AS $procedure$ +BEGIN + UPDATE command_entities + SET async = v_async + WHERE command_id = v_command_id; +END; $procedure$ +LANGUAGE plpgsql; + + CREATE OR REPLACE FUNCTION InsertOrUpdateCommandEntity (v_command_id uuid, v_command_type int, v_root_command_id uuid, diff --git a/packaging/dbscripts/upgrade/03_06_0040_add_async_to_command_entities.sql b/packaging/dbscripts/upgrade/03_06_0040_add_async_to_command_entities.sql new file mode 100644 index 0000000..6fbb404 --- /dev/null +++ b/packaging/dbscripts/upgrade/03_06_0040_add_async_to_command_entities.sql @@ -0,0 +1 @@ +select fn_db_add_column('command_entities', 'async', 'boolean default false'); -- To view, visit http://gerrit.ovirt.org/30555 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I382790a2f4042f2924a0916f62047790bb6d5e94 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ravi Nori <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
