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

Reply via email to